Skip to content

Commit

Permalink
git p4: refactor diffOpts calculation
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Gary Gibbons authored and Junio C Hamano committed Jul 6, 2012
1 parent a0327c0 commit 84cb000
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 24 deletions.
10 changes: 6 additions & 4 deletions Documentation/git-p4.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
from 'HEAD'.

-M[<n>]::
-M::
Detect renames. See linkgit:git-diff[1]. Renames will be
represented in p4 using explicit 'move' operations. There
is no corresponding option to detect copies, but there are
Expand Down Expand Up @@ -465,13 +465,15 @@ git-p4.useClientSpec::
Submit variables
~~~~~~~~~~~~~~~~
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::
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::
Detect copies harder. See linkgit:git-diff[1].
Detect copies harder. See linkgit:git-diff[1]. A boolean.

git-p4.preserveUser::
On submit, re-author changes to reflect the git author,
Expand Down
52 changes: 32 additions & 20 deletions git-p4.py
Original file line number Diff line number Diff line change
Expand Up @@ -1046,27 +1046,8 @@ def applyCommit(self, 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 == "":
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))
diff = read_pipe_lines("git diff-tree -r %s \"%s^\" \"%s\"" % (self.diffOpts, id, id))
filesToAdd = set()
filesToDelete = set()
editedFiles = set()
Expand Down Expand Up @@ -1433,6 +1414,37 @@ def run(self, args):
if self.preserveUser:
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:
commit = commits[0]
commits = commits[1:]
Expand Down

0 comments on commit 84cb000

Please sign in to comment.