@@ -353,26 +353,22 @@ def from_tree(cls, repo: "Repo", *treeish: Treeish, **kwargs: Any) -> "IndexFile
353353
354354 # tmp file created in git home directory to be sure renaming
355355 # works - /tmp/ dirs could be on another device
356- tmp_index = tempfile .mktemp ("" , "" , repo .git_dir )
357- arg_list .append ("--index-output=%s" % tmp_index )
358- arg_list .extend (treeish )
359-
360- # move current index out of the way - otherwise the merge may fail
361- # as it considers existing entries. moving it essentially clears the index.
362- # Unfortunately there is no 'soft' way to do it.
363- # The TemporaryFileSwap assure the original file get put back
364- try :
365- with ExitStack () as stack :
366- if repo .git_dir :
367- stack .enter_context (TemporaryFileSwap (join_path_native (repo .git_dir , "index" )))
368- repo .git .read_tree (* arg_list , ** kwargs )
369- index = cls (repo , tmp_index )
370- index .entries # force it to read the file as we will delete the temp-file
371- return index
372- finally :
373- if osp .exists (tmp_index ):
374- os .remove (tmp_index )
375- # END index merge handling
356+ with ExitStack () as stack :
357+ tmp_index = stack .enter_context (tempfile .NamedTemporaryFile (dir = repo .git_dir ))
358+ arg_list .append ("--index-output=%s" % tmp_index .name )
359+ arg_list .extend (treeish )
360+
361+ # move current index out of the way - otherwise the merge may fail
362+ # as it considers existing entries. moving it essentially clears the index.
363+ # Unfortunately there is no 'soft' way to do it.
364+ # The TemporaryFileSwap assure the original file get put back
365+
366+ stack .enter_context (TemporaryFileSwap (join_path_native (repo .git_dir , "index" )))
367+ repo .git .read_tree (* arg_list , ** kwargs )
368+ index = cls (repo , tmp_index .name )
369+ index .entries # force it to read the file as we will delete the temp-file
370+ return index
371+ # END index merge handling
376372
377373 # UTILITIES
378374 @unbare_repo
0 commit comments