Update search tool help.

jira/bin/jira-search.sh
-----------------------
  o Help text growing long, refactor help text into jira-search/help.
  o Added command line switches --help-* and --usage-*

jira/jira-search/help/utils.sh
------------------------------
  o Added library functions for displaying context help.
  o Display switch permutations for a given prefix.
  o Display use cases for a given switch.

jira/jira-search/help/fixversion.switches
jira/jira-search/help/resolved.sh
jira/jira-search/help/resolved.switches
jira/jira-search/help/resolved.usage
jira/jira-search/help/user.switches
jira/jira-search/help/user.usage
-----------------------------------------
  o Switch help and usage text.

Change-Id: I0cd34475521c2b42054fbe4e7966a6d3767f8f89
diff --git a/jira/bin/jira-search.sh b/jira/bin/jira-search.sh
index 97b8cc2..462df4d 100755
--- a/jira/bin/jira-search.sh
+++ b/jira/bin/jira-search.sh
@@ -1,4 +1,21 @@
 #!/bin/bash
+# -----------------------------------------------------------------------
+# Copyright 2023-2024 Open Networking Foundation Contributors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http:#www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# -----------------------------------------------------------------------
+# SPDX-FileCopyrightText: 2023-2024 Open Networking Foundation Contributors
+# SPDX-License-Identifier: Apache-2.0
 ## --------------------------------------------------------------------
 ## Intent: Construct a jira ticket query with attributes
 ## --------------------------------------------------------------------
@@ -7,6 +24,9 @@
     declare pgm=''
     pgm="$(realpath --canonicalize-existing "$0")"
 
+    # stack-trace-on-error
+    # interrupt handler
+    # mkdir with auto-cleanup at exit
     declare root=''
     root="${pgm%%/jira/bin/jira-search.sh}"
     source "$root/lf/onf-common/common.sh" '--common-args-begin--'
@@ -16,6 +36,9 @@
 
     pgm_bin="${root}/bin"
     readonly pgm_bin
+
+    pgm_help="${root}/jira/jira-search/help"
+    readonly pgm_help
 }
 
 # set -euo pipefail
@@ -43,6 +66,7 @@
 #source "$pgmlib/resolved.sh"
 source "${pgm_lib}/fixversion.sh"
 source "${pgm_lib}/resolved.sh"
+source "${pgm_lib}/help/utils.sh"
 
 ## --------------------------------------------------------------------
 ## --------------------------------------------------------------------
@@ -331,36 +355,28 @@
 
 [SERVER]
   --server {cord,onf}
-  --onf         jira.opennetworking.org (default)
+  --onf         jira.opennetworking.org
   --opencord    jira.opencord.org
 
 [WHAT]
   --component   Search by component name assigned to ticket
   --label       Search by label name assigned to ticket.
   --text        Search string(s)
+EOH
 
-[FIXVERSION] - Voltha-v2.12
-  --fixversion-incl
-  --fixversion-excl
-  --fixversion-is-empty
-  --fixversion-not-empty
+#    declare -a topics=()
+#    topics+=('fixversion.switches')
+#    topics+=('resolved.switches')
+#
+#    help_switch_show "${topics[@]}"#
+    #
+#[USER(s)]
+#  --me          Tickets assigned to or reported by me.
+#  --user [u]    Tickets assigned to this user.
+#  --nobody      Raw query, no filtering by user
 
-[RESOLVED] - tokens={Declined, Won't Fix}
-  --resolved-start ccyy-mm-dd
-  --resolved-end   ccyy-mm-dd
-  --resolved-incl {token(s)}
-  --resolved-excl {token(s)}
-  --resolved-is-empty   Query for open tickets
-  --resolved-not-empty
 
-[USER(s)]
-  --me          Tickets assigned to or reported by me.
-  --user [u]    Tickets assigned to this user.
-  --nobody      Raw query, no filtering by user
-
-[BY-USER]
-  --assigned    Tickets assided to user
-  --reported    Tickets created by user
+    cat <<EOH
 
 [BOOL]
   --and            Join terms using 'AND'
@@ -376,17 +392,26 @@
   --text-or  [t]   Any of these terms
 
 [RANGE]
-  --newer [d]   Search for tickets created < [n] days ago.
-  --older [d]   Search for tickets created > [n] days ago.
+  --newer [d]      Search for tickets created < [n] days ago.
+  --older [d]      Search for tickets created > [n] days ago.
 
 [ALIASES]
-  --all         Query for all unresolved tickets
+  --all            Query for all unresolved tickets
+
+[TOPIC]
+  --fixversion     Query by field: fixedversion
+  --resolved       Query by field: resolved
+  --user           Query by owner, requestor or 'my' jira tickets.
+
+[HELP]
+  --help           This message
+  --help-{topic}   Display switch help and use case.     (--help-resolved)
+  --usage-{topic}  Display use cases for a given switch  (--usage-user)
 
 [USAGE]
-  $0 --assigned
+  $0 --opencord --assigned --unresolved
      o Display all tickets assigned to my login
-  $0 --requested --user tux
-     o Display all tickets requested by user tux
+
   $0 --reported --or --text 'bbsim' --text 'release'
      o Search for tickets that contain strings bbsim or release
   $0 --cord --text-and 'release' --text-and 'voltctl'
@@ -430,7 +455,10 @@
 
     case "$arg" in
 
-        -*help) usage; exit 0 ;;
+        '--help') usage; exit 0 ;;
+        '--help-'*) help_with "${arg/--help-/}" ;;
+        '--usage-'*) help_usage_show "${arg/--usage-/}"
+           ;;
 
         ##-----------------##
         ##---]  MODES  [---##
@@ -438,6 +466,16 @@
         -*debug)   declare -g -i debug=1 ;;
         --dry-run) declare -g -i dry_run=1 ;;
 
+        ##------------------------##
+        ##---]  SWITCH ALIAS  [---##
+        ##------------------------##
+        --unresolved)
+            declare -a args=()
+            args+=('--resolved-is-empty')
+            [[ $# -gt 0 ]] && { args+=("$@"); }
+            set -- "${args[@]}"
+            ;;
+
         ##-------------------##
         ##---]  BY USER  [---##
         ##-------------------##
@@ -462,8 +500,8 @@
             esac
             ;;
 
-         --onf) declare server='jira.opennetworking.org' ;;
-        --cord) declare server='jira.opencord.org'     ;;
+             --onf) declare server='jira.opennetworking.org' ;;
+        --opencord) declare server='jira.opencord.org'     ;;
 
         ##---------------------##
         ##---]  SEARCH-BY  [---##
@@ -534,7 +572,7 @@
             esac
             ;;
 
-        --resolved-*)
+        '--resolved-'*)
             # function get_jql_reasons()
             case "$arg" in
 
diff --git a/jira/jira-search/help/fixversion.switches b/jira/jira-search/help/fixversion.switches
new file mode 100644
index 0000000..9ddc4a2
--- /dev/null
+++ b/jira/jira-search/help/fixversion.switches
@@ -0,0 +1,27 @@
+# -----------------------------------------------------------------------
+# Copyright 2024 Open Networking Foundation Contributors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http:#www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# -----------------------------------------------------------------------
+# SPDX-FileCopyrightText: 2024 Open Networking Foundation Contributors
+# SPDX-License-Identifier: Apache-2.0
+## --------------------------------------------------------------------
+## Intent:
+## --------------------------------------------------------------------
+
+[FIXVERSION] - Voltha-v2.12
+  --fixversion-incl
+  --fixversion-excl
+  --fixversion-is-empty
+  --fixversion-not-empty
+# [EOF]
diff --git a/jira/jira-search/help/resolved.sh b/jira/jira-search/help/resolved.sh
new file mode 100644
index 0000000..4f0124f
--- /dev/null
+++ b/jira/jira-search/help/resolved.sh
@@ -0,0 +1,35 @@
+#!/bin/bash
+# -----------------------------------------------------------------------
+# Copyright 2023-2024 Open Networking Foundation Contributors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http:#www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# -----------------------------------------------------------------------
+# SPDX-FileCopyrightText: 2023-2024 Open Networking Foundation Contributors
+# SPDX-License-Identifier: Apache-2.0
+## --------------------------------------------------------------------
+## Intent: Construct a jira ticket query with attributes
+## --------------------------------------------------------------------
+
+function resolved_switches()
+{
+    local ref=$1; shift
+
+    
+[RESOLVED] - tokens={Declined, Won't Fix}
+  --resolved-start ccyy-mm-dd
+  --resolved-end   ccyy-mm-dd
+  --resolved-incl {token(s)}
+  --resolved-excl {token(s)}
+  --resolved-is-empty   Query for open tickets
+  --resolved-not-empty
+  --unresolved          Alias for resolved-is-empty
diff --git a/jira/jira-search/help/resolved.switches b/jira/jira-search/help/resolved.switches
new file mode 100644
index 0000000..86c49d3
--- /dev/null
+++ b/jira/jira-search/help/resolved.switches
@@ -0,0 +1,30 @@
+# -----------------------------------------------------------------------
+# Copyright 2024 Open Networking Foundation Contributors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http:#www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# -----------------------------------------------------------------------
+# SPDX-FileCopyrightText: 2024 Open Networking Foundation Contributors
+# SPDX-License-Identifier: Apache-2.0
+## --------------------------------------------------------------------
+## Intent:
+## --------------------------------------------------------------------
+
+[RESOLVED] - tokens={Declined, Won't Fix}
+  --resolved-start ccyy-mm-dd
+  --resolved-end   ccyy-mm-dd
+  --resolved-incl {token(s)}
+  --resolved-excl {token(s)}
+  --resolved-is-empty               Query for open tickets
+  --resolved-not-empty
+  --unresolved                      Alias for --resolved-if-empty
+# [EOF]
diff --git a/jira/jira-search/help/resolved.usage b/jira/jira-search/help/resolved.usage
new file mode 100644
index 0000000..fad5dbb
--- /dev/null
+++ b/jira/jira-search/help/resolved.usage
@@ -0,0 +1,29 @@
+# -----------------------------------------------------------------------
+# Copyright 2024 Open Networking Foundation Contributors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http:#www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# -----------------------------------------------------------------------
+# SPDX-FileCopyrightText: 2024 Open Networking Foundation Contributors
+# SPDX-License-Identifier: Apache-2.0
+## --------------------------------------------------------------------
+## Intent:
+## --------------------------------------------------------------------
+
+[RESOLVED]
+  $0 --server opencord --component bbsim --unresolved
+  $0 --server opencord --component bbsim --resolved-is-empty
+     o Query for open bbsim tickets.
+
+  $0 --proj VOL --fixversion "VOLTHA v2.12" --resolved-is-empty
+     o Query for unresolved v2.12 release tickets.
+# [EOF]
diff --git a/jira/jira-search/help/user.switches b/jira/jira-search/help/user.switches
new file mode 100644
index 0000000..38661e1
--- /dev/null
+++ b/jira/jira-search/help/user.switches
@@ -0,0 +1,30 @@
+# -----------------------------------------------------------------------
+# Copyright 2024 Open Networking Foundation Contributors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http:#www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# -----------------------------------------------------------------------
+# SPDX-FileCopyrightText: 2024 Open Networking Foundation Contributors
+# SPDX-License-Identifier: Apache-2.0
+## --------------------------------------------------------------------
+## Intent:
+## --------------------------------------------------------------------
+
+[USER(s)]
+  --me          Tickets assigned to or reported by me.
+  --user [u]    Tickets assigned to this user.
+  --nobody      Raw query, no filtering by user
+
+[BY-USER]
+  --assigned    Tickets assided to user
+  --reported    Tickets created by user    
+# [EOF]
diff --git a/jira/jira-search/help/user.usage b/jira/jira-search/help/user.usage
new file mode 100644
index 0000000..d94f374
--- /dev/null
+++ b/jira/jira-search/help/user.usage
@@ -0,0 +1,39 @@
+# -----------------------------------------------------------------------
+# Copyright 2024 Open Networking Foundation Contributors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http:#www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# -----------------------------------------------------------------------
+# SPDX-FileCopyrightText: 2024 Open Networking Foundation Contributors
+# SPDX-License-Identifier: Apache-2.0
+## --------------------------------------------------------------------
+## Intent:
+## --------------------------------------------------------------------
+
+[USER]
+  $0 --server opencord --unresolved --assigned --user tux
+     o Display all tickets assigned to user tux
+    
+  $0 --server opencord --requested --user tux
+     o Display all tickets requested by user tux
+
+  $0 --server opencord --unresolved --user tux
+     o Display open tickets assigned or requested by user tux.
+
+[BY USER]
+  $0 --server-opencord --assigned --unresolved
+     o Display all open tickets assigned to my login
+
+  $0 --server opencord --me
+     o Display tickets requested or assigned to my login.
+    
+# [EOF]
diff --git a/jira/jira-search/help/utils.sh b/jira/jira-search/help/utils.sh
new file mode 100644
index 0000000..53b237d
--- /dev/null
+++ b/jira/jira-search/help/utils.sh
@@ -0,0 +1,90 @@
+#!/bin/bash
+# -----------------------------------------------------------------------
+# Copyright 2024 Open Networking Foundation Contributors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http:#www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# -----------------------------------------------------------------------
+# SPDX-FileCopyrightText: 2024 Open Networking Foundation Contributors
+# SPDX-License-Identifier: Apache-2.0
+## --------------------------------------------------------------------
+## Intent:
+## --------------------------------------------------------------------
+
+## --------------------------------------------------------------------
+## --------------------------------------------------------------------
+function help_read()
+{
+    local -n ref=$1; shift
+    local path="$1"; shift
+
+    readarray text < <(grep -v -e '^#' "$path")
+    ref+=("${text[@]}")
+
+    return
+}
+
+## --------------------------------------------------------------------
+## --------------------------------------------------------------------
+function help_switch_show()
+{
+    local -a buffer=()
+
+    local helpwith
+    for helpwith in "$@"; do
+        local path="$pgm_help/${helpwith}.switches"
+        if [[ ! -e "$path" ]]; then
+            readarray fyls < <(find "$pgm_help" -name '*.switches')
+            echo "--usage-${helpwith} does not exist"
+            echo "Try one of:"
+            printf "  %s\n" "${fyls[@]}"
+            error "OUTA HERE"
+        fi
+        help_read buffer "$path"
+    done
+
+    printf '%s' "${buffer[@]}"
+    return
+}
+
+## --------------------------------------------------------------------
+## --------------------------------------------------------------------
+function help_usage_show()
+{
+    local -a buffer=()
+
+    local helpwith
+    for helpwith in "$@"; do
+        local path="$pgm_help/${helpwith}.usage"
+        if [[ ! -e "$path" ]]; then
+            readarray fyls < <(find "$pgm_help" -name '*.usage')
+            echo "--usage-${helpwith} does not exist"
+            echo "Try one of:"
+            printf "  %s\n" "${fyls[@]}"
+            error "OUTA HERE"
+        fi
+        help_read buffer "$path"
+    done
+
+    printf '%s' "${buffer[@]}"
+    return
+}
+
+## --------------------------------------------------------------------
+## --------------------------------------------------------------------
+function help_with()
+{
+    help_switch_show "$@"
+    help_usage_show "$@"
+}
+
+# [EOF]
diff --git a/makefile b/makefile
index 262c76f..1be78b2 100644
--- a/makefile
+++ b/makefile
@@ -2,6 +2,10 @@
 ## -----------------------------------------------------------------------
 ## -----------------------------------------------------------------------
 
+##-------------------##
+##---]  GLOBALS  [---##
+##-------------------##
+GIT       ?= /usr/bin/env git
 common-sh := lf/onf-common/common.sh
 
 all : $(common-sh)
@@ -10,6 +14,6 @@
 ## Intent: On-demand submodule checkout
 ## -----------------------------------------------------------------------
 $(common-sh) :
-	git submodule update --init --recursive
+	$(GIT) submodule update --init --recursive
 
 # [EOF]