* [PATCH 1/3] oeqa/selftest: clean up selftest.inc in teardown [not found] <cover.1445231631.git.leonardo.sandoval.gonzalez@linux.intel.com> @ 2015-10-19 5:22 ` leonardo.sandoval.gonzalez 2015-10-19 5:24 ` [PATCH 3/3] oeqa/utils/ftools: Checks before appending/reading files leonardo.sandoval.gonzalez 1 sibling, 0 replies; 4+ messages in thread From: leonardo.sandoval.gonzalez @ 2015-10-19 5:22 UTC (permalink / raw) To: openembedded-core From: Ross Burton <ross.burton@intel.com> Test cases may want to do call bitbake in setUpClass() but at that point the previous selftest.inc is still present which could change the build configuration and result in any built artifacts being removed in the next bitbake invocation as part of the sysroot clean up. Resolve this by cleaning selftest.inc in the tearDown, the clean in setUp should be considered a safety net. [YOCTO #8466] Signed-off-by: Ross Burton <ross.burton@intel.com> --- meta/lib/oeqa/selftest/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta/lib/oeqa/selftest/base.py b/meta/lib/oeqa/selftest/base.py index b2faa66..9bddc23 100644 --- a/meta/lib/oeqa/selftest/base.py +++ b/meta/lib/oeqa/selftest/base.py @@ -31,7 +31,7 @@ class oeSelfTest(unittest.TestCase): self.testinc_bblayers_path = os.path.join(self.builddir, "conf/bblayers.inc") self.testlayer_path = oeSelfTest.testlayer_path self._extra_tear_down_commands = [] - self._track_for_cleanup = [] + self._track_for_cleanup = [self.testinc_path] super(oeSelfTest, self).__init__(methodName) def setUp(self): -- 1.8.4.5 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH 3/3] oeqa/utils/ftools: Checks before appending/reading files [not found] <cover.1445231631.git.leonardo.sandoval.gonzalez@linux.intel.com> 2015-10-19 5:22 ` [PATCH 1/3] oeqa/selftest: clean up selftest.inc in teardown leonardo.sandoval.gonzalez @ 2015-10-19 5:24 ` leonardo.sandoval.gonzalez 2015-10-19 13:41 ` Paul Eggleton 1 sibling, 1 reply; 4+ messages in thread From: leonardo.sandoval.gonzalez @ 2015-10-19 5:24 UTC (permalink / raw) To: openembedded-core; +Cc: paul.eggleton From: Leonardo Sandoval <leonardo.sandoval.gonzalez@linux.intel.com> Before trying to append/read a file, check if file exists. Signed-off-by: Leonardo Sandoval <leonardo.sandoval.gonzalez@linux.intel.com> --- meta/lib/oeqa/utils/ftools.py | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/meta/lib/oeqa/utils/ftools.py b/meta/lib/oeqa/utils/ftools.py index 64ebe3d..70a55b8 100644 --- a/meta/lib/oeqa/utils/ftools.py +++ b/meta/lib/oeqa/utils/ftools.py @@ -8,20 +8,24 @@ def write_file(path, data): def append_file(path, data): wdata = data.rstrip() + "\n" - with open(path, "a") as f: + if os.path.isfile(path): + with open(path, "a") as f: f.write(wdata) def read_file(path): data = None - with open(path) as f: - data = f.read() + if os.path.isfile(path): + with open(path) as f: + data = f.read() return data def remove_from_file(path, data): - lines = read_file(path).splitlines() - rmdata = data.strip().splitlines() - for l in rmdata: - for c in range(0, lines.count(l)): - i = lines.index(l) - del(lines[i]) - write_file(path, "\n".join(lines)) + rawdata = read_file(path) + if rawdata: + lines = rawdata.splitlines() + rmdata = data.strip().splitlines() + for l in rmdata: + for c in range(0, lines.count(l)): + i = lines.index(l) + del(lines[i]) + write_file(path, "\n".join(lines)) -- 1.8.4.5 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH 3/3] oeqa/utils/ftools: Checks before appending/reading files 2015-10-19 5:24 ` [PATCH 3/3] oeqa/utils/ftools: Checks before appending/reading files leonardo.sandoval.gonzalez @ 2015-10-19 13:41 ` Paul Eggleton 2015-10-19 14:21 ` Leonardo Sandoval 0 siblings, 1 reply; 4+ messages in thread From: Paul Eggleton @ 2015-10-19 13:41 UTC (permalink / raw) To: leonardo.sandoval.gonzalez; +Cc: openembedded-core Hi Leo, On Monday 19 October 2015 05:24:44 leonardo.sandoval.gonzalez@linux.intel.com wrote: > From: Leonardo Sandoval <leonardo.sandoval.gonzalez@linux.intel.com> > > Before trying to append/read a file, check if file exists. > > Signed-off-by: Leonardo Sandoval > <leonardo.sandoval.gonzalez@linux.intel.com> --- > meta/lib/oeqa/utils/ftools.py | 24 ++++++++++++++---------- > 1 file changed, 14 insertions(+), 10 deletions(-) > > diff --git a/meta/lib/oeqa/utils/ftools.py b/meta/lib/oeqa/utils/ftools.py > index 64ebe3d..70a55b8 100644 > --- a/meta/lib/oeqa/utils/ftools.py > +++ b/meta/lib/oeqa/utils/ftools.py > @@ -8,20 +8,24 @@ def write_file(path, data): > > def append_file(path, data): > wdata = data.rstrip() + "\n" > - with open(path, "a") as f: > + if os.path.isfile(path): > + with open(path, "a") as f: > f.write(wdata) Hang on - opening a nonexistent file with mode 'a' is perfectly fine, it'll just get created - why do we need this check? > def read_file(path): > data = None > - with open(path) as f: > - data = f.read() > + if os.path.isfile(path): > + with open(path) as f: > + data = f.read() > return data > > def remove_from_file(path, data): > - lines = read_file(path).splitlines() > - rmdata = data.strip().splitlines() > - for l in rmdata: > - for c in range(0, lines.count(l)): > - i = lines.index(l) > - del(lines[i]) > - write_file(path, "\n".join(lines)) > + rawdata = read_file(path) > + if rawdata: > + lines = rawdata.splitlines() > + rmdata = data.strip().splitlines() > + for l in rmdata: > + for c in range(0, lines.count(l)): > + i = lines.index(l) > + del(lines[i]) > + write_file(path, "\n".join(lines)) Checking a file exists before opening it isn't good practice. It's much better to try opening it and if the open fails with IOError of errno.ENOENT then ignore it (or rather, if e.errno != errno.ENOENT then re-raise the exception). Cheers, Paul -- Paul Eggleton Intel Open Source Technology Centre ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH 3/3] oeqa/utils/ftools: Checks before appending/reading files 2015-10-19 13:41 ` Paul Eggleton @ 2015-10-19 14:21 ` Leonardo Sandoval 0 siblings, 0 replies; 4+ messages in thread From: Leonardo Sandoval @ 2015-10-19 14:21 UTC (permalink / raw) To: Paul Eggleton; +Cc: openembedded-core Hi Paul, On 10/19/2015 08:41 AM, Paul Eggleton wrote: > Hi Leo, > > On Monday 19 October 2015 05:24:44 leonardo.sandoval.gonzalez@linux.intel.com > wrote: >> From: Leonardo Sandoval <leonardo.sandoval.gonzalez@linux.intel.com> >> >> Before trying to append/read a file, check if file exists. >> >> Signed-off-by: Leonardo Sandoval >> <leonardo.sandoval.gonzalez@linux.intel.com> --- >> meta/lib/oeqa/utils/ftools.py | 24 ++++++++++++++---------- >> 1 file changed, 14 insertions(+), 10 deletions(-) >> >> diff --git a/meta/lib/oeqa/utils/ftools.py b/meta/lib/oeqa/utils/ftools.py >> index 64ebe3d..70a55b8 100644 >> --- a/meta/lib/oeqa/utils/ftools.py >> +++ b/meta/lib/oeqa/utils/ftools.py >> @@ -8,20 +8,24 @@ def write_file(path, data): >> >> def append_file(path, data): >> wdata = data.rstrip() + "\n" >> - with open(path, "a") as f: >> + if os.path.isfile(path): >> + with open(path, "a") as f: >> f.write(wdata) > > Hang on - opening a nonexistent file with mode 'a' is perfectly fine, it'll just > get created - why do we need this check? You are right, there is no need. > > >> def read_file(path): >> data = None >> - with open(path) as f: >> - data = f.read() >> + if os.path.isfile(path): >> + with open(path) as f: >> + data = f.read() >> return data >> >> def remove_from_file(path, data): >> - lines = read_file(path).splitlines() >> - rmdata = data.strip().splitlines() >> - for l in rmdata: >> - for c in range(0, lines.count(l)): >> - i = lines.index(l) >> - del(lines[i]) >> - write_file(path, "\n".join(lines)) >> + rawdata = read_file(path) >> + if rawdata: >> + lines = rawdata.splitlines() >> + rmdata = data.strip().splitlines() >> + for l in rmdata: >> + for c in range(0, lines.count(l)): >> + i = lines.index(l) >> + del(lines[i]) >> + write_file(path, "\n".join(lines)) > > Checking a file exists before opening it isn't good practice. It's much better > to try opening it and if the open fails with IOError of errno.ENOENT then > ignore it (or rather, if e.errno != errno.ENOENT then re-raise the > exception). After applying patch into master http://lists.openembedded.org/pipermail/openembedded-core/2015-October/111704.html I saw this error: Traceback (most recent call last): File "/srv/ab/yocto-autobuilder/yocto-worker/nightly-oe-selftest/build/meta/lib/oeqa/selftest/base.py", line 110, in remove_config ftools.remove_from_file(self.testinc_path, data) File "/srv/ab/yocto-autobuilder/yocto-worker/nightly-oe-selftest/build/meta/lib/oeqa/utils/ftools.py", line 21, in remove_from_file lines = read_file(path).splitlines() File "/srv/ab/yocto-autobuilder/yocto-worker/nightly-oe-selftest/build/meta/lib/oeqa/utils/ftools.py", line 16, in read_file with open(path) as f: IOError: [Errno 2] No such file or directory: '/srv/ab/yocto-autobuilder/yocto-worker/nightly-oe-selftest/build/build/conf/selftest.inc' That is why I created the latter check. I will change it to use IOError, safer and cleaner. Sending V2 today. Thanks for your comments. > > Cheers, > Paul > ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2015-10-19 14:19 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <cover.1445231631.git.leonardo.sandoval.gonzalez@linux.intel.com>
2015-10-19 5:22 ` [PATCH 1/3] oeqa/selftest: clean up selftest.inc in teardown leonardo.sandoval.gonzalez
2015-10-19 5:24 ` [PATCH 3/3] oeqa/utils/ftools: Checks before appending/reading files leonardo.sandoval.gonzalez
2015-10-19 13:41 ` Paul Eggleton
2015-10-19 14:21 ` Leonardo Sandoval
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox