Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d351f7c8 authored by Chih-hung Hsieh's avatar Chih-hung Hsieh Committed by Automerger Merge Worker
Browse files

Merge "Handle warning lines from RBE" am: 799e26e6

Original change: https://android-review.googlesource.com/c/platform/build/+/1818732

Change-Id: Ib55743ad069d73d809a1e081412631562d64fea2
parents 3811c649 799e26e6
Loading
Loading
Loading
Loading
+35 −3
Original line number Diff line number Diff line
@@ -236,7 +236,11 @@ def find_android_root(buildlog):
  warning_pattern = re.compile('^/[^ ]*/[^ ]*: warning: .*')
  count = 0
  for line in buildlog:
    if warning_pattern.match(line):
    # We want to find android_root of a local build machine.
    # Do not use RBE warning lines, which has '/b/f/w/' path prefix.
    # Do not use /tmp/ file warnings.
    if warning_pattern.match(line) and (
        '/b/f/w' not in line and not line.startswith('/tmp/')):
      warning_lines.append(line)
      count += 1
      if count > 9999:
@@ -300,6 +304,7 @@ def parse_input_file_chrome(infile, flags):
  architecture = 'unknown'

  # only handle warning lines of format 'file_path:line_no:col_no: warning: ...'
  # Bug: http://198657613, This might need change to handle RBE output.
  chrome_warning_pattern = r'^[^ ]*/[^ ]*:[0-9]+:[0-9]+: warning: .*'

  warning_pattern = re.compile(chrome_warning_pattern)
@@ -347,6 +352,8 @@ def parse_input_file_android(infile, flags):
  platform_version = 'unknown'
  target_product = 'unknown'
  target_variant = 'unknown'
  build_id = 'unknown'
  use_rbe = False
  android_root = find_android_root(infile)
  infile.seek(0)

@@ -363,6 +370,14 @@ def parse_input_file_android(infile, flags):
  warning_without_file = re.compile('^warning: .*')
  rustc_file_position = re.compile('^[ ]+--> [^ ]*/[^ ]*:[0-9]+:[0-9]+')

  # If RBE was used, try to reclaim some warning lines mixed with some
  # leading chars from other concurrent job's stderr output .
  # The leading characters can be any character, including digits and spaces.
  # It's impossible to correctly identify the starting point of the source
  # file path without the file directory name knowledge.
  # Here we can only be sure to recover lines containing "/b/f/w/".
  rbe_warning_pattern = re.compile('.*/b/f/w/[^ ]*: warning: .*')

   # Collect all unique warning lines
  # Remove the duplicated warnings save ~8% of time when parsing
  # one typical build log than before
@@ -384,6 +399,12 @@ def parse_input_file_android(infile, flags):
          prev_warning, flags, android_root, unique_warnings)
      prev_warning = ''

    if use_rbe and rbe_warning_pattern.match(line):
      cleaned_up_line = re.sub('.*/b/f/w/', '', line)
      unique_warnings = add_normalized_line_to_warnings(
          cleaned_up_line, flags, android_root, unique_warnings)
      continue

    if warning_pattern.match(line):
      if warning_without_file.match(line):
        # save this line and combine it with the next line
@@ -399,15 +420,26 @@ def parse_input_file_android(infile, flags):
      result = re.search('(?<=^PLATFORM_VERSION=).*', line)
      if result is not None:
        platform_version = result.group(0)
        continue
      result = re.search('(?<=^TARGET_PRODUCT=).*', line)
      if result is not None:
        target_product = result.group(0)
        continue
      result = re.search('(?<=^TARGET_BUILD_VARIANT=).*', line)
      if result is not None:
        target_variant = result.group(0)
        continue
      result = re.search('(?<=^BUILD_ID=).*', line)
      if result is not None:
        build_id = result.group(0)
        continue
      result = re.search('(?<=^TOP=).*', line)
      if result is not None:
        android_root = result.group(1)
        continue
      if re.search('USE_RBE=', line) is not None:
        use_rbe = True
        continue

  if android_root:
    new_unique_warnings = dict()
@@ -418,8 +450,8 @@ def parse_input_file_android(infile, flags):
          warning_line, flags, android_root)
    unique_warnings = new_unique_warnings

  header_str = '%s - %s - %s' % (platform_version, target_product,
                                 target_variant)
  header_str = '%s - %s - %s (%s)' % (
      platform_version, target_product, target_variant, build_id)
  return unique_warnings, header_str