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:
		| @ -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 | ||||
|  | ||||
|  | ||||
| @ -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. | ||||
|  | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Simon Hausmann
					Simon Hausmann