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

Appearance settings

Commit 487a4fd

Browse filesBrowse files
committed
Add a test for git.index.util.TemporaryFileSwap
This is a general test for TemporaryFileSwap, but by being parametrized by the type of file_path, it reveals a regression introduced in 9e86053 (#1770). TemporaryFileSwap still works when file_path is a string, but is now broken when it is a Path. That worked before, and the type annotations document that it should be able to work. This is at least a bug because TemporaryFileSwap is public. (I am unsure whether, in practice, GitPython itself uses it in a way that sometimes passes a Path object as file_path. But code that uses GitPython may call it directly and pass Path.)
1 parent 4023f28 commit 487a4fd
Copy full SHA for 487a4fd

File tree

1 file changed

+24
-1
lines changed
Filter options

1 file changed

+24
-1
lines changed

‎test/test_index.py

Copy file name to clipboardExpand all lines: test/test_index.py
+24-1Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,11 @@
3434
)
3535
from git.index.fun import hook_path
3636
from git.index.typ import BaseIndexEntry, IndexEntry
37+
from git.index.util import TemporaryFileSwap
3738
from git.objects import Blob
38-
from test.lib import TestBase, fixture, fixture_path, with_rw_directory, with_rw_repo
3939
from git.util import Actor, hex_to_bin, rmtree
4040
from gitdb.base import IStream
41+
from test.lib import TestBase, fixture, fixture_path, with_rw_directory, with_rw_repo
4142

4243
HOOKS_SHEBANG = "#!/usr/bin/env sh\n"
4344

@@ -1087,3 +1088,25 @@ def test_index_add_pathlike(self, rw_repo):
10871088
file.touch()
10881089

10891090
rw_repo.index.add(file)
1091+
1092+
1093+
class TestIndexUtils:
1094+
@pytest.mark.parametrize("file_path_type", [str, Path])
1095+
def test_temporary_file_swap(self, tmp_path, file_path_type):
1096+
file_path = tmp_path / "foo"
1097+
file_path.write_bytes(b"some data")
1098+
1099+
with TemporaryFileSwap(file_path_type(file_path)) as ctx:
1100+
assert Path(ctx.file_path) == file_path
1101+
assert not file_path.exists()
1102+
1103+
# Recreate it with new data, so we can observe that they're really separate.
1104+
file_path.write_bytes(b"other data")
1105+
1106+
temp_file_path = Path(ctx.tmp_file_path)
1107+
assert temp_file_path.parent == file_path.parent
1108+
assert temp_file_path.name.startswith(file_path.name)
1109+
assert temp_file_path.read_bytes() == b"some data"
1110+
1111+
assert not temp_file_path.exists()
1112+
assert file_path.read_bytes() == b"some data" # Not b"other data".

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.