Tentative fix for roll-dep.py failing in generate commit message
Some bots run roll-dep.py and fail while generating the commit message
with the following error:
src/ios/third_party/material_components_ios/src: Rolling from 54fd1dac39 to 5aaf54801f
fatal: ambiguous argument '54fd1dac3..5aaf54801': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
As "Rolling from 54fd1dac39 to 5aaf54801f" is printed, this mean that
the bot was able to resolve both HEAD and roll_to before invoking this
function, thus the corresponding hashes exists in the repository.
It is unlikely that shortening the hash to just the first nine chars
results in a collision, but there is no reason to use a short hash
when invoking git anyway, so use a separate variable to construct the
header of the commit with short hashes while invoking git with the
full hashes.
Also pass '--' after all the parameters to force git to interpret the
hash range as a range and not as a path.
This is a speculative fix.
Change-Id: Iaa2888610dcf8e20f9edc115a719791d573b83ac
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/2031104
Reviewed-by: Aaron Gable <agable@chromium.org>
Commit-Queue: Sylvain Defresne <sdefresne@chromium.org>
diff --git a/roll_dep.py b/roll_dep.py
index d34d467..b857f65 100755
--- a/roll_dep.py
+++ b/roll_dep.py
@@ -99,13 +99,15 @@
def generate_commit_message(
full_dir, dependency, head, roll_to, no_log, log_limit):
"""Creates the commit message for this specific roll."""
- commit_range = '%s..%s' % (head[:9], roll_to[:9])
+ commit_range = '%s..%s' % (head, roll_to)
+ commit_range_for_header = '%s..%s' % (head[:9], roll_to[:9])
upstream_url = check_output(
['git', 'config', 'remote.origin.url'], cwd=full_dir).strip()
log_url = get_log_url(upstream_url, head, roll_to)
cmd = ['git', 'log', commit_range, '--date=short', '--no-merges']
logs = check_output(
- cmd + ['--format=%ad %ae %s'], # Args with '=' are automatically quoted.
+ # Args with '=' are automatically quoted.
+ cmd + ['--format=%ad %ae %s', '--'],
cwd=full_dir).rstrip()
logs = re.sub(r'(?m)^(\d\d\d\d-\d\d-\d\d [^@]+)@[^ ]+( .*)$', r'\1\2', logs)
lines = logs.splitlines()
@@ -116,7 +118,7 @@
rolls = nb_commits - len(cleaned_lines)
header = 'Roll %s/ %s (%d commit%s%s)\n\n' % (
dependency,
- commit_range,
+ commit_range_for_header,
nb_commits,
's' if nb_commits > 1 else '',
('; %s trivial rolls' % rolls) if rolls else '')