presubmit: generate a diff with prefix a/ and b/
Historically, git_cl.py and presubmit_support.py generated diffs inconsistently. ==== git_cl.py ==== 1) git_cl.py:_RunClangFormatDiff() assumed the input diff was generated with --no-prefix. Therefore, it hard-coded -p0 as a param for clang_format_diff.py. If the diff was generated without --no-prefix, it would have to pass -p1 instead. 2) git_cl.py _RunYapf() and _RunGoogleJavaFormat assumed that the input diff was generated with prefixes. Therefore, it parsed the diffs, assuming that the diff was generated with a/ and b/ prefixes. This discrepancy wasn't an issue because each of the Run functions generated and consumed the diffs within themselves. It became an issue when https://crrev.com/c/6931775 was developed. The CL consolidated the diff generation into a common function, so that all _Run functions need to agree with the presence of the prefixes. The CL changed _RunClangFormatDiff() to use -p1 instead of -p0, mainly because - it's the p level for the default git-diff option - it's the p level for the unix diff util - CiderG Chromium also generates the diff with the prefixes to emulate the default diff output. - I highly believe that --no-prefix was chosen for no reasons. It seems to be a random choice to work with -p0. - Either Java/Python or Clang wrapper should be changed. ==== presubmit_support.py ==== presubmit_support.py can be given a diff_file via --diff_file. Otherwise, it generates the diff based on --upstream_commit. a) it doesn't enforce the presence of the prefixes in the input diff_file. As stated above, the Chromium extension generates a diff with prefixes. b) in contrast, when it is not given --diff_file, it generates the diff with --no-prefix, and I don't find any reasons for it. I believe that it's from a copy-pasted random choice. ==== the problem ==== This discarepancy became a problem, when crrev.com/c/6937365 was landed. It enforces git_cl.py and presubmit_support.py to agree for the format of the input diff. That is, the presence of the prefixes must be agreed by all the following. - presubmit_support.py with --diff_file /tmp/abc - presubmit_suppory.py without --diff_file /tmp/abc - git cl format - git cl format --input_diff_file /tmp/abc ==== possible solutions ==== Obviously, there are 3 choices. 1) update the regex and parsers of git_cl.py to auto detect the best -p{num}. This was the least preferred option, as it can be fragile. 2) update Chromium extension and git_cl.py to use --no-prefix. i.e., - update the Chromium CiderG to generate diffs without the prefix. - update the regex used in _ComputeFormatDiffLineRanges() to assume that the input is generated with --no-prefix. - change _RunClangFormatDiff() to pass -p0 instead of -p1. 3) update presubmit_support.py to generate diff without --no-prefix. ==== What this CL does ==== It implements (3). - That is the default option for git-diff. - I don't find obvious reasons to use --no-prefix. - CiderG has been generating diffs with prefixes for weeks. - It implies that presubmit_support.py works fine with a prefixed diff. Bug: 386840832 Change-Id: Iac8a4fc30f101e70e3ccc56f9f8ee48198dfa833 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/6939737 Commit-Queue: Scott Lee <ddoman@chromium.org> Reviewed-by: Gavin Mak <gavinmak@google.com>changes/37/6939737/7
parent
6b4f0bfc22
commit
077e02a769
Loading…
Reference in New Issue