Skip to content

Commit f21630b

Browse files
committed
fix(refs): handle quoted branch names
Fixes #550
1 parent 0691441 commit f21630b

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

git/refs/head.py

+7-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,12 @@
88
__all__ = ["HEAD", "Head"]
99

1010

11+
def strip_quotes(string):
12+
if string.startswith('"') and string.endswith('"'):
13+
return string[1:-1]
14+
return string
15+
16+
1117
class HEAD(SymbolicReference):
1218

1319
"""Special case of a Symbolic Reference as it represents the repository's
@@ -152,7 +158,7 @@ def tracking_branch(self):
152158
from .remote import RemoteReference
153159
reader = self.config_reader()
154160
if reader.has_option(self.k_config_remote) and reader.has_option(self.k_config_remote_ref):
155-
ref = Head(self.repo, Head.to_full_path(reader.get_value(self.k_config_remote_ref)))
161+
ref = Head(self.repo, Head.to_full_path(strip_quotes(reader.get_value(self.k_config_remote_ref))))
156162
remote_refpath = RemoteReference.to_full_path(join_path(reader.get_value(self.k_config_remote), ref.name))
157163
return RemoteReference(self.repo, remote_refpath)
158164
# END handle have tracking branch

git/test/test_refs.py

+12
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,18 @@ def test_heads(self, rwrepo):
119119
assert head.tracking_branch() == remote_ref
120120
head.set_tracking_branch(None)
121121
assert head.tracking_branch() is None
122+
123+
124+
special_name = 'feature#123'
125+
special_name_remote_ref = SymbolicReference.create(rwrepo, 'refs/remotes/origin/%s' % special_name)
126+
gp_tracking_branch = rwrepo.create_head('gp_tracking#123')
127+
special_name_remote_ref = rwrepo.remotes[0].refs[special_name] # get correct type
128+
gp_tracking_branch.set_tracking_branch(special_name_remote_ref)
129+
assert gp_tracking_branch.tracking_branch().path == special_name_remote_ref.path
130+
131+
git_tracking_branch = rwrepo.create_head('git_tracking#123')
132+
rwrepo.git.branch('-u', special_name_remote_ref.name, git_tracking_branch.name)
133+
assert git_tracking_branch.tracking_branch().name == special_name_remote_ref.name
122134
# END for each head
123135

124136
# verify REFLOG gets altered

0 commit comments

Comments
 (0)