aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/vcs/git_test.go
diff options
context:
space:
mode:
authorAleksandr Nogikh <nogikh@google.com>2023-04-20 21:14:00 +0200
committerAleksandr Nogikh <wp32pw@gmail.com>2023-04-28 14:53:23 +0200
commit621aee759846fed3c2699ce10a4fe815de97f250 (patch)
tree3eca9e2da7692decf009efb7745c11e728b8729f /pkg/vcs/git_test.go
parentd92f696afec4905d4fa574398155613187ea8407 (diff)
pkg/vcs: extract merge bases of two commits
Diffstat (limited to 'pkg/vcs/git_test.go')
-rw-r--r--pkg/vcs/git_test.go56
1 files changed, 56 insertions, 0 deletions
diff --git a/pkg/vcs/git_test.go b/pkg/vcs/git_test.go
index 24d4cab58..264cb54d8 100644
--- a/pkg/vcs/git_test.go
+++ b/pkg/vcs/git_test.go
@@ -315,3 +315,59 @@ func TestObject(t *testing.T) {
t.Fatal(diff)
}
}
+
+func TestMergeBase(t *testing.T) {
+ baseDir := t.TempDir()
+ repo := MakeTestRepo(t, baseDir)
+
+ // Create base branch.
+ repo.Git("checkout", "-b", "base")
+ repo.Git("commit", "--no-edit", "--allow-empty", "-m", "target")
+ baseCommit, _ := repo.repo.HeadCommit()
+
+ // Fork off another branch.
+ repo.Git("checkout", "-b", "fork")
+ repo.Git("commit", "--no-edit", "--allow-empty", "-m", "target")
+ forkCommit, _ := repo.repo.HeadCommit()
+
+ // Ensure that merge base points to the base commit.
+ mergeCommits, err := repo.repo.MergeBases(baseCommit.Hash, forkCommit.Hash)
+ if err != nil {
+ t.Fatal(err)
+ } else if len(mergeCommits) != 1 || mergeCommits[0].Hash != baseCommit.Hash {
+ t.Fatalf("expected base commit, got %v", mergeCommits)
+ }
+
+ // Let branches diverge.
+ repo.Git("checkout", "base")
+ repo.Git("commit", "--no-edit", "--allow-empty", "-m", "newBase")
+ newBaseCommit, _ := repo.repo.HeadCommit()
+
+ repo.Git("checkout", "fork")
+ repo.Git("commit", "--no-edit", "--allow-empty", "-m", "newFork")
+ newForkCommit, _ := repo.repo.HeadCommit()
+
+ // The merge base should remain the same.
+ mergeCommits, err = repo.repo.MergeBases(newBaseCommit.Hash, newForkCommit.Hash)
+ if err != nil {
+ t.Fatal(err)
+ } else if len(mergeCommits) != 1 || mergeCommits[0].Hash != baseCommit.Hash {
+ t.Fatalf("expected base commit (%s), got %d other commits",
+ baseCommit.Hash, len(mergeCommits))
+ }
+
+ // Now do the merge.
+ repo.Git("merge", "base")
+
+ // And advance the fork branch.
+ repo.Git("commit", "--no-edit", "--allow-empty", "-m", "target")
+ newNewForkCommit, _ := repo.repo.HeadCommit()
+
+ // The merge base should point to the last commit in `base`.
+ mergeCommits, err = repo.repo.MergeBases(newBaseCommit.Hash, newNewForkCommit.Hash)
+ if err != nil {
+ t.Fatal(err)
+ } else if len(mergeCommits) != 1 || mergeCommits[0].Hash != newBaseCommit.Hash {
+ t.Fatalf("expected base commit, got %v", mergeCommits)
+ }
+}