Re: [edk2-devel] 回复: [Patch 1/1] BaseTools: Fix the issue caused by tostring() removal on Py39

Bob Feng bob.c.feng at intel.com
Wed Jan 6 00:58:10 UTC 2021


Thanks. I created a PR https://github.com/tianocore/edk2/pull/1296

Thanks,
Bob

-----Original Message-----
From: devel at edk2.groups.io <devel at edk2.groups.io> On Behalf Of gaoliming
Sent: Tuesday, January 5, 2021 9:28 PM
To: Feng, Bob C <bob.c.feng at intel.com>; devel at edk2.groups.io
Cc: Chen, Christine <yuwei.chen at intel.com>; Liang, MingyueX <mingyuex.liang at intel.com>
Subject: 回复: [edk2-devel] 回复: [Patch 1/1] BaseTools: Fix the issue caused by tostring() removal on Py39

Bob:
  I agree its impact is not big. If no better solution, I am OK for this fix. Reviewed-by: Liming Gao <gaoliming at byosoft.com.cn>

Thanks
Liming
> -----邮件原件-----
> 发件人: Feng, Bob C <bob.c.feng at intel.com>
> 发送时间: 2021年1月5日 17:10
> 收件人: gaoliming <gaoliming at byosoft.com.cn>; devel at edk2.groups.io
> 抄送: Chen, Christine <yuwei.chen at intel.com>; Liang, MingyueX 
> <mingyuex.liang at intel.com>
> 主题: RE: [edk2-devel] 回复: [Patch 1/1] BaseTools: Fix the issue caused 
> by
> tostring() removal on Py39
> 
> Hi Liming,
> 
> The method in this patch is just to avoid converting the SectionData 
> to a bytes string because there is no compatible way to generate a 
> bytes string from a array.array.
> So I can't do the bytes strings comparison between the new content and 
> the content in the existing file.
> 
> Since the this block of code will only run in GenFds phase, the effect 
> of the incremental save is small,  I think it can be fine to save the 
> new content anyway.
> 
> Thanks,
> Bob
> 
> -----Original Message-----
> From: gaoliming <gaoliming at byosoft.com.cn>
> Sent: Monday, January 4, 2021 4:32 PM
> To: Feng, Bob C <bob.c.feng at intel.com>; devel at edk2.groups.io
> Cc: Chen, Christine <yuwei.chen at intel.com>; Liang, MingyueX 
> <mingyuex.liang at intel.com>
> Subject: 回复: [edk2-devel] 回复: [Patch 1/1] BaseTools: Fix the issue 
> caused by tostring() removal on Py39
> 
> Original SaveFileOnChange() saves the file only when the file is 
> updated. Can this patch keep the same behavior?
> 
> Thanks
> Liming
> > -----邮件原件-----
> > 发件人: Feng, Bob C <bob.c.feng at intel.com>
> > 发送时间: 2021年1月4日 10:27
> > 收件人: devel at edk2.groups.io; gaoliming at byosoft.com.cn
> > 抄送: Chen, Christine <yuwei.chen at intel.com>; Liang, MingyueX 
> > <mingyuex.liang at intel.com>
> > 主题: RE: [edk2-devel] 回复: [Patch 1/1] BaseTools: Fix the issue caused 
> > by
> > tostring() removal on Py39
> >
> > Yes. it will always update .ui file.
> >
> > Thanks,
> > Bob
> >
> > -----Original Message-----
> > From: devel at edk2.groups.io <devel at edk2.groups.io> On Behalf Of 
> > gaoliming
> > Sent: Monday, January 4, 2021 8:51 AM
> > To: Feng, Bob C <bob.c.feng at intel.com>; devel at edk2.groups.io
> > Cc: Chen, Christine <yuwei.chen at intel.com>; Liang, MingyueX 
> > <mingyuex.liang at intel.com>
> > Subject: [edk2-devel] 回复: [Patch 1/1] BaseTools: Fix the issue 
> > caused by
> > tostring() removal on Py39
> >
> > Bob:
> >
> > > -----邮件原件-----
> > > 发件人: Bob Feng <bob.c.feng at intel.com>
> > > 发送时间: 2020年12月29日 20:15
> > > 收件人: devel at edk2.groups.io
> > > 抄送: Liming Gao <gaoliming at byosoft.com.cn>; Yuwei Chen 
> > > <yuwei.chen at intel.com>; Mingyue Liang <mingyuex.liang at intel.com>
> > > 主题: [Patch 1/1] BaseTools: Fix the issue caused by tostring() 
> > > removal on
> > > Py39
> > >
> > > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3136
> > >
> > > Python 3.9 remove the array.array.tostring and
> > > array.array.fromstring() function. This patch is to use other 
> > > method to replace tostring() and
> > > fromstring()
> > >
> > > Signed-off-by: Bob Feng <bob.c.feng at intel.com>
> > >
> > > Cc: Liming Gao <gaoliming at byosoft.com.cn>
> > > Cc: Yuwei Chen <yuwei.chen at intel.com>
> > > Cc: Mingyue Liang <mingyuex.liang at intel.com>
> > > ---
> > >  .../Python/GenFds/GenFdsGlobalVariable.py     | 23
> > > ++++++++++++++++---
> > >  1 file changed, 20 insertions(+), 3 deletions(-)
> > >
> > > diff --git 
> > > a/BaseTools/Source/Python/GenFds/GenFdsGlobalVariable.py
> > > b/BaseTools/Source/Python/GenFds/GenFdsGlobalVariable.py
> > > index dc1727c4666d..3019ec63c3bb 100644
> > > --- a/BaseTools/Source/Python/GenFds/GenFdsGlobalVariable.py
> > > +++ b/BaseTools/Source/Python/GenFds/GenFdsGlobalVariable.py
> > > @@ -25,14 +25,15 @@ from Common.Misc import SaveFileOnChange
> > >
> > >  from Common.TargetTxtClassObject import TargetTxtDict  from 
> > > Common.ToolDefClassObject import ToolDefDict  from
> > AutoGen.BuildEngine
> > > import ToolBuildRule  import Common.DataType as DataType -from 
> > > Common.Misc import PathClass
> > > +from Common.Misc import PathClass,CreateDirectory
> > >  from Common.LongFilePathSupport import OpenLongFilePath as open
> > from
> > > Common.MultipleWorkspace import MultipleWorkspace as mws  import 
> > > Common.GlobalData as GlobalData
> > > +from Common.BuildToolError import *
> > >
> > >  ## Global variables
> > >  #
> > >  #
> > >  class GenFdsGlobalVariable:
> > > @@ -461,16 +462,32 @@ class GenFdsGlobalVariable:
> > >                  Cmd += ("-o", Output)
> > >                  if ' '.join(Cmd).strip() not in
> > > GenFdsGlobalVariable.SecCmdList:
> > >                      GenFdsGlobalVariable.SecCmdList.append('
> > > '.join(Cmd).strip())
> > >              else:
> > >                  SectionData = array('B', [0, 0, 0, 0])
> > > -                SectionData.fromstring(Ui.encode("utf_16_le"))
> > > +
> > > SectionData.fromlist(array('B',Ui.encode('utf-16-le')).tolist())
> > >                  SectionData.append(0)
> > >                  SectionData.append(0)
> > >                  Len = len(SectionData)
> > >
> > > GenFdsGlobalVariable.SectionHeader.pack_into(SectionData, 0, Len & 
> > > 0xff, (Len >> 8) & 0xff, (Len >> 16) & 0xff, 0x15)
> > > -                SaveFileOnChange(Output, SectionData.tostring())
> > > +
> > > +
> > > +                DirName = os.path.dirname(Output)
> > > +                if not CreateDirectory(DirName):
> > > +                    EdkLogger.error(None, FILE_CREATE_FAILURE,
> > > "Could not create directory %s" % DirName)
> > > +                else:
> > > +                    if DirName == '':
> > > +                        DirName = os.getcwd()
> > > +                    if not os.access(DirName, os.W_OK):
> > > +                        EdkLogger.error(None,
> > PERMISSION_FAILURE,
> > > "Do not have write permission on directory %s" % DirName)
> > > +
> > > +                try:
> > > +                    with open(Output, "wb") as Fd:
> > > +                        SectionData.tofile(Fd)
> > > +                        Fd.flush()
> > > +                except IOError as X:
> > > +                    EdkLogger.error(None, FILE_CREATE_FAILURE,
> > > ExtraData='IOError %s' % X)
> >
> > Does this change always update the file time stamp even if the file 
> > content is not changed?
> >
> > Thanks
> > Liming
> > >
> > >          elif Ver:
> > >              Cmd += ("-n", Ver)
> > >              if BuildNumber:
> > >                  Cmd += ("-j", BuildNumber)
> > > --
> > > 2.29.1.windows.1
> >
> >
> >
> >
> >
> > 
> >
> 
> 










-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#69765): https://edk2.groups.io/g/devel/message/69765
Mute This Topic: https://groups.io/mt/79465510/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-






More information about the edk2-devel-archive mailing list