Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit8186159

Browse files
committed
Don't rely on __del__
1 parent741edb5 commit8186159

File tree

2 files changed

+21
-12
lines changed

2 files changed

+21
-12
lines changed

‎git/index/base.py

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
# This module is part of GitPython and is released under
55
# the BSD License: http://www.opensource.org/licenses/bsd-license.php
66

7+
fromcontextlibimportExitStack
78
importdatetime
89
importglob
910
fromioimportBytesIO
@@ -360,20 +361,19 @@ def from_tree(cls, repo: "Repo", *treeish: Treeish, **kwargs: Any) -> "IndexFile
360361
# as it considers existing entries. moving it essentially clears the index.
361362
# Unfortunately there is no 'soft' way to do it.
362363
# The TemporaryFileSwap assure the original file get put back
363-
ifrepo.git_dir:
364-
index_handler=TemporaryFileSwap(join_path_native(repo.git_dir,"index"))
365364
try:
366-
repo.git.read_tree(*arg_list,**kwargs)
367-
index=cls(repo,tmp_index)
368-
index.entries# force it to read the file as we will delete the temp-file
369-
delindex_handler# release as soon as possible
365+
withExitStack()asstack:
366+
ifrepo.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+
returnindex
370372
finally:
371373
ifosp.exists(tmp_index):
372374
os.remove(tmp_index)
373375
# END index merge handling
374376

375-
returnindex
376-
377377
# UTILITIES
378378
@unbare_repo
379379
def_iter_expand_paths(self:"IndexFile",paths:Sequence[PathLike])->Iterator[PathLike]:
@@ -1156,7 +1156,6 @@ def checkout(
11561156
unknown_lines= []
11571157

11581158
defhandle_stderr(proc:"Popen[bytes]",iter_checked_out_files:Iterable[PathLike])->None:
1159-
11601159
stderr_IO=proc.stderr
11611160
ifnotstderr_IO:
11621161
returnNone# return early if stderr empty

‎git/index/util.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
importos
44
importstruct
55
importtempfile
6+
fromtypesimportTracebackType
67

78
fromgit.compatimportis_win
89

@@ -11,7 +12,7 @@
1112

1213
# typing ----------------------------------------------------------------------
1314

14-
fromtypingimportAny,Callable,TYPE_CHECKING
15+
fromtypingimportAny,Callable,TYPE_CHECKING,Optional,Type
1516

1617
fromgit.typesimportPathLike,_T
1718

@@ -47,12 +48,21 @@ def __init__(self, file_path: PathLike) -> None:
4748
exceptOSError:
4849
pass
4950

50-
def__del__(self)->None:
51+
def__enter__(self)->"TemporaryFileSwap":
52+
returnself
53+
54+
def__exit__(
55+
self,
56+
exc_type:Optional[Type[BaseException]],
57+
exc_val:Optional[BaseException],
58+
exc_tb:Optional[TracebackType],
59+
)->bool:
5160
ifosp.isfile(self.tmp_file_path):
5261
ifis_winandosp.exists(self.file_path):
5362
os.remove(self.file_path)
5463
os.rename(self.tmp_file_path,self.file_path)
55-
# END temp file exists
64+
65+
returnFalse
5666

5767

5868
# { Decorators

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp