[bitbake-devel] [PATCH 3/7] Hob: Make layers define in bblayers.conf as default
Wang, Shane
shane.wang at intel.com
Sun Apr 8 02:00:03 UTC 2012
Is that in Josh's hand or Dongxiao's hand?
There is a bug https://bugzilla.yoctoproject.org/show_bug.cgi?id=2254 reported by QA, which is related to this issue.
I assigned to Josh temporarily. Please assign to the right owner if I am wrong.
--
Shane
Joshua Lock wrote on 2012-04-04:
>
>
> On 02/04/12 05:55, Richard Purdie wrote:
>> On Sun, 2012-04-01 at 13:35 +0800, Xu, Dongxiao wrote:
>>> On Sat, 2012-03-31 at 16:51 +0100, Richard Purdie wrote:
>>>> On Sat, 2012-03-31 at 13:29 +0800, Xu, Dongxiao wrote:
>>>>> On Sat, 2012-03-31 at 08:32 +0800, Xu, Dongxiao wrote:
>>>>>> On Fri, 2012-03-30 at 09:10 -0700, Joshua Lock wrote:
>>>>>>>
>>>>>>> On 30/03/12 05:01, Dongxiao Xu wrote:
>>>>>>>> For layers defined in bblayers.conf, we treat them as default layers
>>>>>>>> and users are not allowed to remove them.
>>>>>>>
>>>>>>> Can you explain the rationale behind this change? I see what you're
>>>>>>> doing but it's not entirely clear why.
>>>>>>>
>>>>>>> I think this is a bad idea. Early on in the design of Hob we
>>>>>>> decided we didn't want configuration made for non-Hob builds to
>>>>>>> affect builds made with Hob, and vice versa.
>>>>>>
>>>>>> The issue I am going to solve is that, with current local.conf
>>>>>> (DISTRO="poky") and bblayers.conf (bblayers="meta meta-yocto"), we
>>>>>> are not able to delete the meta-yocto layer in Hob since it will
>>>>>> meet local.conf parsing error since it could not find where "poky"
>>>>>> is defined.
>>>>>>
>>>>>> This patch is to set those layers define in bblayers.conf as
>>>>>> default layers and they could not be removed. For example, in Yocto
>>>>>> Project, "meta", "meta-yocto", and "meta-hob" are not removable.
>>>>>> For pure OE-Core environment, "meta" and "meta-hob" are not
>>>>>> removable.
>>>>>>
>>>>>
>>>>> Just discussed with Josh on this problem.
>>>>>
>>>>> He suggested that meta-yocto should be still removable. If user met the
>>>>> error after deleting the meta-yocto layer, he/she should change the
>>>>> DISTRO setting in "Setting" dialog to "defaultsetup".
>>>>>
>>>>> Current code to handle the distro setting is:
>>>>>
>>>>> def set_distro(self, distro):
>>>>> if distro != "defaultsetup":
>>>>> self.server.runCommand(["setVariable", "DISTRO",
> distro])
>>>>>
>>>>> Therefore even if user has selected defaultsetup, it will not set any
>>>>> value to bitbake server, and then DISTRO ?= "poky" will take effect
>>>>> while parsing local.conf.
>>>>>
>>>>> To make DISTRO ?= "poky" doesn't take effect, we need to change the
>>>>> code to be:
>>>>>
>>>>> def set_distro(self, distro):
>>>>> if distro == "defaultsetup":
>>>>> distro = ""
>>>>> self.server.runCommand(["setVariable", "DISTRO", distro])
>>>>> However Richard ever worried about this approach.
>>>>> See:
>>>>>
>>>>> http://lists.linuxtogo.org/pipermail/bitbake-devel/2012-March/002438.
>>>>> html
>>>>>
>>>>> In summary, there are two solutions now:
>>>>>
>>>>> 1) Set those layers defined in bblayers.conf as default, and don't allow
>>>>> users to delete them, like this [PATCH 3/7] does.
>>>>> 2) Use the empty string "" as the value of DISTRO variable for
>>>>> "defaultsetup", and set this value before parsing configuration files,
>>>>> making the DISTRO ?= "poky" in local.conf doesn't take effect.
>>>>>
>>>>> Welcome for comments on this issue.
>>>>
>>>> I'd be happy if you change the above code to do:
>>>>
>>>> self.server.runCommand(["deleteVariable", "DISTRO"])
>>>> which is subtly different but consistent with what we really want. I
>>>> have no idea if we have a deleteVariable command but if we don't, we
>>>> should add one.
>>>
>>> I ever tried this approach with the following patch, however it didn't
>>> work. The setting of DISTRO ?= "poky" will still take effect.
>>>
>>> It seems that delVar(DISTRO) is different from setting DISTRO="".
>>>
>>>
>>> diff --git a/bitbake/lib/bb/command.py b/bitbake/lib/bb/command.py
>>> index 73aaca0..a7b41ce 100644
>>> --- a/bitbake/lib/bb/command.py
>>> +++ b/bitbake/lib/bb/command.py
>>> @@ -160,6 +160,13 @@ class CommandsSync:
>>> value = params[1]
>>> command.cooker.configuration.data.setVar(varname, value)
>>> + def delVariable(self, command, params):
>>> + """
>>> + Delete the variable in configuration.data
>>> + """
>>> + varname = params[0]
>>> + command.cooker.configuration.data.delVar(varname)
>>> +
>>> def initCooker(self, command, params):
>>> """
>>> Init the cooker to initial state with nothing parsed
>>> diff --git a/bitbake/lib/bb/ui/crumbs/hobeventhandler.py
>>> b/bitbake/lib/bb/ui/crumbs/hobeventhandler.py
>>> index 8909e01..d236a72 100644
>>> --- a/bitbake/lib/bb/ui/crumbs/hobeventhandler.py
>>> +++ b/bitbake/lib/bb/ui/crumbs/hobeventhandler.py
>>> @@ -265,7 +265,9 @@ class HobHandler(gobject.GObject):
>>> self.server.runCommand(["setVariable", "IMAGE_FSTYPES",
>>> image_fstypes])
>>>
>>> def set_distro(self, distro):
>>> - if distro != "defaultsetup":
>>> + if distro == "defaultsetup":
>>> + self.server.runCommand(["delVariable", "DISTRO"])
>>> + else:
>>> self.server.runCommand(["setVariable", "DISTRO",
> distro])
>>>
>>> def set_package_format(self, format):
>>
>> Thinking more about this, I think I can see a pattern in the issues I'm
>> seeing patches for from you and Shane.
>>
>> I think you have things setup such that you do:
>>
>> a) Set variables
>> b) Parse configuration
>>
>> And the problem is that if anywhere in the configuration, something like
>> A = "B" happens, the value of A is overridden if you set it in A. This
>> also would apply if you run delVar, then the code does a ?= since it
>> will get reset.
>>
>> The trouble is you have to do this since you need to set MACHINE and
>> DISTRO in advance.
>>
>> I'm starting to think you may have to have hob have its own empty
>> "local.conf" which overrides the user provided one. You would parse the
>> user's local.conf separately and extract any settings into hob as needed
>> though (pass through all values except the ones you know need specific
>> values from the UI).
>>
>> Its ugly but I can't see any better way to handle this situation that
>> will make sense to the user and give the correct user experience. As I
>> said to Shane elsewhere, we cannot force the local.conf file to be
>> written in a certain way, just to suit the requirements of hob.
>
> I wrote a quick hack this afternoon to do "settings import" from a users
> local.conf and whilst it is not a great solution it did spark some
> real-time conversation between Richard and I.
>
> In an attempt at summary, it should be possible to have Hob:
> * call bb.parse.handle() to load the user's settings from local.conf
> * add appropriate values to the data store based on the parsed
> local.conf values and any appropriate hob settings
> * parse as normal to fully populate the data store
>
> Cheers,
> Joshua
More information about the bitbake-devel
mailing list