|
10 | 10 |
|
11 | 11 | from git import _backend |
12 | 12 | from git.cmd import Git, handle_process_output |
13 | | -from git.compat import defenc |
| 13 | +from git.compat import defenc, safe_decode |
14 | 14 | from git.objects.base import IndexObject |
15 | 15 | from git.objects.blob import Blob |
16 | 16 | from git.objects.util import mode_str_to_int |
@@ -486,7 +486,7 @@ def __init__( |
486 | 486 | # we need to overwrite "repo" to the corresponding submodule's repo instead. |
487 | 487 | if repo and a_rawpath and (self.a_mode == 0o160000 or self.b_mode == 0o160000): |
488 | 488 | for submodule in repo.submodules: |
489 | | - if submodule.path == a_rawpath.decode(defenc, "replace"): |
| 489 | + if submodule.path == safe_decode(a_rawpath): |
490 | 490 | if submodule.module_exists(): |
491 | 491 | repo = submodule.module() |
492 | 492 | break |
@@ -582,24 +582,24 @@ def __str__(self) -> str: |
582 | 582 |
|
583 | 583 | @property |
584 | 584 | def a_path(self) -> Optional[str]: |
585 | | - return self.a_rawpath.decode(defenc, "replace") if self.a_rawpath else None |
| 585 | + return safe_decode(self.a_rawpath) if self.a_rawpath else None |
586 | 586 |
|
587 | 587 | @property |
588 | 588 | def b_path(self) -> Optional[str]: |
589 | | - return self.b_rawpath.decode(defenc, "replace") if self.b_rawpath else None |
| 589 | + return safe_decode(self.b_rawpath) if self.b_rawpath else None |
590 | 590 |
|
591 | 591 | @property |
592 | 592 | def rename_from(self) -> Optional[str]: |
593 | | - return self.raw_rename_from.decode(defenc, "replace") if self.raw_rename_from else None |
| 593 | + return safe_decode(self.raw_rename_from) if self.raw_rename_from else None |
594 | 594 |
|
595 | 595 | @property |
596 | 596 | def rename_to(self) -> Optional[str]: |
597 | | - return self.raw_rename_to.decode(defenc, "replace") if self.raw_rename_to else None |
| 597 | + return safe_decode(self.raw_rename_to) if self.raw_rename_to else None |
598 | 598 |
|
599 | 599 | @property |
600 | 600 | def renamed_file(self) -> bool: |
601 | 601 | """:return: ``True`` if the blob of our diff has been renamed""" |
602 | | - return self.rename_from != self.rename_to |
| 602 | + return self.raw_rename_from != self.raw_rename_to |
603 | 603 |
|
604 | 604 | @classmethod |
605 | 605 | def _pick_best_path(cls, path_match: bytes, rename_match: bytes, path_fallback_match: bytes) -> Optional[bytes]: |
@@ -742,8 +742,8 @@ def finalize_process_with_stderr(proc: Union["Popen", "Git.AutoInterrupt"]) -> N |
742 | 742 | new_file, |
743 | 743 | deleted_file, |
744 | 744 | copied_file, |
745 | | - rename_from, |
746 | | - rename_to, |
| 745 | + decode_path(rename_from, has_ab_prefix=False) if rename_from else None, |
| 746 | + decode_path(rename_to, has_ab_prefix=False) if rename_to else None, |
747 | 747 | None, |
748 | 748 | None, |
749 | 749 | None, |
|
0 commit comments