aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLunny Xiao <xiaolunwen@gmail.com>2024-10-29 09:27:03 -0700
committerGitHub <noreply@github.com>2024-10-29 18:27:03 +0200
commitfeca8802b85dd75090c533ebdb92835d3d529f17 (patch)
tree7a779b1108f3af337317a3ab118004a28a1e81cf
parent5d43801b72790ce5862aefdc4520edb06bb4cbba (diff)
downloadgitea-feca8802b85dd75090c533ebdb92835d3d529f17.tar.gz
gitea-feca8802b85dd75090c533ebdb92835d3d529f17.zip
Fix clean tmp dir (#32360)
Try to fix #31792 Credit to @jeroenlaylo Copied from https://github.com/go-gitea/gitea/issues/31792#issuecomment-2311920520 --------- Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
-rw-r--r--modules/git/repo_index.go36
1 files changed, 23 insertions, 13 deletions
diff --git a/modules/git/repo_index.go b/modules/git/repo_index.go
index 8390570098..f45b6e6191 100644
--- a/modules/git/repo_index.go
+++ b/modules/git/repo_index.go
@@ -50,25 +50,35 @@ func (repo *Repository) readTreeToIndex(id ObjectID, indexFilename ...string) er
}
// ReadTreeToTemporaryIndex reads a treeish to a temporary index file
-func (repo *Repository) ReadTreeToTemporaryIndex(treeish string) (filename, tmpDir string, cancel context.CancelFunc, err error) {
+func (repo *Repository) ReadTreeToTemporaryIndex(treeish string) (tmpIndexFilename, tmpDir string, cancel context.CancelFunc, err error) {
+ defer func() {
+ // if error happens and there is a cancel function, do clean up
+ if err != nil && cancel != nil {
+ cancel()
+ cancel = nil
+ }
+ }()
+
+ removeDirFn := func(dir string) func() { // it can't use the return value "tmpDir" directly because it is empty when error occurs
+ return func() {
+ if err := util.RemoveAll(dir); err != nil {
+ log.Error("failed to remove tmp index dir: %v", err)
+ }
+ }
+ }
+
tmpDir, err = os.MkdirTemp("", "index")
if err != nil {
- return filename, tmpDir, cancel, err
+ return "", "", nil, err
}
- filename = filepath.Join(tmpDir, ".tmp-index")
- cancel = func() {
- err := util.RemoveAll(tmpDir)
- if err != nil {
- log.Error("failed to remove tmp index file: %v", err)
- }
- }
- err = repo.ReadTreeToIndex(treeish, filename)
+ tmpIndexFilename = filepath.Join(tmpDir, ".tmp-index")
+ cancel = removeDirFn(tmpDir)
+ err = repo.ReadTreeToIndex(treeish, tmpIndexFilename)
if err != nil {
- defer cancel()
- return "", "", func() {}, err
+ return "", "", cancel, err
}
- return filename, tmpDir, cancel, err
+ return tmpIndexFilename, tmpDir, cancel, err
}
// EmptyIndex empties the index