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.y...@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.y...@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.y...@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




--
_______________________________________________
yocto mailing list
yocto@yoctoproject.org
https://lists.yoctoproject.org/listinfo/yocto

Reply via email to