-
-
Notifications
You must be signed in to change notification settings - Fork 907
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix IndexFile.from_tree on Windows #1751
Changes from all commits
e359718
b12fd4a
12bbace
928ca1e
9e5d0aa
782c062
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -17,17 +17,21 @@ | |
from sumtypes import constructor, sumtype | ||
|
||
from git import ( | ||
BlobFilter, | ||
Diff, | ||
Git, | ||
IndexFile, | ||
Object, | ||
Repo, | ||
BlobFilter, | ||
UnmergedEntriesError, | ||
Tree, | ||
Object, | ||
Diff, | ||
GitCommandError, | ||
) | ||
from git.exc import ( | ||
CheckoutError, | ||
GitCommandError, | ||
HookExecutionError, | ||
InvalidGitRepositoryError, | ||
UnmergedEntriesError, | ||
) | ||
from git.exc import HookExecutionError, InvalidGitRepositoryError | ||
from git.index.fun import hook_path | ||
from git.index.typ import BaseIndexEntry, IndexEntry | ||
from git.objects import Blob | ||
|
@@ -284,14 +288,6 @@ def add_bad_blob(): | |
except Exception as ex: | ||
assert "index.lock' could not be obtained" not in str(ex) | ||
|
||
@pytest.mark.xfail( | ||
os.name == "nt", | ||
reason=( | ||
"IndexFile.from_tree is broken on Windows (related to NamedTemporaryFile), see #1630.\n" | ||
"'git read-tree --index-output=...' fails with 'fatal: unable to write new index file'." | ||
), | ||
raises=GitCommandError, | ||
) | ||
@with_rw_repo("0.1.6") | ||
def test_index_file_from_tree(self, rw_repo): | ||
common_ancestor_sha = "5117c9c8a4d3af19a9958677e45cda9269de1541" | ||
|
@@ -342,14 +338,6 @@ def test_index_file_from_tree(self, rw_repo): | |
# END for each blob | ||
self.assertEqual(num_blobs, len(three_way_index.entries)) | ||
|
||
@pytest.mark.xfail( | ||
os.name == "nt", | ||
reason=( | ||
"IndexFile.from_tree is broken on Windows (related to NamedTemporaryFile), see #1630.\n" | ||
"'git read-tree --index-output=...' fails with 'fatal: unable to write new index file'." | ||
), | ||
raises=GitCommandError, | ||
) | ||
@with_rw_repo("0.1.6") | ||
def test_index_merge_tree(self, rw_repo): | ||
# A bit out of place, but we need a different repo for this: | ||
|
@@ -412,14 +400,6 @@ def test_index_merge_tree(self, rw_repo): | |
self.assertEqual(len(unmerged_blobs), 1) | ||
self.assertEqual(list(unmerged_blobs.keys())[0], manifest_key[0]) | ||
|
||
@pytest.mark.xfail( | ||
os.name == "nt", | ||
reason=( | ||
"IndexFile.from_tree is broken on Windows (related to NamedTemporaryFile), see #1630.\n" | ||
"'git read-tree --index-output=...' fails with 'fatal: unable to write new index file'." | ||
), | ||
raises=GitCommandError, | ||
) | ||
@with_rw_repo("0.1.6") | ||
def test_index_file_diffing(self, rw_repo): | ||
# Default Index instance points to our index. | ||
|
@@ -555,12 +535,9 @@ def _count_existing(self, repo, files): | |
# END num existing helper | ||
|
||
@pytest.mark.xfail( | ||
os.name == "nt", | ||
reason=( | ||
"IndexFile.from_tree is broken on Windows (related to NamedTemporaryFile), see #1630.\n" | ||
"'git read-tree --index-output=...' fails with 'fatal: unable to write new index file'." | ||
), | ||
raises=GitCommandError, | ||
os.name == "nt" and Git().config("core.symlinks") == "true", | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'm unsure if this is the best way for the There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think GitPython has the same problem that That's the configuration file that contains these values, on Windows at least. Maybe Windows will also put that value into the repository-local configuration file, which might be the reason this condition works at all. And since it works, I suppose it's good enough for now? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
At least in the more common
(This is the same GitPython as when I run it from the So I think the condition is working because
|
||
reason="Assumes symlinks are not created on Windows and opens a symlink to a nonexistent target.", | ||
raises=FileNotFoundError, | ||
) | ||
@with_rw_repo("0.1.6") | ||
def test_index_mutation(self, rw_repo): | ||
|
@@ -772,7 +749,7 @@ def mixed_iterator(): | |
# END for each target | ||
# END real symlink test | ||
|
||
# Add fake symlink and assure it checks-our as symlink. | ||
# Add fake symlink and assure it checks out as a symlink. | ||
fake_symlink_relapath = "my_fake_symlink" | ||
link_target = "/etc/that" | ||
fake_symlink_path = self._make_file(fake_symlink_relapath, link_target, rw_repo) | ||
|
@@ -806,7 +783,7 @@ def mixed_iterator(): | |
os.remove(fake_symlink_path) | ||
index.checkout(fake_symlink_path) | ||
|
||
# On Windows, we will never get symlinks. | ||
# On Windows, we currently assume we will never get symlinks. | ||
if os.name == "nt": | ||
# Symlinks should contain the link as text (which is what a | ||
# symlink actually is). | ||
|
@@ -915,14 +892,6 @@ def make_paths(): | |
for absfile in absfiles: | ||
assert osp.isfile(absfile) | ||
|
||
@pytest.mark.xfail( | ||
os.name == "nt", | ||
reason=( | ||
"IndexFile.from_tree is broken on Windows (related to NamedTemporaryFile), see #1630.\n" | ||
"'git read-tree --index-output=...' fails with 'fatal: unable to write new index file'." | ||
), | ||
raises=GitCommandError, | ||
) | ||
@with_rw_repo("HEAD") | ||
def test_compare_write_tree(self, rw_repo): | ||
"""Test writing all trees, comparing them for equality.""" | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
About time :D!