Browse Source

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

Signed-off-by: Simon Hausmann <hausmann@kde.org>
maint
Simon Hausmann 18 years ago
parent
commit
9512497bcf
  1. 38
      contrib/fast-import/git-p4
  2. 27
      contrib/fast-import/git-p4.txt

38
contrib/fast-import/git-p4

@ -162,7 +162,7 @@ class P4Sync(Command): @@ -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): @@ -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


27
contrib/fast-import/git-p4.txt

@ -51,28 +51,27 @@ Submitting @@ -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.


Loading…
Cancel
Save