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

Robert Yang liezhi.yang at windriver.com
Tue Jul 31 00:57:27 PDT 2018


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