From nobody Wed May 15 08:29:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+49560+1787277+3901457@groups.io; helo=web01.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+49560+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1572305107; cv=none; d=zoho.com; s=zohoarc; b=fBUSacIBWpvocFwRSLdJDoSLMP2mvvDrnehSYYgOlhPvK+BHCunKZ+5+KIfI44Qm5U3ecOr4fS2YvT4Z2PBz52jUv5YaHC6SQOvbQEkbe6sJB3Wb6eqpXKeo5g0nbQ2LeAlZSW3eECIVhS1vAYggX2HILikUfxkTEgoEM9F3Lf8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1572305107; h=Cc:Date:From:List-Id:List-Unsubscribe:Message-ID:Reply-To:Sender:Subject:To; bh=Xym8wqRFD1k4ryzy/BbHSI16XXax2bu+cPBu/Sk6RdQ=; b=a9u0SBkUNMrKCj0K2n/PXCPISyEHlrM3wb/+0IAF6gw6dwR4/5ovrb7wUSm/hVmaHTMvPDBhtHiFHwFluP/1ayd9PE2o6rOVjSaROZDyT42OLP15L3oh/P+CO7mSU04DnfNf9C12HpUmh9R0cm5O+V0whWRlQjKATN94rKi9e5s= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+49560+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) header.from= Received: from web01.groups.io (web01.groups.io [66.175.222.12]) by mx.zohomail.com with SMTPS id 1572305107100819.7393512559524; Mon, 28 Oct 2019 16:25:07 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id zYmCYY1788612xA51jk0Rm04; Mon, 28 Oct 2019 16:25:06 -0700 X-Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by mx.groups.io with SMTP id smtpd.web09.5143.1572305106020676777 for ; Mon, 28 Oct 2019 16:25:06 -0700 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False X-Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga107.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 28 Oct 2019 16:25:05 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.68,241,1569308400"; d="scan'208";a="283072629" X-Received: from aedesimo-desk.amr.corp.intel.com ([10.7.159.171]) by orsmga001.jf.intel.com with ESMTP; 28 Oct 2019 16:25:05 -0700 From: "Desimone, Ashley E" To: devel@edk2.groups.io Cc: Nate DeSimone , Puja Pandya Subject: [edk2-devel] [edk2-staging/EdkRepo] [PATCH] EdkRepo: Preferred Entry Point Support Date: Mon, 28 Oct 2019 16:25:00 -0700 Message-Id: <20191028232500.9212-1-ashley.e.desimone@intel.com> Precedence: Bulk List-Unsubscribe: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,ashley.e.desimone@intel.com X-Gm-Message-State: DMbccS3Ys5wgtRtk38H0yNzux1787277AA= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1572305106; bh=55SN3nyRfhBnT7D+3Z7vy9qDA0UM/Iqta06b3AmPrXU=; h=Cc:Date:From:Reply-To:Subject:To; b=mZp4QRQBRJZ6AUYOLY8kUu8zuRfUdWKVTkTeM5hykjMclucbygjsZKHObe/pB7LNxFY BgaLzJESM1fo0Co90naoSF7Irw6D3StOoy5gtU7pI4CmlcRrfAQmxVklxb99tnH2WfElw v5OhbemgM0FHsrkkVqPgYw9nPP1e9XBbMRI= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Add support for defining and selecting a preferred entry point. Signed-off-by: Ashley E Desimone Cc: Nate DeSimone Cc: Puja Pandya Reviewed-by: Nate DeSimone --- 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 edkrepo/edkrepo_entry_point.py diff --git a/edkrepo/__main__.py b/edkrepo/__main__.py index 9bf3e50..115a779 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', 'pref_entr= y_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], self.pref_entry_point= .split(':')[1]) + @property def command_packages_list(self): initial_list =3D self.command_packages.split('|') diff --git a/edkrepo/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.getsitepackages() -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_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_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 config_factory from edkrepo.common.edkrepo_exception import EdkrepoException, EdkrepoGlob= alConfigNotFoundException diff --git a/edkrepo/edkrepo_entry_point.py b/edkrepo/edkrepo_entry_point.py 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.
+# 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 site.getsitepackages() +sys.path =3D sitepackages + sys.path +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_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-package] 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' ] } ) --=20 2.16.2.windows.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#49560): https://edk2.groups.io/g/devel/message/49560 Mute This Topic: https://groups.io/mt/39103171/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-