From 760749b6b75f4d612410d72280a9ddad36379e2a Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Sun, 16 Mar 2025 11:43:34 -0700 Subject: [PATCH] Move SetDefaultBranch to gitrepo --- models/repo/repo.go | 8 ++++++++ modules/gitrepo/branch.go | 13 ++++++++++--- modules/gitrepo/gitrepo.go | 2 ++ routers/api/v1/repo/repo.go | 4 ++-- routers/private/default_branch.go | 2 +- services/mirror/mirror_pull.go | 2 +- services/repository/adopt.go | 6 +++--- services/repository/branch.go | 5 +++-- services/repository/create.go | 2 +- services/repository/generate.go | 2 +- services/repository/push.go | 2 +- services/wiki/wiki.go | 2 +- 12 files changed, 34 insertions(+), 16 deletions(-) diff --git a/models/repo/repo.go b/models/repo/repo.go index 13473699f38d4..3bee5a751faea 100644 --- a/models/repo/repo.go +++ b/models/repo/repo.go @@ -223,6 +223,14 @@ func (repo *Repository) GetOwnerName() string { return repo.OwnerName } +func (repo *Repository) GetDefaultBranch() string { + return repo.DefaultBranch +} + +func (repo *Repository) GetDefaultWikiBranch() string { + return repo.DefaultWikiBranch +} + // SanitizedOriginalURL returns a sanitized OriginalURL func (repo *Repository) SanitizedOriginalURL() string { if repo.OriginalURL == "" { diff --git a/modules/gitrepo/branch.go b/modules/gitrepo/branch.go index 9c4bdc5bdffa9..9b77fa708954a 100644 --- a/modules/gitrepo/branch.go +++ b/modules/gitrepo/branch.go @@ -31,14 +31,21 @@ func GetBranchCommitID(ctx context.Context, repo Repository, branch string) (str return gitRepo.GetBranchCommitID(branch) } -// SetDefaultBranch sets default branch of repository. -func SetDefaultBranch(ctx context.Context, repo Repository, name string) error { +// SetDefaultBranchForRepo sets default branch of repository. +func SetDefaultBranchForRepo(ctx context.Context, repo Repository) error { _, _, err := git.NewCommand("symbolic-ref", "HEAD"). - AddDynamicArguments(git.BranchPrefix+name). + AddDynamicArguments(git.BranchPrefix+repo.GetDefaultBranch()). RunStdString(ctx, &git.RunOpts{Dir: repoPath(repo)}) return err } +func SetDefaultBranchForWiki(ctx context.Context, repo Repository) error { + _, _, err := git.NewCommand("symbolic-ref", "HEAD"). + AddDynamicArguments(git.BranchPrefix+repo.GetDefaultWikiBranch()). + RunStdString(ctx, &git.RunOpts{Dir: wikiPath(repo)}) + return err +} + // GetDefaultBranch gets default branch of repository. func GetDefaultBranch(ctx context.Context, repo Repository) (string, error) { return git.GetDefaultBranch(ctx, repoPath(repo)) diff --git a/modules/gitrepo/gitrepo.go b/modules/gitrepo/gitrepo.go index 5e2ec9ed1edf6..179cfd49c0f9c 100644 --- a/modules/gitrepo/gitrepo.go +++ b/modules/gitrepo/gitrepo.go @@ -19,6 +19,8 @@ import ( type Repository interface { GetName() string GetOwnerName() string + GetDefaultBranch() string + GetDefaultWikiBranch() string } func absPath(owner, name string) string { diff --git a/routers/api/v1/repo/repo.go b/routers/api/v1/repo/repo.go index 3d638cb05e029..8f7616182d18c 100644 --- a/routers/api/v1/repo/repo.go +++ b/routers/api/v1/repo/repo.go @@ -735,14 +735,14 @@ func updateBasicProperties(ctx *context.APIContext, opts api.EditRepoOption) err // Default branch only updated if changed and exist or the repository is empty updateRepoLicense := false if opts.DefaultBranch != nil && repo.DefaultBranch != *opts.DefaultBranch && (repo.IsEmpty || gitrepo.IsBranchExist(ctx, ctx.Repo.Repository, *opts.DefaultBranch)) { + repo.DefaultBranch = *opts.DefaultBranch if !repo.IsEmpty { - if err := gitrepo.SetDefaultBranch(ctx, ctx.Repo.Repository, *opts.DefaultBranch); err != nil { + if err := gitrepo.SetDefaultBranchForRepo(ctx, repo); err != nil { ctx.APIErrorInternal(err) return err } updateRepoLicense = true } - repo.DefaultBranch = *opts.DefaultBranch } if err := repo_service.UpdateRepository(ctx, repo, visibilityChanged); err != nil { diff --git a/routers/private/default_branch.go b/routers/private/default_branch.go index c375d70dc6f2b..4ba002d014547 100644 --- a/routers/private/default_branch.go +++ b/routers/private/default_branch.go @@ -21,7 +21,7 @@ func SetDefaultBranch(ctx *gitea_context.PrivateContext) { branch := ctx.PathParam("branch") ctx.Repo.Repository.DefaultBranch = branch - if err := gitrepo.SetDefaultBranch(ctx, ctx.Repo.Repository, ctx.Repo.Repository.DefaultBranch); err != nil { + if err := gitrepo.SetDefaultBranchForRepo(ctx, ctx.Repo.Repository); err != nil { ctx.JSON(http.StatusInternalServerError, private.Response{ Err: fmt.Sprintf("Unable to set default branch on repository: %s/%s Error: %v", ownerName, repoName, err), }) diff --git a/services/mirror/mirror_pull.go b/services/mirror/mirror_pull.go index 658747e7c83f1..53f50003cdaab 100644 --- a/services/mirror/mirror_pull.go +++ b/services/mirror/mirror_pull.go @@ -629,7 +629,7 @@ func checkAndUpdateEmptyRepository(ctx context.Context, m *repo_model.Mirror, re m.Repo.DefaultBranch = firstName } // Update the git repository default branch - if err := gitrepo.SetDefaultBranch(ctx, m.Repo, m.Repo.DefaultBranch); err != nil { + if err := gitrepo.SetDefaultBranchForRepo(ctx, m.Repo); err != nil { log.Error("Failed to update default branch of underlying git repository %-v. Error: %v", m.Repo, err) return false } diff --git a/services/repository/adopt.go b/services/repository/adopt.go index ea4f9a1920234..75e4a30adefa7 100644 --- a/services/repository/adopt.go +++ b/services/repository/adopt.go @@ -124,14 +124,14 @@ func adoptRepository(ctx context.Context, repo *repo_model.Repository, defaultBr if len(defaultBranch) > 0 { repo.DefaultBranch = defaultBranch - if err = gitrepo.SetDefaultBranch(ctx, repo, repo.DefaultBranch); err != nil { + if err = gitrepo.SetDefaultBranchForRepo(ctx, repo); err != nil { return fmt.Errorf("setDefaultBranch: %w", err) } } else { repo.DefaultBranch, err = gitrepo.GetDefaultBranch(ctx, repo) if err != nil { repo.DefaultBranch = setting.Repository.DefaultBranch - if err = gitrepo.SetDefaultBranch(ctx, repo, repo.DefaultBranch); err != nil { + if err = gitrepo.SetDefaultBranchForRepo(ctx, repo); err != nil { return fmt.Errorf("setDefaultBranch: %w", err) } } @@ -188,7 +188,7 @@ func adoptRepository(ctx context.Context, repo *repo_model.Repository, defaultBr repo.DefaultBranch = setting.Repository.DefaultBranch } - if err = gitrepo.SetDefaultBranch(ctx, repo, repo.DefaultBranch); err != nil { + if err = gitrepo.SetDefaultBranchForRepo(ctx, repo); err != nil { return fmt.Errorf("setDefaultBranch: %w", err) } } diff --git a/services/repository/branch.go b/services/repository/branch.go index 8804778bd5ebb..fa0574119031c 100644 --- a/services/repository/branch.go +++ b/services/repository/branch.go @@ -463,7 +463,8 @@ func RenameBranch(ctx context.Context, repo *repo_model.Repository, doer *user_m log.Error("CancelPreviousJobs: %v", err) } - err2 = gitrepo.SetDefaultBranch(ctx, repo, to) + // repo's default branch has been updated in git_model.RenameBranch + err2 = gitrepo.SetDefaultBranchForRepo(ctx, repo) if err2 != nil { return err2 } @@ -650,7 +651,7 @@ func SetRepoDefaultBranch(ctx context.Context, repo *repo_model.Repository, newB log.Error("CancelPreviousJobs: %v", err) } - return gitrepo.SetDefaultBranch(ctx, repo, newBranchName) + return gitrepo.SetDefaultBranchForRepo(ctx, repo) }); err != nil { return err } diff --git a/services/repository/create.go b/services/repository/create.go index 1a6a68b35aec5..3af9efe1e40ee 100644 --- a/services/repository/create.go +++ b/services/repository/create.go @@ -181,7 +181,7 @@ func initRepository(ctx context.Context, u *user_model.User, repo *repo_model.Re if len(opts.DefaultBranch) > 0 { repo.DefaultBranch = opts.DefaultBranch - if err = gitrepo.SetDefaultBranch(ctx, repo, repo.DefaultBranch); err != nil { + if err = gitrepo.SetDefaultBranchForRepo(ctx, repo); err != nil { return fmt.Errorf("setDefaultBranch: %w", err) } diff --git a/services/repository/generate.go b/services/repository/generate.go index 9d2bbb1f7fbea..b61139ea00479 100644 --- a/services/repository/generate.go +++ b/services/repository/generate.go @@ -281,7 +281,7 @@ func generateGitContent(ctx context.Context, repo, templateRepo, generateRepo *r repo.DefaultBranch = templateRepo.DefaultBranch } - if err = gitrepo.SetDefaultBranch(ctx, repo, repo.DefaultBranch); err != nil { + if err = gitrepo.SetDefaultBranchForRepo(ctx, repo); err != nil { return fmt.Errorf("setDefaultBranch: %w", err) } if err = UpdateRepository(ctx, repo, false); err != nil { diff --git a/services/repository/push.go b/services/repository/push.go index c40333f0a8b76..b3ccb6cf542a3 100644 --- a/services/repository/push.go +++ b/services/repository/push.go @@ -185,7 +185,7 @@ func pushUpdates(optsList []*repo_module.PushUpdateOptions) error { repo.DefaultBranch = refName repo.IsEmpty = false if repo.DefaultBranch != setting.Repository.DefaultBranch { - if err := gitrepo.SetDefaultBranch(ctx, repo, repo.DefaultBranch); err != nil { + if err := gitrepo.SetDefaultBranchForRepo(ctx, repo); err != nil { return err } } diff --git a/services/wiki/wiki.go b/services/wiki/wiki.go index a3fe07927d9cd..eb4a5acae708f 100644 --- a/services/wiki/wiki.go +++ b/services/wiki/wiki.go @@ -43,7 +43,7 @@ func InitWiki(ctx context.Context, repo *repo_model.Repository) error { return fmt.Errorf("InitRepository: %w", err) } else if err = gitrepo.CreateDelegateHooksForWiki(ctx, repo); err != nil { return fmt.Errorf("createDelegateHooks: %w", err) - } else if _, _, err = git.NewCommand("symbolic-ref", "HEAD").AddDynamicArguments(git.BranchPrefix+repo.DefaultWikiBranch).RunStdString(ctx, &git.RunOpts{Dir: repo.WikiPath()}); err != nil { + } else if err = gitrepo.SetDefaultBranchForWiki(ctx, repo); err != nil { return fmt.Errorf("unable to set default wiki branch to %q: %w", repo.DefaultWikiBranch, err) } return nil