git-p4: Fix support for symlinks.
[gitweb.git] / contrib / fast-import / git-p4
index e3404ca853c8b54f1a0c64be7038d282746652a7..3cbb2da221618a67fda6991317352e330c6db8ba 100755 (executable)
@@ -839,16 +839,20 @@ class P4Sync(Command):
             if file["action"] == "delete":
                 self.gitStream.write("D %s\n" % relPath)
             else:
-                mode = 644
-                if file["type"].startswith("x"):
-                    mode = 755
-
                 data = file['data']
 
+                mode = "644"
+                if file["type"].startswith("x"):
+                    mode = "755"
+                elif file["type"] == "symlink":
+                    mode = "120000"
+                    # p4 print on a symlink contains "target\n", so strip it off
+                    data = data[:-1]
+
                 if self.isWindows and file["type"].endswith("text"):
                     data = data.replace("\r\n", "\n")
 
-                self.gitStream.write("M %d inline %s\n" % (mode, relPath))
+                self.gitStream.write("M %s inline %s\n" % (mode, relPath))
                 self.gitStream.write("data %s\n" % len(data))
                 self.gitStream.write(data)
                 self.gitStream.write("\n")
@@ -901,7 +905,8 @@ class P4Sync(Command):
                            % (labelDetails["label"], change))
 
     def getUserCacheFilename(self):
-        return os.environ["HOME"] + "/.gitp4-usercache.txt"
+        home = os.environ.get("HOME", os.environ.get("USERPROFILE"))
+        return home + "/.gitp4-usercache.txt"
 
     def getUserMapFromPerforceServer(self):
         if self.userMapFromPerforceServer:
@@ -1180,11 +1185,11 @@ class P4Sync(Command):
                 elif ',' not in self.changeRange:
                     self.revision = self.changeRange
                     self.changeRange = ""
-                p = p[0:atIdx]
+                p = p[:atIdx]
             elif p.find("#") != -1:
                 hashIdx = p.index("#")
                 self.revision = p[hashIdx:]
-                p = p[0:hashIdx]
+                p = p[:hashIdx]
             elif self.previousDepotPaths == []:
                 self.revision = "#head"
 
@@ -1295,10 +1300,10 @@ class P4Sync(Command):
                     changeNum = line.split(" ")[1]
                     changes.append(changeNum)
 
-                changes.reverse()
+                changes.sort()
 
                 if len(self.maxChanges) > 0:
-                    changes = changes[0:min(int(self.maxChanges), len(changes))]
+                    changes = changes[:min(int(self.maxChanges), len(changes))]
 
             if len(changes) == 0:
                 if not self.silent: