review: push argument handling into subcommands

Will enable flags for subcommands.
Improves error checking already.

Change-Id: I19219fd4d05b605c89fe0d2b1241aafbb6f72dbe
diff --git a/review.go b/review.go
index e86f7fc..49ad086 100644
--- a/review.go
+++ b/review.go
@@ -78,31 +78,33 @@
 	goToRepoRoot()
 	installHook()
 
-	switch flag.Arg(0) {
+	command, args := flag.Arg(0), flag.Args()[1:]
+
+	switch command {
 	case "help":
 		fmt.Fprintf(os.Stdout, help, os.Args[0])
 	case "create", "cr":
-		name := flag.Arg(1)
-		if name == "" {
-			flag.Usage()
-		}
-		create(name)
+		create(args)
 	case "commit", "co":
-		commit()
+		commit(args)
 	case "diff", "d":
-		diff()
+		diff(args)
 	case "upload", "u":
-		upload()
+		upload(args)
 	case "sync", "s":
-		doSync()
+		doSync(args)
 	case "pending", "p":
-		pending()
+		pending(args)
 	default:
 		flag.Usage()
 	}
 }
 
-func create(name string) {
+func create(args []string) {
+	if len(args) != 1 || args[0] == "" {
+		flag.Usage()
+	}
+	name := args[0]
 	if !hasStagedChanges() {
 		dief("no staged changes.\nDid you forget to 'git add'?")
 	}
@@ -119,7 +121,10 @@
 	}
 }
 
-func commit() {
+func commit(args []string) {
+	if len(args) != 0 {
+		flag.Usage()
+	}
 	if !hasStagedChanges() {
 		dief("no staged changes. Did you forget to 'git add'?")
 	}
@@ -129,18 +134,27 @@
 	run("git", "commit", "-q", "--amend", "-C", "HEAD")
 }
 
-func diff() {
+func diff(args []string) {
+	if len(args) != 0 {
+		flag.Usage()
+	}
 	run("git", "diff", "HEAD^", "HEAD")
 }
 
-func upload() {
+func upload(args []string) {
+	if len(args) != 0 {
+		flag.Usage()
+	}
 	if currentBranch() == "master" {
 		dief("can't upload from master branch.")
 	}
 	run("git", "push", "-q", "origin", "HEAD:refs/for/master")
 }
 
-func doSync() {
+func doSync(args []string) {
+	if len(args) != 0 {
+		flag.Usage()
+	}
 	run("git", "fetch", "-q")
 
 	// If we're on master, just fast-forward.
@@ -189,7 +203,10 @@
 	run("git", "rebase", "-q", "origin/master")
 }
 
-func pending() {
+func pending(args []string) {
+	if len(args) != 0 {
+		flag.Usage()
+	}
 	var (
 		wg      sync.WaitGroup
 		origin  = originURL()