Bläddra i källkod

Unify handling of markers.

Jelmer Vernooij 7 år sedan
förälder
incheckning
7328aad13e
1 ändrade filer med 9 tillägg och 12 borttagningar
  1. 9 12
      dulwich/fastexport.py

+ 9 - 12
dulwich/fastexport.py

@@ -133,6 +133,11 @@ class GitImportProcessor(processor.ImportProcessor):
         self.markers = {}
         self._contents = {}
 
+    def lookup_object(self, objectish):
+        if objectish.startswith(b":"):
+            return self.markers[objectish[1:]]
+        return objectish
+
     def import_stream(self, stream):
         p = parser.ImportParser(stream)
         self.process(p.iter_commands)
@@ -168,8 +173,7 @@ class GitImportProcessor(processor.ImportProcessor):
         commit.message = cmd.message
         commit.parents = []
         if cmd.from_:
-            if cmd.from_.startswith(b":"):
-                cmd.from_ = self.markers[cmd.from_[1:]]
+            cmd.from_ = self.lookup_object(cmd.from_)
             self._reset_base(cmd.from_)
         for filecmd in cmd.iter_files():
             if filecmd.name == b"filemodify":
@@ -178,10 +182,7 @@ class GitImportProcessor(processor.ImportProcessor):
                     self.repo.object_store.add(blob)
                     blob_id = blob.id
                 else:
-                    assert filecmd.dataref.startswith(b":"), \
-                           ("non-marker refs not supported yet (%r)" %
-                            filecmd.dataref)
-                    blob_id = self.markers[filecmd.dataref[1:]]
+                    blob_id = self.lookup_object(filecmd.dataref)
                 self._contents[filecmd.path] = (filecmd.mode, blob_id)
             elif filecmd.name == b"filedelete":
                 del self._contents[filecmd.path]
@@ -203,9 +204,7 @@ class GitImportProcessor(processor.ImportProcessor):
         if self.last_commit != ZERO_SHA:
             commit.parents.append(self.last_commit)
         for merge in cmd.merges:
-            if merge.startswith(b':'):
-                merge = self.markers[merge[1:]]
-            commit.parents.append(merge)
+            commit.parents.append(self.lookup_object(merge))
         self.repo.object_store.add_object(commit)
         self.repo[cmd.ref] = commit.id
         self.last_commit = commit.id
@@ -232,9 +231,7 @@ class GitImportProcessor(processor.ImportProcessor):
         if cmd.from_ is None:
             from_ = ZERO_SHA
         else:
-            from_ = cmd.from_
-            if from_.startswith(b":"):
-                from_ = self.markers[from_[1:]]
+            from_ = self.lookup_object(cmd.from_)
         self._reset_base(from_)
         self.repo.refs[cmd.ref] = from_