[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