Fix p4 execution in git-p4 rollback.
[gitweb.git] / contrib / fast-import / git-p4
index 5cea6cf9ac491695a83b631857d1ec756b14d668..b2341b7ec4592f0457adfddc6e4f711191b9e36a 100755 (executable)
@@ -31,7 +31,11 @@ def p4CmdList(cmd):
             result.append(entry)
     except EOFError:
         pass
-    pipe.close()
+    exitCode = pipe.close()
+    if exitCode != None:
+        entry = {}
+        entry["p4ExitCode"] = exitCode
+        result.append(entry)
 
     return result
 
@@ -136,18 +140,31 @@ class P4RollBack(Command):
     def __init__(self):
         Command.__init__(self)
         self.options = [
-            optparse.make_option("--verbose", dest="verbose", action="store_true")
+            optparse.make_option("--verbose", dest="verbose", action="store_true"),
+            optparse.make_option("--local", dest="rollbackLocalBranches", action="store_true")
         ]
         self.description = "A tool to debug the multi-branch import. Don't use :)"
         self.verbose = False
+        self.rollbackLocalBranches = False
 
     def run(self, args):
         if len(args) != 1:
             return False
         maxChange = int(args[0])
-        for line in mypopen("git rev-parse --symbolic --remotes").readlines():
-            if line.startswith("p4/") and line != "p4/HEAD\n":
-                ref = "refs/remotes/" + line[:-1]
+
+        if "p4ExitCode" in p4Cmd("changes -m 1"):
+            die("Problems executing p4");
+
+        if self.rollbackLocalBranches:
+            refPrefix = "refs/heads/"
+            lines = mypopen("git rev-parse --symbolic --branches").readlines()
+        else:
+            refPrefix = "refs/remotes/"
+            lines = mypopen("git rev-parse --symbolic --remotes").readlines()
+
+        for line in lines:
+            if self.rollbackLocalBranches or (line.startswith("p4/") and line != "p4/HEAD\n"):
+                ref = refPrefix + line[:-1]
                 log = extractLogMessageFromGitCommit(ref)
                 depotPath, change = extractDepotPathAndChangeFromGitLog(log)
                 changed = False