diff --git a/git/diff.py b/git/diff.py index 0fc30b9eb..cd7cc23c4 100644 --- a/git/diff.py +++ b/git/diff.py @@ -108,6 +108,7 @@ def diff(self, other=Index, paths=None, create_patch=False, **kwargs): args.append("-p") else: args.append("--raw") + args.append("-z") # in any way, assure we don't see colored output, # fixes https://github.com/gitpython-developers/GitPython/issues/172 @@ -483,7 +484,7 @@ def handle_diff_line(line): if not line.startswith(":"): return - meta, _, path = line[1:].partition('\t') + meta, _, path = line[1:].partition('\x00') old_mode, new_mode, a_blob_id, b_blob_id, _change_type = meta.split(None, 4) # Change type can be R100 # R: status letter @@ -510,11 +511,11 @@ def handle_diff_line(line): new_file = True elif change_type == 'C': copied_file = True - a_path, b_path = path.split('\t', 1) + a_path, b_path = path.split('\x00', 1) a_path = a_path.encode(defenc) b_path = b_path.encode(defenc) elif change_type == 'R': - a_path, b_path = path.split('\t', 1) + a_path, b_path = path.split('\x00', 1) a_path = a_path.encode(defenc) b_path = b_path.encode(defenc) rename_from, rename_to = a_path, b_path diff --git a/test/test_diff.py b/test/test_diff.py index 378a58de5..c6c9b67a0 100644 --- a/test/test_diff.py +++ b/test/test_diff.py @@ -26,6 +26,10 @@ import os.path as osp +def to_raw(input): + return input.replace(b'\t', b'\x00') + + @ddt.ddt class TestDiff(TestBase): @@ -112,7 +116,7 @@ def test_diff_with_rename(self): self.assertEqual(diff.raw_rename_to, b'm\xc3\xbcller') assert isinstance(str(diff), str) - output = StringProcessAdapter(fixture('diff_rename_raw')) + output = StringProcessAdapter(to_raw(fixture('diff_rename_raw'))) diffs = Diff._index_from_raw_format(self.rorepo, output) self.assertEqual(len(diffs), 1) diff = diffs[0] @@ -137,7 +141,7 @@ def test_diff_with_copied_file(self): self.assertTrue(diff.b_path, 'test2.txt') assert isinstance(str(diff), str) - output = StringProcessAdapter(fixture('diff_copied_mode_raw')) + output = StringProcessAdapter(to_raw(fixture('diff_copied_mode_raw'))) diffs = Diff._index_from_raw_format(self.rorepo, output) self.assertEqual(len(diffs), 1) diff = diffs[0] @@ -165,7 +169,7 @@ def test_diff_with_change_in_type(self): self.assertIsNotNone(diff.new_file) assert isinstance(str(diff), str) - output = StringProcessAdapter(fixture('diff_change_in_type_raw')) + output = StringProcessAdapter(to_raw(fixture('diff_change_in_type_raw'))) diffs = Diff._index_from_raw_format(self.rorepo, output) self.assertEqual(len(diffs), 1) diff = diffs[0] @@ -175,7 +179,7 @@ def test_diff_with_change_in_type(self): self.assertEqual(len(list(diffs.iter_change_type('T'))), 1) def test_diff_of_modified_files_not_added_to_the_index(self): - output = StringProcessAdapter(fixture('diff_abbrev-40_full-index_M_raw_no-color')) + output = StringProcessAdapter(to_raw(fixture('diff_abbrev-40_full-index_M_raw_no-color'))) diffs = Diff._index_from_raw_format(self.rorepo, output) self.assertEqual(len(diffs), 1, 'one modification') pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy