OSDN Git Service

Added some helper function(s) to parse the depot path and change number from the...
authorSimon Hausmann <simon@lst.de>
Thu, 22 Mar 2007 20:10:25 +0000 (21:10 +0100)
committerSimon Hausmann <simon@lst.de>
Thu, 22 Mar 2007 20:10:25 +0000 (21:10 +0100)
Signed-off-by: Simon Hausmann <simon@lst.de>
contrib/fast-import/git-p4

index 669cf95..6ead1c4 100755 (executable)
@@ -52,12 +52,44 @@ def system(cmd):
     if os.system(cmd) != 0:
         die("command failed: %s" % cmd)
 
+def extractLogMessageFromGitCommit(commit):
+    logMessage = ""
+    foundTitle = False
+    for log in os.popen("git-cat-file commit %s" % commit).readlines():
+       if not foundTitle:
+           if len(log) == 1:
+               foundTitle = 1
+           continue
+
+       logMessage += log
+    return logMessage
+
+def extractDepotPathAndChangeFromGitLog(log):
+    values = {}
+    for line in log.split("\n"):
+        line = line.strip()
+        if line.startswith("[git-p4:") and line.endswith("]"):
+            line = line[8:-1].strip()
+            for assignment in line.split(":"):
+                variable = assignment.strip()
+                value = ""
+                equalPos = assignment.find("=")
+                if equalPos != -1:
+                    variable = assignment[:equalPos].strip()
+                    value = assignment[equalPos + 1:].strip()
+                    if value.startswith("\"") and value.endswith("\""):
+                        value = value[1:-1]
+                values[variable] = value
+
+    return values.get("depot-path"), values.get("change")
+
 class Command:
     def __init__(self):
         self.usage = "usage: %prog [options]"
 
 class P4Debug(Command):
     def __init__(self):
+        Command.__init__(self)
         self.options = [
         ]
         self.description = "A tool to debug the output of p4 -G."
@@ -208,17 +240,9 @@ class P4Sync(Command):
             system("p4 revert %s" % f)
             system("p4 delete %s" % f)
 
-        logMessage = ""
-        foundTitle = False
-        for log in os.popen("git-cat-file commit %s" % id).readlines():
-            if not foundTitle:
-                if len(log) == 1:
-                    foundTitle = 1
-                continue
-
-            if len(logMessage) > 0:
-                logMessage += "\t"
-            logMessage += log
+        logMessage = extractLogMessageFromGitCommit(id)
+        logMessage = logMessage.replace("\n", "\n\t")
+        logMessage = logMessage[:-1]
 
         template = os.popen("p4 change -o").read()
 
@@ -506,7 +530,7 @@ class GitSync(Command):
 
         self.gitStream.write("data <<EOT\n")
         self.gitStream.write(details["desc"])
-        self.gitStream.write("\n[git-p4: depot-path: \"%s\"; change: %s]\n" % (branchPrefix, details["change"]))
+        self.gitStream.write("\n[git-p4: depot-path = \"%s\": change = %s]\n" % (branchPrefix, details["change"]))
         self.gitStream.write("EOT\n\n")
 
         if len(parent) > 0: