From 40fbe7fa8e66fee66819077b2d8ff8f251228acb Mon Sep 17 00:00:00 2001 From: Unknwon Date: Sat, 18 Feb 2017 22:47:32 -0500 Subject: [PATCH] models/repo: handle deletion on Windows (#4152) --- models/admin.go | 2 +- models/repo.go | 14 +++++--------- templates/mail/auth/activate.tmpl | 2 +- templates/mail/auth/activate_email.tmpl | 2 +- templates/mail/auth/register_notify.tmpl | 2 +- templates/mail/auth/reset_passwd.tmpl | 2 +- 6 files changed, 10 insertions(+), 14 deletions(-) diff --git a/models/admin.go b/models/admin.go index 4e4aba726..045728e4f 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 62a998167..c12b10563 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) } diff --git a/templates/mail/auth/activate.tmpl b/templates/mail/auth/activate.tmpl index f03c16569..162147677 100644 --- a/templates/mail/auth/activate.tmpl +++ b/templates/mail/auth/activate.tmpl @@ -10,6 +10,6 @@

Please click the following link to verify your e-mail address within {{.ActiveCodeLives}} hours:

{{AppUrl}}user/activate?code={{.Code}}

Not working? Try copying and pasting it to your browser.

-

© 2016 {{AppName}}

+

© 2017 {{AppName}}

diff --git a/templates/mail/auth/activate_email.tmpl b/templates/mail/auth/activate_email.tmpl index 65cb5045b..8b11b4f16 100644 --- a/templates/mail/auth/activate_email.tmpl +++ b/templates/mail/auth/activate_email.tmpl @@ -10,6 +10,6 @@

Please click the following link to verify your email address within {{.ActiveCodeLives}} hours:

{{AppUrl}}user/activate_email?code={{.Code}}&email={{.Email}}

Not working? Try copying and pasting it to your browser.

-

© 2016 {{AppName}}

+

© 2017 {{AppName}}

diff --git a/templates/mail/auth/register_notify.tmpl b/templates/mail/auth/register_notify.tmpl index 75a435645..3a937f64d 100644 --- a/templates/mail/auth/register_notify.tmpl +++ b/templates/mail/auth/register_notify.tmpl @@ -9,6 +9,6 @@

Hi {{.Username}}, this is your registration confirmation email for {{AppName}}!

You can now login via username: {{.Username}}.

{{AppUrl}}user/login

-

© 2016 {{AppName}}

+

© 2017 {{AppName}}

diff --git a/templates/mail/auth/reset_passwd.tmpl b/templates/mail/auth/reset_passwd.tmpl index aae055805..5176a712c 100644 --- a/templates/mail/auth/reset_passwd.tmpl +++ b/templates/mail/auth/reset_passwd.tmpl @@ -10,6 +10,6 @@

Please click the following link to verify your email address within {{.ResetPwdCodeLives}} hours:

{{AppUrl}}user/reset_password?code={{.Code}}

Not working? Try copying and pasting it to your browser.

-

© 2016 {{AppName}}

+

© 2017 {{AppName}}