From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by mx.groups.io with SMTP id smtpd.web09.5400.1572306463248585683 for ; Mon, 28 Oct 2019 16:47:43 -0700 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 134.134.136.126, mailfrom: nathaniel.l.desimone@intel.com) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 28 Oct 2019 16:47:42 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.68,241,1569308400"; d="scan'208";a="198209993" Received: from orsmsx107.amr.corp.intel.com ([10.22.240.5]) by fmsmga008.fm.intel.com with ESMTP; 28 Oct 2019 16:47:42 -0700 Received: from orsmsx124.amr.corp.intel.com (10.22.240.120) by ORSMSX107.amr.corp.intel.com (10.22.240.5) with Microsoft SMTP Server (TLS) id 14.3.439.0; Mon, 28 Oct 2019 16:47:42 -0700 Received: from orsmsx113.amr.corp.intel.com ([169.254.9.28]) by ORSMSX124.amr.corp.intel.com ([169.254.2.2]) with mapi id 14.03.0439.000; Mon, 28 Oct 2019 16:47:41 -0700 From: "Nate DeSimone" To: "Desimone, Ashley E" , "devel@edk2.groups.io" CC: "Pandya, Puja" Subject: Re: [edk2-staging/EdkRepo] [PATCH] EdkRepo: Preferred Entry Point Support Thread-Topic: [edk2-staging/EdkRepo] [PATCH] EdkRepo: Preferred Entry Point Support Thread-Index: AQHVjeby34QR2nTxrUuwXJIgv1Z4X6dwuFvg Date: Mon, 28 Oct 2019 23:47:41 +0000 Message-ID: <02A34F284D1DA44BB705E61F7180EF0AB5B7F92F@ORSMSX113.amr.corp.intel.com> References: <20191028232500.9212-1-ashley.e.desimone@intel.com> In-Reply-To: <20191028232500.9212-1-ashley.e.desimone@intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.2.0.6 dlp-reaction: no-action x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiZWJhZWM5OWMtOGI4MC00MDE4LWJjOWUtZWE2NzdhYmY4MDExIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoieCs0NXFZV0Fwakl4elRvVHIzbkRzdmdPODJaXC9adjNDNm9UWDdnZnJNVzlvaE5la1MxbFRPN0FLMjhRbTZOQXQifQ== x-ctpclassification: CTP_NT x-originating-ip: [10.22.254.138] MIME-Version: 1.0 Return-Path: nathaniel.l.desimone@intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Reviewed-by: Nate DeSimone -----Original Message----- From: Desimone, Ashley E =20 Sent: Monday, October 28, 2019 4:25 PM To: devel@edk2.groups.io Cc: Desimone, Nathaniel L ; Pandya, Puja Subject: [edk2-staging/EdkRepo] [PATCH] EdkRepo: Preferred Entry Point Supp= ort Add support for defining and selecting a preferred entry point. Signed-off-by: Ashley E Desimone Cc: Nate DeSimone Cc: Puja Pandya --- edkrepo/__main__.py | 4 +- edkrepo/config/config_factory.py | 7 ++- edkrepo/edkrepo_cli.py | 55 ------------------- edkrepo/edkrepo_entry_point.py | 103 +++++++++++++++++++++++++++++++= ++++ edkrepo_installer/Vendor/edkrepo.cfg | 7 ++- setup.py | 2 +- 6 files changed, 117 insertions(+), 61 deletions(-) create mode 100644 ed= krepo/edkrepo_entry_point.py diff --git a/edkrepo/__main__.py b/edkrepo/__main__.py index 9bf3e50..115a7= 79 100644 --- a/edkrepo/__main__.py +++ b/edkrepo/__main__.py @@ -24,11 +24,11 @@ for directory in sitepackages: break else: imp.reload(edkrepo) -import edkrepo.edkrepo_cli +import edkrepo.edkrepo_entry_point =20 if __name__ =3D=3D '__main__': try: - sys.exit(edkrepo.edkrepo_cli.main()) + sys.exit(edkrepo.edkrepo_entry_point.main()) except Exception as e: traceback.print_exc() sys.exit(1) diff --git a/edkrepo/config/config_factory.py b/edkrepo/config/config_facto= ry.py index 38844d7..e3a437f 100644 --- a/edkrepo/config/config_factory.py +++ b/edkrepo/config/config_factory.py @@ -125,11 +125,16 @@ class GlobalConfig(BaseConfig): CfgProp('git-ver', 'minimum', 'minimum_req_git_ver', None,= True), CfgProp('git-ver', 'recommended', 'rec_git_ver', None, Tru= e), CfgProp('command-packages', 'packages', 'command_packages'= , None, True), - CfgProp('preferred-command-package', 'preferred-package', = 'pref_pkg', None, True)] + CfgProp('preferred-command-package', 'preferred-package', = 'pref_pkg', None, True), + CfgProp('preferred-entry-point', 'entry-point',=20 + 'pref_entry_point', None, True)] if not os.path.isfile(self.filename): raise EdkrepoGlobalConfigNotFoundException("edkrepo global con= fig file {} does not exist".format(self.filename)) super().__init__(self.filename, True) =20 + @property + def preferred_entry(self): + return (self.pref_entry_point.split(':')[0],=20 + self.pref_entry_point.split(':')[1]) + @property def command_packages_list(self): initial_list =3D self.command_packages.split('|') diff --git a/edk= repo/edkrepo_cli.py b/edkrepo/edkrepo_cli.py index 8a74581..0b69860 100644 --- a/edkrepo/edkrepo_cli.py +++ b/edkrepo/edkrepo_cli.py @@ -23,61 +23,6 @@ import importlib.util =20 from git.exc import GitCommandError =20 -#Prefer the site-packages version of edkrepo -sitepackages =3D site.getsit= epackages() -sys.path =3D sitepackages + sys.path -import edkrepo -edkrepo_= site_dir =3D None -edkrepo_package_path =3D os.path.dirname(os.path.dirname= (edkrepo.__file__)) -for directory in sitepackages: - if edkrepo_package_path =3D=3D directory: - edkrepo_site_dir =3D edkrepo_package_path - break -else: - imp.reload(edkrepo) - edkrepo_package_path =3D os.path.dirname(os.path.dirname(edkrepo.__fil= e__)) - for directory in sitepackages: - if edkrepo_package_path =3D=3D directory: - edkrepo_site_dir =3D edkrepo_package_path - break -if edkrepo_site_dir is None: - print('Running EdkRepo from local source') - -#Determine if this module is being imported by the launcher script -run_vi= a_launcher_script =3D False -importer =3D "" -importer_file =3D "" -f =3D inspect.currentframe().f_back -while f is not None: - if f.f_globals.get('__name__').find('importlib') =3D=3D -1: - importer =3D f.f_globals.get('__name__') - importer_file =3D f.f_globals.get('__file__') - if importer_file is None: - importer_file =3D "" - break - f =3D f.f_back -if importer =3D=3D "__main__": - if os.path.basename(importer_file).lower() =3D=3D "__main__.py": - if os.path.basename(os.path.dirname(importer_file)).lower().find('= edkrepo') !=3D -1: - run_via_launcher_script =3D True - elif os.path.basename(importer_file).lower().find('edkrepo') !=3D -1: - run_via_launcher_script =3D True - -if __name__ =3D=3D "__main__" or run_via_launcher_script: - #If this module is the entrypoint, we need to make - #sure that the site-packages version is being executed - if edkrepo_site_dir is not None and os.path.commonprefix([edkrepo_site= _dir, __file__]) !=3D edkrepo_site_dir: - edkrepo_cli_file_name =3D os.path.join(edkrepo_site_dir, 'edkrepo'= , 'edkrepo_cli.py') - if os.path.isfile(edkrepo_cli_file_name): - spec =3D importlib.util.spec_from_file_location('edkrepo.e= dkrepo_cli', edkrepo_cli_file_name) - edkrepo_cli =3D importlib.util.module_from_spec(spec) - spec.loader.exec_module(edkrepo_cli) - try: - sys.exit(edkrepo_cli.main()) - except Exception as e: - traceback.print_exc() - sys.exit(1) - from edkrepo.commands import command_factory from edkrepo.config import c= onfig_factory from edkrepo.common.edkrepo_exception import EdkrepoExceptio= n, EdkrepoGlobalConfigNotFoundException diff --git a/edkrepo/edkrepo_entry_point.py b/edkrepo/edkrepo_entry_point.p= y new file mode 100644 index 0000000..1f74d1b --- /dev/null +++ b/edkrepo/edkrepo_entry_point.py @@ -0,0 +1,103 @@ +#!/usr/bin/env python3 +# +## @file +# edkrepo_entry_point.py +# +# Copyright (c) 2017- 2019, Intel Corporation. All rights reserved.
=20 +# SPDX-License-Identifier: BSD-2-Clause-Patent # + +import argparse +import imp +import importlib.util +import inspect +import json +import os +import pkg_resources +import site +import subprocess +import sys +import time +import traceback +from operator import itemgetter + +from git.exc import GitCommandError + +import edkrepo + +#Prefer the site-packages version of edkrepo sitepackages =3D=20 +site.getsitepackages() sys.path =3D sitepackages + sys.path=20 +edkrepo_site_dir =3D None edkrepo_package_path =3D=20 +os.path.dirname(os.path.dirname(edkrepo.__file__)) +for directory in sitepackages: + if edkrepo_package_path =3D=3D directory: + edkrepo_site_dir =3D edkrepo_package_path + break +else: + imp.reload(edkrepo) + edkrepo_package_path =3D os.path.dirname(os.path.dirname(edkrepo.__fil= e__)) + for directory in sitepackages: + if edkrepo_package_path =3D=3D directory: + edkrepo_site_dir =3D edkrepo_package_path + break +if edkrepo_site_dir is None: + print('Running EdkRepo from local source') + +#Determine if this module is being imported by the launcher script=20 +run_via_launcher_script =3D False importer =3D "" +importer_file =3D "" +f =3D inspect.currentframe().f_back +while f is not None: + if f.f_globals.get('__name__').find('importlib') =3D=3D -1: + importer =3D f.f_globals.get('__name__') + importer_file =3D f.f_globals.get('__file__') + if importer_file is None: + importer_file =3D "" + break + f =3D f.f_back +if importer =3D=3D "__main__": + if os.path.basename(importer_file).lower() =3D=3D "__main__.py": + if os.path.basename(os.path.dirname(importer_file)).lower().find('= edkrepo') !=3D -1: + run_via_launcher_script =3D True + elif os.path.basename(importer_file).lower().find('edkrepo') !=3D -1: + run_via_launcher_script =3D True + +if __name__ =3D=3D "__main__" or run_via_launcher_script: + #If this module is the entrypoint, we need to make + #sure that the site-packages version is being executed + if edkrepo_site_dir is not None and os.path.commonprefix([edkrepo_site= _dir, __file__]) !=3D edkrepo_site_dir: + edkrepo_cli_file_name =3D os.path.join(edkrepo_site_dir, 'edkrepo'= , 'edkrepo_entry_point.py') + if os.path.isfile(edkrepo_cli_file_name): + spec =3D importlib.util.spec_from_file_location('edkrepo.e= dkrepo_entry_point.py', edkrepo_cli_file_name) + edkrepo_entry_point =3D importlib.util.module_from_spec(sp= ec) + spec.loader.exec_module(edkrepo_entry_point) + try: + sys.exit(edkrepo_entry_point.main()) + except Exception as e: + traceback.print_exc() + sys.exit(1) + +from edkrepo.config.config_factory import GlobalConfig + +def main(): + cfg_file =3D GlobalConfig() + pref_entry =3D (cfg_file.preferred_entry[0]).replace('.py', '') + pref_entry_func =3D cfg_file.preferred_entry[1] + + try: + mod =3D importlib.import_module(pref_entry) + func =3D getattr(mod, pref_entry_func) + func() + except: + print('Unable to launch preferred entry point. Launching default e= ntry point edkrepo.edkrepo_cli.py') + import edkrepo.edkrepo_cli + edkrepo.edkrepo_cli.main() + +if __name__ =3D=3D "__main__": + try: + sys.exit(main()) + except Exception as e: + traceback.print_exc() + sys.exit(1) \ No newline at end of file diff --git a/edkrepo_installer/Vendor/edkrepo.cfg b/edkrepo_installer/Vendo= r/edkrepo.cfg index 0312c74..7dcaf20 100644 --- a/edkrepo_installer/Vendor/edkrepo.cfg +++ b/edkrepo_installer/Vendor/edkrepo.cfg @@ -13,9 +13,12 @@ packages =3D edkrepo.commands [preferred-command-packag= e] preferred-package =3D edkrepo.commands =20 +[preferred-entry-point] +entry-point =3D edkrepo.edkrepo_cli:main + [sparsecheckout] always_include =3D BaseTools|Conf|*.* -always_exclude =3D=20 +always_exclude =3D =20 [f2f-cherry-pick] -ignored_folder_substrings =3D=20 +ignored_folder_substrings =3D diff --git a/setup.py b/setup.py index 51f65d3..ed07594 100755 --- a/setup.py +++ b/setup.py @@ -18,7 +18,7 @@ setup(name=3D'edkrepo', include_package_data=3DTrue, entry_points=3D{ 'console_scripts': [ - 'edkrepo =3D edkrepo.edkrepo_cli:main' + 'edkrepo =3D edkrepo.edkrepo_entry_point:main' ] } ) -- 2.16.2.windows.1