[edk2-devel] 回复: [Patch 1/1 V2] BaseTools: fix the split output files root dir

gaoliming gaoliming at byosoft.com.cn
Thu Feb 4 07:34:01 UTC 2021


Acked-by: Liming Gao <gaoliming at byosoft.com.cn>

> -----邮件原件-----
> 发件人: Feng, Bob C <bob.c.feng at intel.com>
> 发送时间: 2021年2月4日 13:27
> 收件人: gaoliming <gaoliming at byosoft.com.cn>; devel at edk2.groups.io
> 抄送: Chen, Christine <yuwei.chen at intel.com>
> 主题: RE: [Patch 1/1 V2] BaseTools: fix the split output files root dir
> 
> Yes. I did the verification on the Intel platforms. It works as before.
> 
> -----Original Message-----
> From: gaoliming <gaoliming at byosoft.com.cn>
> Sent: Thursday, February 4, 2021 9:00 AM
> To: Feng, Bob C <bob.c.feng at intel.com>; devel at edk2.groups.io
> Cc: Chen, Christine <yuwei.chen at intel.com>
> Subject: 回复: [Patch 1/1 V2] BaseTools: fix the split output files root dir
> 
> Bob:
>   Does this behavior follow original C Split tool?
> 
> Thanks
> Liming
> > -----邮件原件-----
> > 发件人: Bob Feng <bob.c.feng at intel.com>
> > 发送时间: 2021年2月1日 18:29
> > 收件人: devel at edk2.groups.io
> > 抄送: Liming Gao <gaoliming at byosoft.com.cn>; Yuwei Chen
> > <yuwei.chen at intel.com>
> > 主题: [Patch 1/1 V2] BaseTools: fix the split output files root dir
> >
> > If the output file path is a relative path, the split tool will create
> > the output file under the input file path.
> > But the expected behavior for this case is the output file should be
> > relative to the current directory. This patch will fix this bug.
> >
> > If the output file path is not specified and output prefix is not
> > specified, the output file should be under the input file path
> >
> > 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>
> > ---
> > V2: If the output file path is not specified and output prefix is not
> > specified, the output file should be under the input file path
> >  BaseTools/Source/Python/Split/Split.py        | 64 +++++++------
> >  .../Source/Python/tests/Split/test_split.py   | 96 ++++++++++---------
> >  2 files changed, 86 insertions(+), 74 deletions(-)
> >
> > diff --git a/BaseTools/Source/Python/Split/Split.py
> > b/BaseTools/Source/Python/Split/Split.py
> > index 45a5a060474c..e223a72a94e1 100644
> > --- a/BaseTools/Source/Python/Split/Split.py
> > +++ b/BaseTools/Source/Python/Split/Split.py
> > @@ -90,66 +90,74 @@ def getFileSize(filename):
> >          logger.error("Access file failed: %s", filename)
> >          raise(e)
> >
> >      return length
> >
> > +def getoutputfileabs(inputfile, prefix, outputfile,index):
> > +    inputfile = os.path.abspath(inputfile)
> > +    if outputfile is None:
> > +        if prefix is None:
> > +            outputfileabs = os.path.join(os.path.dirname(inputfile),
> > "{}{}".format(os.path.basename(inputfile),index))
> > +        else:
> > +            if os.path.isabs(prefix):
> > +                outputfileabs = os.path.join(prefix,
> > "{}{}".format(os.path.basename(inputfile),index))
> > +            else:
> > +                outputfileabs = os.path.join(os.getcwd(), prefix,
> > "{}{}".format(os.path.basename(inputfile),index))
> > +    elif not os.path.isabs(outputfile):
> > +        if prefix is None:
> > +            outputfileabs = os.path.join(os.getcwd(), outputfile)
> > +        else:
> > +            if os.path.isabs(prefix):
> > +                outputfileabs = os.path.join(prefix, outputfile)
> > +            else:
> > +                outputfileabs = os.path.join(os.getcwd(), prefix,
> > outputfile)
> > +    else:
> > +        outputfileabs = outputfile
> > +    return outputfileabs
> >
> >  def splitFile(inputfile, position, outputdir=None, outputfile1=None,
> > outputfile2=None):
> >      '''
> >      Split the inputfile into outputfile1 and outputfile2 from the
> position.
> >      '''
> >      logger = logging.getLogger('Split')
> >
> > -    inputfile = os.path.abspath(inputfile)
> > -    workspace = os.path.dirname(inputfile)
> >      if not os.path.exists(inputfile):
> >          logger.error("File Not Found: %s" % inputfile)
> >          raise(Exception)
> >
> >      if outputfile1 and outputfile2 and outputfile1 == outputfile2:
> >          logger.error(
> >              "The firstfile and the secondfile can't be the same: %s"
> > %
> > outputfile1)
> >          raise(Exception)
> >
> > -    if not outputdir:
> > -        outputdir = workspace
> > -    elif not os.path.isabs(outputdir):
> > -        outputdir = os.path.join(workspace, outputdir)
> > -
> >      # Create dir for the output files
> >      try:
> > -        if not outputfile1:
> > -            outputfile1 = os.path.abspath(os.path.join(
> > -                outputdir, "{}1".format(os.path.basename(inputfile))))
> > -        else:
> > -            outputfile1 = os.path.abspath(os.path.join(outputdir,
> > outputfile1))
> > -        outputdir = os.path.dirname(outputfile1)
> > -        if not os.path.exists(outputdir):
> > -            os.makedirs(outputdir)
> >
> > -        if not outputfile2:
> > -            outputfile2 = os.path.abspath(os.path.join(
> > -                outputdir, "{}2".format(os.path.basename(inputfile))))
> > -        else:
> > -            outputfile2 = os.path.abspath(os.path.join(outputdir,
> > outputfile2))
> > -        outputdir = os.path.dirname(outputfile2)
> > -        if not os.path.exists(outputdir):
> > -            os.makedirs(outputdir)
> > +        outputfile1 = getoutputfileabs(inputfile, outputdir,
> > + outputfile1,
> 1)
> > +        outputfolder = os.path.dirname(outputfile1)
> > +        if not os.path.exists(outputfolder):
> > +            os.makedirs(outputfolder)
> > +
> > +        outputfile2 = getoutputfileabs(inputfile, outputdir,
> > + outputfile2,
> 2)
> > +        outputfolder = os.path.dirname(outputfile2)
> > +        if not os.path.exists(outputfolder):
> > +            os.makedirs(outputfolder)
> > +
> >      except Exception as e:
> > -        logger.error("Can't make dir: %s" % outputdir)
> > +        logger.error("Can't make dir: %s" % outputfolder)
> >          raise(e)
> >
> >      if position <= 0:
> > -        if outputfile2 != inputfile:
> > -            shutil.copy2(inputfile, outputfile2)
> > +        if outputfile2 != os.path.abspath(inputfile):
> > +            shutil.copy2(os.path.abspath(inputfile), outputfile2)
> >          with open(outputfile1, "wb") as fout:
> >              fout.write(b'')
> >      else:
> >          inputfilesize = getFileSize(inputfile)
> >          if position >= inputfilesize:
> > -            if outputfile1 != inputfile:
> > -                shutil.copy2(inputfile, outputfile1)
> > +            if outputfile1 != os.path.abspath(inputfile):
> > +                shutil.copy2(os.path.abspath(inputfile), outputfile1)
> >              with open(outputfile2, "wb") as fout:
> >                  fout.write(b'')
> >          else:
> >              try:
> >                  tempdir = tempfile.mkdtemp() diff --git
> > a/BaseTools/Source/Python/tests/Split/test_split.py
> > b/BaseTools/Source/Python/tests/Split/test_split.py
> > index 82f71ecf5372..e4866be390b3 100644
> > --- a/BaseTools/Source/Python/tests/Split/test_split.py
> > +++ b/BaseTools/Source/Python/tests/Split/test_split.py
> > @@ -16,30 +16,31 @@ import Split.Split as sp  import struct as st
> >
> >
> >  class TestSplit(unittest.TestCase):
> >      def setUp(self):
> > -        self.WORKSPACE = tempfile.mkdtemp()
> > -        self.binary_file = os.path.join(self.WORKSPACE, "Binary.bin")
> > +        self.tmpdir = tempfile.mkdtemp()
> > +        self.binary_file = os.path.join(self.tmpdir, "Binary.bin")
> >          self.create_inputfile()
> >
> >      def tearDown(self):
> > -        if os.path.exists(self.WORKSPACE):
> > -            shutil.rmtree(self.WORKSPACE)
> > +        if os.path.exists(self.tmpdir):
> > +            shutil.rmtree(self.tmpdir)
> >
> >      def test_splitFile_position(self):
> >          position = [-1, 0, 256, 512, 700, 1024, 2048]
> >          result = [(0, 1024), (0, 1024), (256, 768),
> >                    (512, 512), (700, 324), (1024, 0), (1024, 0)]
> > +        outputfolder = self.tmpdir
> >          for index, po in enumerate(position):
> >              try:
> >                  sp.splitFile(self.binary_file, po)
> >              except Exception as e:
> >                  self.assertTrue(False, msg="splitFile function
> > error")
> >
> > -            output1 = os.path.join(self.WORKSPACE, "Binary.bin1")
> > -            output2 = os.path.join(self.WORKSPACE, "Binary.bin2")
> > +            output1 = os.path.join(outputfolder, "Binary.bin1")
> > +            output2 = os.path.join(outputfolder, "Binary.bin2")
> >              with open(output1, "rb") as f1:
> >                  size1 = len(f1.read())
> >              with open(output2, "rb") as f2:
> >                  size2 = len(f2.read())
> >
> > @@ -51,61 +52,64 @@ class TestSplit(unittest.TestCase):
> >          with open(self.binary_file, "wb") as fout:
> >              for i in range(512):
> >                  fout.write(st.pack("<H", i))
> >
> >      def test_splitFile_outputfile(self):
> > -        output = [None, "Binary.bin", "Binary1.bin",
> r"output/Binary1.bin",
> > -                  os.path.join(self.WORKSPACE,
> r"output/Binary1.bin")]
> > -        for o in output:
> > +        output = [
> > +            None,
> > +            "Binary.bin",
> > +            "Binary1.bin",
> > +            r"output/Binary1.bin",
> > +            os.path.abspath( r"output/Binary1.bin")
> > +            ]
> > +        expected_output = [
> > +            os.path.join(os.path.dirname(self.binary_file),"Binary.bin1"
> ),
> > +            os.path.join(os.getcwd(),"Binary.bin"),
> > +            os.path.join(os.getcwd(),"Binary1.bin"),
> > +            os.path.join(os.getcwd(),r"output/Binary1.bin"),
> > +            os.path.join(os.path.abspath( r"output/Binary1.bin"))
> > +            ]
> > +        for index, o in enumerate(output):
> >              try:
> >                  sp.splitFile(self.binary_file, 123, outputfile1=o)
> >              except Exception as e:
> >                  self.assertTrue(False, msg="splitFile function error")
> > -            if o is None:
> > -                self.assertTrue(os.path.exists(
> > -                    os.path.join(self.WORKSPACE, "Binary.bin1")))
> > -            else:
> > -                if os.path.isabs(o):
> > -                    self.assertTrue(os.path.exists(o))
> > -                else:
> > -                    self.assertTrue(os.path.exists(
> > -                        os.path.join(self.WORKSPACE, o)))
> > -            self.create_inputfile()
> >
> > -            try:
> > -                sp.splitFile(self.binary_file, 123, outputfile2=o)
> > -            except Exception as e:
> > -                self.assertTrue(False, msg="splitFile function error")
> > -            if o is None:
> > -                self.assertTrue(os.path.exists(
> > -                    os.path.join(self.WORKSPACE, "Binary.bin2")))
> > -            else:
> > -                if os.path.isabs(o):
> > -                    self.assertTrue(os.path.exists(o))
> > -                else:
> > -                    self.assertTrue(os.path.exists(
> > -                        os.path.join(self.WORKSPACE, o)))
> > +            self.assertTrue(os.path.exists(expected_output[index]))
> >              self.create_inputfile()
> >
> >      def test_splitFile_outputfolder(self):
> > -        outputfolder = [None, "output", r"output1/output2",
> > -                        os.path.join(self.WORKSPACE, "output")]
> > -        for o in outputfolder:
> > +        outputfolder = [
> > +            None,
> > +            "output",
> > +            r"output1/output2",
> > +            os.path.abspath("output"),
> > +            "output"
> > +            ]
> > +        output = [
> > +            None,
> > +            None,
> > +            "Binary1.bin",
> > +            r"output/Binary1.bin",
> > +            os.path.abspath( r"output_1/Binary1.bin")
> > +            ]
> > +
> > +        expected_output = [
> > +            os.path.join(os.path.dirname(self.binary_file),"Binary.bin1"
> ),
> > +            os.path.join(os.getcwd(),"output", "Binary.bin1"),
> > +            os.path.join(os.getcwd(), r"output1/output2" ,
> "Binary1.bin"),
> > +            os.path.join(os.getcwd(),r"output", "output/Binary1.bin"),
> > +            os.path.join(os.path.abspath( r"output/Binary1.bin"))
> > +            ]
> > +
> > +        for index, o in enumerate(outputfolder):
> >              try:
> > -                sp.splitFile(self.binary_file, 123, outputdir=o)
> > +                sp.splitFile(self.binary_file, 123,
> > outputdir=o,outputfile1=output[index])
> >              except Exception as e:
> >                  self.assertTrue(False, msg="splitFile function
> > error")
> >
> > -            if o is None:
> > -                self.assertTrue(os.path.exists(
> > -                    os.path.join(self.WORKSPACE, "Binary.bin1")))
> > -            else:
> > -                if os.path.isabs(o):
> > -                    self.assertTrue(os.path.exists(
> > -                        os.path.join(o, "Binary.bin1")))
> > -                else:
> > -                    self.assertTrue(os.path.exists(
> > -                        os.path.join(self.WORKSPACE, o,
> > "Binary.bin1")))
> > +            self.assertTrue(os.path.exists(expected_output[index]))
> > +            self.create_inputfile()
> >
> >
> >  if __name__ == '__main__':
> >      unittest.main()
> > --
> > 2.29.1.windows.1
> 
> 





-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#71187): https://edk2.groups.io/g/devel/message/71187
Mute This Topic: https://groups.io/mt/80375047/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