about summary refs log tree commit diff
path: root/ops/sync-gcsr
diff options
context:
space:
mode:
authorVincent Ambo <Vincent Ambo>2020-01-18T14·48+0000
committerVincent Ambo <Vincent Ambo>2020-01-18T14·49+0000
commit44116522dd82aefbaf7cdb9f42dbcc1e96eedc99 (patch)
tree5caae5480b9247e3e86323447cfb9ca3f39f42e6 /ops/sync-gcsr
parenta21be17719d95e75036e6423fb623a9914d2fbd5 (diff)
feat(ops/sync-gcsr): Skip unneccessary branch updates r/405
Checks whether branches are already up-to-date before setting
references.

This also makes it possible to hook additional logic on the update
flow.
Diffstat (limited to 'ops/sync-gcsr')
-rw-r--r--ops/sync-gcsr/main.go16
1 files changed, 12 insertions, 4 deletions
diff --git a/ops/sync-gcsr/main.go b/ops/sync-gcsr/main.go
index a02f6d552730..08e2627c6602 100644
--- a/ops/sync-gcsr/main.go
+++ b/ops/sync-gcsr/main.go
@@ -44,15 +44,23 @@ func updateBranches(auth *http.BasicAuth, repo *git.Repository) error {
 			continue
 		}
 
-		branch := plumbing.NewHashReference(
-			plumbing.NewBranchReferenceName(ref.Name().Short()),
-			ref.Hash(),
-		)
+		name := plumbing.NewBranchReferenceName(ref.Name().Short())
+
+		if current, err := repo.Storer.Reference(name); err == nil {
+			// Determine whether the reference has changed to skip
+			// unnecessary modifications.
+			if current.Hash() == ref.Hash() {
+				continue
+			}
+		}
+
+		branch := plumbing.NewHashReference(name, ref.Hash())
 
 		err := repo.Storer.SetReference(branch)
 		if err != nil {
 			return err
 		}
+
 		log.Println("Updated branch", ref.Name().String())
 	}