Skip to content

Instantly share code, notes, and snippets.

@ericvanjohnson
Created July 28, 2015 17:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ericvanjohnson/9f28d7bc4158b6050206 to your computer and use it in GitHub Desktop.
Save ericvanjohnson/9f28d7bc4158b6050206 to your computer and use it in GitHub Desktop.
ZSH Plugin to open Redmine tickets from the Command Line
# To use: add a .redmine-url file in the base of your project
# You can also set redmine_URL in your .zshrc or put .redmine-url in your home directory
# .redmine-url in the current directory takes precedence
#
# If you use Rapid Board, set:
#redmine_RAPID_BOARD="true"
# in you .zshrc
#
# Setup: cd to/my/project
# echo "https://name.redmine.com" >> .redmine-url
# Usage: redmine # opens a new issue
# redmine ABC-123 # Opens an existing issue
open_redmine_issue () {
local open_cmd
if [[ "$OSTYPE" = darwin* ]]; then
open_cmd='open'
else
open_cmd='xdg-open'
fi
if [ -f .redmine-url ]; then
redmine_url=$(cat .redmine-url)
elif [ -f ~/.redmine-url ]; then
redmine_url=$(cat ~/.redmine-url)
elif [[ "x$redmine_URL" != "x" ]]; then
redmine_url=$redmine_URL
else
echo "redmine url is not specified anywhere."
return 1
fi
if [ -f .redmine-prefix ]; then
redmine_prefix=$(cat .redmine-prefix)
elif [ -f ~/.redmine-prefix ]; then
redmine_prefix=$(cat ~/.redmine-prefix)
else
redmine_prefix=""
fi
if [ -z "$1" ]; then
echo "View Projects"
$open_cmd "${redmine_url}/projects"
elif [[ "$1" = "assigned" || "$1" = "reported" ]]; then
redmine_query $@
else
local addcomment=''
if [[ "$2" == "m" ]]; then
addcomment="#add-comment"
echo "Add comment to issue #$1"
else
echo "Opening issue #$1"
fi
if [[ "x$redmine_RAPID_BOARD" = "xtrue" ]]; then
$open_cmd "$redmine_url/issues/$redmine_prefix$1$addcomment"
else
$open_cmd "$redmine_url/issues/$redmine_prefix$1$addcomment"
fi
fi
}
redmine_name () {
if [[ -z "$1" ]]; then
if [[ "x${redmine_NAME}" != "x" ]]; then
redmine_name=${redmine_NAME}
else
echo "redmine_NAME not specified"
return 1
fi
else
redmine_name=$@
fi
}
redmine_query () {
verb="$1"
if [[ "${verb}" = "reported" ]]; then
lookup=reporter
preposition=by
elif [[ "${verb}" = "assigned" ]]; then
lookup=assignee
preposition=to
else
echo "not a valid lookup $verb"
return 1
fi
shift 1
redmine_name $@
if [[ $? = 1 ]]; then
return 1
fi
echo "Browsing issues ${verb} ${preposition} ${redmine_name}"
$open_cmd "${redmine_url}/secure/IssueNavigator.jspa?reset=true&jqlQuery=${lookup}+%3D+%22${redmine_name}%22+AND+resolution+%3D+unresolved+ORDER+BY+priority+DESC%2C+created+ASC"
}
alias redmine='open_redmine_issue'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment