git-p4: document and test submit options

Clarify there is a -M option, but no -C.  These are both
configurable through variables.

Explain that the allowSubmit variable takes a comma-separated
list of branch names.

Catch earlier an invalid branch name given as an argument to
"git p4 clone".

Test option --origin, variable allowSubmit, and explicit master
branch name.

Signed-off-by: Pete Wyckoff <pw@padd.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Pete Wyckoff 2011-12-24 21:07:40 -05:00 committed by Junio C Hamano
parent 09fca77b9e
commit 28755dbaa5
3 changed files with 67 additions and 2 deletions

View File

@ -267,7 +267,9 @@ These options can be used to modify 'git p4 submit' behavior.
-M[<n>]::
Detect renames. See linkgit:git-diff[1]. Renames will be
represented in p4 using explicit 'move' operations.
represented in p4 using explicit 'move' operations. There
is no corresponding option to detect copies, but there are
variables for both moves and copies.
--preserve-user::
Re-author p4 changes before submitting to p4. This option
@ -453,7 +455,9 @@ git-p4.skipSubmitEditCheck::
git-p4.allowSubmit::
By default, any branch can be used as the source for a 'git p4
submit' operation. This configuration variable, if set, permits only
the named branches to be used as submit sources.
the named branches to be used as submit sources. Branch names
must be the short names (no "refs/heads/"), and should be
separated by commas (","), with no spaces.
git-p4.skipUserNameCheck::
If the user running 'git p4 submit' does not exist in the p4

View File

@ -362,6 +362,11 @@ def isValidGitDir(path):
def parseRevision(ref):
return read_pipe("git rev-parse %s" % ref).strip()
def branchExists(ref):
rev = read_pipe(["git", "rev-parse", "-q", "--verify", ref],
ignore_error=True)
return len(rev) > 0
def extractLogMessageFromGitCommit(commit):
logMessage = ""
@ -1089,6 +1094,8 @@ class P4Submit(Command, P4UserMap):
die("Detecting current git branch failed!")
elif len(args) == 1:
self.master = args[0]
if not branchExists(self.master):
die("Branch %s does not exist" % self.master)
else:
return False

View File

@ -31,6 +31,60 @@ test_expect_success 'submit with no client dir' '
)
'
# make two commits, but tell it to apply only from HEAD^
test_expect_success 'submit --origin' '
test_when_finished cleanup_git &&
"$GITP4" clone --dest="$git" //depot &&
(
cd "$git" &&
test_commit "file3" &&
test_commit "file4" &&
git config git-p4.skipSubmitEdit true &&
"$GITP4" submit --origin=HEAD^
) &&
(
cd "$cli" &&
p4 sync &&
test_path_is_missing "file3.t" &&
test_path_is_file "file4.t"
)
'
test_expect_success 'submit with allowSubmit' '
test_when_finished cleanup_git &&
"$GITP4" clone --dest="$git" //depot &&
(
cd "$git" &&
test_commit "file5" &&
git config git-p4.skipSubmitEdit true &&
git config git-p4.allowSubmit "nobranch" &&
test_must_fail "$GITP4" submit &&
git config git-p4.allowSubmit "nobranch,master" &&
"$GITP4" submit
)
'
test_expect_success 'submit with master branch name from argv' '
test_when_finished cleanup_git &&
"$GITP4" clone --dest="$git" //depot &&
(
cd "$git" &&
test_commit "file6" &&
git config git-p4.skipSubmitEdit true &&
test_must_fail "$GITP4" submit nobranch &&
git branch otherbranch &&
git reset --hard HEAD^ &&
test_commit "file7" &&
"$GITP4" submit otherbranch
) &&
(
cd "$cli" &&
p4 sync &&
test_path_is_file "file6.t" &&
test_path_is_missing "file7.t"
)
'
test_expect_success 'kill p4d' '
kill_p4d
'