Code

Fixed the check to make sure to exclude the HEAD symbolic refs when updating
[git.git] / contrib / fast-import / git-p4
index 965b391cda870ecd7d174adb00151ccbbcdf36d4..d03ba0b6ad4c570e33d45538ee9e3ec84d18c4ef 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
 
@@ -708,6 +718,11 @@ class P4Sync(Command):
                 text += filedata[j]['data']
                 j += 1
 
+
+            if not stat.has_key('depotFile'):
+                sys.stderr.write("p4 print fails with: %s\n" % repr(stat))
+                continue
+
             contents[stat['depotFile']] = text
 
         for f in files:
@@ -897,10 +912,6 @@ class P4Sync(Command):
             return p [p.strip().rfind("/") + 1:]
 
     def getBranchMapping(self):
-
-        ## FIXME - what's a P4 projectName ?
-        self.projectName = self.guessProjectName()
-
         for info in p4CmdList("branches"):
             details = p4Cmd("branch -o %s" % info["branch"])
             viewIdx = 0
@@ -937,9 +948,9 @@ class P4Sync(Command):
             if not line.startswith('p4/') or line == "p4/HEAD":
                 continue
             branch = line
-            if self.importIntoRemotes:
-                # strip off p4
-                branch = re.sub ("^p4/", "", line)
+
+            # strip off p4
+            branch = re.sub ("^p4/", "", line)
 
             self.p4BranchesInGit.append(branch)
             self.initialParents[self.refPrefix + branch] = parseRevision(line)
@@ -951,7 +962,7 @@ class P4Sync(Command):
 
         for line in read_pipe_lines("git rev-parse --symbolic --remotes"):
             line = line.strip()
-            if (not line.startswith("origin/")) or line.endswith("HEAD\n"):
+            if (not line.startswith("origin/")) or line.endswith("HEAD"):
                 continue
 
             headName = line[len("origin/"):]
@@ -969,7 +980,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'])
@@ -1131,7 +1142,11 @@ class P4Sync(Command):
             self.getLabels();
 
         if self.detectBranches:
-            self.getBranchMapping();
+            ## FIXME - what's a P4 projectName ?
+            self.projectName = self.guessProjectName()
+
+            if not self.hasOrigin:
+                self.getBranchMapping();
             if self.verbose:
                 print "p4-git branches: %s" % self.p4BranchesInGit
                 print "initial parents: %s" % self.initialParents
@@ -1364,6 +1379,11 @@ class P4Clone(P4Sync):
             sys.exit(1)
 
         depotPaths = args
+
+        if not self.cloneDestination and len(depotPaths) > 1:
+            self.cloneDestination = depotPaths[-1]
+            depotPaths = depotPaths[:-1]
+
         for p in depotPaths:
             if not p.startswith("//"):
                 return False