Commit c9af79fc authored by Andrew Janke's avatar Andrew Janke
Browse files

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
parent 9c08641d
# 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.
...@@ -7,6 +7,7 @@ _1st_arguments=( ...@@ -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 \
......
# 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() { ...@@ -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() { ...@@ -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() { ...@@ -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
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment