From nobody Fri May 3 18:42:55 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+58484+1787277+3901457@groups.io; helo=web01.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+58484+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1588287205; cv=none; d=zohomail.com; s=zohoarc; b=f5Ki0tkqHvjBuqJfuJhxV6mYjJvgevRxin2ynCNK40Z1MJrotjznDb3gaircjKo/YQugk5ldhBDWU4wVbODjDsyrVqCaifK5PQNfrXgiAexOhsIjMXYAbFO7uHL8hL95tbjQbJOzjR33zbgYbNCWRXq0koDNBKyJZvTXeZq5SGY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1588287205; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=AnIDZB2kqSpt2MdakhiyusaRgm24SCJ6jL1RRrF0gz4=; b=iCkfYnoNAhKlMo9ALRYHULDbupJFxHeWDg37yvhVprhJqD/SgH4fSpuItHEQEOZgF1tAKVxiHEGHKsmFCxUonsEfGIAQ3TrtfYHrVRLuoveIURa92ZgSoSOhw6sPY6/2K2HNmjZ89gK/p5YIfuhErkXv72WmqVXOeYwEzbiyhwo= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+58484+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 1588287205024887.1460338497302; Thu, 30 Apr 2020 15:53:25 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id Qi21YY1788612xXuzknRC8C3; Thu, 30 Apr 2020 15:53:24 -0700 X-Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by mx.groups.io with SMTP id smtpd.web10.61.1588287204056787193 for ; Thu, 30 Apr 2020 15:53:24 -0700 IronPort-SDR: 6LAa1p5xVzZTOLWXQE2umiOx41uAgJbGuRVSTMqJYcvAyRnVH+4uU4MI3HNsZ5jQMETAltfBU5 +qpcPG6jOkQA== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False X-Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 Apr 2020 15:53:23 -0700 IronPort-SDR: LX7CFPgXHVYAhTT4xWGunUCrnE4sbx28W1N5H8SkScGajyNQTgmbQgzmuv9yuASLOPUZ9WYXMd TEVZv50jKlLQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.73,337,1583222400"; d="scan'208";a="368300811" X-Received: from ecbjorge-mobl1.amr.corp.intel.com ([10.212.184.120]) by fmsmga001.fm.intel.com with ESMTP; 30 Apr 2020 15:53:21 -0700 From: "Bjorge, Erik C" To: devel@edk2.groups.io Cc: Ashley E Desimone , Nate DeSimone , Puja Pandya , Bret Barkelew , Prince Agyeman Subject: [edk2-devel] [edk2-staging/EdkRepo] [PATCH v1 1/3] EdkRepo: Flake8 cleanup Date: Thu, 30 Apr 2020 15:52:52 -0700 Message-Id: In-Reply-To: References: MIME-Version: 1.0 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,erik.c.bjorge@intel.com X-Gm-Message-State: GndPzQWWgVdQMFNFeBFcYIKXx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1588287204; bh=0AXUtRwNtAy/pWcEOw79+oPEmvJr5hXvHj/JlpPpYhY=; h=Cc:Date:From:Reply-To:Subject:To; b=NnIqUBS1/Iau2QWUjq+ySqQbOFNRN1js8ULKV6PQoWCLz8BHbYZKAU7UMveVyKvsfXg S4WhbIQH3q6zH5kCoQ+Kr29sskTBGiMFFGew2LyzKMtG8m4/Mv09/w9iiuRLJ6xMY2zar Lh8LEIo8HY2EgteXDlqr980PHpUFtCu1qr8= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" Just cleaning up the file to meet Flake8 expectations. Signed-off-by: Erik Bjorge Cc: Ashley E Desimone Cc: Nate DeSimone Cc: Puja Pandya Cc: Bret Barkelew Cc: Prince Agyeman Reviewed-by: Nate DeSimone --- edkrepo_manifest_parser/edk_manifest.py | 159 ++++++++++++++---------- 1 file changed, 94 insertions(+), 65 deletions(-) diff --git a/edkrepo_manifest_parser/edk_manifest.py b/edkrepo_manifest_par= ser/edk_manifest.py index 080448f..7e5f0fb 100644 --- a/edkrepo_manifest_parser/edk_manifest.py +++ b/edkrepo_manifest_parser/edk_manifest.py @@ -25,19 +25,22 @@ GeneralConfig =3D namedtuple('GeneralConfig', ['default= _combo', 'current_combo', ' RemoteRepo =3D namedtuple('RemoteRepo', ['name', 'url']) RepoHook =3D namedtuple('RepoHook', ['source', 'dest_path', 'dest_file', '= remote_url']) Combination =3D namedtuple('Combination', ['name', 'description']) -RepoSource =3D namedtuple('RepoSource', ['root', 'remote_name', 'remote_ur= l', 'branch', 'commit', 'sparse', 'enable_submodule', 'tag']) +RepoSource =3D namedtuple('RepoSource', ['root', 'remote_name', 'remote_ur= l', 'branch', 'commit', 'sparse', + 'enable_submodule', 'tag']) =20 SparseSettings =3D namedtuple('SparseSettings', ['sparse_by_default']) SparseData =3D namedtuple('SparseData', ['combination', 'remote_name', 'al= ways_include', 'always_exclude']) =20 FolderToFolderMapping =3D namedtuple('FolderToFolderMapping', ['project1',= 'project2', 'remote_name', 'folders']) -FolderToFolderMappingFolder =3D namedtuple('FolderToFolderMappingFolder', = ['project1_folder', 'project2_folder', 'excludes']) +FolderToFolderMappingFolder =3D namedtuple('FolderToFolderMappingFolder', = ['project1_folder', 'project2_folder', + '= excludes']) FolderToFolderMappingFolderExclude =3D namedtuple('FolderToFolderMappingFo= lderExclude', ['path']) =20 SubmoduleAlternateRemote =3D namedtuple('SubmoduleAlternateRemote', ['remo= te_name', 'original_url', 'alternate_url']) =20 REQUIRED_ATTRIB_ERROR_MSG =3D "Required attribute malformed in <{}>: {}" -NO_ASSOCIATED_REMOTE =3D 'There are no remotes associated with the ClientG= itHook entry: \nsource:{} destination:{} \nThis hook will not be installed,= updated or deleted.\n' +NO_ASSOCIATED_REMOTE =3D 'There are no remotes associated with the ClientG= itHook entry:\nsource:{} destination:{}' \ + '\nThis hook will not be installed, updated or dele= ted.\n' NO_REMOTE_EXISTS_WITH_NAME =3D 'There are no remotes with the name: {} lis= ted in the manifest file.' PIN_COMB_ERROR =3D "Pin \"{}\" Pin did not have a single tag= ." DUPLICATE_TAG_ERROR =3D "Duplicate <{}> tag not allowed: '{}' (Note: check= 's" @@ -50,12 +53,13 @@ INVALID_PROJECTNAME_ERROR =3D "Invalid input: {} not fo= und in CiIndexXml" UNSUPPORTED_TYPE_ERROR =3D "{} is not a supported xml type: {}" INVALID_XML_ERROR =3D "{} is not a valid xml file" =20 + class BaseXmlHelper(): def __init__(self, fileref, xml_types): self._fileref =3D fileref try: - self._tree =3D ET.ElementTree(file=3Dfileref) #fileref can be= a filename or filestream - except: + self._tree =3D ET.ElementTree(file=3Dfileref) # fileref can b= e a filename or filestream + except Exception: raise TypeError(INVALID_XML_ERROR.format(fileref)) =20 self._xml_type =3D self._tree.getroot().tag @@ -97,6 +101,7 @@ class CiIndexXml(BaseXmlHelper): else: raise ValueError(INVALID_PROJECTNAME_ERROR.format(project_name= )) =20 + class _Project(): def __init__(self, element): try: @@ -105,33 +110,33 @@ class _Project(): except KeyError as k: raise KeyError(REQUIRED_ATTRIB_ERROR_MSG.format(k, element.tag= )) try: - #if the archived attrib is not explicitly set to true, then as= sume false + # if the archived attrib is not explicitly set to true, then a= ssume false self.archived =3D (element.attrib['archived'].lower() =3D=3D '= true') - except: + except Exception: self.archived =3D False =20 + # # This class will parse and the manifest XML file and populate the named # tuples defined above to provide abstracted access to the manifest data # class ManifestXml(BaseXmlHelper): def __init__(self, fileref): - # Most of the attributes of this class are intended to be private = as they are used for # internally gathering and storing the manifest data. As such, all= access to them should be # done through the provided methods to ensure future compatibility= if the xml schema changes super().__init__(fileref, ['Pin', 'Manifest']) self.__project_info =3D None self.__general_config =3D None - self.__remotes =3D {} #dict of _Remote objs, with = Remote.name as key + self.__remotes =3D {} # dict of _Remote objs, w= ith Remote.name as key self.__client_hook_list =3D [] - self.__combinations =3D {} #dict of _Combination objs, = with Combination.name as key - self.__combo_sources =3D {} #dict of _RepoSource obj lis= ts, with Combination.name as key + self.__combinations =3D {} # dict of _Combination ob= js, with Combination.name as key + self.__combo_sources =3D {} # dict of _RepoSource obj= lists, with Combination.name as key self.__dsc_list =3D [] - self.__sparse_settings =3D None # A single instance of platf= orm sparse checkout settings - self.__sparse_data =3D [] # List of SparseData objects - self.__commit_templates =3D {} #dict of commit message temp= lates with the remote name as the key - self.__folder_to_folder_mappings =3D [] # List of FolderToFolderMa= pping objects + self.__sparse_settings =3D None # A single instance of pl= atform sparse checkout settings + self.__sparse_data =3D [] # List of SparseData obje= cts + self.__commit_templates =3D {} # dict of commit message = templates with the remote name as the key + self.__folder_to_folder_mappings =3D [] # List of FolderToFolderM= apping objects self.__submodule_alternate_remotes =3D [] =20 # @@ -143,12 +148,12 @@ class ManifestXml(BaseXmlHelper): incl_file =3D os.path.join(incl_path, include_elem.attrib['xml= ']) try: include_tree =3D ET.ElementTree(file=3Dincl_file) - except: + except Exception: raise TypeError("{} is not a valid xml file".format(incl_f= ile)) for elem in include_tree.iterfind('*'): if elem.tag !=3D 'ProjectInfo' and elem.tag !=3D 'GeneralC= onfig': tree_root.append(elem) - #remove include tags after added to etree to prevent feedback = issues + # remove include tags after added to etree to prevent feedback= issues tree_root.remove(include_elem) =20 # @@ -388,7 +393,7 @@ class ManifestXml(BaseXmlHelper): # Note: It will also strip all the comments from the file # if self._xml_type =3D=3D 'Pin': - #raise Warning("This method is not supported for Pin xmls") + # raise Warning("This method is not supported for Pin xmls") return if filename is None: filename =3D self._fileref @@ -444,12 +449,12 @@ class ManifestXml(BaseXmlHelper): # Only one of Branch or SHA is required to write PIN and checkout = code for src_tuple in repo_source_list: if (src_tuple.root is None or src_tuple.remote_name is None or= src_tuple.remote_url is - None or (src_tuple.commit is None and src_tuple.branch is = None and src_tuple.tag is None)): + None or (src_tuple.commit is None and src_tuple.branch= is None and src_tuple.tag is None)): raise ValueError("Invalid input: empty values in source li= st") =20 # the data to create the remote elements could also be retriev= ed # from __remotes, but this is easier - elem =3D ET.SubElement(remote_root, 'Remote', {'name' : src_tu= ple.remote_name}) + elem =3D ET.SubElement(remote_root, 'Remote', {'name': src_tup= le.remote_name}) elem.text =3D src_tuple.remote_url elem.tail =3D '\n ' =20 @@ -469,22 +474,33 @@ class ManifestXml(BaseXmlHelper): if src_tuple.commit: if src_tuple.branch: if src_tuple.tag: - elem =3D ET.SubElement(source_root, 'Source', {'lo= calRoot':src_tuple.root, 'remote':src_tuple.remote_name, - 'bran= ch':src_tuple.branch, 'commit':src_tuple.commit, - 'spar= seCheckout':sparse, 'enable_submodule':sub, - 'tag'= :src_tuple.tag}) + elem =3D ET.SubElement(source_root, 'Source', {'lo= calRoot': src_tuple.root, + 'remo= te': src_tuple.remote_name, + 'bran= ch': src_tuple.branch, + 'comm= it': src_tuple.commit, + 'spar= seCheckout': sparse, + 'enab= le_submodule': sub, + 'tag'= : src_tuple.tag}) else: - elem =3D ET.SubElement(source_root, 'Source', {'lo= calRoot':src_tuple.root, 'remote':src_tuple.remote_name, - 'bran= ch':src_tuple.branch, 'commit':src_tuple.commit, - 'spar= seCheckout':sparse, 'enable_submodule':sub}) + elem =3D ET.SubElement(source_root, 'Source', {'lo= calRoot': src_tuple.root, + 'remo= te': src_tuple.remote_name, + 'bran= ch': src_tuple.branch, + 'comm= it': src_tuple.commit, + 'spar= seCheckout': sparse, + 'enab= le_submodule': sub}) elif src_tuple.branch is None and src_tuple.tag: - elem =3D ET.SubElement(source_root, 'Source', {'localR= oot':src_tuple.root, 'remote':src_tuple.remote_name, - 'commit':= src_tuple.commit,'sparseCheckout':sparse, - 'enable_s= ubmodule':sub, 'tag':src_tuple.tag}) + elem =3D ET.SubElement(source_root, 'Source', {'localR= oot': src_tuple.root, + 'remote':= src_tuple.remote_name, + 'commit':= src_tuple.commit, + 'sparseCh= eckout': sparse, + 'enable_s= ubmodule': sub, + 'tag': sr= c_tuple.tag}) elif src_tuple.branch is None and src_tuple.tag is None: - elem =3D ET.SubElement(source_root, 'Source', {'localR= oot':src_tuple.root, 'remote':src_tuple.remote_name, - 'commit':= src_tuple.commit,'sparseCheckout':sparse, - 'enable_s= ubmodule':sub}) + elem =3D ET.SubElement(source_root, 'Source', {'localR= oot': src_tuple.root, + 'remote':= src_tuple.remote_name, + 'commit':= src_tuple.commit, + 'sparseCh= eckout': sparse, + 'enable_s= ubmodule': sub}) else: raise ValueError('Pin.xml cannot be generated with an empt= y commit value') =20 @@ -552,9 +568,9 @@ class ManifestXml(BaseXmlHelper): def __ne__(self, other): return not self.__eq__(other) =20 + class _ProjectInfo(): def __init__(self, element): - try: self.codename =3D element.find('CodeName').text self.descript =3D element.find('Description').text @@ -565,17 +581,17 @@ class _ProjectInfo(): self.lead_list =3D [] for lead in element.findall('DevLead'): self.lead_list.append(lead.text) - except: + except Exception: self.lead_list =3D None =20 try: self.org =3D element.find('Org').text - except: + except Exception: self.org =3D None =20 try: self.short_name =3D element.find('ShortName').text - except: + except Exception: self.short_name =3D None =20 try: @@ -583,33 +599,34 @@ class _ProjectInfo(): subroot =3D element.find('LeadReviewers') for reviewer in subroot.iter(tag=3D'Reviewer'): self.reviewer_list.append(reviewer.text) - except: + except Exception: self.reviewer_list =3D None =20 - @property def tuple(self): return ProjectInfo(self.codename, self.descript, self.lead_list, s= elf.reviewer_list, self.org, self.short_name) =20 + class _GeneralConfig(): def __init__(self, element): try: self.pin_path =3D element.find('PinPath').text - except: + except Exception: self.pin_path =3D None try: self.default_combo =3D element.find('DefaultCombo').attrib['co= mbination'] - except: + except Exception: self.default_combo =3D None try: self.curr_combo =3D element.find('CurrentClonedCombo').attrib[= 'combination'] - except: + except Exception: self.curr_combo =3D None =20 @property def tuple(self): return GeneralConfig(self.default_combo, self.curr_combo, self.pin= _path) =20 + class _RemoteRepo(): def __init__(self, element): try: @@ -622,6 +639,7 @@ class _RemoteRepo(): def tuple(self): return RemoteRepo(self.name, self.url) =20 + class _RepoHook(): def __init__(self, element, remotes): try: @@ -631,18 +649,19 @@ class _RepoHook(): raise KeyError(REQUIRED_ATTRIB_ERROR_MSG.format(k, element.tag= )) try: self.remote_url =3D remotes[element.attrib['remote']].url - except: + except Exception: self.remote_url =3D None print(NO_ASSOCIATED_REMOTE.format(self.source, self.dest_path)) try: self.dest_file =3D element.attrib['destination_file'] - except: + except Exception: self.dest_file =3D None =20 @property def tuple(self): return RepoHook(self.source, self.dest_path, self.dest_file, self.= remote_url) =20 + class _Combination(): def __init__(self, element): try: @@ -651,17 +670,18 @@ class _Combination(): raise KeyError(REQUIRED_ATTRIB_ERROR_MSG.format(k, element.tag= )) try: self.description =3D element.attrib['description'] - except: - self.description =3D None #description is optional attribute + except Exception: + self.description =3D None # description is optional attribute try: self.archived =3D (element.attrib['archived'].lower() =3D=3D '= true') - except: + except Exception: self.archived =3D False =20 @property def tuple(self): return Combination(self.name, self.description) =20 + class _RepoSource(): def __init__(self, element, remotes): try: @@ -672,25 +692,25 @@ class _RepoSource(): raise KeyError(REQUIRED_ATTRIB_ERROR_MSG.format(k, element.tag= )) try: self.branch =3D element.attrib['branch'] - except: + except Exception: self.branch =3D None try: self.commit =3D element.attrib['commit'] - except: + except Exception: self.commit =3D None try: self.tag =3D element.attrib['tag'] - except: + except Exception: self.tag =3D None try: - #if the sparse attrib is not explicitly set to true, then assu= me false + # if the sparse attrib is not explicitly set to true, then ass= ume false self.sparse =3D (element.attrib['sparseCheckout'].lower() =3D= =3D 'true') - except: + except Exception: self.sparse =3D False try: - #If enableSubmodule is not set to True then default to False + # If enableSubmodule is not set to True then default to False self.enableSub =3D (element.attrib['enableSubmodule'].lower() = =3D=3D 'true') - except: + except Exception: self.enableSub =3D False =20 if self.branch is None and self.commit is None and self.tag is Non= e: @@ -698,20 +718,23 @@ class _RepoSource(): =20 @property def tuple(self): - return RepoSource(self.root, self.remote_name, self.remote_url, se= lf.branch, self.commit, self.sparse, self.enableSub, self.tag) + return RepoSource(self.root, self.remote_name, self.remote_url, se= lf.branch, + self.commit, self.sparse, self.enableSub, self.t= ag) + =20 class _SparseSettings(): def __init__(self, element): self.sparse_by_default =3D False try: self.sparse_by_default =3D (element.attrib['sparseByDefault'].= lower() =3D=3D 'true') - except: + except Exception: pass =20 @property def tuple(self): return SparseSettings(self.sparse_by_default) =20 + class _SparseData(): def __init__(self, element): self.combination =3D None @@ -720,11 +743,11 @@ class _SparseData(): self.always_exclude =3D [] try: self.combination =3D element.attrib['combination'] - except: + except Exception: pass try: self.remote_name =3D element.attrib['remote'] - except: + except Exception: pass for includes in element.iter(tag=3D'AlwaysInclude'): self.always_include.extend(includes.text.split('|')) @@ -735,18 +758,20 @@ class _SparseData(): def tuple(self): return SparseData(self.combination, self.remote_name, self.always_= include, self.always_exclude) =20 + class _FolderToFolderMappingFolderExclude(): def __init__(self, element): self.path =3D None try: self.path =3D element.attrib['path'] - except: + except Exception: pass =20 @property def tuple(self): return FolderToFolderMappingFolderExclude(self.path) =20 + class _FolderToFolderMappingFolder(): def __init__(self, element): self.project1_folder =3D None @@ -754,11 +779,11 @@ class _FolderToFolderMappingFolder(): self.excludes =3D [] try: self.project1_folder =3D element.attrib['project1'] - except: + except Exception: pass try: self.project2_folder =3D element.attrib['project2'] - except: + except Exception: pass for exclude in element.iter(tag=3D'Exclude'): self.excludes.append(_FolderToFolderMappingFolderExclude(exclu= de)) @@ -767,6 +792,7 @@ class _FolderToFolderMappingFolder(): def tuple(self): return FolderToFolderMappingFolder(self.project1_folder, self.proj= ect2_folder, self.excludes) =20 + class _FolderToFolderMapping(): def __init__(self, element): self.project1 =3D None @@ -775,15 +801,15 @@ class _FolderToFolderMapping(): self.folders =3D [] try: self.project1 =3D element.attrib['project1'] - except: + except Exception: pass try: self.project2 =3D element.attrib['project2'] - except: + except Exception: pass try: self.remote_name =3D element.attrib['remote'] - except: + except Exception: pass for folder in element.iter(tag=3D'Folder'): self.folders.append(_FolderToFolderMappingFolder(folder)) @@ -811,6 +837,7 @@ class _SubmoduleAlternateRemote(): def tuple(self): return SubmoduleAlternateRemote(self.remote_name, self.originalUrl= , self.altUrl) =20 + # # Optional entry point for debug and validation of the CiIndexXml & Manife= stXml classes # @@ -824,7 +851,8 @@ def main(): =20 parser =3D argparse.ArgumentParser() parser.add_argument("InputFile", help=3D"Xml file to parse", nargs=3D'= ?', default=3D"manifest.xml") - parser.add_argument('-v', '--verbose', action=3D'store_true', help=3D'= Increased verbosity including exception tracebacks') + parser.add_argument('-v', '--verbose', action=3D'store_true', + help=3D'Increased verbosity including exception tr= acebacks') =20 args =3D parser.parse_args() =20 @@ -934,5 +962,6 @@ def main(): if args.verbose: traceback.print_exc() =20 + if __name__ =3D=3D "__main__": main() --=20 2.21.0.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 (#58484): https://edk2.groups.io/g/devel/message/58484 Mute This Topic: https://groups.io/mt/73386941/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- From nobody Fri May 3 18:42:55 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+58485+1787277+3901457@groups.io; helo=web01.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+58485+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1588287206; cv=none; d=zohomail.com; s=zohoarc; b=dQ5D/9quXAXLsxdsmpPWhrmwYdZIqgetbk6nP3N0mMRexQY9jiQCc3VA0NfBtLIk+52EFtIkpzDZtzabIKMCG3lh2/uzRxgnap3XNp8JbSzQQfeoXSw9ZTpkIkNYmsTfAPY9pRpltmjRcdUiqrDm/Qc7IhpT9k575KzXqGTczCU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1588287206; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=0gsfpN9AIue9A3e3FtclNriFIjTn+WvMTu1WxGU0RpQ=; b=TuVMkHrfnn+aF8pzbmM+FsmYEPX3shjHJ4TpSH2SVChZFq97X806lBe9GKx1jHJ9rCri2Kb7DFKxrmnabEQXgYQuMKRnRCNowL6YAi+Ip9lwCqspImq+YE3OBDiLHkiyZ+69F0lZiBAm9HhTTKQBQrXrpgCN4pVasgJzo9IY/RU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+58485+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 1588287206246600.9492327032874; Thu, 30 Apr 2020 15:53:26 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id DwQ2YY1788612xlJdvWouqn3; Thu, 30 Apr 2020 15:53:25 -0700 X-Received: from mga09.intel.com (mga09.intel.com []) by mx.groups.io with SMTP id smtpd.web10.61.1588287204056787193 for ; Thu, 30 Apr 2020 15:53:25 -0700 IronPort-SDR: nJz6nfDA9yp/6CPEJ3uKC477UQEh0a2Eg70BmTFFGzoHCJMc7qmunqcCniTqDlqur7MVkXt0da VRlSZS2qp2sQ== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False X-Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 Apr 2020 15:53:25 -0700 IronPort-SDR: vCL+yeMo6jRrjqTsLIx2jLqSxR8ubxqO9fyK1b6g9xS8ud3bpnb+H47FbnRYiqTlZE+1FqAQwo +7Vs8jcD0k0w== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.73,337,1583222400"; d="scan'208";a="368300818" X-Received: from ecbjorge-mobl1.amr.corp.intel.com ([10.212.184.120]) by fmsmga001.fm.intel.com with ESMTP; 30 Apr 2020 15:53:24 -0700 From: "Bjorge, Erik C" To: devel@edk2.groups.io Cc: Ashley E Desimone , Nate DeSimone , Puja Pandya , Bret Barkelew , Prince Agyeman Subject: [edk2-devel] [edk2-staging/EdkRepo] [PATCH v1 2/3] EdkRepo: Improve error message with invalid XML Date: Thu, 30 Apr 2020 15:52:53 -0700 Message-Id: In-Reply-To: References: MIME-Version: 1.0 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,erik.c.bjorge@intel.com X-Gm-Message-State: QSyVk7TMASDIrV3L47E3wDAsx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1588287205; bh=8lkESySD4zlc2AUe0q468MFMS3KEAxq6JCn1jMRS7x8=; h=Cc:Date:From:Reply-To:Subject:To; b=im2HC0JYJVx4VMKQE96V26rFORJSlSOuusl5Ays+X3lNqlyTXxa5C8NfFpvouRY7Omw ZZUPcwynhQgnqezxq0ldGf9hc+CcEleZrC4ANLKb77m89k0znWYo+dJ+eZigvWAEBt599 KKsW0Grddm/jwR9QA4BlwFG/0BCwr7SHAs4= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" The ETree exception contains additional information about the location of XML tag errors. Adding this information to the error message for better debugging support. Signed-off-by: Erik Bjorge Cc: Ashley E Desimone Cc: Nate DeSimone Cc: Puja Pandya Cc: Bret Barkelew Cc: Prince Agyeman Reviewed-by: Nate DeSimone --- edkrepo_manifest_parser/edk_manifest.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/edkrepo_manifest_parser/edk_manifest.py b/edkrepo_manifest_par= ser/edk_manifest.py index 7e5f0fb..2ec6cd1 100644 --- a/edkrepo_manifest_parser/edk_manifest.py +++ b/edkrepo_manifest_parser/edk_manifest.py @@ -51,7 +51,7 @@ GENERAL_CONFIG_MISSING_ERROR =3D "Unable to locate " SOURCELIST_EMPTY_ERROR =3D "Invalid input: empty values in source list" INVALID_PROJECTNAME_ERROR =3D "Invalid input: {} not found in CiIndexXml" UNSUPPORTED_TYPE_ERROR =3D "{} is not a supported xml type: {}" -INVALID_XML_ERROR =3D "{} is not a valid xml file" +INVALID_XML_ERROR =3D "{} is not a valid xml file ({})" =20 =20 class BaseXmlHelper(): @@ -59,8 +59,8 @@ class BaseXmlHelper(): self._fileref =3D fileref try: self._tree =3D ET.ElementTree(file=3Dfileref) # fileref can b= e a filename or filestream - except Exception: - raise TypeError(INVALID_XML_ERROR.format(fileref)) + except Exception as et_error: + raise TypeError(INVALID_XML_ERROR.format(fileref, et_error)) =20 self._xml_type =3D self._tree.getroot().tag if self._xml_type not in xml_types: --=20 2.21.0.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 (#58485): https://edk2.groups.io/g/devel/message/58485 Mute This Topic: https://groups.io/mt/73386942/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- From nobody Fri May 3 18:42:55 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+58486+1787277+3901457@groups.io; helo=web01.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+58486+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1588287208; cv=none; d=zohomail.com; s=zohoarc; b=J3BEVWDdrmelrQcyPb5U+dZ9YjshxRVZ80D54luNVWwrJ4jQLEXcj8Jq5yynMAFZlIMXyVzu1hKPC/rLC40kDSLkVYnFhFpWTevk9Cy7ngmgXo1tFNmJeNQc+iDZfZE9G1Et1QJbD2KUOmevj3T+HWmycQk+vt16EaYGCRbwOXQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1588287208; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=1y8UL5M8wKvC9dWXa3vdLpU/BE9nxAmX0f9GrxlbPNI=; b=nngU74/eciiRj+DC410umdPIbcJPdRLQfOy9eCbHOGxPCyvlro43odmaTaAVa9uaoVH8GGlaEwLkiRaLgz4sHf/KOS9LJOweIPxF0MELlgbfSNngx16I2JypR1dIOd6TC6HxMwkULPqlwPHX3ZxeEOEcnthozkOSp6ukiLZ1GK8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+58486+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 1588287208580161.2926968579036; Thu, 30 Apr 2020 15:53:28 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id VPrPYY1788612xzmqaEPNmmJ; Thu, 30 Apr 2020 15:53:28 -0700 X-Received: from mga09.intel.com (mga09.intel.com []) by mx.groups.io with SMTP id smtpd.web10.61.1588287204056787193 for ; Thu, 30 Apr 2020 15:53:27 -0700 IronPort-SDR: 7mrmYOz/qGmJU0J2Hdf15Ju2rDd02WLfi3iPaLWhoVWCioN04IMc94XVElcPzhhKuZzMZ9c2rw vnXgUqvB5kyQ== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False X-Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 Apr 2020 15:53:27 -0700 IronPort-SDR: +mVLY9pzvEc/O1Ynb2IehptU0izYfsJqA5uiGdEy/r5Vvdm5PObeNyedcWUrFcSjMzwtVX8d56 0GqpYoz3GAQQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.73,337,1583222400"; d="scan'208";a="368300822" X-Received: from ecbjorge-mobl1.amr.corp.intel.com ([10.212.184.120]) by fmsmga001.fm.intel.com with ESMTP; 30 Apr 2020 15:53:26 -0700 From: "Bjorge, Erik C" To: devel@edk2.groups.io Cc: Ashley E Desimone , Nate DeSimone , Puja Pandya , Bret Barkelew , Prince Agyeman Subject: [edk2-devel] [edk2-staging/EdkRepo] [PATCH v1 3/3] EdkRepo: Refactoring private class members Date: Thu, 30 Apr 2020 15:52:54 -0700 Message-Id: In-Reply-To: References: MIME-Version: 1.0 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,erik.c.bjorge@intel.com X-Gm-Message-State: J7i8hxwIJVVuxgLQUZBYh2eqx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1588287208; bh=28GIMW6vnXm+E6h3Xx8WmmgpBlGWx4kC7GBOjNqPRec=; h=Cc:Date:From:Reply-To:Subject:To; b=b2AQiAx7Hs+gRVRbWAw2zRjpeR91cafPzAyLL9HU+MJXSuPEsQ0sh81sSa8rcCjE5kT V9BmRUh6SMwZe80V7DsQE8J4k98yNSgbNqTSay5C4K4TlEFZXbLY/j4u7i1mEoVk2/Tat jtiT/d4lpy+X2LdeQqcnhh8wpyJm+jvDwXs= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" Refactoring private variables to remove name mangling from double underscores to using single underscores. This allows for better creation of derived classes. Signed-off-by: Erik Bjorge Cc: Ashley E Desimone Cc: Nate DeSimone Cc: Puja Pandya Cc: Bret Barkelew Cc: Prince Agyeman Reviewed-by: Nate DeSimone --- edkrepo_manifest_parser/edk_manifest.py | 100 ++++++++++++------------ 1 file changed, 50 insertions(+), 50 deletions(-) diff --git a/edkrepo_manifest_parser/edk_manifest.py b/edkrepo_manifest_par= ser/edk_manifest.py index 2ec6cd1..d65f5f6 100644 --- a/edkrepo_manifest_parser/edk_manifest.py +++ b/edkrepo_manifest_parser/edk_manifest.py @@ -73,16 +73,16 @@ class BaseXmlHelper(): class CiIndexXml(BaseXmlHelper): def __init__(self, fileref): super().__init__(fileref, 'ProjectList') - self.__projects =3D {} + self._projects =3D {} for element in self._tree.iter(tag=3D'Project'): proj =3D _Project(element) # Todo: add check for unique - self.__projects[proj.name] =3D proj + self._projects[proj.name] =3D proj =20 @property def project_list(self): proj_names =3D [] - for proj in self.__projects.values(): + for proj in self._projects.values(): if proj.archived is False: proj_names.append(proj.name) return proj_names @@ -90,14 +90,14 @@ class CiIndexXml(BaseXmlHelper): @property def archived_project_list(self): proj_names =3D [] - for proj in self.__projects.values(): + for proj in self._projects.values(): if proj.archived is True: proj_names.append(proj.name) return proj_names =20 def get_project_xml(self, project_name): - if project_name in self.__projects: - return self.__projects[project_name].xmlPath + if project_name in self._projects: + return self._projects[project_name].xmlPath else: raise ValueError(INVALID_PROJECTNAME_ERROR.format(project_name= )) =20 @@ -126,18 +126,18 @@ class ManifestXml(BaseXmlHelper): # internally gathering and storing the manifest data. As such, all= access to them should be # done through the provided methods to ensure future compatibility= if the xml schema changes super().__init__(fileref, ['Pin', 'Manifest']) - self.__project_info =3D None - self.__general_config =3D None - self.__remotes =3D {} # dict of _Remote objs, w= ith Remote.name as key - self.__client_hook_list =3D [] - self.__combinations =3D {} # dict of _Combination ob= js, with Combination.name as key - self.__combo_sources =3D {} # dict of _RepoSource obj= lists, with Combination.name as key - self.__dsc_list =3D [] - self.__sparse_settings =3D None # A single instance of pl= atform sparse checkout settings - self.__sparse_data =3D [] # List of SparseData obje= cts - self.__commit_templates =3D {} # dict of commit message = templates with the remote name as the key - self.__folder_to_folder_mappings =3D [] # List of FolderToFolderM= apping objects - self.__submodule_alternate_remotes =3D [] + self._project_info =3D None + self._general_config =3D None + self._remotes =3D {} # dict of _Remote objs, wi= th Remote.name as key + self._client_hook_list =3D [] + self._combinations =3D {} # dict of _Combination obj= s, with Combination.name as key + self._combo_sources =3D {} # dict of _RepoSource obj = lists, with Combination.name as key + self._dsc_list =3D [] + self._sparse_settings =3D None # A single instance of pla= tform sparse checkout settings + self._sparse_data =3D [] # List of SparseData objec= ts + self._commit_templates =3D {} # dict of commit message t= emplates with the remote name as the key + self._folder_to_folder_mappings =3D [] # List of FolderToFolderMa= pping objects + self._submodule_alternate_remotes =3D [] =20 # # Append include XML's to the Manifest etree before parsing @@ -161,19 +161,19 @@ class ManifestXml(BaseXmlHelper): # for subroot in self._tree.iter(tag=3D'RemoteList'): for element in subroot.iter(tag=3D'Remote'): - self._add_unique_item(_RemoteRepo(element), self.__remotes= , element.tag) + self._add_unique_item(_RemoteRepo(element), self._remotes,= element.tag) =20 # # parse tags # subroot =3D self._tree.find('ProjectInfo') - self.__project_info =3D _ProjectInfo(subroot) + self._project_info =3D _ProjectInfo(subroot) =20 # # parse tags # subroot =3D self._tree.find('GeneralConfig') - self.__general_config =3D _GeneralConfig(subroot) + self._general_config =3D _GeneralConfig(subroot) =20 # # parse tags @@ -181,7 +181,7 @@ class ManifestXml(BaseXmlHelper): # for subroot in self._tree.iter(tag=3D'ClientGitHookList'): for element in subroot.iter(tag=3D'ClientGitHook'): - self.__client_hook_list.append(_RepoHook(element, self.__r= emotes)) + self._client_hook_list.append(_RepoHook(element, self._rem= otes)) =20 # # Parse @@ -189,7 +189,7 @@ class ManifestXml(BaseXmlHelper): # for subroot in self._tree.iter(tag=3D'SubmoduleAlternateRemotes'): for element in subroot.iter(tag=3D'SubmoduleAlternateRemote'): - self.__submodule_alternate_remotes.append(_SubmoduleAltern= ateRemote(element, self.__remotes)) + self._submodule_alternate_remotes.append(_SubmoduleAlterna= teRemote(element, self._remotes)) =20 # # parse tags @@ -223,7 +223,7 @@ class ManifestXml(BaseXmlHelper): # for subroot in self._tree.iter(tag=3D'DscList'): for element in subroot.iter(tag=3D'Dsc'): - self.__dsc_list.append(element.text) + self._dsc_list.append(element.text) =20 # # Process tag @@ -231,11 +231,11 @@ class ManifestXml(BaseXmlHelper): subroot =3D self._tree.find('SparseCheckout') if subroot is not None: try: - self.__sparse_settings =3D _SparseSettings(subroot.find('S= parseSettings')) + self._sparse_settings =3D _SparseSettings(subroot.find('Sp= arseSettings')) except KeyError as k: raise KeyError(REQUIRED_ATTRIB_ERROR_MSG.format(k, subroot= .tag)) for sparse_data in subroot.iter(tag=3D'SparseData'): - self.__sparse_data.append(_SparseData(sparse_data)) + self._sparse_data.append(_SparseData(sparse_data)) =20 # # Process any commit log templates that may exist (optional) @@ -248,7 +248,7 @@ class ManifestXml(BaseXmlHelper): template_text =3D template_element.text except KeyError as k: raise KeyError(REQUIRED_ATTRIB_ERROR_MSG.format(k, sub= root.tag)) - self.__commit_templates[remote_name] =3D template_text + self._commit_templates[remote_name] =3D template_text =20 # # Process tag @@ -256,7 +256,7 @@ class ManifestXml(BaseXmlHelper): subroot =3D self._tree.find('FolderToFolderMappingList') if subroot is not None: for f2f_mapping in subroot.iter(tag=3D'FolderToFolderMapping'): - self.__folder_to_folder_mappings.append(_FolderToFolderMap= ping(f2f_mapping)) + self._folder_to_folder_mappings.append(_FolderToFolderMapp= ing(f2f_mapping)) =20 return =20 @@ -274,11 +274,11 @@ class ManifestXml(BaseXmlHelper): def _add_combo_source(self, subroot, combo): # create a list of _RepoSource objs from the tags in subr= oot # and add it to the __combo_sources dictionary - self._add_unique_item(combo, self.__combinations, subroot.tag) + self._add_unique_item(combo, self._combinations, subroot.tag) temp_sources =3D [] for element in subroot.iter(tag=3D'Source'): - temp_sources.append(_RepoSource(element, self.__remotes)) - self.__combo_sources[combo.name] =3D temp_sources + temp_sources.append(_RepoSource(element, self._remotes)) + self._combo_sources[combo.name] =3D temp_sources =20 def _add_unique_item(self, obj, item_dict, tag): # add the 'obj' to 'dict', or raise error if it already exists @@ -299,56 +299,56 @@ class ManifestXml(BaseXmlHelper): # @property def project_info(self): - return self.__project_info.tuple + return self._project_info.tuple =20 @property def general_config(self): - return self.__general_config.tuple + return self._general_config.tuple =20 @property def remotes(self): - return self._tuple_list(self.__remotes.values()) + return self._tuple_list(self._remotes.values()) =20 @property def combinations(self): - return self._tuple_list([x for x in self.__combinations.values() i= f not x.archived]) + return self._tuple_list([x for x in self._combinations.values() if= not x.archived]) =20 @property def archived_combinations(self): - return self._tuple_list([x for x in self.__combinations.values() i= f x.archived]) + return self._tuple_list([x for x in self._combinations.values() if= x.archived]) =20 def get_repo_sources(self, combo_name): - if combo_name in self.__combo_sources: - return self._tuple_list(self.__combo_sources[combo_name]) + if combo_name in self._combo_sources: + return self._tuple_list(self._combo_sources[combo_name]) elif combo_name.startswith('Pin:'): # If currently checked out onto a pin file reture the sources = in the # default combo - return self._tuple_list(self.__combo_sources[self.general_conf= ig.default_combo]) + return self._tuple_list(self._combo_sources[self.general_confi= g.default_combo]) else: raise ValueError(COMB_INVALIDINPUT_ERROR.format(combo_name)) =20 @property def repo_hooks(self): - return self._tuple_list(self.__client_hook_list) + return self._tuple_list(self._client_hook_list) =20 @property def dsc_list(self): - return self.__dsc_list + return self._dsc_list =20 @property def sparse_settings(self): - if self.__sparse_settings: - return self.__sparse_settings.tuple + if self._sparse_settings: + return self._sparse_settings.tuple return None =20 @property def sparse_data(self): - return self._tuple_list(self.__sparse_data) + return self._tuple_list(self._sparse_data) =20 @property def folder_to_folder_mappings(self): f2f_tuples =3D [] - for f2f_mapping in self.__folder_to_folder_mappings: + for f2f_mapping in self._folder_to_folder_mappings: folders =3D f2f_mapping.folders folder_tuples =3D [] for folder in folders: @@ -373,15 +373,15 @@ class ManifestXml(BaseXmlHelper): =20 @property def commit_templates(self): - return self.__commit_templates + return self._commit_templates =20 @property def submodule_alternate_remotes(self): - return self._tuple_list(self.__submodule_alternate_remotes) + return self._tuple_list(self._submodule_alternate_remotes) =20 def get_submodule_alternates_for_remote(self, remote_name): alternates =3D [] - for alternate in self.__submodule_alternate_remotes: + for alternate in self._submodule_alternate_remotes: if alternate.remote_name =3D=3D remote_name: alternates.append(alternate.tuple) return alternates @@ -409,7 +409,7 @@ class ManifestXml(BaseXmlHelper): =20 element.attrib['combination'] =3D combo_name self._tree.write(filename) - self.__general_config.current_combo =3D combo_name + self._general_config.current_combo =3D combo_name =20 def generate_pin_xml(self, description, combo_name, repo_source_list, = filename=3DNone): =20 @@ -443,7 +443,7 @@ class ManifestXml(BaseXmlHelper): =20 remote_root =3D ET.SubElement(pin_root, 'RemoteList') source_root =3D ET.SubElement(pin_root, 'Combination') - source_root.attrib['name'] =3D self.__combinations[combo_name].name + source_root.attrib['name'] =3D self._combinations[combo_name].name =20 # Add tags for each RepoSource tuple in the list provided # Only one of Branch or SHA is required to write PIN and checkout = code --=20 2.21.0.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 (#58486): https://edk2.groups.io/g/devel/message/58486 Mute This Topic: https://groups.io/mt/73386943/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-