Skip to content

Commit 74bd969

Browse files
zeripathsilverwind
andauthored
Re-attempt to delete temporary upload if the file is locked by another process (#12447)
Replace all calls to os.Remove/os.RemoveAll by retrying util.Remove/util.RemoveAll and remove circular dependencies from util. Fix #12339 Signed-off-by: Andrew Thornton <[email protected]> Co-authored-by: silverwind <[email protected]>
1 parent faa676c commit 74bd969

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

60 files changed

+304
-202
lines changed

build/generate-gitignores.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ import (
1515
"path"
1616
"path/filepath"
1717
"strings"
18+
19+
"code.gitea.io/gitea/modules/util"
1820
)
1921

2022
func main() {
@@ -33,7 +35,7 @@ func main() {
3335
log.Fatalf("Failed to create temp file. %s", err)
3436
}
3537

36-
defer os.Remove(file.Name())
38+
defer util.Remove(file.Name())
3739

3840
resp, err := http.Get(url)
3941

build/generate-licenses.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ import (
1515
"path"
1616
"path/filepath"
1717
"strings"
18+
19+
"code.gitea.io/gitea/modules/util"
1820
)
1921

2022
func main() {
@@ -33,7 +35,7 @@ func main() {
3335
log.Fatalf("Failed to create temp file. %s", err)
3436
}
3537

36-
defer os.Remove(file.Name())
38+
defer util.Remove(file.Name())
3739

3840
resp, err := http.Get(url)
3941

cmd/doctor.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424
"code.gitea.io/gitea/modules/options"
2525
"code.gitea.io/gitea/modules/repository"
2626
"code.gitea.io/gitea/modules/setting"
27+
"code.gitea.io/gitea/modules/util"
2728
"xorm.io/builder"
2829

2930
"github.com/urfave/cli"
@@ -312,7 +313,7 @@ func runDoctorWritableDir(path string) error {
312313
if err != nil {
313314
return err
314315
}
315-
if err := os.Remove(tmpFile.Name()); err != nil {
316+
if err := util.Remove(tmpFile.Name()); err != nil {
316317
fmt.Printf("Warning: can't remove temporary file: '%s'\n", tmpFile.Name())
317318
}
318319
tmpFile.Close()

cmd/dump.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import (
1818
"code.gitea.io/gitea/models"
1919
"code.gitea.io/gitea/modules/log"
2020
"code.gitea.io/gitea/modules/setting"
21+
"code.gitea.io/gitea/modules/util"
2122

2223
"gitea.com/macaron/session"
2324
archiver "github.com/mholt/archiver/v3"
@@ -243,7 +244,11 @@ func runDump(ctx *cli.Context) error {
243244
if err != nil {
244245
fatal("Failed to create tmp file: %v", err)
245246
}
246-
defer os.Remove(dbDump.Name())
247+
defer func() {
248+
if err := util.Remove(dbDump.Name()); err != nil {
249+
log.Warn("Unable to remove temporary file: %s: Error: %v", dbDump.Name(), err)
250+
}
251+
}()
247252

248253
targetDBType := ctx.String("database")
249254
if len(targetDBType) > 0 && targetDBType != setting.Database.Type {
@@ -313,7 +318,7 @@ func runDump(ctx *cli.Context) error {
313318

314319
if fileName != "-" {
315320
if err = w.Close(); err != nil {
316-
_ = os.Remove(fileName)
321+
_ = util.Remove(fileName)
317322
fatal("Failed to save %s: %v", fileName, err)
318323
}
319324

contrib/pr/checkout.go

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import (
2929
"code.gitea.io/gitea/modules/markup"
3030
"code.gitea.io/gitea/modules/markup/external"
3131
"code.gitea.io/gitea/modules/setting"
32+
"code.gitea.io/gitea/modules/util"
3233
"code.gitea.io/gitea/routers"
3334
"code.gitea.io/gitea/routers/routes"
3435

@@ -108,8 +109,8 @@ func runPR() {
108109
os.Exit(1)
109110
}
110111
models.LoadFixtures()
111-
os.RemoveAll(setting.RepoRootPath)
112-
os.RemoveAll(models.LocalCopyPath())
112+
util.RemoveAll(setting.RepoRootPath)
113+
util.RemoveAll(models.LocalCopyPath())
113114
com.CopyDir(path.Join(curDir, "integrations/gitea-repositories-meta"), setting.RepoRootPath)
114115

115116
log.Printf("[PR] Setting up router\n")
@@ -141,20 +142,20 @@ func runPR() {
141142

142143
log.Printf("[PR] Cleaning up ...\n")
143144
/*
144-
if err = os.RemoveAll(setting.Indexer.IssuePath); err != nil {
145-
fmt.Printf("os.RemoveAll: %v\n", err)
145+
if err = util.RemoveAll(setting.Indexer.IssuePath); err != nil {
146+
fmt.Printf("util.RemoveAll: %v\n", err)
146147
os.Exit(1)
147148
}
148-
if err = os.RemoveAll(setting.Indexer.RepoPath); err != nil {
149+
if err = util.RemoveAll(setting.Indexer.RepoPath); err != nil {
149150
fmt.Printf("Unable to remove repo indexer: %v\n", err)
150151
os.Exit(1)
151152
}
152153
*/
153-
if err = os.RemoveAll(setting.RepoRootPath); err != nil {
154-
log.Fatalf("os.RemoveAll: %v\n", err)
154+
if err = util.RemoveAll(setting.RepoRootPath); err != nil {
155+
log.Fatalf("util.RemoveAll: %v\n", err)
155156
}
156-
if err = os.RemoveAll(setting.AppDataPath); err != nil {
157-
log.Fatalf("os.RemoveAll: %v\n", err)
157+
if err = util.RemoveAll(setting.AppDataPath); err != nil {
158+
log.Fatalf("util.RemoveAll: %v\n", err)
158159
}
159160
}
160161

integrations/api_repo_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@ import (
99
"io/ioutil"
1010
"net/http"
1111
"net/url"
12-
"os"
1312
"testing"
1413

1514
"code.gitea.io/gitea/models"
1615
"code.gitea.io/gitea/modules/setting"
1716
api "code.gitea.io/gitea/modules/structs"
17+
"code.gitea.io/gitea/modules/util"
1818

1919
"github.com/stretchr/testify/assert"
2020
)
@@ -341,7 +341,7 @@ func testAPIRepoMigrateConflict(t *testing.T, u *url.URL) {
341341
httpContext.Reponame = "repo-tmp-17"
342342
dstPath, err := ioutil.TempDir("", httpContext.Reponame)
343343
assert.NoError(t, err)
344-
defer os.RemoveAll(dstPath)
344+
defer util.RemoveAll(dstPath)
345345
t.Run("CreateRepo", doAPICreateRepository(httpContext, false))
346346

347347
user, err := models.GetUserByName(httpContext.Username)
@@ -404,7 +404,7 @@ func testAPIRepoCreateConflict(t *testing.T, u *url.URL) {
404404
httpContext.Reponame = "repo-tmp-17"
405405
dstPath, err := ioutil.TempDir("", httpContext.Reponame)
406406
assert.NoError(t, err)
407-
defer os.RemoveAll(dstPath)
407+
defer util.RemoveAll(dstPath)
408408
t.Run("CreateRepo", doAPICreateRepository(httpContext, false))
409409

410410
req := NewRequestWithJSON(t, "POST", "/api/v1/user/repos?token="+httpContext.Token,

integrations/create_no_session_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"testing"
1515

1616
"code.gitea.io/gitea/modules/setting"
17+
"code.gitea.io/gitea/modules/util"
1718
"code.gitea.io/gitea/routers/routes"
1819

1920
"gitea.com/macaron/session"
@@ -72,7 +73,7 @@ func TestSessionFileCreation(t *testing.T) {
7273
assert.NoError(t, err)
7374
defer func() {
7475
if _, err := os.Stat(tmpDir); !os.IsNotExist(err) {
75-
_ = os.RemoveAll(tmpDir)
76+
_ = util.RemoveAll(tmpDir)
7677
}
7778
}()
7879
config.ProviderConfig = tmpDir

integrations/git_helper_for_declarative_test.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"code.gitea.io/gitea/modules/git"
2222
"code.gitea.io/gitea/modules/setting"
2323
"code.gitea.io/gitea/modules/ssh"
24+
"code.gitea.io/gitea/modules/util"
2425

2526
"github.com/stretchr/testify/assert"
2627
"github.com/unknwon/com"
@@ -30,7 +31,7 @@ func withKeyFile(t *testing.T, keyname string, callback func(string)) {
3031

3132
tmpDir, err := ioutil.TempDir("", "key-file")
3233
assert.NoError(t, err)
33-
defer os.RemoveAll(tmpDir)
34+
defer util.RemoveAll(tmpDir)
3435

3536
err = os.Chmod(tmpDir, 0700)
3637
assert.NoError(t, err)
@@ -119,7 +120,7 @@ func doGitCloneFail(u *url.URL) func(*testing.T) {
119120
return func(t *testing.T) {
120121
tmpDir, err := ioutil.TempDir("", "doGitCloneFail")
121122
assert.NoError(t, err)
122-
defer os.RemoveAll(tmpDir)
123+
defer util.RemoveAll(tmpDir)
123124
assert.Error(t, git.Clone(u.String(), tmpDir, git.CloneRepoOptions{}))
124125
assert.False(t, com.IsExist(filepath.Join(tmpDir, "README.md")))
125126
}

integrations/git_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import (
1010
"math/rand"
1111
"net/http"
1212
"net/url"
13-
"os"
1413
"path"
1514
"path/filepath"
1615
"strconv"
@@ -21,6 +20,7 @@ import (
2120
"code.gitea.io/gitea/modules/git"
2221
"code.gitea.io/gitea/modules/setting"
2322
api "code.gitea.io/gitea/modules/structs"
23+
"code.gitea.io/gitea/modules/util"
2424

2525
"github.com/stretchr/testify/assert"
2626
)
@@ -51,7 +51,7 @@ func testGit(t *testing.T, u *url.URL) {
5151

5252
dstPath, err := ioutil.TempDir("", httpContext.Reponame)
5353
assert.NoError(t, err)
54-
defer os.RemoveAll(dstPath)
54+
defer util.RemoveAll(dstPath)
5555

5656
t.Run("CreateRepoInDifferentUser", doAPICreateRepository(forkedUserCtx, false))
5757
t.Run("AddUserAsCollaborator", doAPIAddCollaborator(forkedUserCtx, httpContext.Username, models.AccessModeRead))
@@ -99,7 +99,7 @@ func testGit(t *testing.T, u *url.URL) {
9999
//Setup clone folder
100100
dstPath, err := ioutil.TempDir("", sshContext.Reponame)
101101
assert.NoError(t, err)
102-
defer os.RemoveAll(dstPath)
102+
defer util.RemoveAll(dstPath)
103103

104104
t.Run("Clone", doGitClone(dstPath, sshURL))
105105

@@ -124,7 +124,7 @@ func testGit(t *testing.T, u *url.URL) {
124124
func ensureAnonymousClone(t *testing.T, u *url.URL) {
125125
dstLocalPath, err := ioutil.TempDir("", "repo1")
126126
assert.NoError(t, err)
127-
defer os.RemoveAll(dstLocalPath)
127+
defer util.RemoveAll(dstLocalPath)
128128
t.Run("CloneAnonymous", doGitClone(dstLocalPath, u))
129129

130130
}
@@ -498,7 +498,7 @@ func doPushCreate(ctx APITestContext, u *url.URL) func(t *testing.T) {
498498
// Create a temporary directory
499499
tmpDir, err := ioutil.TempDir("", ctx.Reponame)
500500
assert.NoError(t, err)
501-
defer os.RemoveAll(tmpDir)
501+
defer util.RemoveAll(tmpDir)
502502

503503
// Now create local repository to push as our test and set its origin
504504
t.Run("InitTestRepository", doGitInitTestRepository(tmpDir))

integrations/gpg_git_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
"code.gitea.io/gitea/modules/process"
1717
"code.gitea.io/gitea/modules/setting"
1818
api "code.gitea.io/gitea/modules/structs"
19+
"code.gitea.io/gitea/modules/util"
1920
"github.com/stretchr/testify/assert"
2021
"golang.org/x/crypto/openpgp"
2122
"golang.org/x/crypto/openpgp/armor"
@@ -28,7 +29,7 @@ func TestGPGGit(t *testing.T) {
2829
// OK Set a new GPG home
2930
tmpDir, err := ioutil.TempDir("", "temp-gpg")
3031
assert.NoError(t, err)
31-
defer os.RemoveAll(tmpDir)
32+
defer util.RemoveAll(tmpDir)
3233

3334
err = os.Chmod(tmpDir, 0700)
3435
assert.NoError(t, err)

integrations/integration_test.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import (
2929
"code.gitea.io/gitea/modules/graceful"
3030
"code.gitea.io/gitea/modules/queue"
3131
"code.gitea.io/gitea/modules/setting"
32+
"code.gitea.io/gitea/modules/util"
3233
"code.gitea.io/gitea/routers"
3334
"code.gitea.io/gitea/routers/routes"
3435

@@ -98,11 +99,11 @@ func TestMain(m *testing.M) {
9899

99100
writerCloser.t = nil
100101

101-
if err = os.RemoveAll(setting.Indexer.IssuePath); err != nil {
102-
fmt.Printf("os.RemoveAll: %v\n", err)
102+
if err = util.RemoveAll(setting.Indexer.IssuePath); err != nil {
103+
fmt.Printf("util.RemoveAll: %v\n", err)
103104
os.Exit(1)
104105
}
105-
if err = os.RemoveAll(setting.Indexer.RepoPath); err != nil {
106+
if err = util.RemoveAll(setting.Indexer.RepoPath); err != nil {
106107
fmt.Printf("Unable to remove repo indexer: %v\n", err)
107108
os.Exit(1)
108109
}
@@ -138,7 +139,7 @@ func initIntegrationTest() {
138139

139140
setting.SetCustomPathAndConf("", "", "")
140141
setting.NewContext()
141-
os.RemoveAll(models.LocalCopyPath())
142+
util.RemoveAll(models.LocalCopyPath())
142143
setting.CheckLFSVersion()
143144
setting.InitDBConfig()
144145

@@ -230,7 +231,7 @@ func prepareTestEnv(t testing.TB, skip ...int) func() {
230231
}
231232
deferFn := PrintCurrentTest(t, ourSkip)
232233
assert.NoError(t, models.LoadFixtures())
233-
assert.NoError(t, os.RemoveAll(setting.RepoRootPath))
234+
assert.NoError(t, util.RemoveAll(setting.RepoRootPath))
234235

235236
assert.NoError(t, com.CopyDir(path.Join(filepath.Dir(setting.AppPath), "integrations/gitea-repositories-meta"),
236237
setting.RepoRootPath))
@@ -473,7 +474,7 @@ func GetCSRF(t testing.TB, session *TestSession, urlStr string) string {
473474
func resetFixtures(t *testing.T) {
474475
assert.NoError(t, queue.GetManager().FlushAll(context.Background(), -1))
475476
assert.NoError(t, models.LoadFixtures())
476-
assert.NoError(t, os.RemoveAll(setting.RepoRootPath))
477+
assert.NoError(t, util.RemoveAll(setting.RepoRootPath))
477478
assert.NoError(t, com.CopyDir(path.Join(filepath.Dir(setting.AppPath), "integrations/gitea-repositories-meta"),
478479
setting.RepoRootPath))
479480
}

integrations/migration-test/migration_test.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424
"code.gitea.io/gitea/modules/base"
2525
"code.gitea.io/gitea/modules/charset"
2626
"code.gitea.io/gitea/modules/setting"
27+
"code.gitea.io/gitea/modules/util"
2728

2829
"github.com/stretchr/testify/assert"
2930
"github.com/unknwon/com"
@@ -58,7 +59,7 @@ func initMigrationTest(t *testing.T) func() {
5859
setting.NewContext()
5960

6061
assert.True(t, len(setting.RepoRootPath) != 0)
61-
assert.NoError(t, os.RemoveAll(setting.RepoRootPath))
62+
assert.NoError(t, util.RemoveAll(setting.RepoRootPath))
6263
assert.NoError(t, com.CopyDir(path.Join(filepath.Dir(setting.AppPath), "integrations/gitea-repositories-meta"), setting.RepoRootPath))
6364

6465
setting.CheckLFSVersion()
@@ -129,7 +130,7 @@ func restoreOldDB(t *testing.T, version string) bool {
129130

130131
switch {
131132
case setting.Database.UseSQLite3:
132-
os.Remove(setting.Database.Path)
133+
util.Remove(setting.Database.Path)
133134
err := os.MkdirAll(path.Dir(setting.Database.Path), os.ModePerm)
134135
assert.NoError(t, err)
135136

0 commit comments

Comments
 (0)