Make git-p4 submit detect the correct reference (origin) branch when
authorSimon Hausmann <simon@lst.de>
Thu, 7 Jun 2007 20:54:32 +0000 (22:54 +0200)
committerSimon Hausmann <simon@lst.de>
Thu, 7 Jun 2007 20:54:32 +0000 (22:54 +0200)
working with multi-branch imports.

Signed-off-by: Simon Hausmann <simon@lst.de>
contrib/fast-import/git-p4

index 3fe7ae77a889c4b60a9687a02e6bd0016f256318..efec0be32c41a9114dbf83f96ee12ad414e9bd05 100755 (executable)
@@ -156,7 +156,8 @@ def extractSettingsGitLog(log):
     paths = values.get("depot-paths")
     if not paths:
         paths = values.get("depot-path")
-    values['depot-paths'] = paths.split(',')
+    if paths:
+        values['depot-paths'] = paths.split(',')
     return values
 
 def gitBranchExists(branch):
@@ -494,12 +495,27 @@ class P4Submit(Command):
             return False
 
         depotPath = ""
-        settings = None
-        if gitBranchExists("p4"):
-            settings = extractSettingsGitLog(extractLogMessageFromGitCommit("p4"))
-        if len(depotPath) == 0 and gitBranchExists("origin"):
-            settings = extractSettingsGitLog(extractLogMessageFromGitCommit("origin"))
-        depotPath = settings['depot-paths'][0]
+        parent = 0
+        while parent < 65535:
+            commit = "HEAD~%s" % parent
+            log = extractLogMessageFromGitCommit(commit)
+            settings = extractSettingsGitLog(log)
+            if not settings.has_key("depot-paths"):
+                parent = parent + 1
+                continue
+
+            depotPath = settings['depot-paths'][0]
+
+            if len(self.origin) == 0:
+                names = read_pipe_lines("git name-rev '--refs=refs/remotes/p4/*' '%s'" % commit)
+                if len(names) > 0:
+                    # strip away the beginning of 'HEAD~42 refs/remotes/p4/foo'
+                    self.origin = names[0].strip()[len(commit) + 1:]
+
+            break
+
+        if self.verbose:
+            print "Origin branch is " + self.origin
 
         if len(depotPath) == 0:
             print "Internal error: cannot locate perforce depot path from existing branches"
@@ -530,12 +546,6 @@ class P4Submit(Command):
         if response == "y" or response == "yes":
             system("p4 sync ...")
 
-        if len(self.origin) == 0:
-            if gitBranchExists("p4"):
-                self.origin = "p4"
-            else:
-                self.origin = "origin"
-
         if self.reset:
             self.firstTime = True
 
@@ -969,7 +979,7 @@ class P4Sync(Command):
                     print "creating %s" % remoteHead
                 update = True
             else:
-                settings =  extractSettingsGitLog(extractLogMessageFromGitCommit(remoteHead))
+                settings = extractSettingsGitLog(extractLogMessageFromGitCommit(remoteHead))
                 if settings.has_key('change') > 0:
                     if settings['depot-paths'] == original['depot-paths']:
                         originP4Change = int(original['change'])