Acked-by: Liming Gao <gaolim...@byosoft.com.cn> > -----邮件原件----- > 发件人: Feng, Bob C <bob.c.f...@intel.com> > 发送时间: 2021年2月4日 13:27 > 收件人: gaoliming <gaolim...@byosoft.com.cn>; devel@edk2.groups.io > 抄送: Chen, Christine <yuwei.c...@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 <gaolim...@byosoft.com.cn> > Sent: Thursday, February 4, 2021 9:00 AM > To: Feng, Bob C <bob.c.f...@intel.com>; devel@edk2.groups.io > Cc: Chen, Christine <yuwei.c...@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.f...@intel.com> > > 发送时间: 2021年2月1日 18:29 > > 收件人: devel@edk2.groups.io > > 抄送: Liming Gao <gaolim...@byosoft.com.cn>; Yuwei Chen > > <yuwei.c...@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.f...@intel.com> > > Cc: Liming Gao <gaolim...@byosoft.com.cn> > > Cc: Yuwei Chen <yuwei.c...@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/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-