From e7822473e90a668bb165ed2914dcb4eafc3c7ebd Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Fri, 26 Oct 2018 17:37:57 +0800 Subject: [PATCH] Fix race on updatesize (#5190) * fix race on updatesize * fix more repoPath --- models/repo.go | 4 ++-- models/status.go | 15 ++++++++------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/models/repo.go b/models/repo.go index 61e1e26ae..5a4781219 100644 --- a/models/repo.go +++ b/models/repo.go @@ -685,7 +685,7 @@ func (repo *Repository) IsOwnedBy(userID int64) bool { } func (repo *Repository) updateSize(e Engine) error { - repoInfoSize, err := git.GetRepoSize(repo.RepoPath()) + repoInfoSize, err := git.GetRepoSize(repo.repoPath(e)) if err != nil { return fmt.Errorf("UpdateSize: %v", err) } @@ -1713,7 +1713,7 @@ func updateRepository(e Engine, repo *Repository, visibilityChanged bool) (err e } // Create/Remove git-daemon-export-ok for git-daemon... - daemonExportFile := path.Join(repo.RepoPath(), `git-daemon-export-ok`) + daemonExportFile := path.Join(repo.repoPath(e), `git-daemon-export-ok`) if repo.IsPrivate && com.IsExist(daemonExportFile) { if err = os.Remove(daemonExportFile); err != nil { log.Error(4, "Failed to remove %s: %v", daemonExportFile, err) diff --git a/models/status.go b/models/status.go index 3146f8d30..91d011f7c 100644 --- a/models/status.go +++ b/models/status.go @@ -197,14 +197,15 @@ func newCommitStatus(sess *xorm.Session, opts NewCommitStatusOptions) error { return fmt.Errorf("newCommitStatus[nil, %s]: no repository specified", opts.SHA) } opts.CommitStatus.RepoID = opts.Repo.ID + repoPath := opts.Repo.repoPath(sess) if opts.Creator == nil { - return fmt.Errorf("newCommitStatus[%s, %s]: no user specified", opts.Repo.RepoPath(), opts.SHA) + return fmt.Errorf("newCommitStatus[%s, %s]: no user specified", repoPath, opts.SHA) } - gitRepo, err := git.OpenRepository(opts.Repo.RepoPath()) + gitRepo, err := git.OpenRepository(repoPath) if err != nil { - return fmt.Errorf("OpenRepository[%s]: %v", opts.Repo.RepoPath(), err) + return fmt.Errorf("OpenRepository[%s]: %v", repoPath, err) } if _, err := gitRepo.GetCommit(opts.SHA); err != nil { return fmt.Errorf("GetCommit[%s]: %v", opts.SHA, err) @@ -219,19 +220,19 @@ func newCommitStatus(sess *xorm.Session, opts NewCommitStatusOptions) error { has, err := sess.Desc("index").Limit(1).Get(lastCommitStatus) if err != nil { sess.Rollback() - return fmt.Errorf("newCommitStatus[%s, %s]: %v", opts.Repo.RepoPath(), opts.SHA, err) + return fmt.Errorf("newCommitStatus[%s, %s]: %v", repoPath, opts.SHA, err) } if has { - log.Debug("newCommitStatus[%s, %s]: found", opts.Repo.RepoPath(), opts.SHA) + log.Debug("newCommitStatus[%s, %s]: found", repoPath, opts.SHA) nextIndex = lastCommitStatus.Index } opts.CommitStatus.Index = nextIndex + 1 - log.Debug("newCommitStatus[%s, %s]: %d", opts.Repo.RepoPath(), opts.SHA, opts.CommitStatus.Index) + log.Debug("newCommitStatus[%s, %s]: %d", repoPath, opts.SHA, opts.CommitStatus.Index) // Insert new CommitStatus if _, err = sess.Insert(opts.CommitStatus); err != nil { sess.Rollback() - return fmt.Errorf("newCommitStatus[%s, %s]: %v", opts.Repo.RepoPath(), opts.SHA, err) + return fmt.Errorf("newCommitStatus[%s, %s]: %v", repoPath, opts.SHA, err) } return nil