diff --git a/models/repo/repo.go b/models/repo/repo.go index d0dc37572f..a8732f60bf 100644 --- a/models/repo/repo.go +++ b/models/repo/repo.go @@ -220,33 +220,19 @@ func RelativePath(ownerName, repoName string) string { } // RelativePath should be an unix style path like username/reponame.git -func (repo *Repository) GetRelativePath() string { +func (repo *Repository) RelativePath() string { return RelativePath(repo.OwnerName, repo.Name) } -func (repo *Repository) GetDefaultBranch() string { - return repo.DefaultBranch -} - -type StorageRepo struct { - RelativePath string - DefaultBranch string -} +type StorageRepo string // RelativePath should be an unix style path like username/reponame.git -func (sr StorageRepo) GetRelativePath() string { - return sr.RelativePath -} - -func (sr StorageRepo) GetDefaultBranch() string { - return sr.DefaultBranch +func (sr StorageRepo) RelativePath() string { + return string(sr) } func (repo *Repository) WikiStorageRepo() StorageRepo { - return StorageRepo{ - RelativePath: strings.ToLower(repo.OwnerName) + "/" + strings.ToLower(repo.Name) + ".wiki.git", - DefaultBranch: repo.DefaultWikiBranch, - } + return StorageRepo(strings.ToLower(repo.OwnerName) + "/" + strings.ToLower(repo.Name) + ".wiki.git") } // SanitizedOriginalURL returns a sanitized OriginalURL diff --git a/modules/gitrepo/branch.go b/modules/gitrepo/branch.go index c7550cc0cd..7643787b91 100644 --- a/modules/gitrepo/branch.go +++ b/modules/gitrepo/branch.go @@ -32,9 +32,9 @@ func GetBranchCommitID(ctx context.Context, repo Repository, branch string) (str } // SetDefaultBranch sets default branch of repository. -func SetDefaultBranch(ctx context.Context, repo Repository) error { +func SetDefaultBranch(ctx context.Context, repo Repository, defaultBranch string) error { _, _, err := git.NewCommand("symbolic-ref", "HEAD"). - AddDynamicArguments(git.BranchPrefix+repo.GetDefaultBranch()). + AddDynamicArguments(git.BranchPrefix+defaultBranch). RunStdString(ctx, &git.RunOpts{Dir: repoPath(repo)}) return err } diff --git a/modules/gitrepo/gitrepo.go b/modules/gitrepo/gitrepo.go index c0363a88e9..5da65e2452 100644 --- a/modules/gitrepo/gitrepo.go +++ b/modules/gitrepo/gitrepo.go @@ -17,14 +17,13 @@ import ( // Repository represents a git repository which stored in a disk type Repository interface { - GetRelativePath() string // We don't assume how the directory structure of the repository is, so we only need the relative path - GetDefaultBranch() string + RelativePath() string // We don't assume how the directory structure of the repository is, so we only need the relative path } // RelativePath should be an unix style path like username/reponame.git // This method should change it according to the current OS. func repoPath(repo Repository) string { - return filepath.Join(setting.RepoRootPath, filepath.FromSlash(repo.GetRelativePath())) + return filepath.Join(setting.RepoRootPath, filepath.FromSlash(repo.RelativePath())) } // OpenRepository opens the repository at the given relative path with the provided context. diff --git a/routers/api/v1/repo/repo.go b/routers/api/v1/repo/repo.go index 037215364c..787ca2672d 100644 --- a/routers/api/v1/repo/repo.go +++ b/routers/api/v1/repo/repo.go @@ -737,7 +737,7 @@ func updateBasicProperties(ctx *context.APIContext, opts api.EditRepoOption) err 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, repo); err != nil { + if err := gitrepo.SetDefaultBranch(ctx, repo, repo.DefaultBranch); err != nil { ctx.APIErrorInternal(err) return err } diff --git a/routers/private/default_branch.go b/routers/private/default_branch.go index 2066fb267d..27311c900f 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); err != nil { + if err := gitrepo.SetDefaultBranch(ctx, ctx.Repo.Repository, branch); 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 cc2d0a8a11..fa5b9934ec 100644 --- a/services/mirror/mirror_pull.go +++ b/services/mirror/mirror_pull.go @@ -647,7 +647,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); err != nil { + if err := gitrepo.SetDefaultBranch(ctx, m.Repo, m.Repo.DefaultBranch); 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 b8a719dc26..b7321156d9 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); err != nil { + if err = gitrepo.SetDefaultBranch(ctx, repo, repo.DefaultBranch); 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); err != nil { + if err = gitrepo.SetDefaultBranch(ctx, repo, repo.DefaultBranch); 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); err != nil { + if err = gitrepo.SetDefaultBranch(ctx, repo, repo.DefaultBranch); err != nil { return fmt.Errorf("setDefaultBranch: %w", err) } } diff --git a/services/repository/branch.go b/services/repository/branch.go index b870bbd54b..8b9f4dc290 100644 --- a/services/repository/branch.go +++ b/services/repository/branch.go @@ -464,7 +464,7 @@ func RenameBranch(ctx context.Context, repo *repo_model.Repository, doer *user_m } // repo's default branch has been updated in git_model.RenameBranch - err2 = gitrepo.SetDefaultBranch(ctx, repo) + err2 = gitrepo.SetDefaultBranch(ctx, repo, repo.DefaultBranch) if err2 != nil { return err2 } @@ -651,7 +651,7 @@ func SetRepoDefaultBranch(ctx context.Context, repo *repo_model.Repository, newB log.Error("CancelPreviousJobs: %v", err) } - return gitrepo.SetDefaultBranch(ctx, repo) + return gitrepo.SetDefaultBranch(ctx, repo, repo.DefaultBranch) }); err != nil { return err } diff --git a/services/repository/create.go b/services/repository/create.go index 1b8e199569..1a6a68b35a 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); err != nil { + if err = gitrepo.SetDefaultBranch(ctx, repo, repo.DefaultBranch); err != nil { return fmt.Errorf("setDefaultBranch: %w", err) } diff --git a/services/repository/generate.go b/services/repository/generate.go index 1263621e40..9d2bbb1f7f 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); err != nil { + if err = gitrepo.SetDefaultBranch(ctx, repo, repo.DefaultBranch); 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 e6cf0e0b1a..6d3b9dd252 100644 --- a/services/repository/push.go +++ b/services/repository/push.go @@ -278,7 +278,7 @@ func pushNewBranch(ctx context.Context, repo *repo_model.Repository, pusher *use repo.DefaultBranch = opts.RefName() repo.IsEmpty = false if repo.DefaultBranch != setting.Repository.DefaultBranch { - if err := gitrepo.SetDefaultBranch(ctx, repo); err != nil { + if err := gitrepo.SetDefaultBranch(ctx, repo, repo.DefaultBranch); err != nil { return nil, err } } diff --git a/services/repository/transfer.go b/services/repository/transfer.go index 6ce8c51f39..b63dd97a9b 100644 --- a/services/repository/transfer.go +++ b/services/repository/transfer.go @@ -337,10 +337,8 @@ func changeRepositoryName(ctx context.Context, repo *repo_model.Repository, newR } if err = gitrepo.RenameRepository(ctx, repo, - repo_model.StorageRepo{ - RelativePath: repo_model.RelativePath(repo.OwnerName, newRepoName), - DefaultBranch: repo.DefaultBranch, - }); err != nil { + repo_model.StorageRepo(repo_model.RelativePath(repo.OwnerName, newRepoName)), + ); err != nil { return fmt.Errorf("rename repository directory: %w", err) } diff --git a/services/wiki/wiki.go b/services/wiki/wiki.go index a6cebb3fdb..4cc372c70d 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.CreateDelegateHooks(ctx, repo.WikiStorageRepo()); err != nil { return fmt.Errorf("createDelegateHooks: %w", err) - } else if err = gitrepo.SetDefaultBranch(ctx, repo.WikiStorageRepo()); err != nil { + } else if err = gitrepo.SetDefaultBranch(ctx, repo.WikiStorageRepo(), repo.DefaultWikiBranch); err != nil { return fmt.Errorf("unable to set default wiki branch to %q: %w", repo.DefaultWikiBranch, err) } return nil