def main(): """For local testing purposes. Note: VNDK snapshot must be already installed under prebuilts/vndk/v{version}. """ ANDROID_BUILD_TOP = utils.get_android_build_top() PREBUILTS_VNDK_DIR = utils.join_realpath(ANDROID_BUILD_TOP, 'prebuilts/vndk') args = get_args() vndk_version = args.vndk_version install_dir = os.path.join(PREBUILTS_VNDK_DIR, 'v{}'.format(vndk_version)) if not os.path.isdir(install_dir): raise ValueError( 'Please provide valid VNDK version. {} does not exist.'.format( install_dir)) utils.set_logging_config(args.verbose) buildfile_generator = GenBuildFile(install_dir, vndk_version) buildfile_generator.generate_root_android_bp() buildfile_generator.generate_common_android_bp() buildfile_generator.generate_android_bp() logging.info('Done.')
def main(): """For local testing purposes. Note: VNDK snapshot must be already installed under prebuilts/vndk/v{version}. """ ANDROID_BUILD_TOP = utils.get_android_build_top() PREBUILTS_VNDK_DIR = utils.join_realpath(ANDROID_BUILD_TOP, 'prebuilts/vndk') args = get_args() vndk_version = args.vndk_version install_dir = os.path.join(PREBUILTS_VNDK_DIR, 'v{}'.format(vndk_version)) if not os.path.isdir(install_dir): raise ValueError( 'Please provide valid VNDK version. {} does not exist.' .format(install_dir)) utils.set_logging_config(args.verbose) buildfile_generator = GenBuildFile(install_dir, vndk_version) buildfile_generator.generate_root_android_bp() buildfile_generator.generate_common_android_bp() buildfile_generator.generate_android_bp() logging.info('Done.')
def _check_revision_exists(self, revision, git_project_path): """Checks whether a revision is found in a git project of current tree. Args: revision: string, revision value recorded in manifest.xml git_project_path: string, path relative to ANDROID_BUILD_TOP """ path = utils.join_realpath(self._android_build_top, git_project_path) def _check_rev_list(revision): """Checks whether revision is reachable from HEAD of git project.""" logging.info('Checking if revision {rev} exists in {proj}'.format( rev=revision, proj=git_project_path)) try: cmd = [ 'git', '-C', path, 'rev-list', 'HEAD..{}'.format(revision) ] output = utils.check_output(cmd).strip() except subprocess.CalledProcessError as error: logging.error('Error: {}'.format(error)) return False else: if output: logging.debug( '{proj} does not have the following revisions: {rev}'. format(proj=git_project_path, rev=output)) return False else: logging.info( 'Found revision {rev} in project {proj}'.format( rev=revision, proj=git_project_path)) return True if not _check_rev_list(revision): # VNDK snapshots built from a *-release branch will have merge # CLs in the manifest because the *-dev branch is merged to the # *-release branch periodically. In order to extract the # revision relevant to the source of the git_project_path, # we fetch the *-release branch and get the revision of the # parent commit with FETCH_HEAD^2. logging.info( 'Checking if the parent of revision {rev} exists in {proj}'. format(rev=revision, proj=git_project_path)) try: cmd = ['git', '-C', path, 'fetch', 'goog', revision] utils.check_call(cmd) cmd = ['git', '-C', path, 'rev-parse', 'FETCH_HEAD^2'] parent_revision = utils.check_output(cmd).strip() except subprocess.CalledProcessError as error: logging.error( 'Failed to get parent of revision {rev}: {err}'.format( rev=revision, err=error)) raise else: if not _check_rev_list(parent_revision): return False return True
def _check_revision_exists(self, revision, git_project_path): """Checks whether a revision is found in a git project of current tree. Args: revision: string, revision value recorded in manifest.xml git_project_path: string, path relative to ANDROID_BUILD_TOP """ path = utils.join_realpath(self._android_build_top, git_project_path) try: subprocess.check_call( ['git', '-C', path, 'rev-list', 'HEAD..{}'.format(revision)]) return True except subprocess.CalledProcessError: return False
def main(): """For local testing purposes. Note: VNDK snapshot must be already installed under prebuilts/vndk/v{version}. """ ANDROID_BUILD_TOP = utils.get_android_build_top() PREBUILTS_VNDK_DIR = utils.join_realpath(ANDROID_BUILD_TOP, 'prebuilts/vndk') vndk_version = 27 # set appropriately install_dir = os.path.join(PREBUILTS_VNDK_DIR, 'v{}'.format(vndk_version)) buildfile_generator = GenBuildFile(install_dir, vndk_version) buildfile_generator.generate_android_mk() buildfile_generator.generate_android_bp()
def main(): """For local testing purposes. Note: VNDK snapshot must be already installed under prebuilts/vndk/v{version}. """ ANDROID_BUILD_TOP = utils.get_android_build_top() PREBUILTS_VNDK_DIR = utils.join_realpath(ANDROID_BUILD_TOP, 'prebuilts/vndk') args = get_args() vndk_version = args.vndk_version install_dir = os.path.join(PREBUILTS_VNDK_DIR, 'v{}'.format(vndk_version)) remote = args.remote if not os.path.isdir(install_dir): raise ValueError( 'Please provide valid VNDK version. {} does not exist.' .format(install_dir)) utils.set_logging_config(args.verbose) temp_artifact_dir = tempfile.mkdtemp() os.chdir(temp_artifact_dir) manifest_pattern = 'manifest_{}.xml'.format(args.build) manifest_dest = os.path.join(temp_artifact_dir, utils.MANIFEST_FILE_NAME) logging.info('Fetching {file} from {branch} (bid: {build})'.format( file=manifest_pattern, branch=args.branch, build=args.build)) utils.fetch_artifact(args.branch, args.build, manifest_pattern, manifest_dest) license_checker = GPLChecker(install_dir, ANDROID_BUILD_TOP, temp_artifact_dir, remote) try: license_checker.check_gpl_projects() except ValueError as error: logging.error('Error: {}'.format(error)) raise finally: logging.info( 'Deleting temp_artifact_dir: {}'.format(temp_artifact_dir)) shutil.rmtree(temp_artifact_dir) logging.info('Done.')
def main(): """For local testing purposes. Note: VNDK snapshot must be already installed under prebuilts/vndk/v{version}. """ ANDROID_BUILD_TOP = utils.get_android_build_top() PREBUILTS_VNDK_DIR = utils.join_realpath(ANDROID_BUILD_TOP, 'prebuilts/vndk') args = get_args() vndk_version = args.vndk_version install_dir = os.path.join(PREBUILTS_VNDK_DIR, 'v{}'.format(vndk_version)) if not os.path.isdir(install_dir): raise ValueError( 'Please provide valid VNDK version. {} does not exist.'.format( install_dir)) license_checker = GPLChecker(install_dir, ANDROID_BUILD_TOP) try: license_checker.check_gpl_projects() except ValueError as error: print error raise
def main(): """For local testing purposes. Note: VNDK snapshot must be already installed under prebuilts/vndk/v{version}. """ ANDROID_BUILD_TOP = utils.get_android_build_top() PREBUILTS_VNDK_DIR = utils.join_realpath(ANDROID_BUILD_TOP, 'prebuilts/vndk') args = get_args() vndk_version = args.vndk_version install_dir = os.path.join(PREBUILTS_VNDK_DIR, 'v{}'.format(vndk_version)) if not os.path.isdir(install_dir): raise ValueError( 'Please provide valid VNDK version. {} does not exist.' .format(install_dir)) license_checker = GPLChecker(install_dir, ANDROID_BUILD_TOP) try: license_checker.check_gpl_projects() except ValueError as error: print error raise
import logging import os import re import shutil import subprocess import sys import tempfile import textwrap import utils from check_gpl_license import GPLChecker from gen_buildfiles import GenBuildFile ANDROID_BUILD_TOP = utils.get_android_build_top() PREBUILTS_VNDK_DIR = utils.join_realpath(ANDROID_BUILD_TOP, 'prebuilts/vndk') logger = utils.logger(__name__) def start_branch(build): branch_name = 'update-' + (build or 'local') logger.info('Creating branch {branch} in {dir}'.format(branch=branch_name, dir=os.getcwd())) utils.check_call(['repo', 'start', branch_name, '.'], logger) def remove_old_snapshot(install_dir): logger.info('Removing any old files in {}'.format(install_dir)) for file in glob.glob('{}/*'.format(install_dir)): try:
import os import re import shutil import subprocess import sys import tempfile import textwrap import utils from check_gpl_license import GPLChecker from gen_buildfiles import GenBuildFile ANDROID_BUILD_TOP = utils.get_android_build_top() DIST_DIR = utils.get_dist_dir(utils.get_out_dir(ANDROID_BUILD_TOP)) PREBUILTS_VNDK_DIR = utils.join_realpath(ANDROID_BUILD_TOP, 'prebuilts/vndk') def logger(): return logging.getLogger(__name__) def check_call(cmd): logger().debug('Running `{}`'.format(' '.join(cmd))) subprocess.check_call(cmd) def start_branch(build): branch_name = 'update-' + (build or 'local') logger().info('Creating branch {branch} in {dir}'.format( branch=branch_name, dir=os.getcwd()))
def _check_revision_exists(self, revision, git_project_path): """Checks whether a revision is found in a git project of current tree. Args: revision: string, revision value recorded in manifest.xml git_project_path: string, path relative to ANDROID_BUILD_TOP """ path = utils.join_realpath(self._android_build_top, git_project_path) def _check_rev_list(revision): """Checks whether revision is reachable from HEAD of git project.""" logging.info('Checking if revision {rev} exists in {proj}'.format( rev=revision, proj=git_project_path)) try: cmd = [ 'git', '-C', path, 'rev-list', 'HEAD..{}'.format(revision) ] output = utils.check_output(cmd).strip() except subprocess.CalledProcessError as error: logging.error('Error: {}'.format(error)) return False else: if output: logging.debug( '{proj} does not have the following revisions: {rev}'. format(proj=git_project_path, rev=output)) return False else: logging.info( 'Found revision {rev} in project {proj}'.format( rev=revision, proj=git_project_path)) return True def _get_2nd_parent_if_merge_commit(revision): """Checks if the commit is merge commit. Returns: revision: string, the 2nd parent which is the merged commit. If the commit is not a merge commit, returns None. """ logging.info( 'Checking if the parent of revision {rev} exists in {proj}'. format(rev=revision, proj=git_project_path)) try: cmd = [ 'git', '-C', path, 'rev-parse', '--verify', '{}^2'.format(revision)] parent_revision = utils.check_output(cmd).strip() except subprocess.CalledProcessError as error: logging.error( 'Failed to get parent of revision {rev} from "{remote}": ' '{err}'.format( rev=revision, remote=self._remote_git, err=error)) logging.error('{} is not a merge commit and must be included ' 'in the current branch'.format(revision)) return None else: return parent_revision if _check_rev_list(revision): return True # VNDK snapshots built from a *-release branch will have merge # CLs in the manifest because the *-dev branch is merged to the # *-release branch periodically. In order to extract the # revision relevant to the source of the git_project_path, # we find the parent of the merge commit. try: cmd = ['git', '-C', path, 'fetch', self._remote_git, revision] utils.check_call(cmd) except subprocess.CalledProcessError as error: logging.error( 'Failed to fetch revision {rev} from "{remote}": ' '{err}'.format( rev=revision, remote=self._remote_git, err=error)) logging.error('Try --remote to manually set remote name') raise parent_revision = _get_2nd_parent_if_merge_commit(revision) while True: if not parent_revision: return False if _check_rev_list(parent_revision): return True parent_revision = _get_2nd_parent_if_merge_commit(parent_revision)
def _check_revision_exists(self, revision, git_project_path): """Checks whether a revision is found in a git project of current tree. Args: revision: string, revision value recorded in manifest.xml git_project_path: string, path relative to ANDROID_BUILD_TOP """ path = utils.join_realpath(self._android_build_top, git_project_path) def _check_rev_list(revision): """Checks whether revision is reachable from HEAD of git project.""" logging.info('Checking if revision {rev} exists in {proj}'.format( rev=revision, proj=git_project_path)) try: cmd = [ 'git', '-C', path, 'rev-list', 'HEAD..{}'.format(revision) ] output = utils.check_output(cmd).strip() except subprocess.CalledProcessError as error: logging.error('Error: {}'.format(error)) return False else: if output: logging.debug( '{proj} does not have the following revisions: {rev}'. format(proj=git_project_path, rev=output)) return False else: logging.info( 'Found revision {rev} in project {proj}'.format( rev=revision, proj=git_project_path)) return True if not _check_rev_list(revision): # VNDK snapshots built from a *-release branch will have merge # CLs in the manifest because the *-dev branch is merged to the # *-release branch periodically. In order to extract the # revision relevant to the source of the git_project_path, # we fetch the *-release branch and get the revision of the # parent commit with FETCH_HEAD^2. logging.info( 'Checking if the parent of revision {rev} exists in {proj}'. format(rev=revision, proj=git_project_path)) try: cmd = ['git', '-C', path, 'fetch', self._remote_git, revision] utils.check_call(cmd) cmd = ['git', '-C', path, 'rev-parse', 'FETCH_HEAD^2'] parent_revision = utils.check_output(cmd).strip() except subprocess.CalledProcessError as error: logging.error( 'Failed to get parent of revision {rev} from "{remote}": ' '{err}'.format( rev=revision, remote=self._remote_git, err=error)) logging.error('Try --remote to manually set remote name') raise else: if not _check_rev_list(parent_revision): return False return True