diff options
Diffstat (limited to 'plugins/jira/jira.plugin.zsh')
-rw-r--r-- | plugins/jira/jira.plugin.zsh | 119 |
1 files changed, 88 insertions, 31 deletions
diff --git a/plugins/jira/jira.plugin.zsh b/plugins/jira/jira.plugin.zsh index 739ee7142..341e23ec0 100644 --- a/plugins/jira/jira.plugin.zsh +++ b/plugins/jira/jira.plugin.zsh @@ -1,45 +1,102 @@ -# To use: add a .jira-url file in the base of your project -# You can also set JIRA_URL in your .zshrc or put .jira-url in your home directory -# .jira-url in the current directory takes precedence +# CLI support for JIRA interaction # -# If you use Rapid Board, set: -#JIRA_RAPID_BOARD="true" -# in you .zshrc -# -# Setup: cd to/my/project -# echo "https://name.jira.com" >> .jira-url -# Usage: jira # opens a new issue -# jira ABC-123 # Opens an existing issue -open_jira_issue () { - local open_cmd - if [[ $(uname -s) == 'Darwin' ]]; then - open_cmd='open' - else - open_cmd='xdg-open' - fi +# See README.md for details + +: ${JIRA_DEFAULT_ACTION:=new} + +function jira() { + emulate -L zsh + local action=${1:=$JIRA_DEFAULT_ACTION} - if [ -f .jira-url ]; then + local jira_url jira_prefix + if [[ -f .jira-url ]]; then jira_url=$(cat .jira-url) - elif [ -f ~/.jira-url ]; then + elif [[ -f ~/.jira-url ]]; then jira_url=$(cat ~/.jira-url) - elif [[ "x$JIRA_URL" != "x" ]]; then - jira_url=$JIRA_URL + elif [[ -n "${JIRA_URL}" ]]; then + jira_url=${JIRA_URL} else - echo "JIRA url is not specified anywhere." - return 0 + _jira_url_help + return 1 fi - if [ -z "$1" ]; then + if [[ -f .jira-prefix ]]; then + jira_prefix=$(cat .jira-prefix) + elif [[ -f ~/.jira-prefix ]]; then + jira_prefix=$(cat ~/.jira-prefix) + elif [[ -n "${JIRA_PREFIX}" ]]; then + jira_prefix=${JIRA_PREFIX} + else + jira_prefix="" + fi + + + if [[ $action == "new" ]]; then echo "Opening new issue" - $open_cmd "$jira_url/secure/CreateIssue!default.jspa" + open_command "${jira_url}/secure/CreateIssue!default.jspa" + elif [[ "$action" == "assigned" || "$action" == "reported" ]]; then + _jira_query $@ + elif [[ "$action" == "dashboard" ]]; then + echo "Opening dashboard" + open_command "${jira_url}/secure/Dashboard.jspa" + elif [[ "$action" == "dumpconfig" ]]; then + echo "JIRA_URL=$jira_url" + echo "JIRA_PREFIX=$jira_prefix" + echo "JIRA_NAME=$JIRA_NAME" + echo "JIRA_RAPID_BOARD=$JIRA_RAPID_BOARD" + echo "JIRA_DEFAULT_ACTION=$JIRA_DEFAULT_ACTION" else - echo "Opening issue #$1" - if [[ "x$JIRA_RAPID_BOARD" = "xtrue" ]]; then - $open_cmd "$jira_url/issues/$1" + # Anything that doesn't match a special action is considered an issue name + local issue_arg=$action + local issue="${jira_prefix}${issue_arg}" + local url_fragment='' + if [[ "$2" == "m" ]]; then + url_fragment="#add-comment" + echo "Add comment to issue #$issue" + else + echo "Opening issue #$issue" + fi + if [[ "$JIRA_RAPID_BOARD" == "true" ]]; then + open_command "${jira_url}/issues/${issue}${url_fragment}" else - $open_cmd "$jira_url/browse/$1" + open_command "${jira_url}/browse/${issue}${url_fragment}" fi fi } -alias jira='open_jira_issue' +function _jira_url_help() { + cat << EOF +error: JIRA URL is not specified anywhere. + +Valid options, in order of precedence: + .jira-url file + \$HOME/.jira-url file + \$JIRA_URL environment variable +EOF +} + +function _jira_query() { + emulate -L zsh + local verb="$1" + local jira_name lookup preposition query + if [[ "${verb}" == "reported" ]]; then + lookup=reporter + preposition=by + elif [[ "${verb}" == "assigned" ]]; then + lookup=assignee + preposition=to + else + echo "error: not a valid lookup: $verb" >&2 + return 1 + fi + jira_name=${2:=$JIRA_NAME} + if [[ -z $jira_name ]]; then + echo "error: JIRA_NAME not specified" >&2 + return 1 + fi + + echo "Browsing issues ${verb} ${preposition} ${jira_name}" + query="${lookup}+%3D+%22${jira_name}%22+AND+resolution+%3D+unresolved+ORDER+BY+priority+DESC%2C+created+ASC" + open_command "${jira_url}/secure/IssueNavigator.jspa?reset=true&jqlQuery=${query}" +} + |