config: Allow a default refspec to be specified

Also update config file version to 9 due to this format change.

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:38 +02:00 committed by Jan Kiszka
parent f678b24611
commit 2260189fda
6 changed files with 47 additions and 3 deletions

View File

@ -75,3 +75,13 @@ Added
- ``patches`` property to ``repos`` to be able to apply additional patches to
the repo.
Version 9
---------
Added
~~~~~
- ``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 is not defined for a given repository.

View File

@ -310,6 +310,22 @@ Configuration reference
* ``file``: string [required]
The path to the file relative to the root of the repository.
* ``defaults``: dict [optional]
This key can be used to set default values for various properties.
This may help you to avoid repeating the same property assignment in
multiple places if, for example, you wish to use the same refspec for
all repositories.
* ``repos``: dict [optional]
This key can contain default values for some repository properties.
If a default value is set for a repository property it may still be
overridden by setting the same property to a different value in a given
repository.
* ``refspec``: string [optional]
Sets the default ``refspec`` property applied to all repositories that
do not override this.
* ``machine``: string [optional]
Contains the value of the ``MACHINE`` variable that is written into the
``local.conf``. Can be overwritten by the ``KAS_MACHINE`` environment

View File

@ -28,5 +28,5 @@ __copyright__ = 'Copyright (c) Siemens AG, 2017-2018'
__version__ = '2.1.1'
# Please update docs/format-changelog.rst when changing the file version.
__file_version__ = 8
__file_version__ = 9
__compatible_file_version__ = 1

View File

@ -83,12 +83,14 @@ class Config:
and the `Repo` instances as values.
"""
repo_config_dict = self._config.get('repos', {})
repo_defaults = self._config.get('defaults', {}).get('repos', {})
repo_dict = {}
repo_fallback_path = os.path.dirname(self.filenames[0])
for repo in repo_config_dict:
repo_config_dict[repo] = repo_config_dict[repo] or {}
repo_dict[repo] = Repo.factory(repo,
repo_config_dict[repo],
repo_defaults,
repo_fallback_path)
return repo_dict

View File

@ -72,6 +72,21 @@ CONFIGSCHEMA = {
},
},
},
'defaults': {
'type': 'object',
'additionalProperties': False,
'properties': {
'repos': {
'type': 'object',
'additionalProperties': False,
'properties': {
'refspec': {
'type': 'string',
},
},
},
},
},
'machine': {
'type': 'string',
},

View File

@ -78,7 +78,7 @@ class Repo:
self.path, self._layers)
@staticmethod
def factory(name, repo_config, repo_fallback_path):
def factory(name, repo_config, repo_defaults, repo_fallback_path):
"""
Returns a Repo instance depending on params.
"""
@ -99,7 +99,8 @@ class Repo:
url = repo_config.get('url', None)
name = repo_config.get('name', name)
typ = repo_config.get('type', 'git')
refspec = repo_config.get('refspec', None)
refspec = repo_config.get('refspec',
repo_defaults.get('refspec', None))
path = repo_config.get('path', None)
disable_operations = False