| Submitter | Richard Purdie |
|---|---|
| Date | July 26, 2012, 1:05 p.m. |
| Message ID | <1343307951.29991.27.camel@ted> |
| Download | mbox | patch |
| Permalink | /patch/33123/ |
| State | New |
| Headers | show |
Comments
On 26/07/2012 14:05, Richard Purdie wrote: > This code was written by Christopher Larson <chris_larson@mentor.com> and > allows generation of the LSB release data based upon the lsb_release > command. It also includes a helper function to generate a string > representing a given distribution. > > Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org> > --- > diff --git a/meta/lib/oe/lsb.py b/meta/lib/oe/lsb.py > new file mode 100644 > index 0000000..a774169 > --- a/dev/null > +++ b/meta/lib/oe/lsb.py > @@ -0,0 +1,28 @@ > +def release_dict(): > + """Return the output of lsb_release -a as a dictionary""" > + from subprocess import PIPE > + > + try: > + output, err = bb.process.run(['lsb_release', '-a'], stderr=PIPE) > + except bb.process.CmdError as exc: > + return > + > + data = {} > + for line in output.splitlines(): > + try: > + key, value = line.split(":\t", 1) > + except ValueError: > + continue > + else: > + data[key] = value > + return data > + > +def distro_identifier(adjust_hook=None): > + """Return a distro identifier string based upon lsb_release -ri, > + with optional adjustment via a hook""" > + > + lsb_data = release_dict() > + distro_id, release = lsb_data['Distributor ID'], lsb_data['Release'] > + if adjust_hook: > + distro_id, release = adjust_hook(distro_id, release) > + return '{0}-{1}'.format(distro_id, release) > > > > _______________________________________________ > Openembedded-core mailing list > Openembedded-core@lists.openembedded.org > http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core There is an unchecked error case here. I just had to fix this issue: ERROR: Execution of event handler 'oe_import_eh' failed Traceback (most recent call last): File "oe_import_eh(e)", line 4, in oe_import_eh(e=<bb.event.ConfigParsed object at 0x3834f90>) File "/mnt/yocto/poky.git/meta/lib/oe/lsb.py", line 25, in distro_identifier(adjust_hook=None): lsb_data = release_dict() > distro_id, release = lsb_data['Distributor ID'], lsb_data['Release'] if adjust_hook: TypeError: 'NoneType' object has no attribute '__getitem__' by installing lsb_release. Archlinux 64. Should it check to see if it installed first and error otherwise? It looks like it tries to do it here: + try: + output, err = bb.process.run(['lsb_release', '-a'], stderr=PIPE) + except bb.process.CmdError as exc: + return but it must be missing something. Regards, Jack
On Sat, Jul 28, 2012 at 10:03:11AM +0100, Jack Mitchell wrote: > On 26/07/2012 14:05, Richard Purdie wrote: > > This code was written by Christopher Larson <chris_larson@mentor.com> and > > allows generation of the LSB release data based upon the lsb_release > > command. It also includes a helper function to generate a string > > representing a given distribution. > > > > Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org> > > --- > > diff --git a/meta/lib/oe/lsb.py b/meta/lib/oe/lsb.py > > new file mode 100644 > > index 0000000..a774169 > > --- a/dev/null > > +++ b/meta/lib/oe/lsb.py > > @@ -0,0 +1,28 @@ > > +def release_dict(): > > + """Return the output of lsb_release -a as a dictionary""" > > + from subprocess import PIPE > > + > > + try: > > + output, err = bb.process.run(['lsb_release', '-a'], stderr=PIPE) > > + except bb.process.CmdError as exc: > > + return > > + > > + data = {} > > + for line in output.splitlines(): > > + try: > > + key, value = line.split(":\t", 1) > > + except ValueError: > > + continue > > + else: > > + data[key] = value > > + return data > > + > > +def distro_identifier(adjust_hook=None): > > + """Return a distro identifier string based upon lsb_release -ri, > > + with optional adjustment via a hook""" > > + > > + lsb_data = release_dict() > > + distro_id, release = lsb_data['Distributor ID'], lsb_data['Release'] > > + if adjust_hook: > > + distro_id, release = adjust_hook(distro_id, release) > > + return '{0}-{1}'.format(distro_id, release) > > > > > > > > _______________________________________________ > > Openembedded-core mailing list > > Openembedded-core@lists.openembedded.org > > http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core > > There is an unchecked error case here. I just had to fix this issue: > > ERROR: Execution of event handler 'oe_import_eh' failed > Traceback (most recent call last): > File "oe_import_eh(e)", line 4, in > oe_import_eh(e=<bb.event.ConfigParsed object at 0x3834f90>) > File "/mnt/yocto/poky.git/meta/lib/oe/lsb.py", line 25, in > distro_identifier(adjust_hook=None): > lsb_data = release_dict() > > distro_id, release = lsb_data['Distributor ID'], > lsb_data['Release'] > if adjust_hook: > TypeError: 'NoneType' object has no attribute '__getitem__' > > > by installing lsb_release. Archlinux 64. > > Should it check to see if it installed first and error otherwise? It > looks like it tries to do it here: > > + try: > + output, err = bb.process.run(['lsb_release', '-a'], stderr=PIPE) > + except bb.process.CmdError as exc: > + return > > > but it must be missing something. Same here, interesting is that it failed only during 2nd build, 1st with this commit applied finished fine. Cheers,
On Sat, Jul 28, 2012 at 11:16:14AM +0200, Martin Jansa wrote: > > by installing lsb_release. Archlinux 64. > > > > Should it check to see if it installed first and error otherwise? It > > looks like it tries to do it here: > > > > + try: > > + output, err = bb.process.run(['lsb_release', '-a'], stderr=PIPE) > > + except bb.process.CmdError as exc: > > + return > > > > > > but it must be missing something. > > Same here, interesting is that it failed only during 2nd build, 1st > with this commit applied finished fine. Ah no, it was there also first time I've overlooked it as it's not fatal.
On 28/07/2012 10:37, Martin Jansa wrote: > On Sat, Jul 28, 2012 at 11:16:14AM +0200, Martin Jansa wrote: >>> by installing lsb_release. Archlinux 64. >>> >>> Should it check to see if it installed first and error otherwise? It >>> looks like it tries to do it here: >>> >>> + try: >>> + output, err = bb.process.run(['lsb_release', '-a'], stderr=PIPE) >>> + except bb.process.CmdError as exc: >>> + return >>> >>> >>> but it must be missing something. >> >> Same here, interesting is that it failed only during 2nd build, 1st >> with this commit applied finished fine. > > Ah no, it was there also first time I've overlooked it as it's not > fatal. > It was fatal for me as it trashed my sstate folder naming and then refused to build some packages. The directory in my sstate was created as: ${NATIVELSBSTRING} Then when Bitbake tried to use shared state it expanded NATIVELSBSTRING to nothing and failed.
On Sat, Jul 28, 2012 at 10:58:16AM +0100, Jack Mitchell wrote: > On 28/07/2012 10:37, Martin Jansa wrote: > >On Sat, Jul 28, 2012 at 11:16:14AM +0200, Martin Jansa wrote: > >>>by installing lsb_release. Archlinux 64. > >>> > >>>Should it check to see if it installed first and error otherwise? It > >>>looks like it tries to do it here: > >>> > >>>+ try: > >>>+ output, err = bb.process.run(['lsb_release', '-a'], stderr=PIPE) > >>>+ except bb.process.CmdError as exc: > >>>+ return > >>> > >>> > >>>but it must be missing something. > >> > >>Same here, interesting is that it failed only during 2nd build, 1st > >>with this commit applied finished fine. > > > >Ah no, it was there also first time I've overlooked it as it's not > >fatal. > > > > It was fatal for me as it trashed my sstate folder naming and then > refused to build some packages. The directory in my sstate was > created as: > > ${NATIVELSBSTRING} > > Then when Bitbake tried to use shared state it expanded > NATIVELSBSTRING to nothing and failed. I have the same issue here - Gentoo/64. Can we get it fixed in the master, please? Thanks.
On Mon, 2012-07-30 at 15:50 -0400, Denys Dmytriyenko wrote: > On Sat, Jul 28, 2012 at 10:58:16AM +0100, Jack Mitchell wrote: > > On 28/07/2012 10:37, Martin Jansa wrote: > > >On Sat, Jul 28, 2012 at 11:16:14AM +0200, Martin Jansa wrote: > > >>>by installing lsb_release. Archlinux 64. > > >>> > > >>>Should it check to see if it installed first and error otherwise? It > > >>>looks like it tries to do it here: > > >>> > > >>>+ try: > > >>>+ output, err = bb.process.run(['lsb_release', '-a'], stderr=PIPE) > > >>>+ except bb.process.CmdError as exc: > > >>>+ return > > >>> > > >>> > > >>>but it must be missing something. > > >> > > >>Same here, interesting is that it failed only during 2nd build, 1st > > >>with this commit applied finished fine. > > > > > >Ah no, it was there also first time I've overlooked it as it's not > > >fatal. > > > > > > > It was fatal for me as it trashed my sstate folder naming and then > > refused to build some packages. The directory in my sstate was > > created as: > > > > ${NATIVELSBSTRING} > > > > Then when Bitbake tried to use shared state it expanded > > NATIVELSBSTRING to nothing and failed. > > I have the same issue here - Gentoo/64. Can we get it fixed in the master, > please? Thanks. I've pushed something which should resolve the problem and at least set this to a known string ('Unknown'). Cheers, Richard
Patch
diff --git a/meta/lib/oe/lsb.py b/meta/lib/oe/lsb.py new file mode 100644 index 0000000..a774169 --- a/dev/null +++ b/meta/lib/oe/lsb.py @@ -0,0 +1,28 @@ +def release_dict(): + """Return the output of lsb_release -a as a dictionary""" + from subprocess import PIPE + + try: + output, err = bb.process.run(['lsb_release', '-a'], stderr=PIPE) + except bb.process.CmdError as exc: + return + + data = {} + for line in output.splitlines(): + try: + key, value = line.split(":\t", 1) + except ValueError: + continue + else: + data[key] = value + return data + +def distro_identifier(adjust_hook=None): + """Return a distro identifier string based upon lsb_release -ri, + with optional adjustment via a hook""" + + lsb_data = release_dict() + distro_id, release = lsb_data['Distributor ID'], lsb_data['Release'] + if adjust_hook: + distro_id, release = adjust_hook(distro_id, release) + return '{0}-{1}'.format(distro_id, release)
This code was written by Christopher Larson <chris_larson@mentor.com> and allows generation of the LSB release data based upon the lsb_release command. It also includes a helper function to generate a string representing a given distribution. Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org> ---