mirror of
				https://github.com/go-gitea/gitea
				synced 2025-11-04 05:18:25 +00:00 
			
		
		
		
	Fix race on updatesize (#5190)
* fix race on updatesize * fix more repoPath
This commit is contained in:
		@@ -685,7 +685,7 @@ func (repo *Repository) IsOwnedBy(userID int64) bool {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (repo *Repository) updateSize(e Engine) error {
 | 
					func (repo *Repository) updateSize(e Engine) error {
 | 
				
			||||||
	repoInfoSize, err := git.GetRepoSize(repo.RepoPath())
 | 
						repoInfoSize, err := git.GetRepoSize(repo.repoPath(e))
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return fmt.Errorf("UpdateSize: %v", err)
 | 
							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...
 | 
							// 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 repo.IsPrivate && com.IsExist(daemonExportFile) {
 | 
				
			||||||
			if err = os.Remove(daemonExportFile); err != nil {
 | 
								if err = os.Remove(daemonExportFile); err != nil {
 | 
				
			||||||
				log.Error(4, "Failed to remove %s: %v", daemonExportFile, err)
 | 
									log.Error(4, "Failed to remove %s: %v", daemonExportFile, err)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -197,14 +197,15 @@ func newCommitStatus(sess *xorm.Session, opts NewCommitStatusOptions) error {
 | 
				
			|||||||
		return fmt.Errorf("newCommitStatus[nil, %s]: no repository specified", opts.SHA)
 | 
							return fmt.Errorf("newCommitStatus[nil, %s]: no repository specified", opts.SHA)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	opts.CommitStatus.RepoID = opts.Repo.ID
 | 
						opts.CommitStatus.RepoID = opts.Repo.ID
 | 
				
			||||||
 | 
						repoPath := opts.Repo.repoPath(sess)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if opts.Creator == nil {
 | 
						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 {
 | 
						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 {
 | 
						if _, err := gitRepo.GetCommit(opts.SHA); err != nil {
 | 
				
			||||||
		return fmt.Errorf("GetCommit[%s]: %v", opts.SHA, err)
 | 
							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)
 | 
						has, err := sess.Desc("index").Limit(1).Get(lastCommitStatus)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		sess.Rollback()
 | 
							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 {
 | 
						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
 | 
							nextIndex = lastCommitStatus.Index
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	opts.CommitStatus.Index = nextIndex + 1
 | 
						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
 | 
						// Insert new CommitStatus
 | 
				
			||||||
	if _, err = sess.Insert(opts.CommitStatus); err != nil {
 | 
						if _, err = sess.Insert(opts.CommitStatus); err != nil {
 | 
				
			||||||
		sess.Rollback()
 | 
							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
 | 
						return nil
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user