diff --git a/git_cl.py b/git_cl.py index f071fbcc7..33dcbb3d1 100755 --- a/git_cl.py +++ b/git_cl.py @@ -5031,16 +5031,36 @@ def CMDformat(parser, args): # whereas the top-level presubmit script merely issues a warning. Formatting # these files is somewhat slow, so it's important not to duplicate the work. if not opts.presubmit: - for xml_dir in GetDirtyMetricsDirs(diff_files): + for diff_xml in GetDiffXMLs(diff_files): + xml_dir = GetMetricsDirs(diff_xml) + if not xml_dir: + continue + tool_dir = os.path.join(top_dir, xml_dir) pretty_print_tool = os.path.join(tool_dir, 'pretty_print.py') cmd = ['vpython', pretty_print_tool, '--non-interactive'] + + # If the XML file is histograms.xml or enums.xml, add the xml path to the + # command as pretty_print.py in histograms needs a relative path argument + # after splitting the histograms into multiple directories. + # For example, in tools/metrics/ukm, pretty-print could be run using: + # $ python pretty_print.py + # But in tools/metrics/histogrmas, pretty-print should be run with an + # additional relative path argument, like: + # $ python pretty_print.py histograms_xml/UMA/histograms.xml + # $ python pretty_print.py enums.xml + if (diff_xml.endswith('histograms.xml') + or diff_xml.endswith('enums.xml')): + cmd.append(diff_xml) + if opts.dry_run or opts.diff: cmd.append('--diff') + # TODO(isherman): Once this file runs only on Python 3.3+, drop the # `shell` param and instead replace `'vpython'` with # `shutil.which('frob')` above: https://stackoverflow.com/a/32799942 - stdout = RunCommand(cmd, cwd=top_dir, + stdout = RunCommand(cmd, + cwd=top_dir, shell=sys.platform.startswith('win32')) if opts.diff: sys.stdout.write(stdout) @@ -5050,8 +5070,13 @@ def CMDformat(parser, args): return return_value -def GetDirtyMetricsDirs(diff_files): - xml_diff_files = [x for x in diff_files if MatchingFileType(x, ['.xml'])] +def GetDiffXMLs(diff_files): + return [ + os.path.normpath(x) for x in diff_files if MatchingFileType(x, ['.xml']) + ] + + +def GetMetricsDir(diff_xml): metrics_xml_dirs = [ os.path.join('tools', 'metrics', 'actions'), os.path.join('tools', 'metrics', 'histograms'), @@ -5060,9 +5085,9 @@ def GetDirtyMetricsDirs(diff_files): os.path.join('tools', 'metrics', 'ukm'), ] for xml_dir in metrics_xml_dirs: - if any( - os.path.normpath(file).startswith(xml_dir) for file in xml_diff_files): - yield xml_dir + if diff_xml.startswith(xml_dir): + return xml_dir + return None @subcommand.usage('')