aboutsummaryrefslogtreecommitdiff
path: root/models
diff options
context:
space:
mode:
authorUnknwon <u@gogs.io>2017-02-18 22:47:32 -0500
committerUnknwon <u@gogs.io>2017-02-18 22:47:32 -0500
commit40fbe7fa8e66fee66819077b2d8ff8f251228acb (patch)
tree35b8d920f23693feeb7fa1bcccf7f41a90cada8f /models
parentef922ff757c503db6e22c0ff05c1573e2d7dce7d (diff)
models/repo: handle deletion on Windows (#4152)
Diffstat (limited to 'models')
-rw-r--r--models/admin.go2
-rw-r--r--models/repo.go14
2 files changed, 6 insertions, 10 deletions
diff --git a/models/admin.go b/models/admin.go
index 4e4aba72..045728e4 100644
--- a/models/admin.go
+++ b/models/admin.go
@@ -74,7 +74,7 @@ func CreateRepositoryNotice(desc string) error {
// creates a system notice when error occurs.
func RemoveAllWithNotice(title, path string) {
var err error
- // workaround for Go not being able to remove read-only files/folders: https://github.com/golang/go/issues/9606
+ // LEGACY [Go 1.7]: workaround for Go not being able to remove read-only files/folders: https://github.com/golang/go/issues/9606
// this bug should be fixed on Go 1.7, so the workaround should be removed when Gogs don't support Go 1.6 anymore:
// https://github.com/golang/go/commit/2ffb3e5d905b5622204d199128dec06cefd57790
// Note: Windows complains when delete target does not exist, therefore we can skip deletion in such cases.
diff --git a/models/repo.go b/models/repo.go
index 62a99816..c12b1056 100644
--- a/models/repo.go
+++ b/models/repo.go
@@ -643,7 +643,7 @@ func MigrateRepository(u *User, opts MigrateRepoOptions) (*Repository, error) {
migrateTimeout := time.Duration(setting.Git.Timeout.Migrate) * time.Second
- os.RemoveAll(repoPath)
+ RemoveAllWithNotice("Repository path erase before creation", repoPath)
if err = git.Clone(opts.RemoteAddr, repoPath, git.CloneRepoOptions{
Mirror: true,
Quiet: true,
@@ -654,14 +654,14 @@ func MigrateRepository(u *User, opts MigrateRepoOptions) (*Repository, error) {
wikiRemotePath := wikiRemoteURL(opts.RemoteAddr)
if len(wikiRemotePath) > 0 {
- os.RemoveAll(wikiPath)
+ RemoveAllWithNotice("Repository wiki path erase before creation", repoPath)
if err = git.Clone(wikiRemotePath, wikiPath, git.CloneRepoOptions{
Mirror: true,
Quiet: true,
Timeout: migrateTimeout,
}); err != nil {
log.Trace("Fail to clone wiki: %v", err)
- os.RemoveAll(wikiPath)
+ RemoveAllWithNotice("Delete repository wiki for initialization failure", repoPath)
}
}
@@ -890,7 +890,7 @@ func initRepository(e Engine, repoPath string, u *User, repo *Repository, opts C
// Initialize repository according to user's choice.
if opts.AutoInit {
os.MkdirAll(tmpDir, os.ModePerm)
- defer os.RemoveAll(tmpDir)
+ defer RemoveAllWithNotice("Delete repository for auto-initialization", tmpDir)
if err = prepareRepoCommit(repo, tmpDir, repoPath, opts); err != nil {
return fmt.Errorf("prepareRepoCommit: %v", err)
@@ -1009,11 +1009,7 @@ func CreateRepository(u *User, opts CreateRepoOptions) (_ *Repository, err error
if !opts.IsMirror {
repoPath := RepoPath(u.Name, repo.Name)
if err = initRepository(sess, repoPath, u, repo, opts); err != nil {
- if err2 := os.RemoveAll(repoPath); err2 != nil {
- log.Error(4, "initRepository: %v", err)
- return nil, fmt.Errorf(
- "delete repo directory %s/%s failed(2): %v", u.Name, repo.Name, err2)
- }
+ RemoveAllWithNotice("Delete repository for initialization failure", repoPath)
return nil, fmt.Errorf("initRepository: %v", err)
}