From: "gaoliming" <gaoliming@byosoft.com.cn>
To: "'Feng, Bob C'" <bob.c.feng@intel.com>, <devel@edk2.groups.io>
Cc: "'Chen, Christine'" <yuwei.chen@intel.com>
Subject: 回复: [Patch 1/1 V2] BaseTools: fix the split output files root dir
Date: Thu, 4 Feb 2021 15:34:01 +0800 [thread overview]
Message-ID: <006d01d6fac8$1bbfdbd0$533f9370$@byosoft.com.cn> (raw)
In-Reply-To: <DM6PR11MB4073E4EFB12B63BAD4647838C9B39@DM6PR11MB4073.namprd11.prod.outlook.com>
Acked-by: Liming Gao <gaoliming@byosoft.com.cn>
> -----邮件原件-----
> 发件人: Feng, Bob C <bob.c.feng@intel.com>
> 发送时间: 2021年2月4日 13:27
> 收件人: gaoliming <gaoliming@byosoft.com.cn>; devel@edk2.groups.io
> 抄送: Chen, Christine <yuwei.chen@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@byosoft.com.cn>
> Sent: Thursday, February 4, 2021 9:00 AM
> To: Feng, Bob C <bob.c.feng@intel.com>; devel@edk2.groups.io
> Cc: Chen, Christine <yuwei.chen@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@intel.com>
> > 发送时间: 2021年2月1日 18:29
> > 收件人: devel@edk2.groups.io
> > 抄送: Liming Gao <gaoliming@byosoft.com.cn>; Yuwei Chen
> > <yuwei.chen@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@intel.com>
> > Cc: Liming Gao <gaoliming@byosoft.com.cn>
> > Cc: Yuwei Chen <yuwei.chen@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
>
>
next prev parent reply other threads:[~2021-02-04 7:34 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-01 10:28 [Patch 1/1 V2] BaseTools: fix the split output files root dir Bob Feng
2021-02-04 0:59 ` 回复: " gaoliming
2021-02-04 5:26 ` Bob Feng
2021-02-04 7:34 ` gaoliming [this message]
2021-02-05 1:18 ` Yuwei Chen
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='006d01d6fac8$1bbfdbd0$533f9370$@byosoft.com.cn' \
--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