jira: add README, "emulate -L zsh", add "dumpconfig" action

(The "dumpconfig" action is for verifying the configuration behavior against what's documented in the README now.)
add "error" to some of the error messages
This commit is contained in:
Andrew Janke 2015-09-11 18:37:39 -04:00
parent 9c08641d7c
commit c9af79fcad
3 changed files with 79 additions and 30 deletions

64
plugins/jira/README.md Normal file
View file

@ -0,0 +1,64 @@
# Jira plugin #
CLI support for JIRA interaction
## Description ##
This plugin provides command line tools for interacting with Atlassian's [JIRA](https://www.atlassian.com/software/jira) bug tracking software.
The interaction is all done through the web. No local installation of JIRA is necessary.
In this document, "JIRA" refers to the JIRA issue tracking server, and `jira` refers to the command this plugin supplies.
## Usage ##
This plugin supplies one command, `jira`, through which all its features are exposed. Most forms of this command open a JIRA page in your web browser.
```
jira # performs the default action
jira new # opens a new issue
jira dashboard # opens your JIRA dashboard
jira reported [username] # queries for issues reported by a user
jira assigned [username] # queries for issues assigned to a user
jira ABC-123 # opens an existing issue
jira ABC-123 m # opens an existing issue for adding a comment
```
#### Debugging usage ####
These calling forms are for developers' use, and may change at any time.
```
jira dumpconfig # displays the effective configuration
```
## Setup ##
The URL for your JIRA instance is set by `$JIRA_URL` or a `.jira_url` file.
Add a `.jira-url` file in the base of your project. You can also set `$JIRA_URL` in your `~/.zshrc` or put a `.jira-url` in your home directory. A `.jira-url` in the current directory takes precedence, so you can make per-project customizations.
The same goes with `.jira-prefix` and `$JIRA_PREFIX`. These control the prefix added to all issue IDs, which differentiates projects within a JIRA instance.
For example:
```
cd to/my/project
echo "https://jira.atlassian.com" >> .jira-url
```
(Note: The current implementation only looks in the current directory for `.jira-url` and `.jira-prefix`, not up the path, so if you are in a subdirectory of your project, it will fall back to your default JIRA URL. This will probably change in the future though.)
### Variables ###
* `$JIRA_URL` - Your JIRA instance's URL
* `$JIRA_NAME` - Your JIRA username; used as the default user for `assigned`/`reported` searches
* `$JIRA_PREFIX` - Prefix added to issue ID arguments
* `$JIRA_RAPID_BOARD` - Set to `true` if you use Rapid Board
* `$JIRA_DEFAULT_ACTION` - Action to do when `jira` is called with no arguments; defaults to "new"
### Browser ###
Your default web browser, as determined by how `open_command` handles `http://` URLs, is used for interacting with the JIRA instance. If you change your system's URL handler associations, it will change the browser that `jira` uses.

View file

@ -7,6 +7,7 @@ _1st_arguments=(
'dashboard:open the dashboard' 'dashboard:open the dashboard'
'reported:search for issues reported by a user' 'reported:search for issues reported by a user'
'assigned:search for issues assigned to a user' 'assigned:search for issues assigned to a user'
'dumpconfig:display effective jira configuration'
) )
_arguments -C \ _arguments -C \

View file

@ -1,35 +1,11 @@
# CLI support for JIRA interaction # CLI support for JIRA interaction
# #
# Setup: # See README.md for details
# 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
# A .jira-url in the current directory takes precedence.
# The same goes with .jira-prefix and $JIRA_PREFIX.
#
# For example:
# cd to/my/project
# echo "https://name.jira.com" >> .jira-url
#
# Variables:
# $JIRA_RAPID_BOARD - set to "true" if you use Rapid Board
# $JIRA_DEFAULT_ACTION - action to do when `jira` is called witn no args
# defaults to "new"
# $JIRA_NAME - Your JIRA username. Used as default for assigned/reported
# $JIRA_PREFIX - Prefix added to issue ID arguments
#
#
# Usage:
# jira # Performs the default action
# jira new # opens a new issue
# jira reported [username]
# jira assigned [username]
# jira dashboard
# jira ABC-123 # Opens an existing issue
# jira ABC-123 m # Opens an existing issue for adding a comment
: ${JIRA_DEFAULT_ACTION:=new} : ${JIRA_DEFAULT_ACTION:=new}
function jira() { function jira() {
emulate -L zsh
local action=${1:=$JIRA_DEFAULT_ACTION} local action=${1:=$JIRA_DEFAULT_ACTION}
local jira_url jira_prefix local jira_url jira_prefix
@ -63,6 +39,12 @@ function jira() {
elif [[ "$action" == "dashboard" ]]; then elif [[ "$action" == "dashboard" ]]; then
echo "Opening dashboard" echo "Opening dashboard"
open_command "${jira_url}/secure/Dashboard.jspa" 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 else
# Anything that doesn't match a special action is considered an issue name # Anything that doesn't match a special action is considered an issue name
local issue_arg=$action local issue_arg=$action
@ -84,15 +66,17 @@ function jira() {
function _jira_url_help() { function _jira_url_help() {
cat << EOF cat << EOF
JIRA url is not specified anywhere. error: JIRA URL is not specified anywhere.
Valid options, in order of precedence: Valid options, in order of precedence:
.jira-url file .jira-url file
\$HOME/.jira-url file \$HOME/.jira-url file
JIRA_URL environment variable \$JIRA_URL environment variable
EOF EOF
} }
function _jira_query() { function _jira_query() {
emulate -L zsh
local verb="$1" local verb="$1"
local jira_name lookup preposition query local jira_name lookup preposition query
if [[ "${verb}" == "reported" ]]; then if [[ "${verb}" == "reported" ]]; then
@ -102,12 +86,12 @@ function _jira_query() {
lookup=assignee lookup=assignee
preposition=to preposition=to
else else
echo "not a valid lookup: $verb" >&2 echo "error: not a valid lookup: $verb" >&2
return 1 return 1
fi fi
jira_name=${2:=$JIRA_NAME} jira_name=${2:=$JIRA_NAME}
if [[ -z $jira_name ]]; then if [[ -z $jira_name ]]; then
echo "JIRA_NAME not specified" >&2 echo "error: JIRA_NAME not specified" >&2
return 1 return 1
fi fi