# HG changeset patch # User Sean Farley # Date 1511822751 18000 # Node ID 3799bf885c1de6fb932f4d46077bde72ae702abc # Parent 367f9e0dc198f1bbf2b7f18023959a46c461b664 compat: use newer read_pkt_refs from dulwich if possible Beginning with dulwich 0.18, it now supports reporting the symrefs so we no longer need to monkey patch (will require future patches to use the new code, though). diff -r 367f9e0dc198 -r 3799bf885c1d hggit/compat.py --- a/hggit/compat.py Mon Nov 27 17:40:59 2017 -0500 +++ b/hggit/compat.py Mon Nov 27 17:45:51 2017 -0500 @@ -52,30 +52,38 @@ # 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 + +try: + import dulwich.client + FetchPackResult = dulwich.client.FetchPackResult + read_pkt_refs = dulwich.client.read_pkt_refs +except (AttributeError, ImportError): + # older 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 + 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) + if len(refs) == 0: + return None, set([]) + return refs, set(server_capabilities) CONFIG_DEFAULTS = {