[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 19:05:11 PDT 2018


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