mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-11-04 05:25:15 +01:00 
			
		
		
		
	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>
This commit is contained in:
		
							parent
							
								
									5d43801b72
								
							
						
					
					
						commit
						feca8802b8
					
				@ -50,25 +50,35 @@ func (repo *Repository) readTreeToIndex(id ObjectID, indexFilename ...string) er
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// ReadTreeToTemporaryIndex reads a treeish to a temporary index file
 | 
					// 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) {
 | 
				
			||||||
	tmpDir, err = os.MkdirTemp("", "index")
 | 
						defer func() {
 | 
				
			||||||
	if err != nil {
 | 
							// if error happens and there is a cancel function, do clean up
 | 
				
			||||||
		return filename, tmpDir, cancel, err
 | 
							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)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	filename = filepath.Join(tmpDir, ".tmp-index")
 | 
						tmpDir, err = os.MkdirTemp("", "index")
 | 
				
			||||||
	cancel = func() {
 | 
					 | 
				
			||||||
		err := util.RemoveAll(tmpDir)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
			log.Error("failed to remove tmp index file: %v", err)
 | 
							return "", "", nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	}
 | 
					
 | 
				
			||||||
	err = repo.ReadTreeToIndex(treeish, filename)
 | 
						tmpIndexFilename = filepath.Join(tmpDir, ".tmp-index")
 | 
				
			||||||
 | 
						cancel = removeDirFn(tmpDir)
 | 
				
			||||||
 | 
						err = repo.ReadTreeToIndex(treeish, tmpIndexFilename)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		defer cancel()
 | 
							return "", "", cancel, err
 | 
				
			||||||
		return "", "", func() {}, err
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return filename, tmpDir, cancel, err
 | 
						return tmpIndexFilename, tmpDir, cancel, err
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// EmptyIndex empties the index
 | 
					// EmptyIndex empties the index
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user