// SPDX-FileCopyrightText: 2025 Romain Maneschi // // SPDX-License-Identifier: EUPL-1.2 package repository import ( "context" "fmt" "testing" "github.com/go-git/go-git/v6/plumbing" "gitroot.dev/server/configuration" "gitroot.dev/server/logger" "gitroot.dev/server/user" ) // | commit5 // | | - commit4 -- branch2 // | | commit3 // | - commit2 -- branch1 // - commit1 // - init -- main func TestFoundAncestor(t *testing.T) { dataDir := t.TempDir() conf := configuration.NewConfiguration(dataDir) userManager, _ := user.NewManager(conf) m := NewManager(conf, userManager) err := m.CreateUserRepo(context.TODO(), RepoConf{Name: "foundAncestor", DefaultBranch: "main"}, []user.SimpleUser{}, []byte("")) if err != nil { t.Fatal(err) } repo, err := m.Open(context.TODO(), "foundAncestor") if err != nil { t.Fatal(err) } repoWriter, err := repo.WillWrite(plumbing.HEAD) if err != nil { t.Fatal(err) } h1 := makeCommit(repoWriter, 1, t, userManager) if err := repoWriter.Branch("branch1", h1); err != nil { t.Fatal(err) } h2 := makeCommit(repoWriter, 2, t, userManager) com2, _ := repoWriter.repoWrite.CommitObject(h2) comAncestor, _ := foundAncestor(repoWriter.repoWrite, logger.NewLogger("test"), RepoConfiguration{DefaultBranch: "main"}, com2) if comAncestor.Hash != h1 { t.Fatal("should be h1") } h3 := makeCommit(repoWriter, 3, t, userManager) if err := repoWriter.Branch("branch2", h3); err != nil { t.Fatal(err) } h4 := makeCommit(repoWriter, 4, t, userManager) com4, _ := repoWriter.repoWrite.CommitObject(h4) comAncestor4, _ := foundAncestor(repoWriter.repoWrite, logger.NewLogger("test"), RepoConfiguration{DefaultBranch: "main"}, com4) if comAncestor4.Hash != h3 { t.Fatal("should be h3", comAncestor4.Hash, h1, h2, h3) } if err := repoWriter.Checkout(plumbing.NewBranchReferenceName("main")); err != nil { t.Fatal(err) } // h5 := makeCommit(repoWriter, 5, t, userManager) // comAncestor5, _ := foundAncestor(repoWriter.repoWrite, logger.NewLogger("test"), RepoConfiguration{DefaultBranch: "main"}, com2) // if comAncestor5.Hash != h1 { // t.Fatal("should be h1", comAncestor5.Hash, h1, h2, h3, h4, h5) // } repo.Close() } func makeCommit(repo *GitRootRepositoryWrite, nb int, t *testing.T, u *user.Manager) plumbing.Hash { if err := repo.Write("README.md", []byte(fmt.Sprintf("commit%d", nb))); err != nil { t.Fatal(err) } h, err := repo.CommitAll(fmt.Sprintf("commit%d", nb), u.RootCommiter()) if err != nil { t.Fatal(err) } return h }