aboutsummaryrefslogtreecommitdiff
path: root/git-codereview/pending.go
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2017-10-02 09:42:13 -0400
committerRuss Cox <rsc@golang.org>2017-11-10 03:12:52 +0000
commit0bdc7edde01a92e96255c6845b536d59706b9542 (patch)
tree38e33d499a8dff245b9d3d7618c967260132a2fd /git-codereview/pending.go
parentc4baf783371a7c2b30b95ab528a38f6b12e7b6c1 (diff)
downloadgo-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.go30
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
}