Move get/set default branch from git package to gitrepo package to hide repopath (#29126)
(cherry picked from commit 25b842df261452a29570ba89ffc3a4842d73f68c) Conflicts: routers/web/repo/wiki.go services/repository/branch.go services/repository/migrate.go services/wiki/wiki.go also apply to Forgejo specific usage of the refactored functions
This commit is contained in:
		
							parent
							
								
									6cb9e8d869
								
							
						
					
					
						commit
						3d9afe8813
					
				
					 16 changed files with 49 additions and 49 deletions
				
			
		| 
						 | 
				
			
			@ -909,12 +909,7 @@ func PullRequestCodeOwnersReview(ctx context.Context, pull *Issue, pr *PullReque
 | 
			
		|||
	}
 | 
			
		||||
	defer repo.Close()
 | 
			
		||||
 | 
			
		||||
	branch, err := repo.GetDefaultBranch()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	commit, err := repo.GetBranchCommit(branch)
 | 
			
		||||
	commit, err := repo.GetBranchCommit(pr.BaseRepo.DefaultBranch)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -55,15 +55,8 @@ func (repo *Repository) GetHEADBranch() (*Branch, error) {
 | 
			
		|||
	}, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// SetDefaultBranch sets default branch of repository.
 | 
			
		||||
func (repo *Repository) SetDefaultBranch(name string) error {
 | 
			
		||||
	_, _, err := NewCommand(repo.Ctx, "symbolic-ref", "HEAD").AddDynamicArguments(BranchPrefix + name).RunStdString(&RunOpts{Dir: repo.Path})
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetDefaultBranch gets default branch of repository.
 | 
			
		||||
func (repo *Repository) GetDefaultBranch() (string, error) {
 | 
			
		||||
	stdout, _, err := NewCommand(repo.Ctx, "symbolic-ref", "HEAD").RunStdString(&RunOpts{Dir: repo.Path})
 | 
			
		||||
func GetDefaultBranch(ctx context.Context, repoPath string) (string, error) {
 | 
			
		||||
	stdout, _, err := NewCommand(ctx, "symbolic-ref", "HEAD").RunStdString(&RunOpts{Dir: repoPath})
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return "", err
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,3 +30,20 @@ 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 {
 | 
			
		||||
	_, _, err := git.NewCommand(ctx, "symbolic-ref", "HEAD").
 | 
			
		||||
		AddDynamicArguments(git.BranchPrefix + name).
 | 
			
		||||
		RunStdString(&git.RunOpts{Dir: repoPath(repo)})
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetDefaultBranch gets default branch of repository.
 | 
			
		||||
func GetDefaultBranch(ctx context.Context, repo Repository) (string, error) {
 | 
			
		||||
	return git.GetDefaultBranch(ctx, repoPath(repo))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func GetWikiDefaultBranch(ctx context.Context, repo Repository) (string, error) {
 | 
			
		||||
	return git.GetDefaultBranch(ctx, wikiPath(repo))
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -720,7 +720,7 @@ func updateBasicProperties(ctx *context.APIContext, opts api.EditRepoOption) err
 | 
			
		|||
 | 
			
		||||
	if ctx.Repo.GitRepo == nil && !repo.IsEmpty {
 | 
			
		||||
		var err error
 | 
			
		||||
		ctx.Repo.GitRepo, err = gitrepo.OpenRepository(ctx, ctx.Repo.Repository)
 | 
			
		||||
		ctx.Repo.GitRepo, err = gitrepo.OpenRepository(ctx, repo)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			ctx.Error(http.StatusInternalServerError, "Unable to OpenRepository", err)
 | 
			
		||||
			return err
 | 
			
		||||
| 
						 | 
				
			
			@ -731,7 +731,7 @@ func updateBasicProperties(ctx *context.APIContext, opts api.EditRepoOption) err
 | 
			
		|||
	// Default branch only updated if changed and exist or the repository is empty
 | 
			
		||||
	if opts.DefaultBranch != nil && repo.DefaultBranch != *opts.DefaultBranch && (repo.IsEmpty || ctx.Repo.GitRepo.IsBranchExist(*opts.DefaultBranch)) {
 | 
			
		||||
		if !repo.IsEmpty {
 | 
			
		||||
			if err := ctx.Repo.GitRepo.SetDefaultBranch(*opts.DefaultBranch); err != nil {
 | 
			
		||||
			if err := gitrepo.SetDefaultBranch(ctx, ctx.Repo.Repository, *opts.DefaultBranch); err != nil {
 | 
			
		||||
				if !git.IsErrUnsupportedVersion(err) {
 | 
			
		||||
					ctx.Error(http.StatusInternalServerError, "SetDefaultBranch", err)
 | 
			
		||||
					return err
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,6 +9,7 @@ import (
 | 
			
		|||
 | 
			
		||||
	repo_model "code.gitea.io/gitea/models/repo"
 | 
			
		||||
	"code.gitea.io/gitea/modules/git"
 | 
			
		||||
	"code.gitea.io/gitea/modules/gitrepo"
 | 
			
		||||
	"code.gitea.io/gitea/modules/private"
 | 
			
		||||
	gitea_context "code.gitea.io/gitea/services/context"
 | 
			
		||||
)
 | 
			
		||||
| 
						 | 
				
			
			@ -20,7 +21,7 @@ func SetDefaultBranch(ctx *gitea_context.PrivateContext) {
 | 
			
		|||
	branch := ctx.Params(":branch")
 | 
			
		||||
 | 
			
		||||
	ctx.Repo.Repository.DefaultBranch = branch
 | 
			
		||||
	if err := ctx.Repo.GitRepo.SetDefaultBranch(ctx.Repo.Repository.DefaultBranch); err != nil {
 | 
			
		||||
	if err := gitrepo.SetDefaultBranch(ctx, ctx.Repo.Repository, ctx.Repo.Repository.DefaultBranch); err != nil {
 | 
			
		||||
		if !git.IsErrUnsupportedVersion(err) {
 | 
			
		||||
			ctx.JSON(http.StatusInternalServerError, private.Response{
 | 
			
		||||
				Err: fmt.Sprintf("Unable to set default branch on repository: %s/%s Error: %v", ownerName, repoName, err),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,6 +8,7 @@ import (
 | 
			
		|||
 | 
			
		||||
	repo_model "code.gitea.io/gitea/models/repo"
 | 
			
		||||
	"code.gitea.io/gitea/modules/git"
 | 
			
		||||
	"code.gitea.io/gitea/modules/gitrepo"
 | 
			
		||||
	"code.gitea.io/gitea/modules/log"
 | 
			
		||||
	"code.gitea.io/gitea/modules/setting"
 | 
			
		||||
	"code.gitea.io/gitea/routers/web/repo"
 | 
			
		||||
| 
						 | 
				
			
			@ -40,7 +41,7 @@ func SetDefaultBranchPost(ctx *context.Context) {
 | 
			
		|||
			return
 | 
			
		||||
		} else if repo.DefaultBranch != branch {
 | 
			
		||||
			repo.DefaultBranch = branch
 | 
			
		||||
			if err := ctx.Repo.GitRepo.SetDefaultBranch(branch); err != nil {
 | 
			
		||||
			if err := gitrepo.SetDefaultBranch(ctx, repo, branch); err != nil {
 | 
			
		||||
				if !git.IsErrUnsupportedVersion(err) {
 | 
			
		||||
					ctx.ServerError("SetDefaultBranch", err)
 | 
			
		||||
					return
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -36,6 +36,7 @@ import (
 | 
			
		|||
	"code.gitea.io/gitea/modules/base"
 | 
			
		||||
	"code.gitea.io/gitea/modules/charset"
 | 
			
		||||
	"code.gitea.io/gitea/modules/git"
 | 
			
		||||
	"code.gitea.io/gitea/modules/gitrepo"
 | 
			
		||||
	"code.gitea.io/gitea/modules/highlight"
 | 
			
		||||
	"code.gitea.io/gitea/modules/lfs"
 | 
			
		||||
	"code.gitea.io/gitea/modules/log"
 | 
			
		||||
| 
						 | 
				
			
			@ -1073,7 +1074,7 @@ func renderCode(ctx *context.Context) {
 | 
			
		|||
			if err != nil {
 | 
			
		||||
				continue
 | 
			
		||||
			}
 | 
			
		||||
			defaultBranch, err := gitRepo.GetDefaultBranch()
 | 
			
		||||
			defaultBranch, err := gitrepo.GetDefaultBranch(ctx, repo)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				continue
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -702,7 +702,7 @@ func RepoAssignment(ctx *Context) context.CancelFunc {
 | 
			
		|||
		if len(ctx.Repo.Repository.DefaultBranch) > 0 && gitRepo.IsBranchExist(ctx.Repo.Repository.DefaultBranch) {
 | 
			
		||||
			ctx.Repo.BranchName = ctx.Repo.Repository.DefaultBranch
 | 
			
		||||
		} else {
 | 
			
		||||
			ctx.Repo.BranchName, _ = gitRepo.GetDefaultBranch()
 | 
			
		||||
			ctx.Repo.BranchName, _ = gitrepo.GetDefaultBranch(ctx, ctx.Repo.Repository)
 | 
			
		||||
			if ctx.Repo.BranchName == "" {
 | 
			
		||||
				// If it still can't get a default branch, fall back to default branch from setting.
 | 
			
		||||
				// Something might be wrong. Either site admin should fix the repo sync or Gitea should fix a potential bug.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -593,7 +593,7 @@ func checkAndUpdateEmptyRepository(ctx context.Context, m *repo_model.Mirror, gi
 | 
			
		|||
			m.Repo.DefaultBranch = firstName
 | 
			
		||||
		}
 | 
			
		||||
		// Update the git repository default branch
 | 
			
		||||
		if err := gitRepo.SetDefaultBranch(m.Repo.DefaultBranch); err != nil {
 | 
			
		||||
		if err := gitrepo.SetDefaultBranch(ctx, m.Repo, m.Repo.DefaultBranch); err != nil {
 | 
			
		||||
			if !git.IsErrUnsupportedVersion(err) {
 | 
			
		||||
				log.Error("Failed to update default branch of underlying git repository %-v. Error: %v", m.Repo, err)
 | 
			
		||||
				desc := fmt.Sprintf("Failed to update default branch of underlying git repository '%s': %v", m.Repo.RepoPath(), err)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -127,24 +127,17 @@ func adoptRepository(ctx context.Context, repoPath string, u *user_model.User, r
 | 
			
		|||
 | 
			
		||||
	repo.IsEmpty = false
 | 
			
		||||
 | 
			
		||||
	// Don't bother looking this repo in the context it won't be there
 | 
			
		||||
	gitRepo, err := gitrepo.OpenRepository(ctx, repo)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return fmt.Errorf("openRepository: %w", err)
 | 
			
		||||
	}
 | 
			
		||||
	defer gitRepo.Close()
 | 
			
		||||
 | 
			
		||||
	if len(defaultBranch) > 0 {
 | 
			
		||||
		repo.DefaultBranch = defaultBranch
 | 
			
		||||
 | 
			
		||||
		if err = gitRepo.SetDefaultBranch(repo.DefaultBranch); err != nil {
 | 
			
		||||
		if err = gitrepo.SetDefaultBranch(ctx, repo, repo.DefaultBranch); err != nil {
 | 
			
		||||
			return fmt.Errorf("setDefaultBranch: %w", err)
 | 
			
		||||
		}
 | 
			
		||||
	} else {
 | 
			
		||||
		repo.DefaultBranch, err = gitRepo.GetDefaultBranch()
 | 
			
		||||
		repo.DefaultBranch, err = gitrepo.GetDefaultBranch(ctx, repo)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			repo.DefaultBranch = setting.Repository.DefaultBranch
 | 
			
		||||
			if err = gitRepo.SetDefaultBranch(repo.DefaultBranch); err != nil {
 | 
			
		||||
			if err = gitrepo.SetDefaultBranch(ctx, repo, repo.DefaultBranch); err != nil {
 | 
			
		||||
				return fmt.Errorf("setDefaultBranch: %w", err)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -188,7 +181,7 @@ func adoptRepository(ctx context.Context, repoPath string, u *user_model.User, r
 | 
			
		|||
			repo.DefaultBranch = setting.Repository.DefaultBranch
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if err = gitRepo.SetDefaultBranch(repo.DefaultBranch); err != nil {
 | 
			
		||||
		if err = gitrepo.SetDefaultBranch(ctx, repo, repo.DefaultBranch); err != nil {
 | 
			
		||||
			return fmt.Errorf("setDefaultBranch: %w", err)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -197,6 +190,13 @@ func adoptRepository(ctx context.Context, repoPath string, u *user_model.User, r
 | 
			
		|||
		return fmt.Errorf("updateRepository: %w", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Don't bother looking this repo in the context it won't be there
 | 
			
		||||
	gitRepo, err := gitrepo.OpenRepository(ctx, repo)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return fmt.Errorf("openRepository: %w", err)
 | 
			
		||||
	}
 | 
			
		||||
	defer gitRepo.Close()
 | 
			
		||||
 | 
			
		||||
	if err = repo_module.SyncReleasesWithTags(ctx, repo, gitRepo); err != nil {
 | 
			
		||||
		return fmt.Errorf("SyncReleasesWithTags: %w", err)
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -317,7 +317,7 @@ func RenameBranch(ctx context.Context, repo *repo_model.Repository, doer *user_m
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		if isDefault {
 | 
			
		||||
			err2 = gitRepo.SetDefaultBranch(to)
 | 
			
		||||
			err2 = gitrepo.SetDefaultBranch(ctx, repo, to)
 | 
			
		||||
			if err2 != nil {
 | 
			
		||||
				return err2
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -177,12 +177,7 @@ func initRepository(ctx context.Context, repoPath string, u *user_model.User, re
 | 
			
		|||
 | 
			
		||||
	if len(opts.DefaultBranch) > 0 {
 | 
			
		||||
		repo.DefaultBranch = opts.DefaultBranch
 | 
			
		||||
		gitRepo, err := gitrepo.OpenRepository(ctx, repo)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return fmt.Errorf("openRepository: %w", err)
 | 
			
		||||
		}
 | 
			
		||||
		defer gitRepo.Close()
 | 
			
		||||
		if err = gitRepo.SetDefaultBranch(repo.DefaultBranch); err != nil {
 | 
			
		||||
		if err = gitrepo.SetDefaultBranch(ctx, repo, repo.DefaultBranch); err != nil {
 | 
			
		||||
			return fmt.Errorf("setDefaultBranch: %w", err)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -272,12 +272,7 @@ func generateGitContent(ctx context.Context, repo, templateRepo, generateRepo *r
 | 
			
		|||
		repo.DefaultBranch = templateRepo.DefaultBranch
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	gitRepo, err := gitrepo.OpenRepository(ctx, repo)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return fmt.Errorf("openRepository: %w", err)
 | 
			
		||||
	}
 | 
			
		||||
	defer gitRepo.Close()
 | 
			
		||||
	if err = gitRepo.SetDefaultBranch(repo.DefaultBranch); 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 {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,6 +16,7 @@ import (
 | 
			
		|||
	repo_model "code.gitea.io/gitea/models/repo"
 | 
			
		||||
	user_model "code.gitea.io/gitea/models/user"
 | 
			
		||||
	"code.gitea.io/gitea/modules/git"
 | 
			
		||||
	"code.gitea.io/gitea/modules/gitrepo"
 | 
			
		||||
	"code.gitea.io/gitea/modules/lfs"
 | 
			
		||||
	"code.gitea.io/gitea/modules/log"
 | 
			
		||||
	"code.gitea.io/gitea/modules/migration"
 | 
			
		||||
| 
						 | 
				
			
			@ -97,7 +98,7 @@ func MigrateRepositoryGitData(ctx context.Context, u *user_model.User,
 | 
			
		|||
				}
 | 
			
		||||
				defer gitRepo.Close()
 | 
			
		||||
 | 
			
		||||
				branch, err := gitRepo.GetDefaultBranch()
 | 
			
		||||
				branch, err := gitrepo.GetDefaultBranch(ctx, repo)
 | 
			
		||||
				if err != nil {
 | 
			
		||||
					log.Warn("Failed to get the default branch of a migrated wiki repo: %v", err)
 | 
			
		||||
					if err := util.RemoveAll(wikiPath); err != nil {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -183,7 +183,7 @@ func pushUpdates(optsList []*repo_module.PushUpdateOptions) error {
 | 
			
		|||
						repo.DefaultBranch = refName
 | 
			
		||||
						repo.IsEmpty = false
 | 
			
		||||
						if repo.DefaultBranch != setting.Repository.DefaultBranch {
 | 
			
		||||
							if err := gitRepo.SetDefaultBranch(repo.DefaultBranch); err != nil {
 | 
			
		||||
							if err := gitrepo.SetDefaultBranch(ctx, repo, repo.DefaultBranch); err != nil {
 | 
			
		||||
								if !git.IsErrUnsupportedVersion(err) {
 | 
			
		||||
									return err
 | 
			
		||||
								}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,6 +16,7 @@ import (
 | 
			
		|||
	"code.gitea.io/gitea/models/unit"
 | 
			
		||||
	user_model "code.gitea.io/gitea/models/user"
 | 
			
		||||
	"code.gitea.io/gitea/modules/git"
 | 
			
		||||
	"code.gitea.io/gitea/modules/gitrepo"
 | 
			
		||||
	"code.gitea.io/gitea/modules/log"
 | 
			
		||||
	repo_module "code.gitea.io/gitea/modules/repository"
 | 
			
		||||
	"code.gitea.io/gitea/modules/sync"
 | 
			
		||||
| 
						 | 
				
			
			@ -87,7 +88,7 @@ func NormalizeWikiBranch(ctx context.Context, repo *repo_model.Repository, to st
 | 
			
		|||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if err := gitRepo.SetDefaultBranch(to); err != nil {
 | 
			
		||||
	if err := gitrepo.SetDefaultBranch(ctx, repo, to); err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue