public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Yuwei Chen" <yuwei.chen@intel.com>
To: devel@edk2.groups.io
Cc: Bob Feng <bob.c.feng@intel.com>, Liming Gao <gaoliming@byosoft.com.cn>
Subject: [PATCH 1/1] BaseTools: Adjust StructurePcd List Order.
Date: Thu, 17 Dec 2020 08:53:48 +0800	[thread overview]
Message-ID: <20201217005348.1529-1-yuwei.chen@intel.com> (raw)

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 <bob.c.feng@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Signed-off-by: Yuwei Chen <yuwei.chen@intel.com>
---
 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


             reply	other threads:[~2020-12-17  0:53 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-17  0:53 Yuwei Chen [this message]
2021-02-25  4:20 ` [PATCH 1/1] BaseTools: Adjust StructurePcd List Order Bob Feng

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20201217005348.1529-1-yuwei.chen@intel.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox