@ -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 ( ' <codereview url or issue id> ' )