git p4: refactor diffOpts calculation

P4Submit.applyCommit()

To avoid recalculating the same diffOpts for each commit, move it
out of applyCommit() and into the top-level run().  Also fix a bug
in that code which interpreted the value of detectRenames as a
string rather than as a boolean.

[pw: fix documentation, rearrange code a bit]

Signed-off-by: Gary Gibbons <ggibbons@perforce.com>
Signed-off-by: Pete Wyckoff <pw@padd.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Gary Gibbons 2012-07-04 09:40:19 -04:00 committed by Junio C Hamano
parent a0327c0edc
commit 84cb00036f
2 changed files with 38 additions and 24 deletions

View File

@ -255,7 +255,7 @@ These options can be used to modify 'git p4 submit' behavior.
p4. By default, this is the most recent p4 commit reachable p4. By default, this is the most recent p4 commit reachable
from 'HEAD'. from 'HEAD'.
-M[<n>]:: -M::
Detect renames. See linkgit:git-diff[1]. Renames will be Detect renames. See linkgit:git-diff[1]. Renames will be
represented in p4 using explicit 'move' operations. There represented in p4 using explicit 'move' operations. There
is no corresponding option to detect copies, but there are is no corresponding option to detect copies, but there are
@ -465,13 +465,15 @@ git-p4.useClientSpec::
Submit variables Submit variables
~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~
git-p4.detectRenames:: git-p4.detectRenames::
Detect renames. See linkgit:git-diff[1]. Detect renames. See linkgit:git-diff[1]. This can be true,
false, or a score as expected by 'git diff -M'.
git-p4.detectCopies:: git-p4.detectCopies::
Detect copies. See linkgit:git-diff[1]. Detect copies. See linkgit:git-diff[1]. This can be true,
false, or a score as expected by 'git diff -C'.
git-p4.detectCopiesHarder:: git-p4.detectCopiesHarder::
Detect copies harder. See linkgit:git-diff[1]. Detect copies harder. See linkgit:git-diff[1]. A boolean.
git-p4.preserveUser:: git-p4.preserveUser::
On submit, re-author changes to reflect the git author, On submit, re-author changes to reflect the git author,

View File

@ -1046,27 +1046,8 @@ class P4Submit(Command, P4UserMap):
(p4User, gitEmail) = self.p4UserForCommit(id) (p4User, gitEmail) = self.p4UserForCommit(id)
if not self.detectRenames:
# If not explicitly set check the config variable
self.detectRenames = gitConfig("git-p4.detectRenames")
if self.detectRenames.lower() == "false" or self.detectRenames == "": diff = read_pipe_lines("git diff-tree -r %s \"%s^\" \"%s\"" % (self.diffOpts, id, id))
diffOpts = ""
elif self.detectRenames.lower() == "true":
diffOpts = "-M"
else:
diffOpts = "-M%s" % self.detectRenames
detectCopies = gitConfig("git-p4.detectCopies")
if detectCopies.lower() == "true":
diffOpts += " -C"
elif detectCopies != "" and detectCopies.lower() != "false":
diffOpts += " -C%s" % detectCopies
if gitConfig("git-p4.detectCopiesHarder", "--bool") == "true":
diffOpts += " --find-copies-harder"
diff = read_pipe_lines("git diff-tree -r %s \"%s^\" \"%s\"" % (diffOpts, id, id))
filesToAdd = set() filesToAdd = set()
filesToDelete = set() filesToDelete = set()
editedFiles = set() editedFiles = set()
@ -1433,6 +1414,37 @@ class P4Submit(Command, P4UserMap):
if self.preserveUser: if self.preserveUser:
self.checkValidP4Users(commits) self.checkValidP4Users(commits)
#
# Build up a set of options to be passed to diff when
# submitting each commit to p4.
#
if self.detectRenames:
# command-line -M arg
self.diffOpts = "-M"
else:
# If not explicitly set check the config variable
detectRenames = gitConfig("git-p4.detectRenames")
if detectRenames.lower() == "false" or detectRenames == "":
self.diffOpts = ""
elif detectRenames.lower() == "true":
self.diffOpts = "-M"
else:
self.diffOpts = "-M%s" % detectRenames
# no command-line arg for -C or --find-copies-harder, just
# config variables
detectCopies = gitConfig("git-p4.detectCopies")
if detectCopies.lower() == "false" or detectCopies == "":
pass
elif detectCopies.lower() == "true":
self.diffOpts += " -C"
else:
self.diffOpts += " -C%s" % detectCopies
if gitConfig("git-p4.detectCopiesHarder", "--bool") == "true":
self.diffOpts += " --find-copies-harder"
while len(commits) > 0: while len(commits) > 0:
commit = commits[0] commit = commits[0]
commits = commits[1:] commits = commits[1:]