Patchwork sstate: Add detail to shared area warning

login
register
mail settings
Submitter Saul Wold
Date Oct. 2, 2012, 10 p.m.
Message ID <1349215201-30117-1-git-send-email-sgw@linux.intel.com>
Download mbox | patch
Permalink /patch/37637/
State New
Headers show

Comments

Saul Wold - Oct. 2, 2012, 10 p.m.
[YOCTO #3191]

Signed-off-by: Saul Wold <sgw@linux.intel.com>
---
 meta/classes/sstate.bbclass |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
Phil Blundell - Oct. 2, 2012, 10 p.m.
On Tue, 2012-10-02 at 15:00 -0700, Saul Wold wrote:
> -        bb.warn("The recipe is trying to install files into a shared area when those files already exist. Those files are:\n   %s" % "\n   ".join(match))
> +        bb.warn("The %s recipe is trying to install files into a shared area when those files already exist (please fix %s). Those files are:\n   %s" % (d.getVar('PN', True), d.getVar('FILE', True), "\n   ".join(match)))

That seems potentially misleading: the file that needs fixing isn't
necessarily the one that triggers this warning.  What would be ideal
would be to have it output the names of all recipes that have tried to
stage the files in question so that the user can make an informed
decision about which one ought to be putting them there.

p.
Phil Blundell - Oct. 2, 2012, 10:05 p.m.
On Tue, 2012-10-02 at 15:06 -0700, Saul Wold wrote:
> On 10/02/2012 03:00 PM, Phil Blundell wrote:
> > On Tue, 2012-10-02 at 15:00 -0700, Saul Wold wrote:
> >> -        bb.warn("The recipe is trying to install files into a shared area when those files already exist. Those files are:\n   %s" % "\n   ".join(match))
> >> +        bb.warn("The %s recipe is trying to install files into a shared area when those files already exist (please fix %s). Those files are:\n   %s" % (d.getVar('PN', True), d.getVar('FILE', True), "\n   ".join(match)))
> >
> > That seems potentially misleading: the file that needs fixing isn't
> > necessarily the one that triggers this warning.  What would be ideal
> > would be to have it output the names of all recipes that have tried to
> > stage the files in question so that the user can make an informed
> > decision about which one ought to be putting them there.
> >
> True enough, but we don't have that information at that time, but it 
> gives more information than we had before, as to which recipe was adding 
> the files, I guess if I change the wording to something like
> "verify" or "check"?

Yeah, sounds good.

p.
Saul Wold - Oct. 2, 2012, 10:06 p.m.
On 10/02/2012 03:00 PM, Phil Blundell wrote:
> On Tue, 2012-10-02 at 15:00 -0700, Saul Wold wrote:
>> -        bb.warn("The recipe is trying to install files into a shared area when those files already exist. Those files are:\n   %s" % "\n   ".join(match))
>> +        bb.warn("The %s recipe is trying to install files into a shared area when those files already exist (please fix %s). Those files are:\n   %s" % (d.getVar('PN', True), d.getVar('FILE', True), "\n   ".join(match)))
>
> That seems potentially misleading: the file that needs fixing isn't
> necessarily the one that triggers this warning.  What would be ideal
> would be to have it output the names of all recipes that have tried to
> stage the files in question so that the user can make an informed
> decision about which one ought to be putting them there.
>
True enough, but we don't have that information at that time, but it 
gives more information than we had before, as to which recipe was adding 
the files, I guess if I change the wording to something like
"verify" or "check"?

Sau!

> p.
>
>
>
>
Martin Jansa - Oct. 2, 2012, 10:11 p.m.
On Tue, Oct 02, 2012 at 11:00:53PM +0100, Phil Blundell wrote:
> On Tue, 2012-10-02 at 15:00 -0700, Saul Wold wrote:
> > -        bb.warn("The recipe is trying to install files into a shared area when those files already exist. Those files are:\n   %s" % "\n   ".join(match))
> > +        bb.warn("The %s recipe is trying to install files into a shared area when those files already exist (please fix %s). Those files are:\n   %s" % (d.getVar('PN', True), d.getVar('FILE', True), "\n   ".join(match)))
> 
> That seems potentially misleading: the file that needs fixing isn't
> necessarily the one that triggers this warning.  What would be ideal
> would be to have it output the names of all recipes that have tried to
> stage the files in question so that the user can make an informed
> decision about which one ought to be putting them there.

Maybe something like master.list was before
http://git.openembedded.org/openembedded-core/commit/?id=603daf343ad3f18c8adb799e3625ae2a18d94f56
with added recipe name, but that doesn't detect files already 
stored in sysroot directly from do_configure/do_compile etc like RP
suspects python recipe is doing in this case.

And yes it does, to use that to compile own extensions later.

do_compile:
        install -d ${STAGING_INCDIR}/python${PYTHON_MAJMIN}/
        install -d ${STAGING_LIBDIR}/python${PYTHON_MAJMIN}/config/
        install -m 0644 pyconfig.h ${STAGING_INCDIR}/python${PYTHON_MAJMIN}/
        install -m 0644 Makefile ${STAGING_LIBDIR}/python${PYTHON_MAJMIN}/config/
..


Cheers,
Richard Purdie - Oct. 2, 2012, 10:20 p.m.
On Tue, 2012-10-02 at 23:00 +0100, Phil Blundell wrote:
> On Tue, 2012-10-02 at 15:00 -0700, Saul Wold wrote:
> > -        bb.warn("The recipe is trying to install files into a shared area when those files already exist. Those files are:\n   %s" % "\n   ".join(match))
> > +        bb.warn("The %s recipe is trying to install files into a shared area when those files already exist (please fix %s). Those files are:\n   %s" % (d.getVar('PN', True), d.getVar('FILE', True), "\n   ".join(match)))
> 
> That seems potentially misleading: the file that needs fixing isn't
> necessarily the one that triggers this warning.  What would be ideal
> would be to have it output the names of all recipes that have tried to
> stage the files in question so that the user can make an informed
> decision about which one ought to be putting them there.

*if* you can get that information. The python recipe is poking things
into the sysroot outside the knowledge of sstate, then triggering a
warning. We have no way to know who put files there if it wasn't done
through sstate.

This isn't to say we shouldn't improve the message and use the sstate
manifests to find any culprits, just that we can't find an answer in all
cases.

Cheers,

Richard
Richard Purdie - Oct. 2, 2012, 10:22 p.m.
On Wed, 2012-10-03 at 00:11 +0200, Martin Jansa wrote:
> On Tue, Oct 02, 2012 at 11:00:53PM +0100, Phil Blundell wrote:
> > On Tue, 2012-10-02 at 15:00 -0700, Saul Wold wrote:
> > > -        bb.warn("The recipe is trying to install files into a shared area when those files already exist. Those files are:\n   %s" % "\n   ".join(match))
> > > +        bb.warn("The %s recipe is trying to install files into a shared area when those files already exist (please fix %s). Those files are:\n   %s" % (d.getVar('PN', True), d.getVar('FILE', True), "\n   ".join(match)))
> > 
> > That seems potentially misleading: the file that needs fixing isn't
> > necessarily the one that triggers this warning.  What would be ideal
> > would be to have it output the names of all recipes that have tried to
> > stage the files in question so that the user can make an informed
> > decision about which one ought to be putting them there.
> 
> Maybe something like master.list was before
> http://git.openembedded.org/openembedded-core/commit/?id=603daf343ad3f18c8adb799e3625ae2a18d94f56
> with added recipe name, but that doesn't detect files already 

We can list any sstate manifest files (tmp/sstate-control) also adding
that file which may or may not have a listing of it. We might as well
just grep those files and print matches.

We are not going back to a master.list file, its a performance headache.

Cheers,

Richard
McClintock Matthew-B29882 - Oct. 3, 2012, 1 a.m.
On Tue, Oct 2, 2012 at 5:22 PM, Richard Purdie
<richard.purdie@linuxfoundation.org> wrote:
> On Wed, 2012-10-03 at 00:11 +0200, Martin Jansa wrote:
>> On Tue, Oct 02, 2012 at 11:00:53PM +0100, Phil Blundell wrote:
>> > On Tue, 2012-10-02 at 15:00 -0700, Saul Wold wrote:
>> > > -        bb.warn("The recipe is trying to install files into a shared area when those files already exist. Those files are:\n   %s" % "\n   ".join(match))
>> > > +        bb.warn("The %s recipe is trying to install files into a shared area when those files already exist (please fix %s). Those files are:\n   %s" % (d.getVar('PN', True), d.getVar('FILE', True), "\n   ".join(match)))
>> >
>> > That seems potentially misleading: the file that needs fixing isn't
>> > necessarily the one that triggers this warning.  What would be ideal
>> > would be to have it output the names of all recipes that have tried to
>> > stage the files in question so that the user can make an informed
>> > decision about which one ought to be putting them there.
>>
>> Maybe something like master.list was before
>> http://git.openembedded.org/openembedded-core/commit/?id=603daf343ad3f18c8adb799e3625ae2a18d94f56
>> with added recipe name, but that doesn't detect files already
>
> We can list any sstate manifest files (tmp/sstate-control) also adding
> that file which may or may not have a listing of it. We might as well
> just grep those files and print matches.
>
> We are not going back to a master.list file, its a performance headache.

I had to do this manually recently, so this error would be very useful ;)

-M

Patch

diff --git a/meta/classes/sstate.bbclass b/meta/classes/sstate.bbclass
index 03f083e..ca50483 100644
--- a/meta/classes/sstate.bbclass
+++ b/meta/classes/sstate.bbclass
@@ -158,7 +158,7 @@  def sstate_install(ss, d):
             if realmatch:
                 match.append(f)
     if match:
-        bb.warn("The recipe is trying to install files into a shared area when those files already exist. Those files are:\n   %s" % "\n   ".join(match))
+        bb.warn("The %s recipe is trying to install files into a shared area when those files already exist (please fix %s). Those files are:\n   %s" % (d.getVar('PN', True), d.getVar('FILE', True), "\n   ".join(match)))
 
     # Write out the manifest
     f = open(manifest, "w")