From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by mx.groups.io with SMTP id smtpd.web11.17206.1589126148610120506 for ; Sun, 10 May 2020 08:55:48 -0700 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 192.55.52.88, mailfrom: ashley.e.desimone@intel.com) IronPort-SDR: wHkKnSwJe7X5ScYchO51EouL86CM0PqQQvxRClbVMo0RCSoWN5rD0ZxdI0GfKzC/hnD4fg2VcI wnYPqj7bQDHg== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 May 2020 08:55:47 -0700 IronPort-SDR: PoRH5bwiIWD578+jAwnwN1YJ6G5p9wmfS6EjK8t9FqlseN5nvkBblu8cdwPbAdh9QGhCWHTglZ fcxcFLJnyq7g== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.73,376,1583222400"; d="scan'208";a="340315682" Received: from aedesimo-desk.amr.corp.intel.com ([10.212.208.216]) by orsmga001.jf.intel.com with ESMTP; 10 May 2020 08:55:47 -0700 From: "Ashley E Desimone" To: devel@edk2.groups.io Cc: Nate DeSimone , Puja Pandya , Erik Bjorge , Bret Barkelew , Prince Agyeman Subject: [edk2-staging/EdkRepo] [PATCH] EdkRepo: Update list-repos to support multiple manifest repositories Date: Sun, 10 May 2020 08:55:38 -0700 Message-Id: <20200510155538.34956-1-ashley.e.desimone@intel.com> X-Mailer: git-send-email 2.16.2.windows.1 Update the list repos command to support calculating the list of consumed repositories from all manifests in all manifest repositories defined in both the edkrepo.cfg and the edkrepo.cfg Signed-off-by: Ashley E Desimone Cc: Nate DeSimone Cc: Puja Pandya Cc: Erik Bjorge Cc: Bret Barkelew Cc: Prince Agyeman --- edkrepo/commands/list_repos_command.py | 97 +++++++++++++++++++++++++--------- 1 file changed, 72 insertions(+), 25 deletions(-) diff --git a/edkrepo/commands/list_repos_command.py b/edkrepo/commands/list_repos_command.py index b06a493..364a138 100644 --- a/edkrepo/commands/list_repos_command.py +++ b/edkrepo/commands/list_repos_command.py @@ -18,9 +18,11 @@ from edkrepo.commands.edkrepo_command import EdkrepoCommand from edkrepo.commands.edkrepo_command import ColorArgument import edkrepo.commands.arguments.list_repos_args as arguments import edkrepo.commands.humble.list_repos_humble as humble -from edkrepo.common.common_repo_functions import pull_latest_manifest_repo from edkrepo.common.edkrepo_exception import EdkrepoInvalidParametersException, EdkrepoManifestInvalidException from edkrepo.common.ui_functions import init_color_console +from edkrepo.common.workspace_maintenance.manifest_repos_maintenance import pull_all_manifest_repos +from edkrepo.common.workspace_maintenance.manifest_repos_maintenance import list_available_manifest_repos +from edkrepo.config.tool_config import CI_INDEX_FILE_NAME from edkrepo_manifest_parser.edk_manifest import CiIndexXml, ManifestXml class ListReposCommand(EdkrepoCommand): @@ -52,35 +54,80 @@ class ListReposCommand(EdkrepoCommand): print() init_color_console(args.color) - # Get path to global manifest file - global_manifest_directory = config['cfg_file'].manifest_repo_abs_local_path - if args.verbose: - print(humble.MANIFEST_DIRECTORY) - print(global_manifest_directory) - print() - index_path = os.path.join(global_manifest_directory, 'CiIndex.xml') - - pull_latest_manifest_repo(args, config) + pull_all_manifest_repos(config['cfg_file'], config['user_cfg_file']) print() - #Create a dictionary containing all the manifests listed in the CiIndex.xml file - ci_index_xml = CiIndexXml(index_path) + cfg_manifest_repos, user_config_manifest_repos, conflicts = list_available_manifest_repos(config['cfg_file'], config['user_cfg_file']) + + found_manifests = {} manifests = {} repo_urls = set() - project_list = list(ci_index_xml.project_list) - if args.archived: - project_list.extend(ci_index_xml.archived_project_list) - for project in project_list: - xml_file = ci_index_xml.get_project_xml(project) - manifest = ManifestXml(os.path.normpath(os.path.join(global_manifest_directory, xml_file))) - manifests[project] = manifest - combo_list = [c.name for c in manifest.combinations] + config_manifest_repos_project_list = [] + user_config_manifest_repos_project_list = [] + + for manifest_repo in cfg_manifest_repos: + # Get path to global manifest file + global_manifest_directory = config['cfg_file'].manifest_repo_abs_path(manifest_repo) + if args.verbose: + print(humble.MANIFEST_DIRECTORY) + print(global_manifest_directory) + print() + #Create a dictionary containing all the manifests listed in the CiIndex.xml file + index_path = os.path.join(global_manifest_directory, CI_INDEX_FILE_NAME) + print(index_path) + ci_index_xml = CiIndexXml(index_path) + config_manifest_repos_project_list = ci_index_xml.project_list if args.archived: - combo_list.extend([c.name for c in manifest.archived_combinations]) - for combo in combo_list: - sources = manifest.get_repo_sources(combo) - for source in sources: - repo_urls.add(self.get_repo_url(source.remote_url)) + config_manifest_repos_project_list.extend(ci_index_xml.archived_project_list) + for project in config_manifest_repos_project_list: + xml_file = ci_index_xml.get_project_xml(project) + manifest = ManifestXml(os.path.normpath(os.path.join(global_manifest_directory, xml_file))) + found_manifests['{}:{}'.format(manifest_repo, project)] = manifest + combo_list = [c.name for c in manifest.combinations] + if args.archived: + combo_list.extend([c.name for c in manifest.archived_combinations]) + for combo in combo_list: + sources = manifest.get_repo_sources(combo) + for source in sources: + repo_urls.add(self.get_repo_url(source.remote_url)) + for manifest_repo in user_config_manifest_repos: + # Get path to global manifest file + global_manifest_directory = config['user_cfg_file'].manifest_repo_abs_path(manifest_repo) + if args.verbose: + print(humble.MANIFEST_DIRECTORY) + print(global_manifest_directory) + print() + #Create a dictionary containing all the manifests listed in the CiIndex.xml file + index_path = os.path.join(global_manifest_directory, CI_INDEX_FILE_NAME) + ci_index_xml = CiIndexXml(index_path) + user_config_manifest_repos_project_list = ci_index_xml.project_list + if args.archived: + user_config_manifest_repos_project_list.extend(ci_index_xml.archived_project_list) + for project in user_config_manifest_repos_project_list: + xml_file = ci_index_xml.get_project_xml(project) + manifest = ManifestXml(os.path.normpath(os.path.join(global_manifest_directory, xml_file))) + found_manifests['{}:{}'.format(manifest_repo, project)] = manifest + combo_list = [c.name for c in manifest.combinations] + if args.archived: + combo_list.extend([c.name for c in manifest.archived_combinations]) + for combo in combo_list: + sources = manifest.get_repo_sources(combo) + for source in sources: + repo_urls.add(self.get_repo_url(source.remote_url)) + + #Remove the manifest repo portion of the key is there is not a duplicate project name + key_list = list(found_manifests) + for entry in key_list: + new_key = entry.split(':')[1] + value = found_manifests[entry] + del found_manifests[entry] + for found_manifest in list(found_manifests): + if found_manifest.split(':')[1] == new_key: + new_key = 'Manifest Repository: {} Project: {}'.format(entry.split(':')[0], entry.split(':')[1]) + #break + if new_key in manifests.keys(): + new_key = 'Manifest Repository: {} Project: {}'.format(entry.split(':'[0]), entry.split(':')[1]) + manifests[new_key] = value #Sort the manifests so projects will be displayed alphabetically manifests = collections.OrderedDict(sorted(manifests.items())) -- 2.16.2.windows.1