From: "Bob Feng" <bob.c.feng@intel.com>
To: gaoliming <gaoliming@byosoft.com.cn>,
"devel@edk2.groups.io" <devel@edk2.groups.io>
Cc: "Chen, Christine" <yuwei.chen@intel.com>
Subject: Re: [Patch 1/1 V2] BaseTools: fix the split output files root dir
Date: Thu, 4 Feb 2021 05:26:54 +0000 [thread overview]
Message-ID: <DM6PR11MB4073E4EFB12B63BAD4647838C9B39@DM6PR11MB4073.namprd11.prod.outlook.com> (raw)
In-Reply-To: <003501d6fa90$ff1b6b70$fd524250$@byosoft.com.cn>
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 5:26 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 [this message]
2021-02-04 7:34 ` gaoliming
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=DM6PR11MB4073E4EFB12B63BAD4647838C9B39@DM6PR11MB4073.namprd11.prod.outlook.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