git p4: add submit --dry-run option
A new option, "git p4 submit --dry-run" can be used to verify what commits and labels would be moved into p4. Signed-off-by: Pete Wyckoff <pw@padd.com> Acked-by: Luke Diamand <luke@diamand.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
b0ccc80d3c
commit
ef739f0829
@ -269,6 +269,10 @@ These options can be used to modify 'git p4 submit' behavior.
|
||||
Export tags from git as p4 labels. Tags found in git are applied
|
||||
to the perforce working directory.
|
||||
|
||||
--dry-run, -n::
|
||||
Show just what commits would be submitted to p4; do not change
|
||||
state in git or p4.
|
||||
|
||||
Rebase options
|
||||
~~~~~~~~~~~~~~
|
||||
These options can be used to modify 'git p4 rebase' behavior.
|
||||
|
19
git-p4.py
19
git-p4.py
@ -853,12 +853,14 @@ class P4Submit(Command, P4UserMap):
|
||||
# preserve the user, requires relevant p4 permissions
|
||||
optparse.make_option("--preserve-user", dest="preserveUser", action="store_true"),
|
||||
optparse.make_option("--export-labels", dest="exportLabels", action="store_true"),
|
||||
optparse.make_option("--dry-run", "-n", dest="dry_run", action="store_true"),
|
||||
]
|
||||
self.description = "Submit changes from git to the perforce depot."
|
||||
self.usage += " [name of git branch to submit into perforce depot]"
|
||||
self.origin = ""
|
||||
self.detectRenames = False
|
||||
self.preserveUser = gitConfig("git-p4.preserveUser").lower() == "true"
|
||||
self.dry_run = False
|
||||
self.isWindows = (platform.system() == "Windows")
|
||||
self.exportLabels = False
|
||||
self.p4HasMoveCommand = p4_has_command("move")
|
||||
@ -1366,6 +1368,9 @@ class P4Submit(Command, P4UserMap):
|
||||
for mapping in clientSpec.mappings:
|
||||
labelTemplate += "\t%s\n" % mapping.depot_side.path
|
||||
|
||||
if self.dry_run:
|
||||
print "Would create p4 label %s for tag" % name
|
||||
else:
|
||||
p4_write_pipe(["label", "-i"], labelTemplate)
|
||||
|
||||
# Use the label
|
||||
@ -1432,6 +1437,9 @@ class P4Submit(Command, P4UserMap):
|
||||
os.makedirs(self.clientPath)
|
||||
|
||||
chdir(self.clientPath)
|
||||
if self.dry_run:
|
||||
print "Would synchronize p4 checkout in %s" % self.clientPath
|
||||
else:
|
||||
print "Synchronizing p4 checkout..."
|
||||
if new_client_dir:
|
||||
# old one was destroyed, and maybe nobody told p4
|
||||
@ -1488,9 +1496,16 @@ class P4Submit(Command, P4UserMap):
|
||||
# Apply the commits, one at a time. On failure, ask if should
|
||||
# continue to try the rest of the patches, or quit.
|
||||
#
|
||||
if self.dry_run:
|
||||
print "Would apply"
|
||||
applied = []
|
||||
last = len(commits) - 1
|
||||
for i, commit in enumerate(commits):
|
||||
if self.dry_run:
|
||||
print " ", read_pipe(["git", "show", "-s",
|
||||
"--format=format:%h %s", commit])
|
||||
ok = True
|
||||
else:
|
||||
ok = self.applyCommit(commit)
|
||||
if ok:
|
||||
applied.append(commit)
|
||||
@ -1515,7 +1530,9 @@ class P4Submit(Command, P4UserMap):
|
||||
|
||||
chdir(self.oldWorkingDirectory)
|
||||
|
||||
if len(commits) == len(applied):
|
||||
if self.dry_run:
|
||||
pass
|
||||
elif len(commits) == len(applied):
|
||||
print "All commits applied!"
|
||||
|
||||
sync = P4Sync()
|
||||
|
@ -54,6 +54,47 @@ test_expect_success 'submit --origin' '
|
||||
)
|
||||
'
|
||||
|
||||
test_expect_success 'submit --dry-run' '
|
||||
test_when_finished cleanup_git &&
|
||||
git p4 clone --dest="$git" //depot &&
|
||||
(
|
||||
cd "$git" &&
|
||||
test_commit "dry-run1" &&
|
||||
test_commit "dry-run2" &&
|
||||
git p4 submit --dry-run >out &&
|
||||
test_i18ngrep "Would apply" out
|
||||
) &&
|
||||
(
|
||||
cd "$cli" &&
|
||||
test_path_is_missing "dry-run1.t" &&
|
||||
test_path_is_missing "dry-run2.t"
|
||||
)
|
||||
'
|
||||
|
||||
test_expect_success 'submit --dry-run --export-labels' '
|
||||
test_when_finished cleanup_git &&
|
||||
git p4 clone --dest="$git" //depot &&
|
||||
(
|
||||
cd "$git" &&
|
||||
echo dry-run1 >dry-run1 &&
|
||||
git add dry-run1 &&
|
||||
git commit -m "dry-run1" dry-run1 &&
|
||||
git config git-p4.skipSubmitEdit true &&
|
||||
git p4 submit &&
|
||||
echo dry-run2 >dry-run2 &&
|
||||
git add dry-run2 &&
|
||||
git commit -m "dry-run2" dry-run2 &&
|
||||
git tag -m "dry-run-tag1" dry-run-tag1 HEAD^ &&
|
||||
git p4 submit --dry-run --export-labels >out &&
|
||||
test_i18ngrep "Would create p4 label" out
|
||||
) &&
|
||||
(
|
||||
cd "$cli" &&
|
||||
test_path_is_file "dry-run1" &&
|
||||
test_path_is_missing "dry-run2"
|
||||
)
|
||||
'
|
||||
|
||||
test_expect_success 'submit with allowSubmit' '
|
||||
test_when_finished cleanup_git &&
|
||||
git p4 clone --dest="$git" //depot &&
|
||||
|
Loading…
Reference in New Issue
Block a user