Make it possible to run git-p4 submit from within the git repository

Signed-off-by: Simon Hausmann <hausmann@kde.org>
This commit is contained in:
Simon Hausmann 2007-03-23 09:16:07 +01:00
parent 179caebff4
commit 9512497bcf
2 changed files with 50 additions and 15 deletions

View File

@ -162,7 +162,7 @@ class P4Sync(Command):
self.dryRun = False self.dryRun = False
self.substFile = "" self.substFile = ""
self.firstTime = True self.firstTime = True
self.origin = "origin" self.origin = ""
self.master = "" self.master = ""
self.applyAsPatch = True 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) 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): 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: if self.reset:
self.firstTime = True self.firstTime = True

View File

@ -51,28 +51,27 @@ Submitting
git-p4 has EXPERIMENTAL support for submitting changes from a git repository 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 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-p4 submit --git-dir=/path/to/your/git/repository
This will create a temporary git branch, use git-rev-list to find out which git in your git repository. This will attempt to locate the perforce checkout
commits are in your current branch but not in the "origin" branch. You can corresponding to your imported depot path. By default the changes between your
override the name of the "origin" branch by using the --origin=mybranch option. current branch and the "p4" branch will be submitted. If there is no "p4"
The "origin" branch has to be the branch populated with git-p4's sync branch the "origin" branch will be used as reference instead. You can override
operation. 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 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 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 apply in the editor. After saving and exiting the editor you will be asked whether
issuing the "p4 submit" command and also gives you the option of editing the you really want to submit the change or not.
submit template using "e".
If a submit fails you may have to "p4 resolve" and submit manually. You can If a submit fails you may have to "p4 resolve" and submit manually. You can
continue importing the remaining changes with 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 After submitting you should sync your perforce import branch ("p4" or "origin")
git-p4's sync command. from Perforce using git-p4's sync command.