[yocto] [layerindex-web][PATCH 1/1] import_layer.py: add -t option for layer_type

Robert Yang liezhi.yang at windriver.com
Wed Aug 29 23:39:50 PDT 2018



On 08/30/2018 02:20 PM, Paul Eggleton wrote:
> Hi Robert
> 
> Sorry I meant to reply earlier.
> 
> I'm not especially happy with moving the constants to utils.py. Is there any
> way we can avoid that?

I will try to import models.py, but that may make things complicated.

// Robert

> 
> Thanks
> Paul
> 
> On Thursday, 30 August 2018 2:05:11 PM NZST Robert Yang wrote:
>> Hi Paul,
>>
>> Do you have any comments on this, please ?
>>
>> // Robert
>>
>> On 07/31/2018 03:57 PM, Robert Yang wrote:
>>> Hi Paul,
>>>
>>> On 07/24/2018 04:33 PM, Paul Eggleton wrote:
>>>> Hi Robert,
>>>>
>>>> On Monday, 23 July 2018 12:30:01 PM CEST Robert Yang wrote:
>>>>> Now the logic is:
>>>>> Use options.layer_type if specified, guess if not, default to 'M'.
>>>>>
>>>>> Note choices=['A', 'B', 'S', 'D', 'M', ''], the '' is for default='', we
> can't
>>>>> use default='M' here, otherwise we don't know whether the 'M' is
> specified by
>>>>> user or not, we don't guess if it is specified by user, otherwise,
> guess.
>>>>>
>>>>> Signed-off-by: Robert Yang <liezhi.yang at windriver.com>
>>>>> ---
>>>>>    layerindex/tools/import_layer.py | 18 +++++++++++++-----
>>>>>    1 file changed, 13 insertions(+), 5 deletions(-)
>>>>>
>>>>> diff --git a/layerindex/tools/import_layer.py b/layerindex/tools/
> import_layer.py
>>>>> index 2413cff..0d501f6 100755
>>>>> --- a/layerindex/tools/import_layer.py
>>>>> +++ b/layerindex/tools/import_layer.py
>>>>> @@ -189,6 +189,10 @@ def main():
>>>>>        parser.add_option("-s", "--subdir",
>>>>>                help = "Specify subdirectory",
>>>>>                action="store", dest="subdir")
>>>>> +    parser.add_option("-t", "--type",
>>>>> +            help = "Specify layer type. A: Base, B: Machine(BSP), S:
>>>>> Software, D: Distribution, M: Miscellaneous",
>>>>> +            choices=['A', 'B', 'S', 'D', 'M', ''],
>>>>> +            action="store", dest="layer_type", default='')
>>>>
>>>> If it's practical to do, could you make this part of the code use
>>>> LayerItem.LAYER_TYPE_CHOICES from models.py so that this will work
>>>> if that is extended in future? Of course that will mean initialising
> Django
>>>> earlier, I'm not sure if that will have any side-effects that we wouldn't
> want.
>>>> If you could give that a try though that would be great.
>>>
>>> I think that the easies way is move the definition of LAYER_TYPE_CHOICES
>>> to utils.py, then we can use utils.LAYER_TYPE_CHOICES in both models.py
>>> and tools/import_layer.py
>>>
>>> I've updated it in the repo:
>>>
>>>     git://git.pokylinux.org/poky-contrib rbt/li
>>>     http://git.pokylinux.org/cgit.cgi//log/?h=rbt/li
>>>
>>> commit aeb1fd6a8f10b40637121643fc7df2f17c9cd87c
>>> Author: Robert Yang <liezhi.yang at windriver.com>
>>> Date:   Mon Jul 9 15:28:10 2018 +0800
>>>
>>>       import_layer.py: add -t option for layer_type
>>>
>>>       Now the logic is:
>>>       Use options.layer_type if specified, and guess if not. Default to
> 'M'.
>>>
>>>       Note choices=['A', 'B', 'S', 'D', 'M', ''], the '' is for default='',
> we can't
>>>       use default='M' here, otherwise we don't know whether the 'M' is
> specified by
>>>       user or is the default value, we don't guess if it is specified by
> user,
>>>       otherwise, guess.
>>>
>>>       Signed-off-by: Robert Yang <liezhi.yang at windriver.com>
>>>
>>> diff --git a/layerindex/models.py b/layerindex/models.py
>>> index e5c8052..1ff653f 100644
>>> --- a/layerindex/models.py
>>> +++ b/layerindex/models.py
>>> @@ -102,14 +102,8 @@ class LayerItem(models.Model):
>>>            ('P', 'Published'),
>>>            ('X', 'No update'),
>>>        )
>>> -    LAYER_TYPE_CHOICES = (
>>> -        ('A', 'Base'),
>>> -        ('B', 'Machine (BSP)'),
>>> -        ('S', 'Software'),
>>> -        ('D', 'Distribution'),
>>> -        ('W', 'WRTemplates'),
>>> -        ('M', 'Miscellaneous'),
>>> -    )
>>> +    LAYER_TYPE_CHOICES = utils.LAYER_TYPE_CHOICES
>>> +
>>>        name = models.CharField('Layer name', max_length=40, unique=True,
>>> help_text='Name of the layer - must be unique and can only contain
> letters,
>>> numbers and dashes')
>>>        status = models.CharField(max_length=1,
> choices=LAYER_STATUS_CHOICES,
>>> default='N')
>>>        layer_type = models.CharField(max_length=1,
> choices=LAYER_TYPE_CHOICES)
>>> diff --git a/layerindex/tools/import_layer.py b/layerindex/tools/
> import_layer.py
>>> index 2413cff..5373cce 100755
>>> --- a/layerindex/tools/import_layer.py
>>> +++ b/layerindex/tools/import_layer.py
>>> @@ -178,6 +178,21 @@ def get_github_layerinfo(layer_url, username = None,
>>> password = None):
>>>
>>>        return (json_data, owner_json_data)
>>>
>>> +def get_layer_type_choices():
>>> +    """
>>> +    Return help string and choices for --type.
>>> +    """
>>> +    help_str = "Specify layer type."
>>> +    choices = []
>>> +    for i in utils.LAYER_TYPE_CHOICES:
>>> +        key, description = i
>>> +        help_str += ' %s: %s,' % (key, description)
>>> +        choices.append(key)
>>> +
>>> +    help_str = help_str.rstrip(',')
>>> +    choices.append('')
>>> +
>>> +    return (help_str, choices)
>>>
>>>    def main():
>>>        valid_layer_name = re.compile('[-\w]+$')
>>> @@ -186,9 +201,15 @@ def main():
>>>            usage = """
>>>        %prog [options] <url> [name]""")
>>>
>>> +    layer_type_help, layer_type_choices = get_layer_type_choices()
>>> +
>>>        parser.add_option("-s", "--subdir",
>>>                help = "Specify subdirectory",
>>>                action="store", dest="subdir")
>>> +    parser.add_option("-t", "--type",
>>> +            help = layer_type_help,
>>> +            choices = layer_type_choices,
>>> +            action="store", dest="layer_type", default='')
>>>        parser.add_option("-n", "--dry-run",
>>>                help = "Don't write any data back to the database",
>>>                action="store_true", dest="dryrun")
>>> @@ -263,7 +284,6 @@ def main():
>>>                layer = LayerItem()
>>>                layer.name = layer_name
>>>                layer.status = 'P'
>>> -            layer.layer_type = 'M'
>>>                layer.summary = 'tempvalue'
>>>                layer.description = layer.summary
>>>
>>> @@ -349,11 +369,18 @@ def main():
>>>
>>>
>>>                    logger.info('Creating layer %s' % layer.name)
>>> -                # Guess layer type
>>> -                if glob.glob(os.path.join(layerdir, 'conf/distro/
> *.conf')):
>>> +                # Guess layer type if not specified
>>> +                if options.layer_type:
>>> +                    layer.layer_type = options.layer_type
>>> +                elif layer.name in ['openembedded-core', 'meta-oe']:
>>> +                    layer.layer_type = 'A'
>>> +                elif glob.glob(os.path.join(layerdir, 'conf/distro/
> *.conf')):
>>>                        layer.layer_type = 'D'
>>>                    elif glob.glob(os.path.join(layerdir, 'conf/machine/
> *.conf')):
>>>                        layer.layer_type = 'B'
>>> +                else:
>>> +                    layer.layer_type = 'M'
>>> +
>>>                    layer.save()
>>>                    layerbranch = LayerBranch()
>>>                    layerbranch.layer = layer
>>> @@ -411,11 +438,9 @@ def main():
>>>
>>>                    if layer.name == 'openembedded-core':
>>>                        layer.summary = 'Core metadata'
>>> -                    layer.layer_type = 'A'
>>>                    elif layer.name == 'meta-oe':
>>>                        layer.summary = 'Additional shared OE metadata'
>>>                        layer.description = layer.summary
>>> -                    layer.layer_type = 'A'
>>>
>>>                    if maintainers:
>>>                        maint_re = re.compile(r'^"?([^"@$<>]+)"? *<([^<> ]
> +)>[
>>> -]*(.+)?$')
>>> diff --git a/layerindex/utils.py b/layerindex/utils.py
>>> index 861a841..5f44754 100644
>>> --- a/layerindex/utils.py
>>> +++ b/layerindex/utils.py
>>> @@ -15,6 +15,15 @@ import fcntl
>>>    import signal
>>>    import codecs
>>>
>>> +LAYER_TYPE_CHOICES = (
>>> +    ('A', 'Base'),
>>> +    ('B', 'Machine (BSP)'),
>>> +    ('S', 'Software'),
>>> +    ('D', 'Distribution'),
>>> +    ('W', 'WRTemplates'),
>>> +    ('M', 'Miscellaneous'),
>>> +)
>>> +
>>>    def get_branch(branchname):
>>>        from layerindex.models import Branch
>>>        res = list(Branch.objects.filter(name=branchname)[:1])
>>>
>>> // Robert
>>>>
>>>> Thanks,
>>>> Paul
>>>>
>>
> 
> 


More information about the yocto mailing list