diff options
author | zeripath <art27@cantab.net> | 2020-11-28 02:42:08 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-11-27 21:42:08 -0500 |
commit | 742e21aeba5c02935269a2a3681f4486019ce542 (patch) | |
tree | e1572ab13c33dec1238321170a90d42851ae4ca2 /modules/repository | |
parent | 5b75f17043bc2a6d0e753ae5c9c6759adad5aaac (diff) | |
download | gitea-742e21aeba5c02935269a2a3681f4486019ce542.tar.gz gitea-742e21aeba5c02935269a2a3681f4486019ce542.zip |
Handle and propagate errors when checking if paths are Dirs, Files or Exist (#13186)
* Ensure errors from IsDir propagate
* Handle errors when checking IsFile
* Handle and propagate errors from IsExist
* Update modules/templates/static.go
* Update modules/templates/static.go
* Return after ctx.ServerError
* Apply suggestions from code review
* Fix tests
The previous merge managed to break repo_form.go
Signed-off-by: Andrew Thornton <art27@cantab.net>
Co-authored-by: techknowlogick <techknowlogick@gitea.io>
Co-authored-by: Lauris BH <lauris@nix.lv>
Diffstat (limited to 'modules/repository')
-rw-r--r-- | modules/repository/adopt.go | 15 | ||||
-rw-r--r-- | modules/repository/check.go | 8 | ||||
-rw-r--r-- | modules/repository/create.go | 9 | ||||
-rw-r--r-- | modules/repository/generate.go | 8 | ||||
-rw-r--r-- | modules/repository/hooks.go | 19 | ||||
-rw-r--r-- | modules/repository/init.go | 14 |
6 files changed, 57 insertions, 16 deletions
diff --git a/modules/repository/adopt.go b/modules/repository/adopt.go index 22cd6dd91f..0302119630 100644 --- a/modules/repository/adopt.go +++ b/modules/repository/adopt.go @@ -16,7 +16,6 @@ import ( "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/util" "github.com/gobwas/glob" - "github.com/unknwon/com" ) // AdoptRepository adopts a repository for the user/organization. @@ -49,7 +48,12 @@ func AdoptRepository(doer, u *models.User, opts models.CreateRepoOptions) (*mode if err := models.WithTx(func(ctx models.DBContext) error { repoPath := models.RepoPath(u.Name, repo.Name) - if !com.IsExist(repoPath) { + isExist, err := util.IsExist(repoPath) + if err != nil { + log.Error("Unable to check if %s exists. Error: %v", repoPath, err) + return err + } + if !isExist { return models.ErrRepoNotExist{ OwnerName: u.Name, Name: repo.Name, @@ -91,7 +95,12 @@ func DeleteUnadoptedRepository(doer, u *models.User, repoName string) error { } repoPath := models.RepoPath(u.Name, repoName) - if !com.IsExist(repoPath) { + isExist, err := util.IsExist(repoPath) + if err != nil { + log.Error("Unable to check if %s exists. Error: %v", repoPath, err) + return err + } + if !isExist { return models.ErrRepoNotExist{ OwnerName: u.Name, Name: repoName, diff --git a/modules/repository/check.go b/modules/repository/check.go index 274576c348..d13ddbb0b0 100644 --- a/modules/repository/check.go +++ b/modules/repository/check.go @@ -13,8 +13,8 @@ import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/log" + "code.gitea.io/gitea/modules/util" - "github.com/unknwon/com" "xorm.io/builder" ) @@ -114,7 +114,11 @@ func gatherMissingRepoRecords(ctx context.Context) ([]*models.Repository, error) return models.ErrCancelledf("during gathering missing repo records before checking %s", repo.FullName()) default: } - if !com.IsDir(repo.RepoPath()) { + isDir, err := util.IsDir(repo.RepoPath()) + if err != nil { + return fmt.Errorf("Unable to check dir for %s. %w", repo.FullName(), err) + } + if !isDir { repos = append(repos, repo) } return nil diff --git a/modules/repository/create.go b/modules/repository/create.go index 1408637815..1f7145ee2a 100644 --- a/modules/repository/create.go +++ b/modules/repository/create.go @@ -13,8 +13,6 @@ import ( "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/util" - - "github.com/unknwon/com" ) // CreateRepository creates a repository for the user/organization. @@ -58,7 +56,12 @@ func CreateRepository(doer, u *models.User, opts models.CreateRepoOptions) (*mod } repoPath := models.RepoPath(u.Name, repo.Name) - if com.IsExist(repoPath) { + isExist, err := util.IsExist(repoPath) + if err != nil { + log.Error("Unable to check if %s exists. Error: %v", repoPath, err) + return err + } + if isExist { // repo already exists - We have two or three options. // 1. We fail stating that the directory exists // 2. We create the db repository to go with this data and adopt the git repo diff --git a/modules/repository/generate.go b/modules/repository/generate.go index 5d1ef72b6c..0142d689d1 100644 --- a/modules/repository/generate.go +++ b/modules/repository/generate.go @@ -19,7 +19,6 @@ import ( "code.gitea.io/gitea/modules/util" "github.com/huandu/xstrings" - "github.com/unknwon/com" ) type transformer struct { @@ -252,7 +251,12 @@ func GenerateRepository(ctx models.DBContext, doer, owner *models.User, template } repoPath := generateRepo.RepoPath() - if com.IsExist(repoPath) { + isExist, err := util.IsExist(repoPath) + if err != nil { + log.Error("Unable to check if %s exists. Error: %v", repoPath, err) + return nil, err + } + if isExist { return nil, models.ErrRepoFilesAlreadyExist{ Uname: generateRepo.OwnerName, Name: generateRepo.Name, diff --git a/modules/repository/hooks.go b/modules/repository/hooks.go index faf9c98f8a..aba5db6719 100644 --- a/modules/repository/hooks.go +++ b/modules/repository/hooks.go @@ -15,7 +15,6 @@ import ( "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/util" - "github.com/unknwon/com" "xorm.io/builder" ) @@ -112,15 +111,27 @@ func CheckDelegateHooks(repoPath string) ([]string, error) { newHookPath := filepath.Join(hookDir, hookName+".d", "gitea") cont := false - if !com.IsExist(oldHookPath) { + isExist, err := util.IsExist(oldHookPath) + if err != nil { + results = append(results, fmt.Sprintf("unable to check if %s exists. Error: %v", oldHookPath, err)) + } + if err == nil && !isExist { results = append(results, fmt.Sprintf("old hook file %s does not exist", oldHookPath)) cont = true } - if !com.IsExist(oldHookPath + ".d") { + isExist, err = util.IsExist(oldHookPath + ".d") + if err != nil { + results = append(results, fmt.Sprintf("unable to check if %s exists. Error: %v", oldHookPath+".d", err)) + } + if err == nil && !isExist { results = append(results, fmt.Sprintf("hooks directory %s does not exist", oldHookPath+".d")) cont = true } - if !com.IsExist(newHookPath) { + isExist, err = util.IsExist(newHookPath) + if err != nil { + results = append(results, fmt.Sprintf("unable to check if %s exists. Error: %v", newHookPath, err)) + } + if err == nil && !isExist { results = append(results, fmt.Sprintf("new hook file %s does not exist", newHookPath)) cont = true } diff --git a/modules/repository/init.go b/modules/repository/init.go index 569069ee1f..37dc69a0a8 100644 --- a/modules/repository/init.go +++ b/modules/repository/init.go @@ -175,7 +175,12 @@ func initRepoCommit(tmpPath string, repo *models.Repository, u *models.User, def func checkInitRepository(owner, name string) (err error) { // Somehow the directory could exist. repoPath := models.RepoPath(owner, name) - if com.IsExist(repoPath) { + isExist, err := util.IsExist(repoPath) + if err != nil { + log.Error("Unable to check if %s exists. Error: %v", repoPath, err) + return err + } + if isExist { return models.ErrRepoFilesAlreadyExist{ Uname: owner, Name: name, @@ -192,7 +197,12 @@ func checkInitRepository(owner, name string) (err error) { } func adoptRepository(ctx models.DBContext, repoPath string, u *models.User, repo *models.Repository, opts models.CreateRepoOptions) (err error) { - if !com.IsExist(repoPath) { + isExist, err := util.IsExist(repoPath) + if err != nil { + log.Error("Unable to check if %s exists. Error: %v", repoPath, err) + return err + } + if !isExist { return fmt.Errorf("adoptRepository: path does not already exist: %s", repoPath) } |