1*b7c941bbSAndroid Build Coastguard Worker#!/usr/bin/env python3 2*b7c941bbSAndroid Build Coastguard Worker# 3*b7c941bbSAndroid Build Coastguard Worker# Copyright 2021 - The Android Open Source Project 4*b7c941bbSAndroid Build Coastguard Worker# 5*b7c941bbSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 6*b7c941bbSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 7*b7c941bbSAndroid Build Coastguard Worker# You may obtain a copy of the License at 8*b7c941bbSAndroid Build Coastguard Worker# 9*b7c941bbSAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 10*b7c941bbSAndroid Build Coastguard Worker# 11*b7c941bbSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 12*b7c941bbSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 13*b7c941bbSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*b7c941bbSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 15*b7c941bbSAndroid Build Coastguard Worker# limitations under the License. 16*b7c941bbSAndroid Build Coastguard Worker 17*b7c941bbSAndroid Build Coastguard Worker"""Abstract class that reads build file.""" 18*b7c941bbSAndroid Build Coastguard Worker 19*b7c941bbSAndroid Build Coastguard Workerclass AbstractBuildFileHandler(object): 20*b7c941bbSAndroid Build Coastguard Worker """Build file handler interface.""" 21*b7c941bbSAndroid Build Coastguard Worker 22*b7c941bbSAndroid Build Coastguard Worker def __init__(self, build_file): 23*b7c941bbSAndroid Build Coastguard Worker self.build_file = build_file 24*b7c941bbSAndroid Build Coastguard Worker 25*b7c941bbSAndroid Build Coastguard Worker def get_file_hash(self, file_names, hash_func=None): 26*b7c941bbSAndroid Build Coastguard Worker """Get hash value of file's content. 27*b7c941bbSAndroid Build Coastguard Worker 28*b7c941bbSAndroid Build Coastguard Worker Args: 29*b7c941bbSAndroid Build Coastguard Worker file_names: list of file names inside build file, the format should be 30*b7c941bbSAndroid Build Coastguard Worker consistent with the file in device, e.g. /system/build.prop. 31*b7c941bbSAndroid Build Coastguard Worker hash_func: optional hash function. 32*b7c941bbSAndroid Build Coastguard Worker Returns: 33*b7c941bbSAndroid Build Coastguard Worker A dictionary where key is file name and value is hash value of its content. 34*b7c941bbSAndroid Build Coastguard Worker """ 35*b7c941bbSAndroid Build Coastguard Worker raise NotImplementedError('You need to implement get_file_hash function.') 36*b7c941bbSAndroid Build Coastguard Worker 37*b7c941bbSAndroid Build Coastguard Worker def get_system_fingerprint(self): 38*b7c941bbSAndroid Build Coastguard Worker """Get build fingerprint in SYSTEM partition. 39*b7c941bbSAndroid Build Coastguard Worker 40*b7c941bbSAndroid Build Coastguard Worker Fingerprint format: $(BRAND)/$(PRODUCT)/$(DEVICE)/$(BOARD): 41*b7c941bbSAndroid Build Coastguard Worker $(VERSION.RELEASE)/$(ID)/$(VERSION.INCREMENTAL):$(TYPE)/$(TAGS) 42*b7c941bbSAndroid Build Coastguard Worker 43*b7c941bbSAndroid Build Coastguard Worker Returns: 44*b7c941bbSAndroid Build Coastguard Worker String of build fingerprint. 45*b7c941bbSAndroid Build Coastguard Worker """ 46*b7c941bbSAndroid Build Coastguard Worker raise NotImplementedError('You need to implement get_system_fingerprint function.') 47