clone and sync --keep-path to keep perforce path to module.
authorHan-Wen Nienhuys <hanwen@google.com>
Wed, 23 May 2007 21:20:53 +0000 (18:20 -0300)
committerHan-Wen Nienhuys <hanwen@google.com>
Mon, 28 May 2007 14:18:31 +0000 (11:18 -0300)
Signed-off-by: Han-Wen Nienhuys <hanwen@google.com>
contrib/fast-import/git-p4
index 93c9d6417cc013153235059117e6190b099790b0..51d117b789ef2dec4c85e9db62f93b1912fd6f0d 100755 (executable)
@@ -11,6 +11,7 @@
 import optparse, sys, os, marshal, popen2, subprocess, shelve
 import tempfile, getopt, sha, os.path, time, platform
 import re
 import optparse, sys, os, marshal, popen2, subprocess, shelve
 import tempfile, getopt, sha, os.path, time, platform
 import re
+
 from sets import Set;
 
 gitdir = os.environ.get("GIT_DIR", "")
 from sets import Set;
 
 gitdir = os.environ.get("GIT_DIR", "")
@@ -20,7 +21,6 @@ def write_pipe(c, str):
     if not silent:
         sys.stderr.write('writing pipe: %s\n' % c)
 
     if not silent:
         sys.stderr.write('writing pipe: %s\n' % c)
 
-    ## todo: check return status
     pipe = os.popen(c, 'w')
     val = pipe.write(str)
     if pipe.close():
     pipe = os.popen(c, 'w')
     val = pipe.write(str)
     if pipe.close():
@@ -32,7 +32,7 @@ def write_pipe(c, str):
 def read_pipe(c):
     if not silent:
         sys.stderr.write('reading pipe: %s\n' % c)
 def read_pipe(c):
     if not silent:
         sys.stderr.write('reading pipe: %s\n' % c)
-    ## todo: check return status
+
     pipe = os.popen(c, 'rb')
     val = pipe.read()
     if pipe.close():
     pipe = os.popen(c, 'rb')
     val = pipe.read()
     if pipe.close():
@@ -60,8 +60,6 @@ def system(cmd):
     if os.system(cmd) != 0:
         die("command failed: %s" % cmd)
 
     if os.system(cmd) != 0:
         die("command failed: %s" % cmd)
 
-
-
 def p4CmdList(cmd):
     cmd = "p4 -G %s" % cmd
     pipe = os.popen(cmd, "rb")
 def p4CmdList(cmd):
     cmd = "p4 -G %s" % cmd
     pipe = os.popen(cmd, "rb")
@@ -566,7 +564,8 @@ class P4Sync(Command):
                 optparse.make_option("--detect-labels", dest="detectLabels", action="store_true"),
                 optparse.make_option("--verbose", dest="verbose", action="store_true"),
                 optparse.make_option("--import-local", dest="importIntoRemotes", action="store_false"),
                 optparse.make_option("--detect-labels", dest="detectLabels", action="store_true"),
                 optparse.make_option("--verbose", dest="verbose", action="store_true"),
                 optparse.make_option("--import-local", dest="importIntoRemotes", action="store_false"),
-                optparse.make_option("--max-changes", dest="maxChanges")
+                optparse.make_option("--max-changes", dest="maxChanges"),
+                optparse.make_option("--keep-path", dest="keepRepoPath")
         ]
         self.description = """Imports from Perforce into a git repository.\n
     example:
         ]
         self.description = """Imports from Perforce into a git repository.\n
     example:
@@ -590,6 +589,7 @@ class P4Sync(Command):
         self.maxChanges = ""
         self.isWindows = (platform.system() == "Windows")
         self.depotPath = None
         self.maxChanges = ""
         self.isWindows = (platform.system() == "Windows")
         self.depotPath = None
+        self.keepRepoPath = False
 
         if gitConfig("git-p4.syncFromOrigin") == "false":
             self.syncWithOrigin = False
 
         if gitConfig("git-p4.syncFromOrigin") == "false":
             self.syncWithOrigin = False
@@ -617,8 +617,11 @@ class P4Sync(Command):
             fnum = fnum + 1
         return files
 
             fnum = fnum + 1
         return files
 
-    def stripRepoPath(self, path):
-        return path[len(self.depotPath):]
+    def stripRepoPath(self, path, prefix):
+        if self.keepRepoPath:
+            prefix = re.sub("^(//[^/]+/).*", r'\1', prefix)
+
+        return path[len(prefix):]
 
     def splitFilesIntoBranches(self, commit):
         branches = {}
 
     def splitFilesIntoBranches(self, commit):
         branches = {}
@@ -638,7 +641,7 @@ class P4Sync(Command):
             file["type"] = commit["type%s" % fnum]
             fnum = fnum + 1
 
             file["type"] = commit["type%s" % fnum]
             fnum = fnum + 1
 
-            relPath = self.stripRepoPath(path)
+            relPath = self.stripRepoPath(path, self.depotPath)
 
             for branch in self.knownBranches.keys():
 
 
             for branch in self.knownBranches.keys():
 
@@ -687,7 +690,7 @@ class P4Sync(Command):
                 continue
             rev = file["rev"]
             depotPath = path + "#" + rev
                 continue
             rev = file["rev"]
             depotPath = path + "#" + rev
-            relPath = path[len(branchPrefix):]
+            relPath = self.stripRepoPath(path, branchPrefix)
             action = file["action"]
 
             if file["type"] == "apple":
             action = file["action"]
 
             if file["type"] == "apple":