From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by mx.groups.io with SMTP id smtpd.web09.1077.1608166431546762742 for ; Wed, 16 Dec 2020 16:53:51 -0800 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 134.134.136.65, mailfrom: yuwei.chen@intel.com) IronPort-SDR: ZxTySz0ggNf1dJdDPeCL0gPZ1Xq85MWg3pk7XA0oBmGSeyYM/t6PnHIudcLPTqjCnxYGBSfQdw xPE3+hQnXH2A== X-IronPort-AV: E=McAfee;i="6000,8403,9837"; a="175268421" X-IronPort-AV: E=Sophos;i="5.78,425,1599548400"; d="scan'208";a="175268421" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 16 Dec 2020 16:53:50 -0800 IronPort-SDR: JVlRbreTA/WtA2/uakkN3RR+Jto8VSHpTqIfMa1Sl3i40GK5xtngL5rXab43pcZjtA9F2TV3gc HrBF9RB5Odog== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.78,425,1599548400"; d="scan'208";a="369439126" Received: from yuweipc.ccr.corp.intel.com ([10.239.158.34]) by orsmga008.jf.intel.com with ESMTP; 16 Dec 2020 16:53:49 -0800 From: "Yuwei Chen" To: devel@edk2.groups.io Cc: Bob Feng , Liming Gao Subject: [PATCH 1/1] BaseTools: Adjust StructurePcd List Order. Date: Thu, 17 Dec 2020 08:53:48 +0800 Message-Id: <20201217005348.1529-1-yuwei.chen@intel.com> X-Mailer: git-send-email 2.27.0.windows.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Currently StructurePcd.dsc have the list order issue. For a Pcd with several elements, the list indexs are used to distinguish these elements like this: PcdName.name.offset_name[0]|0x0 PcdName.name.offset_name[10]|0x0 PcdName.name.offset_name[11]|0x0 ... PcdName.name.offset_name[2]|0x0 ... However, the index is not strictly sorted by decimal numerical order, which is not user friendly. One more sort rule for index is added to the current rules to support for decimal numerical order in this patch. Cc: Bob Feng Cc: Liming Gao Signed-off-by: Yuwei Chen --- BaseTools/Scripts/ConvertFceToStructurePcd.py | 29 +++++++++++++++++-- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/BaseTools/Scripts/ConvertFceToStructurePcd.py b/BaseTools/Scripts/ConvertFceToStructurePcd.py index 867660fba9cf..91361ea2b94d 100644 --- a/BaseTools/Scripts/ConvertFceToStructurePcd.py +++ b/BaseTools/Scripts/ConvertFceToStructurePcd.py @@ -277,6 +277,7 @@ class Config(object): attribute_re=re.compile(r'attribute=(\w+)') value_re = re.compile(r'(//.*)') part = [] + part_without_comment = [] for x in section[1:]: line=x.split('\n')[0] comment_list = value_re.findall(line) # the string \\... in "Q...." line @@ -293,8 +294,18 @@ class Config(object): if attribute[0] in ['0x3','0x7']: offset = int(offset[0], 16) #help = help_re.findall(x) - text = offset, name[0], guid[0], value, attribute[0], comment - part.append(text) + text_without_comment = offset, name[0], guid[0], value, attribute[0] + if text_without_comment in part_without_comment: + # check if exists same Pcd with different comments, add different comments in one line with "|". + dupl_index = part_without_comment.index(text_without_comment) + part[dupl_index] = list(part[dupl_index]) + if comment not in part[dupl_index][-1]: + part[dupl_index][-1] += " | " + comment + part[dupl_index] = tuple(part[dupl_index]) + else: + text = offset, name[0], guid[0], value, attribute[0], comment + part_without_comment.append(text_without_comment) + part.append(text) return(part) def value_parser(self, list1): @@ -532,6 +543,18 @@ class mainprocess(object): i.sort() return keys,title_all,info_list,header_list,inf_list + def correct_sort(self, PcdString): + # sort the Pcd list with two rules: + # First sort through Pcd name; + # Second if the Pcd exists several elements, sort them through index value. + if ("]|") in PcdString: + Pcdname = PcdString.split("[")[0] + Pcdindex = int(PcdString.split("[")[1].split("]")[0]) + else: + Pcdname = PcdString.split("|")[0] + Pcdindex = 0 + return Pcdname, Pcdindex + def remove_bracket(self,List): for i in List: for j in i: @@ -543,7 +566,7 @@ class mainprocess(object): List[List.index(i)][i.index(j)] = j for i in List: if type(i) == type([0,0]): - i.sort() + i.sort(key = lambda x:(self.correct_sort(x)[0], self.correct_sort(x)[1])) return List def write_all(self): -- 2.27.0.windows.1