diff options
| author | Aleksandr Nogikh <nogikh@google.com> | 2023-04-20 21:14:00 +0200 |
|---|---|---|
| committer | Aleksandr Nogikh <wp32pw@gmail.com> | 2023-04-28 14:53:23 +0200 |
| commit | 621aee759846fed3c2699ce10a4fe815de97f250 (patch) | |
| tree | 3eca9e2da7692decf009efb7745c11e728b8729f /pkg/vcs/git_test.go | |
| parent | d92f696afec4905d4fa574398155613187ea8407 (diff) | |
pkg/vcs: extract merge bases of two commits
Diffstat (limited to 'pkg/vcs/git_test.go')
| -rw-r--r-- | pkg/vcs/git_test.go | 56 |
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) + } +} |
