# HG changeset patch # User Sean Farley <sean@farley.io> # Date 1431715139 25200 # Fri May 15 11:38:59 2015 -0700 # Node ID 31f52d62ae13526fe111f8b871f248dc070bf610 # Parent 6faa33912cd5c044a7e79773783652734c73bba0 compat: add method for dulwich to return the symref diff --git a/hggit/compat.py b/hggit/compat.py --- a/hggit/compat.py +++ b/hggit/compat.py @@ -35,3 +35,28 @@ except TypeError: # compat with hg < 3.9 return url.passwordmgr(ui) + +# dulwich doesn't return the symref where remote HEAD points, so we monkey +# patch it here +from dulwich.errors import GitProtocolError +from dulwich.protocol import extract_capabilities + +def read_pkt_refs(proto): + server_capabilities = None + refs = {} + # Receive refs from server + for pkt in proto.read_pkt_seq(): + (sha, ref) = pkt.rstrip('\n').split(None, 1) + if sha == 'ERR': + raise GitProtocolError(ref) + if server_capabilities is None: + (ref, server_capabilities) = extract_capabilities(ref) + symref = 'symref=HEAD:' + for cap in server_capabilities: + if cap.startswith(symref): + sha = cap.replace(symref, '') + refs[ref] = sha + + if len(refs) == 0: + return None, set([]) + return refs, set(server_capabilities)