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

Commit 7a354004 authored by Devin Moore's avatar Devin Moore
Browse files

Run pyformat on bump.py/finalize.py

These were becoming inconsistent.
Done with:
$ pyformat -i bump.py
$ pyformat -i finalize.py

Test: none
Bug: none
Change-Id: I5809456a2c87ed5d80e0b1aef7f8144ee72a32b9
parent 7ddc2a56
Loading
Loading
Loading
Loading
+319 −225
Original line number Diff line number Diff line
@@ -14,9 +14,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
"""
Creates the next compatibility matrix.
"""
"""Creates the next compatibility matrix."""

import argparse
import os
@@ -46,16 +44,26 @@ class Bump(object):
    self.current_letter = cmdline_args.current_letter
    self.current_version = cmdline_args.platform_version
    self.next_version = cmdline_args.next_platform_version
        self.current_module_name = f"framework_compatibility_matrix.{self.current_level}.xml"
        self.current_xml = self.interfaces_dir / f"compatibility_matrices/compatibility_matrix.{self.current_level}.xml"
    self.current_module_name = (
        f"framework_compatibility_matrix.{self.current_level}.xml"
    )
    self.current_xml = (
        self.interfaces_dir
        / f"compatibility_matrices/compatibility_matrix.{self.current_level}.xml"
    )
    self.device_module_name = "framework_compatibility_matrix.device.xml"

    self.next_level = cmdline_args.next_level
    self.next_letter = cmdline_args.next_letter
    self.current_sdk = cmdline_args.current_sdk
    self.next_sdk = cmdline_args.next_sdk
        self.next_module_name = f"framework_compatibility_matrix.{self.next_level}.xml"
        self.next_xml = self.interfaces_dir / f"compatibility_matrices/compatibility_matrix.{self.next_level}.xml"
    self.next_module_name = (
        f"framework_compatibility_matrix.{self.next_level}.xml"
    )
    self.next_xml = (
        self.interfaces_dir
        / f"compatibility_matrices/compatibility_matrix.{self.next_level}.xml"
    )

  def run(self):
    self.bump_kernel_configs()
@@ -73,8 +81,14 @@ class Bump(object):
    ])

  def copy_matrix(self):
        with open(self.current_xml) as f_current, open(self.next_xml, "w") as f_next:
            f_next.write(f_current.read().replace(f"level=\"{self.current_level}\"", f"level=\"{self.next_level}\""))
    with open(self.current_xml) as f_current, open(
        self.next_xml, "w"
    ) as f_next:
      f_next.write(
          f_current.read().replace(
              f'level="{self.current_level}"', f'level="{self.next_level}"'
          )
      )

  def edit_android_bp(self):
    android_bp = self.interfaces_dir / "compatibility_matrices/Android.bp"
@@ -83,8 +97,7 @@ class Bump(object):
      if self.next_module_name not in f.read():
        f.seek(0, 2)  # end of file
        f.write("\n")
                f.write(
                    textwrap.dedent(f"""\
        f.write(textwrap.dedent(f"""\
                        vintf_compatibility_matrix {{
                            name: "{self.next_module_name}",
                        }}
@@ -92,27 +105,46 @@ class Bump(object):

    next_kernel_configs = check_output(
        """grep -rh name: | sed -E 's/^.*"(.*)".*/\\1/g'""",
            cwd=self.top / "kernel/configs" /
            self.next_letter.lower(),
        cwd=self.top / "kernel/configs" / self.next_letter.lower(),
        text=True,
        shell=True,
    ).splitlines()
    print(next_kernel_configs)

    check_call([
            "bpmodify", "-w", "-m", self.next_module_name, "-property", "stem",
            "-str", self.next_xml.name, android_bp
        "bpmodify",
        "-w",
        "-m",
        self.next_module_name,
        "-property",
        "stem",
        "-str",
        self.next_xml.name,
        android_bp,
    ])

    check_call([
            "bpmodify", "-w", "-m", self.next_module_name, "-property", "srcs",
        "bpmodify",
        "-w",
        "-m",
        self.next_module_name,
        "-property",
        "srcs",
        "-a",
            self.next_xml.relative_to(android_bp.parent), android_bp
        self.next_xml.relative_to(android_bp.parent),
        android_bp,
    ])

    check_call([
            "bpmodify", "-w", "-m", self.next_module_name, "-property",
            "kernel_configs", "-a", " ".join(next_kernel_configs), android_bp
        "bpmodify",
        "-w",
        "-m",
        self.next_module_name,
        "-property",
        "kernel_configs",
        "-a",
        " ".join(next_kernel_configs),
        android_bp,
    ])

    # Replace the phony module's product_variables entry to add the new FCM
@@ -120,8 +152,8 @@ class Bump(object):
    lines = []
    with open(android_bp) as f:
      for line in f:
              if f"                \"{self.current_module_name}\",\n" in line:
                  lines.append(f"                \"{self.next_module_name}\",\n")
        if f'                "{self.current_module_name}",\n' in line:
          lines.append(f'                "{self.next_module_name}",\n')
        else:
          lines.append(line)

@@ -133,45 +165,69 @@ class Bump(object):
      print("Skip libvintf update...")
      return
    try:
            check_call(["grep", "-h",
      check_call([
          "grep",
          "-h",
          f"{self.next_letter.upper()} = {self.next_level}",
                        f"{self.top}/system/libvintf/include/vintf/Level.h"])
          f"{self.top}/system/libvintf/include/vintf/Level.h",
      ])
    except subprocess.CalledProcessError:
      print("Adding new API level to libvintf")
            add_lines_above(f"{self.top}/system/libvintf/analyze_matrix/analyze_matrix.cpp",
      add_lines_above(
          f"{self.top}/system/libvintf/analyze_matrix/analyze_matrix.cpp",
          "        case Level::UNSPECIFIED:",
                            textwrap.indent(textwrap.dedent(f"""\
          textwrap.indent(
              textwrap.dedent(
                  f"""\
                                    case Level::{self.next_letter.upper()}:
                                        return "Android {self.next_version} ({self.next_letter.upper()})";"""),
                            "    "*2))
            add_lines_above(f"{self.top}/system/libvintf/include/vintf/Level.h",
                                        return "Android {self.next_version} ({self.next_letter.upper()})";"""
              ),
              "    " * 2,
          ),
      )
      add_lines_above(
          f"{self.top}/system/libvintf/include/vintf/Level.h",
          "    // To add new values:",
                            f"    {self.next_letter.upper()} = {self.next_level},")
            add_lines_above(f"{self.top}/system/libvintf/include/vintf/Level.h",
          f"    {self.next_letter.upper()} = {self.next_level},",
      )
      add_lines_above(
          f"{self.top}/system/libvintf/include/vintf/Level.h",
          "        Level::UNSPECIFIED,",
                            f"        Level::{self.next_letter.upper()},")
            add_lines_above(f"{self.top}/system/libvintf/RuntimeInfo.cpp",
          f"        Level::{self.next_letter.upper()},",
      )
      add_lines_above(
          f"{self.top}/system/libvintf/RuntimeInfo.cpp",
          "            // Add more levels above this line.",
                            textwrap.indent(textwrap.dedent(f"""\
          textwrap.indent(
              textwrap.dedent(f"""\
                                        case {self.next_version}: {{
                                            ret = Level::{self.next_letter.upper()};
                                        }} break;"""),
                            "    "*3))
              "    " * 3,
          ),
      )

  def bump_libvts_vintf(self):
    if not self.current_version:
      print("Skip libvts_vintf update...")
      return
    try:
        check_call(["grep", "-h",
      check_call([
          "grep",
          "-h",
          f"{self.next_level}, Level::{self.next_letter.upper()}",
                    f"{self.top}/test/vts-testcase/hal/treble/vintf/libvts_vintf_test_common/common.cpp"])
          f"{self.top}/test/vts-testcase/hal/treble/vintf/libvts_vintf_test_common/common.cpp",
      ])
      print("libvts_vintf is already up-to-date")
    except subprocess.CalledProcessError:
      print("Adding new API level to libvts_vintf")
        add_lines_below(f"{self.top}/test/vts-testcase/hal/treble/vintf/libvts_vintf_test_common/common.cpp",
                        f"        {{{self.current_level}, Level::{self.current_letter.upper()}}},",
                        f"        {{{self.next_level}, Level::{self.next_letter.upper()}}},\n")
      add_lines_below(
          f"{self.top}/test/vts-testcase/hal/treble/vintf/libvts_vintf_test_common/common.cpp",
          f"        {{{self.current_level},"
          f" Level::{self.current_letter.upper()}}},",
          f"        {{{self.next_level},"
          f" Level::{self.next_letter.upper()}}},\n",
      )

  def bump_cuttlefish(self):
    if not self.next_sdk:
@@ -179,30 +235,43 @@ class Bump(object):
      return
    cf_mk_file = f"{self.top}/device/google/cuttlefish/shared/device.mk"
    try:
        check_call(["grep", "-h",
      check_call([
          "grep",
          "-h",
          f"PRODUCT_SHIPPING_API_LEVEL := {self.next_sdk}",
                    cf_mk_file])
          cf_mk_file,
      ])
      print("Cuttlefish is already up-to-date")
    except subprocess.CalledProcessError:
      print("Bumping Cuttlefish to the next SHIPPING_API_LEVEL")
      final_lines = []
        with open(cf_mk_file, 'r+') as f:
      with open(cf_mk_file, "r+") as f:
        for line in f:
          if f"PRODUCT_SHIPPING_API_LEVEL := {self.current_sdk}" in line:
              final_lines.append(f"PRODUCT_SHIPPING_API_LEVEL := {self.next_sdk}\n")
            final_lines.append(
                f"PRODUCT_SHIPPING_API_LEVEL := {self.next_sdk}\n"
            )
          elif line.startswith("PRODUCT_SHIPPING_API_LEVEL :="):
            # this is the previous SDK level.
              final_lines.append(f"PRODUCT_SHIPPING_API_LEVEL := {self.current_sdk}\n")
            final_lines.append(
                f"PRODUCT_SHIPPING_API_LEVEL := {self.current_sdk}\n"
            )
          else:
            final_lines.append(line)
        f.seek(0)
        f.write("".join(final_lines))
        f.truncate()
    final_lines = []
      with open(f"{self.top}/device/google/cuttlefish/shared/config/previous_manifest.xml", 'r+') as f:
    with open(
        f"{self.top}/device/google/cuttlefish/shared/config/previous_manifest.xml",
        "r+",
    ) as f:
      for line in f:
        if "target-level=" in line:
            final_lines.append(f"<manifest version=\"1.0\" type=\"device\" target-level=\"{self.current_level}\">\n")
          final_lines.append(
              '<manifest version="1.0" type="device"'
              f' target-level="{self.current_level}">\n'
          )
        else:
          final_lines.append(line)
      f.seek(0)
@@ -210,32 +279,40 @@ class Bump(object):
      f.truncate()

    final_lines = []
      with open(f"{self.top}/device/google/cuttlefish/shared/config/manifest.xml", 'r+') as f:
    with open(
        f"{self.top}/device/google/cuttlefish/shared/config/manifest.xml", "r+"
    ) as f:
      for line in f:
        if "target-level=" in line:
            final_lines.append(f"<manifest version=\"1.0\" type=\"device\" target-level=\"{self.next_level}\">\n")
          final_lines.append(
              '<manifest version="1.0" type="device"'
              f' target-level="{self.next_level}">\n'
          )
        else:
          final_lines.append(line)
      f.seek(0)
      f.write("".join(final_lines))
      f.truncate()


def add_lines_above(file, pattern, lines):
    with open(file, 'r+') as f:
  with open(file, "r+") as f:
    text = f.read()
    split_text = re.split(rf"\n{pattern}\n", text)
    if len(split_text) != 2:
      # Only one pattern must be found, otherwise the source must be
      # changed unexpectedly.
      raise Exception(
                f'Pattern "{pattern}" not found or multiple patterns found in {file}')
          f'Pattern "{pattern}" not found or multiple patterns found in {file}'
      )
    f.seek(0)
    f.write(f"\n{lines}\n{pattern}\n".join(split_text))
    f.truncate()


def add_lines_below(file, pattern, lines):
  final_lines = []
    with open(file, 'r+') as f:
  with open(file, "r+") as f:
    for line in f:
      final_lines.append(line)
      if pattern in line:
@@ -244,36 +321,53 @@ def add_lines_below(file, pattern, lines):
    f.write("".join(final_lines))
    f.truncate()


def main():
  parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument("current_level",
  parser.add_argument(
      "current_level",
      type=str,
                        help="VINTF level of the current version (e.g. 202404)")
    parser.add_argument("next_level",
      help="VINTF level of the current version (e.g. 202404)",
  )
  parser.add_argument(
      "next_level",
      type=str,
                        help="VINTF level of the next version (e.g. 202504)")
    parser.add_argument("current_letter",
      help="VINTF level of the next version (e.g. 202504)",
  )
  parser.add_argument(
      "current_letter",
      type=str,
                        help="Letter of the API level of the current version (e.g. b)")
    parser.add_argument("next_letter",
      help="Letter of the API level of the current version (e.g. b)",
  )
  parser.add_argument(
      "next_letter",
      type=str,
                        help="Letter of the API level of the next version (e.g. c)")
    parser.add_argument("platform_version",
      help="Letter of the API level of the next version (e.g. c)",
  )
  parser.add_argument(
      "platform_version",
      type=str,
      nargs="?",
                        help="Current Android release version number (e.g. 16)")
    parser.add_argument("next_platform_version",
      help="Current Android release version number (e.g. 16)",
  )
  parser.add_argument(
      "next_platform_version",
      type=str,
      nargs="?",
                        help="Next Android release version number number (e.g. 17)")
    parser.add_argument("current_sdk",
      help="Next Android release version number number (e.g. 17)",
  )
  parser.add_argument(
      "current_sdk",
      type=str,
      nargs="?",
                        help="Version of the current SDK API level (e.g. 36)")
    parser.add_argument("next_sdk",
      help="Version of the current SDK API level (e.g. 36)",
  )
  parser.add_argument(
      "next_sdk",
      type=str,
      nargs="?",
                        help="Version of the next SDK API level(e.g. 37)")
      help="Version of the next SDK API level(e.g. 37)",
  )

  cmdline_args = parser.parse_args()

+41 −34
Original line number Diff line number Diff line
@@ -14,8 +14,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
"""
Finalizes the current compatibility matrix and allows `next` targets to
"""Finalizes the current compatibility matrix and allows `next` targets to

use the new FCM.
"""

@@ -31,10 +31,12 @@ def check_call(*args, **kwargs):
  print(args)
  subprocess.check_call(*args, **kwargs)


def check_output(*args, **kwargs):
  print(args)
  return subprocess.check_output(*args, **kwargs)


class Bump(object):

  def __init__(self, cmdline_args):
@@ -42,7 +44,9 @@ class Bump(object):
    self.interfaces_dir = self.top / "hardware/interfaces"

    self.current_level = cmdline_args.current_level
        self.current_module_name = f"framework_compatibility_matrix.{self.current_level}.xml"
    self.current_module_name = (
        f"framework_compatibility_matrix.{self.current_level}.xml"
    )
    self.device_module_name = "framework_compatibility_matrix.device.xml"

  def run(self):
@@ -57,19 +61,22 @@ class Bump(object):
    lines = []
    with open(android_bp) as f:
      for line in f:
              if f"    \"{self.device_module_name}\",\n" in line:
                  lines.append(f"    \"{self.current_module_name}\",\n")
        if f'    "{self.device_module_name}",\n' in line:
          lines.append(f'    "{self.current_module_name}",\n')

        lines.append(line)

    with open(android_bp, "w") as f:
      f.write("".join(lines))


def main():
  parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument("current_level",
  parser.add_argument(
      "current_level",
      type=str,
                        help="VINTF level of the current version (e.g. 202404)")
      help="VINTF level of the current version (e.g. 202404)",
  )
  cmdline_args = parser.parse_args()

  Bump(cmdline_args).run()