[#17] print usage on missing arguments

This commit is contained in:
Cory Bennett
2015-11-23 14:17:09 -08:00
parent 80322b648e
commit c8ae7fc685
2 changed files with 56 additions and 21 deletions
+19 -15
View File
@@ -15,26 +15,37 @@ PLATFORMS= \
DIST=$(shell pwd)/dist DIST=$(shell pwd)/dist
export GOPATH=$(shell pwd) export GOPATH=$(shell pwd)
GOBIN ?= $(shell pwd)/bin
NAME=jira
build: CURVER ?= $(shell git describe --abbrev=0 --tags)
cd src/github.com/Netflix-Skunkworks/go-jira/jira; \ LDFLAGS:=-X main.buildVersion=$(CURVER)
go get -v
build: src/github.com/Netflix-Skunkworks/go-jira
go get -v github.com/coryb/optigo
go get -v github.com/kballard/go-shellquote
go get -v github.com/mgutz/ansi
go get -v github.com/op/go-logging
go get -v golang.org/x/crypto/ssh/terminal
go build -ldflags "$(LDFLAGS)" -o $(GOBIN)/$(NAME) jira/main.go
src/%:
mkdir -p $(@D)
test -L $@ || ln -sf ../../.. $@
go get -v $*
cross-setup: cross-setup:
for p in $(PLATFORMS); do \ for p in $(PLATFORMS); do \
echo "Building for $$p"; \ echo "Building for $$p"; \
cd $(GOROOT)/src && sudo GOOS=$${p/-*/} GOARCH=$${p/*-/} bash ./make.bash --no-clean; \ cd $(GOROOT)/src && sudo GOROOT_BOOTSTRAP=$(GOROOT) GOOS=$${p/-*/} GOARCH=$${p/*-/} bash ./make.bash --no-clean; \
done done
all: all:
rm -rf $(DIST); \ rm -rf $(DIST); \
mkdir -p $(DIST); \ mkdir -p $(DIST); \
cd src/github.com/Netflix-Skunkworks/go-jira/jira; \
go get -d; \
for p in $(PLATFORMS); do \ for p in $(PLATFORMS); do \
echo "Building for $$p"; \ echo "Building for $$p"; \
GOOS=$${p/-*/} GOARCH=$${p/*-/} go build -v -ldflags -s -o $(DIST)/jira-$$p; \ GOOS=$${p/-*/} GOARCH=$${p/*-/} go build -v -ldflags "$(LDFLAGS) -s" -o $(DIST)/$(NAME)-$$p jira/main.go ; \
done done
fmt: fmt:
@@ -43,11 +54,6 @@ fmt:
install: install:
export GOBIN=~/bin && ${MAKE} build export GOBIN=~/bin && ${MAKE} build
# need gsort on OSX (brew install coreutils) or newer sort on linux
# that supports the -V option for version sorting
SORT=gsort
CURVER ?= $(shell git fetch --tags && git tag | $(SORT) -V | tail -1)
NEWVER ?= $(shell echo $(CURVER) | awk -F. '{print $$1"."$$2"."$$3+1}') NEWVER ?= $(shell echo $(CURVER) | awk -F. '{print $$1"."$$2"."$$3+1}')
TODAY := $(shell date +%Y-%m-%d) TODAY := $(shell date +%Y-%m-%d)
@@ -65,9 +71,7 @@ update-changelog:
tail +2 CHANGELOG.md >> CHANGELOG.md.new; \ tail +2 CHANGELOG.md >> CHANGELOG.md.new; \
mv CHANGELOG.md.new CHANGELOG.md; \ mv CHANGELOG.md.new CHANGELOG.md; \
git commit -m "Updated Changelog" CHANGELOG.md; \ git commit -m "Updated Changelog" CHANGELOG.md; \
perl -pi -e "s/version: $(CURVER)/version: $(NEWVER)/" jira/main.go; \
git commit -m "bump version" jira/main.go; \
git tag $(NEWVER) git tag $(NEWVER)
clean: clean:
rm -rf pkg dist bin && find src \! -path \*/go-jira\* -delete rm -rf pkg dist bin src ./toolkit
+35 -4
View File
@@ -13,8 +13,11 @@ import (
"strings" "strings"
) )
var log = logging.MustGetLogger("jira") var (
var format = "%{color}%{time:2006-01-02T15:04:05.000Z07:00} %{level:-5s} [%{shortfile}]%{color:reset} %{message}" log = logging.MustGetLogger("jira")
format = "%{color}%{time:2006-01-02T15:04:05.000Z07:00} %{level:-5s} [%{shortfile}]%{color:reset} %{message}"
buildVersion string
)
func main() { func main() {
logBackend := logging.NewLogBackend(os.Stderr, "", 0) logBackend := logging.NewLogBackend(os.Stderr, "", 0)
@@ -166,7 +169,7 @@ Command Options:
op := optigo.NewDirectAssignParser(map[string]interface{}{ op := optigo.NewDirectAssignParser(map[string]interface{}{
"h|help": usage, "h|help": usage,
"version": func() { "version": func() {
fmt.Println("version: 0.0.14") fmt.Println(fmt.Sprintf("version: %s", buildVersion))
os.Exit(0) os.Exit(0)
}, },
"v|verbose+": func() { "v|verbose+": func() {
@@ -216,7 +219,7 @@ Command Options:
} }
} }
if command == "" { if command == "" && len(args) > 0 {
command = args[0] command = args[0]
args = args[1:] args = args[1:]
} }
@@ -228,7 +231,9 @@ Command Options:
if value, ok := opts["command"].(string); ok { if value, ok := opts["command"].(string); ok {
command = value command = value
} else if _, ok := jiraCommands[command]; !ok || command == "" { } else if _, ok := jiraCommands[command]; !ok || command == "" {
if command != "" {
args = append([]string{command}, args...) args = append([]string{command}, args...)
}
command = "view" command = "view"
} }
@@ -270,6 +275,13 @@ Command Options:
} }
} }
requireArgs := func(count int) {
if len(args) < count {
log.Error("Not enough arguments. %d required, %d provided", count, len(args))
usage(false)
}
}
var err error var err error
switch command { switch command {
case "login": case "login":
@@ -279,6 +291,7 @@ Command Options:
case "list": case "list":
err = c.CmdList() err = c.CmdList()
case "edit": case "edit":
requireArgs(1)
setEditing(true) setEditing(true)
if len(args) > 0 { if len(args) > 0 {
err = c.CmdEdit(args[0]) err = c.CmdEdit(args[0])
@@ -300,8 +313,10 @@ Command Options:
} }
} }
case "editmeta": case "editmeta":
requireArgs(1)
err = c.CmdEditMeta(args[0]) err = c.CmdEditMeta(args[0])
case "transmeta": case "transmeta":
requireArgs(1)
err = c.CmdTransitionMeta(args[0]) err = c.CmdTransitionMeta(args[0])
case "issuelinktypes": case "issuelinktypes":
err = c.CmdIssueLinkTypes() err = c.CmdIssueLinkTypes()
@@ -313,50 +328,66 @@ Command Options:
setEditing(true) setEditing(true)
err = c.CmdCreate() err = c.CmdCreate()
case "transitions": case "transitions":
requireArgs(1)
err = c.CmdTransitions(args[0]) err = c.CmdTransitions(args[0])
case "blocks": case "blocks":
requireArgs(2)
err = c.CmdBlocks(args[0], args[1]) err = c.CmdBlocks(args[0], args[1])
case "dups": case "dups":
requireArgs(2)
if err = c.CmdDups(args[0], args[1]); err == nil { if err = c.CmdDups(args[0], args[1]); err == nil {
opts["resolution"] = "Duplicate" opts["resolution"] = "Duplicate"
err = c.CmdTransition(args[0], "close") err = c.CmdTransition(args[0], "close")
} }
case "watch": case "watch":
requireArgs(1)
err = c.CmdWatch(args[0]) err = c.CmdWatch(args[0])
case "transition": case "transition":
requireArgs(2)
setEditing(true) setEditing(true)
err = c.CmdTransition(args[0], args[1]) err = c.CmdTransition(args[0], args[1])
case "close": case "close":
requireArgs(1)
setEditing(false) setEditing(false)
err = c.CmdTransition(args[0], "close") err = c.CmdTransition(args[0], "close")
case "acknowledge": case "acknowledge":
requireArgs(1)
setEditing(false) setEditing(false)
err = c.CmdTransition(args[0], "acknowledge") err = c.CmdTransition(args[0], "acknowledge")
case "reopen": case "reopen":
requireArgs(1)
setEditing(false) setEditing(false)
err = c.CmdTransition(args[0], "reopen") err = c.CmdTransition(args[0], "reopen")
case "resolve": case "resolve":
requireArgs(1)
setEditing(false) setEditing(false)
err = c.CmdTransition(args[0], "resolve") err = c.CmdTransition(args[0], "resolve")
case "start": case "start":
requireArgs(1)
setEditing(false) setEditing(false)
err = c.CmdTransition(args[0], "start") err = c.CmdTransition(args[0], "start")
case "stop": case "stop":
requireArgs(1)
setEditing(false) setEditing(false)
err = c.CmdTransition(args[0], "stop") err = c.CmdTransition(args[0], "stop")
case "comment": case "comment":
requireArgs(1)
setEditing(true) setEditing(true)
err = c.CmdComment(args[0]) err = c.CmdComment(args[0])
case "take": case "take":
requireArgs(1)
err = c.CmdAssign(args[0], opts["user"].(string)) err = c.CmdAssign(args[0], opts["user"].(string))
case "browse": case "browse":
requireArgs(1)
opts["browse"] = true opts["browse"] = true
err = c.Browse(args[0]) err = c.Browse(args[0])
case "export-templates": case "export-templates":
err = c.CmdExportTemplates() err = c.CmdExportTemplates()
case "assign": case "assign":
requireArgs(2)
err = c.CmdAssign(args[0], args[1]) err = c.CmdAssign(args[0], args[1])
case "view": case "view":
requireArgs(1)
err = c.CmdView(args[0]) err = c.CmdView(args[0])
default: default:
log.Error("Unknown command %s", command) log.Error("Unknown command %s", command)