Cleanup conditional construction logic for --resolved and --user
Signed-off-by: Joey Armstrong <jarmstrong@linuxfoundation.org>
Change-Id: I2080713f8c340aa234923e0a226030ec1b666133
diff --git a/jira/bin/jira-search.sh b/jira/bin/jira-search.sh
index 9015a38..4710b75 100755
--- a/jira/bin/jira-search.sh
+++ b/jira/bin/jira-search.sh
@@ -331,21 +331,47 @@
## --------------------------------------------------------------------
function do_user()
{
- local -n ans=$1; shift
+ local -n ref=$1; shift
[[ -v argv_nobody ]] && return
+ local -a buffer=()
local user='currentUser()'
- if [[ -v argv_user ]]; then
- user="$argv_user"
- fi
+ [[ ! -v argv_users ]] && { declare -a argv_users=('currentUser()'); }
+
+ local users
+ users="$(join_by ',' "${argv_users[@]}")"
if [[ -v argv_assigned ]]; then
- ans+=("assignee=${user}")
+ if [[ ${#argv_users[@]} -eq 1 ]]; then
+ buffer+=("assignee=${user}")
+ else
+ buffer+=("(asignee in ($users))")
+ fi
fi
if [[ -v argv_reported ]]; then
- ans+=("reporter=${user}")
+ if [[ ${#argv_users[@]} -eq 1 ]]; then
+ buffer+=("reporter=${user}")
+ else
+ buffer+=("(reporter in ($users))")
+ fi
+ fi
+
+ ## --------------------------
+ ## Construct resolved queries
+ ## --------------------------
+ local query="$(join_by ' OR ' "${buffer[@]}")"
+
+ ## ----------------------------------------
+ ## Normalize parens for the composite query
+ ## ----------------------------------------
+ if [[ ${#ref[@]} -eq 0 ]]; then
+ ref+=("$query")
+ else
+ local buffer
+ buffer="$(join_by ' AND ' "(${ref[@]})" "($query)")"
+ ref=("$buffer")
fi
return
@@ -468,7 +494,6 @@
--in Include ticket field if list item(s) match
--not Negate a query
--is-empty Include ticket if field is empty
- --resolved-is-empty
--unresolved Query for open/unresolved jira tickets.
[FILTER]
@@ -482,6 +507,7 @@
--resolved(-not)-empty Query for (closed)/open tickets
--resolved-excl Types to exclude
--resolved-incl Types to include
+ --resolved-in {start} {end} Helps resolve join({and,or}) ambiguity
[RANGE]
--newer [d] Search for tickets created < [n] days ago.
@@ -497,6 +523,11 @@
--resolved Query by field: resolved
--user Query by owner, requestor or 'my' jira tickets.
+[USER]
+ --user [u] Login of user to query for
+ --assigned Query for tickets assigned to the user
+ --reported Query for tickets reported by the user
+
[HELP]
--help This message
--help-{topic} Display switch help and use case. (--help-resolved)
@@ -537,35 +568,41 @@
# declare -g -i debug=1
+unset attrs
while [ $# -gt 0 ]; do
arg="$1"; shift
banner "ARG=[$arg], \$@=[$@]"
-
+
[[ -v debug ]] && echo "** argv=[$arg] [$*]"
getopt_detect_modifiers "$arg"
- case "$arg" in
+ if getopts_switch__not arg; then
+ echo "DETECTED: NOT"
+ declare -i modifier_found=1
+ elif getopts_switch__empty arg; then
+ echo "DETECTED: EMPTY"
+ declare -i modifier_found=1
+ else
+ declare -i modifier_found=0
+ fi
+ if [[ $modifier_found -eq 1 ]]; then
+ echo "*ATTRS MODIFIER (LINENO:$LINENO): $(declare -p attrs)"
+ declare -a args=()
+ [[ ${#arg} -gt 0 ]] && { args+=("$arg"); }
+ [[ $# -gt 0 ]] && { args+=("$@"); }
+ set -- "${args[@]}"
+ continue
+ fi
+
+ case "$arg" in
'--help') usage; exit 0 ;;
'--help-'*) help_with "${arg/--help-/}" ;;
'--usage-'*) help_usage_show "${arg/--usage-/}" ;;
- *'-is-empty'*)
- is_switch_valid__is_empty "$arg"
-
- declare -a args=()
- arg="${arg:2}" # remove prefix --
- arg="${arg%-is-empty}" # remove suffix token-name
-
- ## Rewrite switch to bypass is-empty and match --required
- args+=("--${arg}+is-empty") # ARGV: gen JCL tokens
- [[ $# -gt 0 ]] && { args+=("$@"); }
-
- set -- "${args[@]}" # --is-empty resolved
- ;;
-
+
##-----------------##
##---] MODES [---##
##-----------------##
@@ -575,7 +612,7 @@
##------------------------##
##---] SWITCH ALIAS [---##
##------------------------##
- --unresolved|--wip)
+ '--unresolved'|'--wip')
declare -a args=()
args+=('--resolved-is-empty')
[[ $# -gt 0 ]] && { args+=("$@"); }
@@ -585,13 +622,25 @@
##-------------------##
##---] BY USER [---##
##-------------------##
- --assigned) declare -g -i argv_assigned=1 ;;
- --reported) declare -g -i argv_reported=1 ;;
- --me) declare -g -i argv_me=1 ;;
+ '--assigned') declare -g -i argv_assigned=1 ;;
+ '--reported') declare -g -i argv_reported=1 ;;
+ '--me')
+ declare -a args=()
+ args+=('--user' 'currentUser()')
+ args+=('--assigned')
+ args+=('--reported')
+ [[ $# -gt 0 ]] && { args+=("$@"); }
+ set -- "${args[@]}"
+ ;;
+
--nobody) declare -g -i argv_nobody=1 ;;
- --user)
+ '--user')
arg="$1"; shift
declare -g argv_user="$arg"
+
+ [[ ! -v argv_users ]] && { declare -g -a argv_users=(); }
+ argv_users+=("$arg")
+ declare -p argv_users
;;
##------------------##
@@ -690,32 +739,33 @@
;;
'--resolved'*) # [-+]
+
+ gen_attrs__empty 'resolved'
+
+ # [[ -v resolved_not_empty ]] && { declare -p resolved_not_empty; }
+ # [[ -v resolved_is_empty ]] && { declare -p resolved_is_empty; }
+
# function get_jql_reasons()
case "$arg" in
+ '--resolved') ;;
- *start) declare -g resolved_start="$1"; shift ;;
- *end) declare -g resolved_end="$1"; shift ;;
+ *'start') declare -g resolved_start="$1"; shift ;;
+ *'end') declare -g resolved_end="$1"; shift ;;
- *not-empty) declare -g resolved_not_empty="$1" ;;
- *'empty')
- banner "Detected [$arg]"
- declare -g resolved_is_empty="$1"
- ;;
-
- *excl)
+ *'excl')
[[ ! -v resolved_excl ]] && { declare -g -a resolved_excl=(); }
val="\"$1\""; shift
html_encode val
resolved_excl+=("$val");
;;
- *incl)
+ *'incl')
[[ ! -v resolved_incl ]] && { declare -g -a resolved_incl=(); }
val="\"$1\""; shift
html_encode val
resolved_incl+=("$val");
;;
- *) ;;
- *) error "Detected invalid --resolved-* modifier" ;;
+
+ *) error "Detected invalid --resolved-* modifier arg=[$arg]" ;;
esac
;;
@@ -797,6 +847,11 @@
;;
esac
+
+ if [[ -v resolved ]]; then
+ clear_attrs__empty
+ fi
+
done
## --------------
@@ -812,25 +867,22 @@
[[ -v components ]] && { do_components components suffix0; }
do_labels labels_incl labels_excl suffix0
do_text text suffix0
-
get_jcl_resolved suffix0
- # do_resolved suffix0
+
do_fixversion suffix0
-declare -p getopt_argv_any_OR
+[[ -v getopt_argv_any_OR ]] && { declare -p getopt_argv_any_OR; }
+
if [[ -v getopt_argv_any_OR ]]; then
- query="$(join_by 'OR' "${suffix0[0]}")"
+ query="$(join_by ' OR ' "${suffix0[0]}")"
elif [[ -v getopt_argv_any_AND ]]; then
- query="$(join_by 'AND' "${suffix0[0]}")"
+ query="$(join_by ' AND ' "${suffix0[0]}")"
else
-# query="$(join_by 'OR' "${suffix0[0]}")"
- error "Ambiguous query [argv needs: --and or --or]"
+# query="$(join_by ' OR ' "${suffix0[0]}")"
+ error "Ambiguous query [argv needs: --and or --or], argv=[$*]"
fi
-# banner "$(declare -p query)"
-
-
filter=''
gen_filter filter suffix0