Skip to content

Commit 073ba97

Browse files
lunnywxiaoguang
andauthored
Fix clean tmp dir (#32360) (#32593)
Backport #32360 Try to fix #31792 Credit to @jeroenlaylo Copied from #31792 (comment) Co-authored-by: wxiaoguang <[email protected]>
1 parent 2b8b277 commit 073ba97

File tree

1 file changed

+23
-13
lines changed

1 file changed

+23
-13
lines changed

modules/git/repo_index.go

+23-13
Original file line numberDiff line numberDiff line change
@@ -50,25 +50,35 @@ func (repo *Repository) readTreeToIndex(id ObjectID, indexFilename ...string) er
5050
}
5151

5252
// ReadTreeToTemporaryIndex reads a treeish to a temporary index file
53-
func (repo *Repository) ReadTreeToTemporaryIndex(treeish string) (filename, tmpDir string, cancel context.CancelFunc, err error) {
53+
func (repo *Repository) ReadTreeToTemporaryIndex(treeish string) (tmpIndexFilename, tmpDir string, cancel context.CancelFunc, err error) {
54+
defer func() {
55+
// if error happens and there is a cancel function, do clean up
56+
if err != nil && cancel != nil {
57+
cancel()
58+
cancel = nil
59+
}
60+
}()
61+
62+
removeDirFn := func(dir string) func() { // it can't use the return value "tmpDir" directly because it is empty when error occurs
63+
return func() {
64+
if err := util.RemoveAll(dir); err != nil {
65+
log.Error("failed to remove tmp index dir: %v", err)
66+
}
67+
}
68+
}
69+
5470
tmpDir, err = os.MkdirTemp("", "index")
5571
if err != nil {
56-
return filename, tmpDir, cancel, err
72+
return "", "", nil, err
5773
}
5874

59-
filename = filepath.Join(tmpDir, ".tmp-index")
60-
cancel = func() {
61-
err := util.RemoveAll(tmpDir)
62-
if err != nil {
63-
log.Error("failed to remove tmp index file: %v", err)
64-
}
65-
}
66-
err = repo.ReadTreeToIndex(treeish, filename)
75+
tmpIndexFilename = filepath.Join(tmpDir, ".tmp-index")
76+
cancel = removeDirFn(tmpDir)
77+
err = repo.ReadTreeToIndex(treeish, tmpIndexFilename)
6778
if err != nil {
68-
defer cancel()
69-
return "", "", func() {}, err
79+
return "", "", cancel, err
7080
}
71-
return filename, tmpDir, cancel, err
81+
return tmpIndexFilename, tmpDir, cancel, err
7282
}
7383

7484
// EmptyIndex empties the index

0 commit comments

Comments
 (0)