summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibravatar Simon Hausmann <simon@lst.de>2007-04-08 10:08:26 +0200
committerLibravatar Simon Hausmann <simon@lst.de>2007-04-08 10:08:26 +0200
commitf9a3a4f796461276bbbcfef965984086e8e00b46 (patch)
tree4b72129ff19700f437cf6c3f3833305d8f979bb9
parentHonor --silent for labels (diff)
downloadtgif-f9a3a4f796461276bbbcfef965984086e8e00b46.tar.xz
Added git-p4 clone convenience command
Signed-off-by: Simon Hausmann <simon@lst.de>
-rwxr-xr-xcontrib/fast-import/git-p457
-rw-r--r--contrib/fast-import/git-p4.txt23
2 files changed, 77 insertions, 3 deletions
diff --git a/contrib/fast-import/git-p4 b/contrib/fast-import/git-p4
index 65660e1351..0a22d9a2e4 100755
--- a/contrib/fast-import/git-p4
+++ b/contrib/fast-import/git-p4
@@ -440,6 +440,7 @@ class P4Sync(Command):
self.detectBranches = False
self.detectLabels = False
self.changesFile = ""
+ self.tagLastChange = True
def p4File(self, depotPath):
return os.popen("p4 print -q \"%s\"" % depotPath, "rb").read()
@@ -826,7 +827,6 @@ class P4Sync(Command):
self.globalPrefix = ""
self.changeRange = ""
self.initialParent = ""
- self.tagLastChange = True
if len(self.branch) == 0:
self.branch = "p4"
@@ -1062,6 +1062,58 @@ class P4Rebase(Command):
system("git diff-tree --stat --summary -M %s HEAD" % oldHead)
return True
+class P4Clone(P4Sync):
+ def __init__(self):
+ P4Sync.__init__(self)
+ self.description = "Creates a new git repository and imports from Perforce into it"
+ self.usage = "usage: %prog [options] //depot/path[@revRange] [directory]"
+ self.needsGit = False
+ self.tagLastChange = False
+
+ def run(self, args):
+ if len(args) < 1:
+ return False
+ depotPath = args[0]
+ dir = ""
+ if len(args) == 2:
+ dir = args[1]
+ elif len(args) > 2:
+ return False
+
+ if not depotPath.startswith("//"):
+ return False
+
+ if len(dir) == 0:
+ dir = depotPath
+ atPos = dir.rfind("@")
+ if atPos != -1:
+ dir = dir[0:atPos]
+ hashPos = dir.rfind("#")
+ if hashPos != -1:
+ dir = dir[0:hashPos]
+
+ if dir.endswith("..."):
+ dir = dir[:-3]
+
+ if dir.endswith("/"):
+ dir = dir[:-1]
+
+ slashPos = dir.rfind("/")
+ if slashPos != -1:
+ dir = dir[slashPos + 1:]
+
+ print "Importing from %s into %s" % (depotPath, dir)
+ os.makedirs(dir)
+ os.chdir(dir)
+ system("git init")
+ if not P4Sync.run(self, [depotPath]):
+ return False
+ os.wait()
+ if self.branch != "master":
+ system("git branch master p4")
+ system("git checkout -f")
+ return True
+
class HelpFormatter(optparse.IndentedHelpFormatter):
def __init__(self):
optparse.IndentedHelpFormatter.__init__(self)
@@ -1085,7 +1137,8 @@ commands = {
"clean-tags" : P4CleanTags(),
"submit" : P4Submit(),
"sync" : P4Sync(),
- "rebase" : P4Rebase()
+ "rebase" : P4Rebase(),
+ "clone" : P4Clone()
}
if len(sys.argv[1:]) == 0:
diff --git a/contrib/fast-import/git-p4.txt b/contrib/fast-import/git-p4.txt
index 5f7251c2d6..99ae85bd7b 100644
--- a/contrib/fast-import/git-p4.txt
+++ b/contrib/fast-import/git-p4.txt
@@ -10,7 +10,25 @@ done using "git-p4 submit".
Importing
=========
-The procedure is simple:
+You can simply start with
+
+ git-p4 clone //depot/path/project
+
+or
+
+ git-p4 clone //depot/path/project myproject
+
+This will create an empty git repository in a subdirectory called "project" (or
+"myproject" with the second command), import the head revision from the
+specified perforce path into a git "p4" branch, create a master branch off it
+and check it out. If you want the entire history (not just the head revision) then
+you can simply append a "@all" to the depot path:
+
+ git-p4 clone //depot/project/main@all myproject
+
+
+
+If you want more control you can also use the git-p4 sync command directly:
mkdir repo-git
cd repo-git
@@ -31,6 +49,9 @@ a big import. This may take a while.
Support for Perforce integrations is still work in progress. Don't bother
trying it unless you want to hack on it :)
+For convenience there's also the git-p4 clone command that works similar to
+git-clone and combines the creation of the git repository with the the initial
+import and the branch setup
Incremental Imports
===================