mirror of
https://github.com/go-gitea/gitea.git
synced 2026-08-05 15:56:19 +00:00
refactor: remove Path field from git.Repository (#38552)
The "path" details should be hidden to other packages By the way, fix a resource leaking in gogit's CommitNodeIndex (the file was not closed in CacheCommit)
This commit is contained in:
@@ -1359,7 +1359,7 @@ func getDiffBasic(ctx context.Context, gitRepo *git.Repository, opts *DiffOption
|
||||
if err := cmdDiff.
|
||||
WithRepo(gitRepo).
|
||||
RunWithStderr(cmdCtx); err != nil && !gitcmd.IsErrorCanceledOrKilled(err) {
|
||||
log.Error("error during GetDiff(git diff dir: %s): %v", gitRepo.Path, err)
|
||||
log.Error("error during GetDiff(git diff dir: %s): %v", gitRepo.LogString(), err)
|
||||
}
|
||||
}()
|
||||
|
||||
@@ -1530,7 +1530,7 @@ func SyncUserSpecificDiff(ctx context.Context, userID int64, pull *issues_model.
|
||||
// For SOME of the errors such as the gc'ed commit, it would be best to mark all files as changed
|
||||
// But as that does not work for all potential errors, we simply mark all files as unchanged and drop the error which always works, even if not as good as possible
|
||||
if errIgnored != nil {
|
||||
log.Error("Could not get changed files between %s and %s for pull request %d in repo with path %s. Assuming no changes. Error: %w", review.CommitSHA, latestCommit, pull.Index, gitRepo.Path, err)
|
||||
log.Error("Could not get changed files between %s and %s for pull request %d in repo with path %s. Assuming no changes. Error: %w", review.CommitSHA, latestCommit, pull.Index, gitRepo.LogString(), err)
|
||||
}
|
||||
changedFilesSet := make(map[string]struct{}, len(changedFiles))
|
||||
for _, changedFile := range changedFiles {
|
||||
|
||||
+24
-18
@@ -136,8 +136,11 @@ func (g *RepositoryDumper) CreateRepo(ctx context.Context, repo *base.Repository
|
||||
return err
|
||||
}
|
||||
|
||||
repoPath := g.gitPath()
|
||||
if err := os.MkdirAll(repoPath, os.ModePerm); err != nil {
|
||||
repoAbsPath, err := filepath.Abs(g.gitPath())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if err := os.MkdirAll(repoAbsPath, os.ModePerm); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -148,39 +151,42 @@ func (g *RepositoryDumper) CreateRepo(ctx context.Context, repo *base.Repository
|
||||
return err
|
||||
}
|
||||
|
||||
err = git.Clone(ctx, remoteAddr, repoPath, git.CloneRepoOptions{
|
||||
err = git.Clone(ctx, remoteAddr, repoAbsPath, git.CloneRepoOptions{
|
||||
Mirror: true,
|
||||
Quiet: true,
|
||||
Timeout: migrateTimeout,
|
||||
SkipTLSVerify: setting.Migrations.SkipTLSVerify,
|
||||
})
|
||||
if err != nil {
|
||||
return fmt.Errorf("Clone: %w", err)
|
||||
return fmt.Errorf("clone code: %w", err)
|
||||
}
|
||||
|
||||
repoLocal := gitcmd.RepositoryUnmanaged(repoPath)
|
||||
repoLocal := gitcmd.RepositoryUnmanaged(repoAbsPath)
|
||||
if err := git.WriteCommitGraph(ctx, repoLocal); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if opts.Wiki {
|
||||
wikiPath := g.wikiPath()
|
||||
wikiAbsPath, err := filepath.Abs(g.wikiPath())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
wikiRemotePath := repository.WikiRemoteURL(ctx, remoteAddr)
|
||||
if len(wikiRemotePath) > 0 {
|
||||
if err := os.MkdirAll(wikiPath, os.ModePerm); err != nil {
|
||||
return fmt.Errorf("Failed to remove %s: %w", wikiPath, err)
|
||||
if err := os.MkdirAll(wikiAbsPath, os.ModePerm); err != nil {
|
||||
return fmt.Errorf("failed to create %s: %w", wikiAbsPath, err)
|
||||
}
|
||||
wikiLocal := gitcmd.RepositoryUnmanaged(wikiPath)
|
||||
if err := git.Clone(ctx, wikiRemotePath, wikiPath, git.CloneRepoOptions{
|
||||
wikiLocal := gitcmd.RepositoryUnmanaged(wikiAbsPath)
|
||||
if err := git.Clone(ctx, wikiRemotePath, wikiAbsPath, git.CloneRepoOptions{
|
||||
Mirror: true,
|
||||
Quiet: true,
|
||||
Timeout: migrateTimeout,
|
||||
Branch: "master",
|
||||
SkipTLSVerify: setting.Migrations.SkipTLSVerify,
|
||||
}); err != nil {
|
||||
log.Warn("Clone wiki: %v", err)
|
||||
if err := os.RemoveAll(wikiPath); err != nil {
|
||||
return fmt.Errorf("Failed to remove %s: %w", wikiPath, err)
|
||||
log.Warn("Failed to clone wiki: %v", err)
|
||||
if err := os.RemoveAll(wikiAbsPath); err != nil {
|
||||
return fmt.Errorf("failed to remove %s: %w", wikiAbsPath, err)
|
||||
}
|
||||
} else if err := git.WriteCommitGraph(ctx, wikiLocal); err != nil {
|
||||
return err
|
||||
@@ -188,7 +194,7 @@ func (g *RepositoryDumper) CreateRepo(ctx context.Context, repo *base.Repository
|
||||
}
|
||||
}
|
||||
|
||||
g.gitRepo, err = git.OpenRepositoryLocal(g.gitPath())
|
||||
g.gitRepo, err = git.OpenRepositoryLocal(repoAbsPath)
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -502,7 +508,7 @@ func (g *RepositoryDumper) handlePullRequest(ctx context.Context, pr *base.PullR
|
||||
if pr.Head.CloneURL == "" || pr.Head.Ref == "" {
|
||||
// Set head information if pr.Head.SHA is available
|
||||
if pr.Head.SHA != "" {
|
||||
_, _, err = gitcmd.NewCommand("update-ref", "--no-deref").AddDynamicArguments(pr.GetGitHeadRefName(), pr.Head.SHA).WithDir(g.gitPath()).RunStdString(ctx)
|
||||
_, _, err = gitcmd.NewCommand("update-ref", "--no-deref").AddDynamicArguments(pr.GetGitHeadRefName(), pr.Head.SHA).WithRepo(g.gitRepo).RunStdString(ctx)
|
||||
if err != nil {
|
||||
log.Error("PR #%d in %s/%s unable to update-ref for pr HEAD: %v", pr.Number, g.repoOwner, g.repoName, err)
|
||||
}
|
||||
@@ -532,7 +538,7 @@ func (g *RepositoryDumper) handlePullRequest(ctx context.Context, pr *base.PullR
|
||||
if !ok {
|
||||
// Set head information if pr.Head.SHA is available
|
||||
if pr.Head.SHA != "" {
|
||||
_, _, err = gitcmd.NewCommand("update-ref", "--no-deref").AddDynamicArguments(pr.GetGitHeadRefName(), pr.Head.SHA).WithDir(g.gitPath()).RunStdString(ctx)
|
||||
_, _, err = gitcmd.NewCommand("update-ref", "--no-deref").AddDynamicArguments(pr.GetGitHeadRefName(), pr.Head.SHA).WithRepo(g.gitRepo).RunStdString(ctx)
|
||||
if err != nil {
|
||||
log.Error("PR #%d in %s/%s unable to update-ref for pr HEAD: %v", pr.Number, g.repoOwner, g.repoName, err)
|
||||
}
|
||||
@@ -567,7 +573,7 @@ func (g *RepositoryDumper) handlePullRequest(ctx context.Context, pr *base.PullR
|
||||
fetchArg = git.BranchPrefix + fetchArg
|
||||
}
|
||||
|
||||
_, _, err = gitcmd.NewCommand("fetch", "--no-tags").AddDashesAndList(remote, fetchArg).WithDir(g.gitPath()).RunStdString(ctx)
|
||||
_, _, err = gitcmd.NewCommand("fetch", "--no-tags").AddDashesAndList(remote, fetchArg).WithRepo(g.gitRepo).RunStdString(ctx)
|
||||
if err != nil {
|
||||
log.Error("Fetch branch from %s failed: %v", pr.Head.CloneURL, err)
|
||||
// We need to continue here so that the Head.Ref is reset and we attempt to set the gitref for the PR
|
||||
@@ -591,7 +597,7 @@ func (g *RepositoryDumper) handlePullRequest(ctx context.Context, pr *base.PullR
|
||||
pr.Head.SHA = headSha
|
||||
}
|
||||
if pr.Head.SHA != "" {
|
||||
_, _, err = gitcmd.NewCommand("update-ref", "--no-deref").AddDynamicArguments(pr.GetGitHeadRefName(), pr.Head.SHA).WithDir(g.gitPath()).RunStdString(ctx)
|
||||
_, _, err = gitcmd.NewCommand("update-ref", "--no-deref").AddDynamicArguments(pr.GetGitHeadRefName(), pr.Head.SHA).WithRepo(g.gitRepo).RunStdString(ctx)
|
||||
if err != nil {
|
||||
log.Error("unable to set %s as the local head for PR #%d from %s in %s/%s. Error: %v", pr.Head.SHA, pr.Number, pr.Head.Ref, g.repoOwner, g.repoName, err)
|
||||
}
|
||||
|
||||
@@ -258,7 +258,7 @@ func createCodeComment(ctx context.Context, doer *user_model.User, repo *repo_mo
|
||||
if err == nil {
|
||||
commitID = commit.ID.String()
|
||||
} else if !isErrBlameNotFoundOrNotEnoughLines(err) {
|
||||
return nil, fmt.Errorf("LineBlame[%s, %s, %s, %d]: %w", pr.GetGitHeadRefName(), gitRepo.Path, treePath, line, err)
|
||||
return nil, fmt.Errorf("LineBlame[%s, %s, %s, %d]: %w", pr.GetGitHeadRefName(), gitRepo.LogString(), treePath, line, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -64,13 +64,13 @@ func GenerateGitHooks(ctx context.Context, templateRepo, generateRepo *repo_mode
|
||||
}
|
||||
defer templateGitRepo.Close()
|
||||
|
||||
templateHooks, err := templateGitRepo.Hooks()
|
||||
templateHooks, err := git.ListHooks(templateGitRepo)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, templateHook := range templateHooks {
|
||||
generateHook, err := generateGitRepo.GetHook(templateHook.Name())
|
||||
generateHook, err := git.GetHook(generateGitRepo, templateHook.Name())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user