diff options
| author | Russ Cox <rsc@golang.org> | 2017-10-02 09:42:13 -0400 |
|---|---|---|
| committer | Russ Cox <rsc@golang.org> | 2017-11-10 03:12:52 +0000 |
| commit | 0bdc7edde01a92e96255c6845b536d59706b9542 (patch) | |
| tree | 38e33d499a8dff245b9d3d7618c967260132a2fd /git-codereview/pending.go | |
| parent | c4baf783371a7c2b30b95ab528a38f6b12e7b6c1 (diff) | |
| download | go-x-review-0bdc7edde01a92e96255c6845b536d59706b9542.tar.xz | |
git-codereview: batch GerritChange info fetches during pending
This speeds pending a bit by reducing the number of round trips
to the Gerrit server when you have a stack of CLs.
Change-Id: I456e1a8739b9b6586f4e05c1a5442f402e440a79
Reviewed-on: https://go-review.googlesource.com/67571
Run-TryBot: Russ Cox <rsc@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Austin Clements <austin@google.com>
Diffstat (limited to 'git-codereview/pending.go')
| -rw-r--r-- | git-codereview/pending.go | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/git-codereview/pending.go b/git-codereview/pending.go index 0219a20..83725c8 100644 --- a/git-codereview/pending.go +++ b/git-codereview/pending.go @@ -42,11 +42,37 @@ func (b *pendingBranch) load() { if b.current { b.staged, b.unstaged, b.untracked = LocalChanges() } + var changeIDs []string + var commits []*Commit for _, c := range b.Pending() { c.committed = ListFiles(c) - if !pendingLocal { - c.g, c.gerr = b.GerritChange(c, "DETAILED_LABELS", "CURRENT_REVISION", "MESSAGES", "DETAILED_ACCOUNTS") + if c.ChangeID == "" { + c.gerr = fmt.Errorf("missing Change-Id in commit message") + } else { + changeIDs = append(changeIDs, fullChangeID(b.Branch, c)) + commits = append(commits, c) } + } + if !pendingLocal { + gs, err := b.GerritChanges(changeIDs, "DETAILED_LABELS", "CURRENT_REVISION", "MESSAGES", "DETAILED_ACCOUNTS") + if len(gs) != len(commits) && err == nil { + err = fmt.Errorf("invalid response from Gerrit server - %d queries but %d results", len(changeIDs), len(gs)) + } + if err != nil { + for _, c := range commits { + if c.gerr != nil { + c.gerr = err + } + } + } else { + for i, c := range commits { + if len(gs[i]) == 1 { + c.g = gs[i][0] + } + } + } + } + for _, c := range b.Pending() { if c.g == nil { c.g = new(GerritChange) // easier for formatting code } |
