Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(449)

Unified Diff: git_cl.py

Issue 10945002: Add option to specify similarity level for git diff operations on commandline (Closed) Base URL: https://git.chromium.org/chromium/tools/depot_tools.git@master
Patch Set: rebase (which includes upstreamed upload.py, thanks m-a :)) Created 8 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | tests/git_cl_test.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: git_cl.py
diff --git a/git_cl.py b/git_cl.py
index 6c7afe48f50d4ce1a42dfdd338b2f05ce1b7f357..acd04a57af4bddebaefd66e69df71682fe7d04fc 100755
--- a/git_cl.py
+++ b/git_cl.py
@@ -92,6 +92,41 @@ def ask_for_data(prompt):
sys.exit(1)
+def add_git_similarity(parser):
+ parser.add_option(
+ '--similarity', metavar='SIM', type='int', action='store', default=None,
+ help='Sets the percentage that a pair of files need to match in order to'
+ ' be considered copies (default 50)')
+
+ old_parser_args = parser.parse_args
+ def Parse(args):
+ options, args = old_parser_args(args)
+
+ branch = Changelist().GetBranch()
+ key = 'branch.%s.git-cl-similarity' % branch
+ if options.similarity is None:
+ if branch:
+ (_, stdout) = RunGitWithCode(['config', '--int', '--get', key])
+ try:
+ options.similarity = int(stdout.strip())
+ except ValueError:
+ pass
+ options.similarity = options.similarity or 50
+ else:
+ if branch:
+ print('Note: Saving similarity of %d%% in git config.'
+ % options.similarity)
+ RunGit(['config', '--int', key, str(options.similarity)])
+
+ options.similarity = max(1, min(options.similarity, 100))
+
+ print('Using %d%% similarity for rename/copy detection. '
+ 'Override with --similarity.' % options.similarity)
+
+ return options, args
+ parser.parse_args = Parse
+
+
def MatchSvnGlob(url, base_url, glob_spec, allow_wildcards):
"""Return the corresponding git ref if |base_url| together with |glob_spec|
matches the full |url|.
@@ -134,7 +169,7 @@ def MatchSvnGlob(url, base_url, glob_spec, allow_wildcards):
return None
-def print_stats(args):
+def print_stats(similarity, args):
"""Prints statistics about the change to the user."""
# --no-ext-diff is broken in some versions of Git, so try to work around
# this by overriding the environment (but there is still a problem if the
@@ -144,7 +179,7 @@ def print_stats(args):
del env['GIT_EXTERNAL_DIFF']
return subprocess2.call(
['git', 'diff', '--no-ext-diff', '--stat', '--find-copies-harder',
- '-l100000'] + args, env=env)
+ '-C%s' % similarity, '-l100000'] + args, env=env)
class Settings(object):
@@ -1037,6 +1072,8 @@ def RietveldUpload(options, args, cl):
if cc:
upload_args.extend(['--cc', cc])
+ upload_args.extend(['--git_similarity', str(options.similarity)])
+
# Include the upstream repo's URL in the change -- this is useful for
# projects that have their source spread across multiple repos.
remote_url = cl.GetGitBaseUrlFromConfig()
@@ -1103,6 +1140,7 @@ def CMDupload(parser, args):
if settings.GetIsGerrit():
parser.add_option('--target_branch', dest='target_branch', default='master',
help='target branch to upload')
+ add_git_similarity(parser)
(options, args) = parser.parse_args(args)
# Print warning if the user used the -m/--message argument. This will soon
@@ -1138,7 +1176,7 @@ def CMDupload(parser, args):
if not options.reviewers and hook_results.reviewers:
options.reviewers = hook_results.reviewers
- print_stats(args)
+ print_stats(options.similarity, args)
if settings.GetIsGerrit():
return GerritUpload(options, args, cl)
return RietveldUpload(options, args, cl)
@@ -1170,6 +1208,7 @@ def SendUpstream(parser, args, cmd):
help="external contributor for patch (appended to " +
"description and used as author for git). Should be " +
"formatted as 'First Last <email@example.com>'")
+ add_git_similarity(parser)
(options, args) = parser.parse_args(args)
cl = Changelist()
@@ -1271,7 +1310,7 @@ def SendUpstream(parser, args, cmd):
branches = [base_branch, cl.GetBranchRef()]
if not options.force:
- print_stats(branches)
+ print_stats(options.similarity, branches)
ask_for_data('About to commit; enter to confirm.')
# We want to squash all this branch's commits into one commit with the proper
@@ -1320,6 +1359,7 @@ def SendUpstream(parser, args, cmd):
else:
# dcommit the merge branch.
retcode, output = RunGitWithCode(['svn', 'dcommit',
+ '-C%s' % options.similarity,
'--no-rebase', '--rmdir'])
finally:
# And then swap back to the original branch and clean up.
« no previous file with comments | « no previous file | tests/git_cl_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698