|
4 | 4 | # This module is part of GitPython and is released under |
5 | 5 | # the BSD License: http://www.opensource.org/licenses/bsd-license.php |
6 | 6 |
|
| 7 | +fromcontextlibimportExitStack |
7 | 8 | importdatetime |
8 | 9 | importglob |
9 | 10 | fromioimportBytesIO |
@@ -352,27 +353,22 @@ def from_tree(cls, repo: "Repo", *treeish: Treeish, **kwargs: Any) -> "IndexFile |
352 | 353 |
|
353 | 354 | # tmp file created in git home directory to be sure renaming |
354 | 355 | # works - /tmp/ dirs could be on another device |
355 | | -tmp_index=tempfile.mktemp("","",repo.git_dir) |
356 | | -arg_list.append("--index-output=%s"%tmp_index) |
357 | | -arg_list.extend(treeish) |
358 | | - |
359 | | -# move current index out of the way - otherwise the merge may fail |
360 | | -# as it considers existing entries. moving it essentially clears theindex. |
361 | | -# Unfortunately there is no 'soft' way to do it. |
362 | | -# The TemporaryFileSwap assure the original file get put back |
363 | | -ifrepo.git_dir: |
364 | | -index_handler=TemporaryFileSwap(join_path_native(repo.git_dir,"index")) |
365 | | -try: |
| 356 | +withExitStack()asstack: |
| 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 themerge 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"))) |
366 | 367 | repo.git.read_tree(*arg_list,**kwargs) |
367 | | -index=cls(repo,tmp_index) |
| 368 | +index=cls(repo,tmp_index.name) |
368 | 369 | index.entries# force it to read the file as we will delete the temp-file |
369 | | -delindex_handler# release as soon as possible |
370 | | -finally: |
371 | | -ifosp.exists(tmp_index): |
372 | | -os.remove(tmp_index) |
373 | | -# END index merge handling |
374 | | - |
375 | | -returnindex |
| 370 | +returnindex |
| 371 | +# END index merge handling |
376 | 372 |
|
377 | 373 | # UTILITIES |
378 | 374 | @unbare_repo |
@@ -1156,7 +1152,6 @@ def checkout( |
1156 | 1152 | unknown_lines= [] |
1157 | 1153 |
|
1158 | 1154 | defhandle_stderr(proc:"Popen[bytes]",iter_checked_out_files:Iterable[PathLike])->None: |
1159 | | - |
1160 | 1155 | stderr_IO=proc.stderr |
1161 | 1156 | ifnotstderr_IO: |
1162 | 1157 | returnNone# return early if stderr empty |
|