git p4: fix submit when no master branch
authorPete Wyckoff <pw@padd.com>
Tue, 15 Jan 2013 00:47:08 +0000 (19:47 -0500)
committerJunio C Hamano <gitster@pobox.com>
Tue, 15 Jan 2013 17:46:30 +0000 (09:46 -0800)
It finds its upstream and applies the commit properly, but
the sync step will fail unless it is told which branch to
work on.

Signed-off-by: Pete Wyckoff <pw@padd.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/git-p4.txt
git-p4.py
t/t9806-git-p4-options.sh

index e79d0467c4d7125e2efeb9a489e57aee346c4a00..f70ef9ded2c7e476c60a90f15ef45e650c663bde 100644 (file)
@@ -294,6 +294,11 @@ These options can be used to modify 'git p4 submit' behavior.
        to bypass the prompt, causing conflicting commits to be automatically
        skipped, or to quit trying to apply commits, without prompting.
 
+--branch <branch>::
+       After submitting, sync this named branch instead of the default
+       p4/master.  See the "Sync options" section above for more
+       information.
+
 Rebase options
 ~~~~~~~~~~~~~~
 These options can be used to modify 'git p4 rebase' behavior.
index 9ea1905dbedd57dbde08dc72c906564c5b15906a..253ad06cc20d5de8d8e5f8004c567032be772ffd 100755 (executable)
--- a/git-p4.py
+++ b/git-p4.py
@@ -921,7 +921,8 @@ class P4Submit(Command, P4UserMap):
                 optparse.make_option("--dry-run", "-n", dest="dry_run", action="store_true"),
                 optparse.make_option("--prepare-p4-only", dest="prepare_p4_only", action="store_true"),
                 optparse.make_option("--conflict", dest="conflict_behavior",
-                                     choices=self.conflict_behavior_choices)
+                                     choices=self.conflict_behavior_choices),
+                optparse.make_option("--branch", dest="branch"),
         ]
         self.description = "Submit changes from git to the perforce depot."
         self.usage += " [name of git branch to submit into perforce depot]"
@@ -934,6 +935,7 @@ class P4Submit(Command, P4UserMap):
         self.isWindows = (platform.system() == "Windows")
         self.exportLabels = False
         self.p4HasMoveCommand = p4_has_move_command()
+        self.branch = None
 
     def check(self):
         if len(p4CmdList("opened ...")) > 0:
@@ -1670,6 +1672,8 @@ class P4Submit(Command, P4UserMap):
             print "All commits applied!"
 
             sync = P4Sync()
+            if self.branch:
+                sync.branch = self.branch
             sync.run([])
 
             rebase = P4Rebase()
index 8d914a5766f2ebe3a0a3a2095a6ddf24fe1025c5..4f077eeca86946aa897f15e9f1729f9d0588cfb9 100755 (executable)
@@ -251,6 +251,31 @@ test_expect_success 'clone --use-client-spec' '
        )
 '
 
+test_expect_success 'submit works with no p4/master' '
+       test_when_finished cleanup_git &&
+       git p4 clone --branch=b1 //depot@1,2 --destination="$git" &&
+       (
+               cd "$git" &&
+               test_commit submit-1-branch &&
+               git config git-p4.skipSubmitEdit true &&
+               git p4 submit --branch=b1
+       )
+'
+
+# The sync/rebase part post-submit will engage detect-branches
+# machinery which will not do anything in this particular test.
+test_expect_success 'submit works with two branches' '
+       test_when_finished cleanup_git &&
+       git p4 clone --branch=b1 //depot@1,2 --destination="$git" &&
+       (
+               cd "$git" &&
+               git p4 sync --branch=b2 //depot@1,3 &&
+               test_commit submit-2-branches &&
+               git config git-p4.skipSubmitEdit true &&
+               git p4 submit
+       )
+'
+
 test_expect_success 'kill p4d' '
        kill_p4d
 '