Move write_info_refs to dulwich.refs.
authorJelmer Vernooij <jelmer@samba.org>
Mon, 4 Nov 2013 10:50:24 +0000 (10:50 +0000)
committerJelmer Vernooij <jelmer@samba.org>
Mon, 4 Nov 2013 10:50:24 +0000 (10:50 +0000)
dulwich/refs.py
dulwich/server.py

index 30acd35d2a2bd9d762abfddc37caf7929199ff92..8a5941a98783d351bee3ebd4625aabee2767c197 100644 (file)
@@ -748,4 +748,18 @@ def read_info_refs(f):
     return ret
 
 
-
+def write_info_refs(refs, store):
+    """Generate info refs."""
+    for name, sha in sorted(refs.items()):
+        # get_refs() includes HEAD as a special case, but we don't want to
+        # advertise it
+        if name == 'HEAD':
+            continue
+        try:
+            o = store[sha]
+        except KeyError:
+            continue
+        peeled = store.peel_sha(sha)
+        yield '%s\t%s\n' % (o.id, name)
+        if o.id != peeled.id:
+            yield '%s\t%s^{}\n' % (peeled.id, name)
index 58efbd1174d5d605f8115b56d9153ce7df824344..be0de92d64b00cc0baa8829d6edb8b364ede9fd0 100644 (file)
@@ -77,6 +77,9 @@ from dulwich.protocol import (
     extract_capabilities,
     extract_want_line_capabilities,
     )
+from dulwich.refs import (
+    write_info_refs,
+    )
 from dulwich.repo import (
     Repo,
     )
@@ -101,8 +104,8 @@ class Backend(object):
 class BackendRepo(object):
     """Repository abstraction used by the Git server.
 
-    Please note that the methods required here are a
-    subset of those provided by dulwich.repo.Repo.
+    The methods required here are a subset of those provided by
+    dulwich.repo.Repo.
     """
 
     object_store = None
@@ -829,19 +832,7 @@ def serve_command(handler_cls, argv=sys.argv, backend=None, inf=sys.stdin,
 def generate_info_refs(repo):
     """Generate an info refs file."""
     refs = repo.get_refs()
-    for name in sorted(refs.iterkeys()):
-        # get_refs() includes HEAD as a special case, but we don't want to
-        # advertise it
-        if name == 'HEAD':
-            continue
-        sha = refs[name]
-        o = repo.object_store[sha]
-        if not o:
-            continue
-        yield '%s\t%s\n' % (sha, name)
-        peeled_sha = repo.get_peeled(name)
-        if peeled_sha != sha:
-            yield '%s\t%s^{}\n' % (peeled_sha, name)
+    return write_info_refs(repo.get_refs(), repo.object_store)
 
 
 def generate_objects_info_packs(repo):