config: Allow a default repo to be specified for patches

Signed-off-by: Paul Barker <pbarker@konsulko.com>
[Jan: style fix]
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
This commit is contained in:
Paul Barker 2020-07-04 09:53:39 +02:00 committed by Jan Kiszka
parent 2260189fda
commit b107a60118
4 changed files with 37 additions and 8 deletions

View File

@ -83,5 +83,6 @@ Added
~~~~~ ~~~~~
- ``defaults`` key can now be used to set a default value for the repository - ``defaults`` key can now be used to set a default value for the repository
property ``refspec``. This default value will be used if the appropriate property ``refspec`` and the repository patch property ``repo``. These
property is not defined for a given repository. default values will be used if the appropriate properties are not defined
for a given repository or patch.

View File

@ -326,6 +326,16 @@ Configuration reference
Sets the default ``refspec`` property applied to all repositories that Sets the default ``refspec`` property applied to all repositories that
do not override this. do not override this.
* ``patches``: dict [optional]
This key can contain default values for some repository patch
properties. If a default value is set for a patch property it may
still be overridden by setting the same property to a different value
in a given patch.
* ``repo``: string [optional]
Sets the default ``repo`` property applied to all repository
patches that do not override this.
* ``machine``: string [optional] * ``machine``: string [optional]
Contains the value of the ``MACHINE`` variable that is written into the Contains the value of the ``MACHINE`` variable that is written into the
``local.conf``. Can be overwritten by the ``KAS_MACHINE`` environment ``local.conf``. Can be overwritten by the ``KAS_MACHINE`` environment

View File

@ -83,6 +83,15 @@ CONFIGSCHEMA = {
'refspec': { 'refspec': {
'type': 'string', 'type': 'string',
}, },
'patches': {
'type': 'object',
'additionalProperties': False,
'properties': {
'repo': {
'type': 'string',
},
},
},
}, },
}, },
}, },
@ -164,7 +173,7 @@ CONFIGSCHEMA = {
{ {
'type': 'object', 'type': 'object',
'additionalProperties': False, 'additionalProperties': False,
'required': ['repo', 'path'], 'required': ['path'],
'properties': { 'properties': {
'repo': { 'repo': {
'type': 'string' 'type': 'string'

View File

@ -25,6 +25,7 @@
import re import re
import os import os
import sys
import logging import logging
from urllib.parse import urlparse from urllib.parse import urlparse
from .context import get_context from .context import get_context
@ -87,15 +88,23 @@ class Repo:
str(laydict[x]).lower() not in str(laydict[x]).lower() not in
['disabled', 'excluded', 'n', 'no', '0', 'false'], ['disabled', 'excluded', 'n', 'no', '0', 'false'],
layers_dict)) layers_dict))
default_patch_repo = repo_defaults.get('patches', {}).get('repo', None)
patches_dict = repo_config.get('patches', {}) patches_dict = repo_config.get('patches', {})
patches = list( patches = []
{ for p in sorted(patches_dict):
if not patches_dict[p]:
continue
this_patch = {
'id': p, 'id': p,
'repo': patches_dict[p]['repo'], 'repo': patches_dict[p].get('repo', default_patch_repo),
'path': patches_dict[p]['path'], 'path': patches_dict[p]['path'],
} }
for p in sorted(patches_dict) if this_patch['repo'] is None:
if patches_dict[p]) logging.error('No repo specified for patch entry "%s" and no '
'default repo specified.', p)
sys.exit(1)
patches.append(this_patch)
url = repo_config.get('url', None) url = repo_config.get('url', None)
name = repo_config.get('name', name) name = repo_config.get('name', name)
typ = repo_config.get('type', 'git') typ = repo_config.get('type', 'git')