Skip to content

Updating regex pattern to handle unicode whitespaces. #1853

New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions git/remote.py
Original file line number Diff line number Diff line change
Expand Up @@ -325,7 +325,7 @@ class FetchInfo(IterableObj):
ERROR,
) = [1 << x for x in range(8)]

_re_fetch_result = re.compile(r"^\s*(.) (\[[\w\s\.$@]+\]|[\w\.$@]+)\s+(.+) -> ([^\s]+)( \(.*\)?$)?")
_re_fetch_result = re.compile(r"^ *(.) (\[[\w \.$@]+\]|[\w\.$@]+) +(.+) -> ([^ ]+)( \(.*\)?$)?")

_flag_map: Dict[flagKeyLiteral, int] = {
"!": ERROR,
Expand Down Expand Up @@ -891,7 +891,7 @@ def _get_fetch_info_from_stderr(
None,
progress_handler,
finalizer=None,
decode_streams=False,
decode_streams=True,
kill_after_timeout=kill_after_timeout,
)

Expand Down Expand Up @@ -1068,7 +1068,7 @@ def fetch(
Git.check_unsafe_options(options=list(kwargs.keys()), unsafe_options=self.unsafe_git_fetch_options)

proc = self.repo.git.fetch(
"--", self, *args, as_process=True, with_stdout=False, universal_newlines=True, v=verbose, **kwargs
"--", self, *args, as_process=True, with_stdout=False, v=verbose, **kwargs
)
res = self._get_fetch_info_from_stderr(proc, progress, kill_after_timeout=kill_after_timeout)
if hasattr(self.repo.odb, "update_cache"):
Expand Down
16 changes: 16 additions & 0 deletions test/test_remote.py
Original file line number Diff line number Diff line change
Expand Up @@ -1002,6 +1002,22 @@ def test_push_unsafe_options_allowed(self, rw_repo):
assert tmp_file.exists()
tmp_file.unlink()

@with_rw_and_rw_remote_repo("0.1.6")
def test_fetch_unsafe_branch_name(self, rw_repo, remote_repo):
# Create branch with a name containing a NBSP
bad_branch_name = f"branch_with_{chr(160)}_nbsp"
Head.create(remote_repo, bad_branch_name)

# Fetch and get branches
remote = rw_repo.remote("origin")
branches = remote.fetch()

# Test for truncated branch name in branches
assert f"origin/{bad_branch_name}" in [b.name for b in branches]

# Cleanup branch
Head.delete(remote_repo, bad_branch_name)


class TestTimeouts(TestBase):
@with_rw_repo("HEAD", bare=False)
Expand Down