Prettier output from 'review pending'.

Change-Id: Ia34c52fdc377558f50720b166f54e651b7902ded
diff --git a/api.go b/api.go
index 1a114d1..ea42f6c 100644
--- a/api.go
+++ b/api.go
@@ -7,6 +7,7 @@
 import (
 	"bufio"
 	"encoding/json"
+	"errors"
 	"fmt"
 	"net/http"
 	"net/url"
@@ -18,6 +19,8 @@
 	reviewSuffix = "-review"
 )
 
+var notFound = errors.New("not found")
+
 func getChange(origin, id string) (*Change, error) {
 	u, err := url.Parse(origin)
 	if err != nil {
@@ -33,6 +36,9 @@
 		return nil, err
 	}
 	defer r.Body.Close()
+	if r.StatusCode == http.StatusNotFound {
+		return nil, notFound
+	}
 	if r.StatusCode != http.StatusOK {
 		return nil, fmt.Errorf("unexpected status: %v", r.Status)
 	}
diff --git a/review.go b/review.go
index f3047b3..2354a38 100644
--- a/review.go
+++ b/review.go
@@ -177,8 +177,14 @@
 }
 
 func pending() {
-	var wg sync.WaitGroup
-	origin := originURL()
+	var (
+		wg      sync.WaitGroup
+		origin  = originURL()
+		current = currentBranch()
+	)
+	if current == "master" {
+		fmt.Println("On master branch.")
+	}
 	for _, branch := range localBranches() {
 		if branch == "master" {
 			// TODO(adg): check if it's remote tracking instead
@@ -187,14 +193,32 @@
 		wg.Add(1)
 		go func(branch string) {
 			defer wg.Done()
+			p := ""
+			if branch == current {
+				p = "* "
+			}
 			id := headChangeId(branch)
 			c, err := getChange(origin, id)
-			if err != nil {
-				fmt.Fprintf(os.Stderr, "error fetching change for %q: %v\n", branch, err)
-				return
+			switch err {
+			case notFound:
+				// TODO(adg): read local commit msg
+				var msg string
+				fmt.Printf("%v%v:\n\t%v\n\t(not uploaded)\n",
+					p, branch, msg)
+			case nil:
+				status := ""
+				switch c.Status {
+				case "MERGED":
+					status += " [submitted]"
+				case "ABANDONED":
+					status += " [abandoned]"
+				}
+				fmt.Printf("%v%v%v:\n\t%v\n\t%v\n",
+					p, branch, status, c.Subject, c.URL)
+				// TODO(adg): print votes
+			default:
+				fmt.Fprintf(os.Stderr, "fetching change for %q: %v\n", branch, err)
 			}
-			fmt.Printf("%v:\n\t%v\n\t%v\n", branch, c.Subject, c.URL)
-			// TODO(adg): print votes
 		}(branch)
 	}
 	wg.Wait()
@@ -288,7 +312,7 @@
 }
 
 func headChangeId(branch string) string {
-	b, err := exec.Command("git", "log", "-n", "1", "--format=format:%b", branch).CombinedOutput()
+	b, err := exec.Command("git", "log", "-n", "1", "--format=format:%b", branch, "--").CombinedOutput()
 	if err != nil {
 		dief("%s\ngit log failed: %v\n", b, err)
 	}