diff options
author | Sebastian Thiel <byronimo@gmail.com> | 2016-12-08 16:01:35 +0100 |
---|---|---|
committer | Sebastian Thiel <byronimo@gmail.com> | 2016-12-08 16:01:35 +0100 |
commit | f21630bcf83c363916d858dd7b6cb1edc75e2d3b (patch) | |
tree | 9e5667dd959ab17bb124c29de5a1b21668dc8474 | |
parent | 06914415434cf002f712a81712024fd90cea2862 (diff) | |
download | gitpython-f21630bcf83c363916d858dd7b6cb1edc75e2d3b.tar.gz |
fix(refs): handle quoted branch names
Fixes #550
-rw-r--r-- | git/refs/head.py | 8 | ||||
-rw-r--r-- | git/test/test_refs.py | 12 |
2 files changed, 19 insertions, 1 deletions
diff --git a/git/refs/head.py b/git/refs/head.py index 9a9a8596..9ad890db 100644 --- a/git/refs/head.py +++ b/git/refs/head.py @@ -8,6 +8,12 @@ from .reference import Reference __all__ = ["HEAD", "Head"] +def strip_quotes(string): + if string.startswith('"') and string.endswith('"'): + return string[1:-1] + return string + + class HEAD(SymbolicReference): """Special case of a Symbolic Reference as it represents the repository's @@ -152,7 +158,7 @@ class Head(Reference): from .remote import RemoteReference reader = self.config_reader() if reader.has_option(self.k_config_remote) and reader.has_option(self.k_config_remote_ref): - ref = Head(self.repo, Head.to_full_path(reader.get_value(self.k_config_remote_ref))) + ref = Head(self.repo, Head.to_full_path(strip_quotes(reader.get_value(self.k_config_remote_ref)))) remote_refpath = RemoteReference.to_full_path(join_path(reader.get_value(self.k_config_remote), ref.name)) return RemoteReference(self.repo, remote_refpath) # END handle have tracking branch diff --git a/git/test/test_refs.py b/git/test/test_refs.py index fd0be108..0928c8cb 100644 --- a/git/test/test_refs.py +++ b/git/test/test_refs.py @@ -119,6 +119,18 @@ class TestRefs(TestBase): assert head.tracking_branch() == remote_ref head.set_tracking_branch(None) assert head.tracking_branch() is None + + + special_name = 'feature#123' + special_name_remote_ref = SymbolicReference.create(rwrepo, 'refs/remotes/origin/%s' % special_name) + gp_tracking_branch = rwrepo.create_head('gp_tracking#123') + special_name_remote_ref = rwrepo.remotes[0].refs[special_name] # get correct type + gp_tracking_branch.set_tracking_branch(special_name_remote_ref) + assert gp_tracking_branch.tracking_branch().path == special_name_remote_ref.path + + git_tracking_branch = rwrepo.create_head('git_tracking#123') + rwrepo.git.branch('-u', special_name_remote_ref.name, git_tracking_branch.name) + assert git_tracking_branch.tracking_branch().name == special_name_remote_ref.name # END for each head # verify REFLOG gets altered |