• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/usr/bin/env python3
2#
3#   Copyright 2021 - The Android Open Source Project
4#
5#   Licensed under the Apache License, Version 2.0 (the "License");
6#   you may not use this file except in compliance with the License.
7#   You may obtain a copy of the License at
8#
9#       http://www.apache.org/licenses/LICENSE-2.0
10#
11#   Unless required by applicable law or agreed to in writing, software
12#   distributed under the License is distributed on an "AS IS" BASIS,
13#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14#   See the License for the specific language governing permissions and
15#   limitations under the License.
16
17"""File handler that reads target files."""
18
19from abstract_build_file_handler import *
20from zipfile import ZipFile
21
22class TargetFileHandler(AbstractBuildFileHandler):
23  """Reads file's content from target files."""
24
25  def __init__(self, build_file):
26    super().__init__(build_file)
27
28  def get_file_hash(self, file_names, hash_func=None):
29    """See base class."""
30    hash_dict = dict()
31    with ZipFile(self.build_file) as zip_file:
32      for file_name in file_names:
33        # Convert top directory's name to upper case.
34        idx = file_name[1:].find('/')+1
35        real_file_name = file_name[1:idx].upper()+file_name[idx:]
36        if real_file_name not in zip_file.namelist():
37          continue
38        with zip_file.open(real_file_name) as f:
39          if hash_func:
40            hash_dict[file_name] = hash_func(f.read())
41          else:
42            hash_dict[file_name] = hash(f.read())
43    return hash_dict
44
45  def get_system_fingerprint(self):
46    """See base class."""
47    fingerprint = ''
48    with ZipFile(self.build_file) as zip_file:
49      with zip_file.open('SYSTEM/build.prop') as build_prop:
50        for line in build_prop:
51          line = line.decode('UTF-8')
52          if 'build.fingerprint' not in line:
53            continue
54          fingerprint = line.split('=')[1].strip()
55          break
56    return fingerprint
57