diff options
author | zeripath <art27@cantab.net> | 2021-10-14 17:07:53 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-14 18:07:53 +0200 |
commit | a20ccec369e0ad7023cb77a480569e82fa5ada76 (patch) | |
tree | 26979dd57a0bebe4aeafbaa912073622b5d70f4c /models | |
parent | 9c2b7a196e6e546650ed687b3e0992f6d5a11c33 (diff) | |
download | gitea-a20ccec369e0ad7023cb77a480569e82fa5ada76.tar.gz gitea-a20ccec369e0ad7023cb77a480569e82fa5ada76.zip |
Ensure that git daemon export ok is created for mirrors (#17243) (#17306)
Backport #17243
There is an issue with #16508 where it appears that create repo requires that the
repo does not exist. This causes #17241 where an error is reported because of this.
This PR fixes this and also runs update-server-info for mirrors and generated repos.
Fix #17241
Signed-off-by: Andrew Thornton <art27@cantab.net>
Diffstat (limited to 'models')
-rw-r--r-- | models/repo.go | 67 |
1 files changed, 41 insertions, 26 deletions
diff --git a/models/repo.go b/models/repo.go index 9cbb7977e3..d56728ef36 100644 --- a/models/repo.go +++ b/models/repo.go @@ -1152,16 +1152,6 @@ func CreateRepository(ctx DBContext, doer, u *User, repo *Repository, overwriteO return fmt.Errorf("recalculateAccesses: %v", err) } - if u.Visibility == api.VisibleTypePublic && !repo.IsPrivate { - // Create/Remove git-daemon-export-ok for git-daemon... - daemonExportFile := path.Join(repo.RepoPath(), `git-daemon-export-ok`) - if f, err := os.Create(daemonExportFile); err != nil { - log.Error("Failed to create %s: %v", daemonExportFile, err) - } else { - f.Close() - } - } - if setting.Service.AutoWatchNewRepos { if err = watchRepo(ctx.e, doer.ID, repo.ID, true); err != nil { return fmt.Errorf("watchRepo: %v", err) @@ -1175,6 +1165,46 @@ func CreateRepository(ctx DBContext, doer, u *User, repo *Repository, overwriteO return nil } +// CheckDaemonExportOK creates/removes git-daemon-export-ok for git-daemon... +func (repo *Repository) CheckDaemonExportOK() error { + return repo.checkDaemonExportOK(x) +} + +// CheckDaemonExportOKCtx creates/removes git-daemon-export-ok for git-daemon... +func (repo *Repository) CheckDaemonExportOKCtx(ctx DBContext) error { + return repo.checkDaemonExportOK(ctx.e) +} + +func (repo *Repository) checkDaemonExportOK(e Engine) error { + if err := repo.getOwner(e); err != nil { + return err + } + + // Create/Remove git-daemon-export-ok for git-daemon... + daemonExportFile := path.Join(repo.RepoPath(), `git-daemon-export-ok`) + + isExist, err := util.IsExist(daemonExportFile) + if err != nil { + log.Error("Unable to check if %s exists. Error: %v", daemonExportFile, err) + return err + } + + isPublic := !repo.IsPrivate && repo.Owner.Visibility == api.VisibleTypePublic + if !isPublic && isExist { + if err = util.Remove(daemonExportFile); err != nil { + log.Error("Failed to remove %s: %v", daemonExportFile, err) + } + } else if isPublic && !isExist { + if f, err := os.Create(daemonExportFile); err != nil { + log.Error("Failed to create %s: %v", daemonExportFile, err) + } else { + f.Close() + } + } + + return nil +} + func countRepositories(userID int64, private bool) int64 { sess := x.Where("id > 0") @@ -1324,24 +1354,9 @@ 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`) - isExist, err := util.IsExist(daemonExportFile) - isPublic := !repo.IsPrivate && repo.Owner.Visibility == api.VisibleTypePublic - if err != nil { - log.Error("Unable to check if %s exists. Error: %v", daemonExportFile, err) + if err := repo.checkDaemonExportOK(e); err != nil { return err } - if !isPublic && isExist { - if err = util.Remove(daemonExportFile); err != nil { - log.Error("Failed to remove %s: %v", daemonExportFile, err) - } - } else if isPublic && !isExist { - if f, err := os.Create(daemonExportFile); err != nil { - log.Error("Failed to create %s: %v", daemonExportFile, err) - } else { - f.Close() - } - } forkRepos, err := getRepositoriesByForkID(e, repo.ID) if err != nil { |