summaryrefslogtreecommitdiff
path: root/contrib/fast-import
diff options
context:
space:
mode:
authorSimon Hausmann <hausmann@kde.org>2007-03-23 08:16:07 (GMT)
committerSimon Hausmann <hausmann@kde.org>2007-03-23 08:16:07 (GMT)
commit9512497bcf574a2f70e43be0bcb58e35fb6aaba8 (patch)
tree0072decca072386b72b01239d7a8d3abd5364823 /contrib/fast-import
parent179caebff4a917dc35c8166ec183bc5c76df53e1 (diff)
downloadgit-9512497bcf574a2f70e43be0bcb58e35fb6aaba8.zip
git-9512497bcf574a2f70e43be0bcb58e35fb6aaba8.tar.gz
git-9512497bcf574a2f70e43be0bcb58e35fb6aaba8.tar.bz2
Make it possible to run git-p4 submit from within the git repository
Signed-off-by: Simon Hausmann <hausmann@kde.org>
Diffstat (limited to 'contrib/fast-import')
-rwxr-xr-xcontrib/fast-import/git-p438
-rw-r--r--contrib/fast-import/git-p4.txt27
2 files changed, 50 insertions, 15 deletions
diff --git a/contrib/fast-import/git-p4 b/contrib/fast-import/git-p4
index 8684e4b..a8f7cce 100755
--- a/contrib/fast-import/git-p4
+++ b/contrib/fast-import/git-p4
@@ -162,7 +162,7 @@ class P4Sync(Command):
self.dryRun = False
self.substFile = ""
self.firstTime = True
- self.origin = "origin"
+ self.origin = ""
self.master = ""
self.applyAsPatch = True
@@ -304,6 +304,42 @@ class P4Sync(Command):
print "Perforce submit template written as %s. Please review/edit and then use p4 submit -i < %s to submit directly!" % (fileName, fileName)
def run(self, args):
+ global gitdir
+ # make gitdir absolute so we can cd out into the perforce checkout
+ gitdir = os.path.abspath(gitdir)
+ os.environ["GIT_DIR"] = gitdir
+ depotPath = ""
+ if gitBranchExists("p4"):
+ [depotPath, dummy] = extractDepotPathAndChangeFromGitLog(extractLogMessageFromGitCommit("p4"))
+ if len(depotPath) == 0 and gitBranchExists("origin"):
+ [depotPath, dummy] = extractDepotPathAndChangeFromGitLog(extractLogMessageFromGitCommit("origin"))
+
+ if len(depotPath) == 0:
+ print "Internal error: cannot locate perforce depot path from existing branches"
+ sys.exit(128)
+
+ if not depotPath.endswith("/"):
+ depotPath += "/"
+ clientPath = p4Cmd("where %s..." % depotPath).get("path")
+ if clientPath.endswith("..."):
+ clientPath = clientPath[:-3]
+
+ if len(clientPath) == 0:
+ print "Error: Cannot locate perforce checkout of %s in client view" % depotPath
+ sys.exit(128)
+
+ print "Perforce checkout for depot path %s located at %s" % (depotPath, clientPath)
+ os.chdir(clientPath)
+ response = raw_input("Do you want to sync %s with p4 sync? (y/n)" % clientPath)
+ if response == "y" or response == "yes":
+ system("p4 sync ...")
+
+ if len(self.origin) == 0:
+ if gitBranchExists("p4"):
+ self.origin = "p4"
+ else:
+ self.origin = "origin"
+
if self.reset:
self.firstTime = True
diff --git a/contrib/fast-import/git-p4.txt b/contrib/fast-import/git-p4.txt
index 4319c82..8bf0805 100644
--- a/contrib/fast-import/git-p4.txt
+++ b/contrib/fast-import/git-p4.txt
@@ -51,28 +51,27 @@ Submitting
git-p4 has EXPERIMENTAL support for submitting changes from a git repository
back to a Perforce depot. This requires a Perforce checkout separate to your
-git repository. This is the basic procedure:
+git repository. All it should take is calling
- cd path/to/your/perforce/checkout
- git-p4 submit --git-dir=/path/to/your/git/repository
+ git-p4 submit
-This will create a temporary git branch, use git-rev-list to find out which git
-commits are in your current branch but not in the "origin" branch. You can
-override the name of the "origin" branch by using the --origin=mybranch option.
-The "origin" branch has to be the branch populated with git-p4's sync
-operation.
+in your git repository. This will attempt to locate the perforce checkout
+corresponding to your imported depot path. By default the changes between your
+current branch and the "p4" branch will be submitted. If there is no "p4"
+branch the "origin" branch will be used as reference instead. You can override
+this with the --origin=mysourcebranch option. The "origin" branch has to be the
+branch populated with git-p4's sync operation.
After some preparations (which might take a while) git-p4 enters a loop where
it will first show a Perforce submit template and a diff of the change to
-apply. After quitting the pager with 'q' git-p4 asks for confirmation for
-issuing the "p4 submit" command and also gives you the option of editing the
-submit template using "e".
+apply in the editor. After saving and exiting the editor you will be asked whether
+you really want to submit the change or not.
If a submit fails you may have to "p4 resolve" and submit manually. You can
continue importing the remaining changes with
- git-p4 submit --git-dir=/path/to/your/git/repository --continue
+ git-p4 submit --continue
-After submitting you should sync your origin branch from Perforce using
-git-p4's sync command.
+After submitting you should sync your perforce import branch ("p4" or "origin")
+from Perforce using git-p4's sync command.