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

Commit 6c9e319d authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "extract_kernel: make it py2/py3 compatible"

parents a5dcac76 791378cd
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -62,10 +62,10 @@ python_binary_host {
  srcs: ["extract_kernel.py"],
  version: {
    py2: {
      enabled: true,
      enabled: false,
    },
    py3: {
      enabled: false,
      enabled: true,
    },
  },
}
+14 −9
Original line number Diff line number Diff line
@@ -39,12 +39,12 @@ COMPRESSION_ALGO = (
# "Linux version " UTS_RELEASE " (" LINUX_COMPILE_BY "@"
# LINUX_COMPILE_HOST ") (" LINUX_COMPILER ") " UTS_VERSION "\n";
LINUX_BANNER_PREFIX = b'Linux version '
LINUX_BANNER_REGEX = LINUX_BANNER_PREFIX + \
LINUX_BANNER_REGEX = LINUX_BANNER_PREFIX.decode() + \
    r'(?P<release>(?P<version>[0-9]+[.][0-9]+[.][0-9]+).*) \(.*@.*\) \((?P<compiler>.*)\) .*\n'


def get_from_release(input_bytes, start_idx, key):
  null_idx = input_bytes.find('\x00', start_idx)
  null_idx = input_bytes.find(b'\x00', start_idx)
  if null_idx < 0:
    return None
  try:
@@ -69,7 +69,7 @@ def dump_from_release(input_bytes, key):

    value = get_from_release(input_bytes, idx, key)
    if value:
      return value
      return value.encode()

    idx += len(LINUX_BANNER_PREFIX)

@@ -140,7 +140,7 @@ def try_decompress(cmd, search_bytes, input_bytes):
  while True:
    idx = input_bytes.find(search_bytes, idx)
    if idx < 0:
      raise StopIteration()
      return

    yield try_decompress_bytes(cmd, input_bytes[idx:])
    idx += 1
@@ -183,6 +183,11 @@ def dump_to_file(f, dump_fn, input_bytes, desc):
      return False
  return True

def to_bytes_io(b):
  """
  Make b, which is either sys.stdout or sys.stdin, receive bytes as arguments.
  """
  return b.buffer if sys.version_info.major == 3 else b

def main():
  parser = argparse.ArgumentParser(
@@ -194,35 +199,35 @@ def main():
                      help='Input kernel image. If not specified, use stdin',
                      metavar='FILE',
                      type=argparse.FileType('rb'),
                      default=sys.stdin)
                      default=to_bytes_io(sys.stdin))
  parser.add_argument('--output-configs',
                      help='If specified, write configs. Use stdout if no file '
                           'is specified.',
                      metavar='FILE',
                      nargs='?',
                      type=argparse.FileType('wb'),
                      const=sys.stdout)
                      const=to_bytes_io(sys.stdout))
  parser.add_argument('--output-version',
                      help='If specified, write version. Use stdout if no file '
                           'is specified.',
                      metavar='FILE',
                      nargs='?',
                      type=argparse.FileType('wb'),
                      const=sys.stdout)
                      const=to_bytes_io(sys.stdout))
  parser.add_argument('--output-release',
                      help='If specified, write kernel release. Use stdout if '
                           'no file is specified.',
                      metavar='FILE',
                      nargs='?',
                      type=argparse.FileType('wb'),
                      const=sys.stdout)
                      const=to_bytes_io(sys.stdout))
  parser.add_argument('--output-compiler',
                      help='If specified, write the compiler information. Use stdout if no file '
                           'is specified.',
                      metavar='FILE',
                      nargs='?',
                      type=argparse.FileType('wb'),
                      const=sys.stdout)
                      const=to_bytes_io(sys.stdout))
  parser.add_argument('--tools',
                      help='Decompression tools to use. If not specified, PATH '
                           'is searched.',
+6 −6
Original line number Diff line number Diff line
@@ -15,16 +15,16 @@
# limitations under the License.

import unittest
from extract_kernel import get_version, dump_version
from extract_kernel import dump_version

class ExtractKernelTest(unittest.TestCase):
  def test_extract_version(self):
    self.assertEqual("4.9.100", get_version(
        b'Linux version 4.9.100-a123 (a@a) (a) a\n\x00', 0))
    self.assertEqual("4.9.123", get_version(
        b'Linux version 4.9.123 (@) () \n\x00', 0))
    self.assertEqual("4.9.100", dump_version(
        b'Linux version 4.9.100-a123 (a@a) (a) a\n\x00'))
    self.assertEqual("4.9.123", dump_version(
        b'Linux version 4.9.123 (@) () \n\x00'))

  def test_dump_self(self):
    self.assertEqual("4.9.1", dump_version(
        b"trash\x00Linux version 4.8.8\x00trash\x00"
        "other trash Linux version 4.9.1-g3 (2@s) (2) a\n\x00"))
        b"other trash Linux version 4.9.1-g3 (2@s) (2) a\n\x00"))