add support to override refspec of repos
This patch adds the top-level `overrides` entry, which is used to override (or pin) the refspec of repositories. The main difference to a direct override is that this logic only applies to repos that are already defined. By that, a superset of all repos can be added to this entry (similar to a global lockfile), but only the currently active ones are affected. A new top-level keyword is required because everything below the "repos" keyword is potentially defined by "default" values. For the locking mechanism, a clear separation between overrides (only override if existing) and definitions is required to be able to define a global lockfile with all possible repos, while just defining some repos. Proposed-by: Ross Burton <ross@burtonini.com> Signed-off-by: Felix Moessbauer <felix.moessbauer@siemens.com> [Jan: also bump __file_version__] Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
This commit is contained in:
parent
6131038c00
commit
3e0dd10416
@ -130,3 +130,11 @@ Added
|
|||||||
|
|
||||||
- Variables used in the ``env`` section can now be assigned 'None' as value. In
|
- Variables used in the ``env`` section can now be assigned 'None' as value. In
|
||||||
this case the variables are only exported to the bb env whitelist.
|
this case the variables are only exported to the bb env whitelist.
|
||||||
|
|
||||||
|
Version 14
|
||||||
|
----------
|
||||||
|
|
||||||
|
Added
|
||||||
|
~~~~~
|
||||||
|
|
||||||
|
- The ``overrides`` top-level entry can be used to pin floating repo refspecs.
|
||||||
|
@ -455,6 +455,22 @@ Configuration reference
|
|||||||
* ``path``: string [required]
|
* ``path``: string [required]
|
||||||
The path to one patch file or a quilt formatted patchset directory.
|
The path to one patch file or a quilt formatted patchset directory.
|
||||||
|
|
||||||
|
* ``overrides``: dict [optional]
|
||||||
|
This object provides a mechanism to override kas configuration items
|
||||||
|
without defining them. By that, only items that already exist are
|
||||||
|
overridden. Note, that all entries below this key are reserved for
|
||||||
|
auto-generation using kas plugins. Do not manually add entries.
|
||||||
|
|
||||||
|
* ``repos``: dict [optional]
|
||||||
|
Mapps to the top-level ``repos`` entry.
|
||||||
|
|
||||||
|
* ``<repo-id>``: dict [optional]
|
||||||
|
Mapps to the ``<repo-id>`` entry.
|
||||||
|
|
||||||
|
* ``refspec``: string [optional]
|
||||||
|
Pinned refspec which overrides the ``refspec`` of the corresponding
|
||||||
|
repo. This refspec must be resolved (i.e. no branch or tag name).
|
||||||
|
|
||||||
* ``bblayers_conf_header``: dict [optional]
|
* ``bblayers_conf_header``: dict [optional]
|
||||||
This contains strings that should be added to the ``bblayers.conf`` before
|
This contains strings that should be added to the ``bblayers.conf`` before
|
||||||
any layers are included.
|
any layers are included.
|
||||||
|
@ -28,5 +28,5 @@ __copyright__ = 'Copyright (c) Siemens AG, 2017-2020'
|
|||||||
__version__ = '3.2.3'
|
__version__ = '3.2.3'
|
||||||
|
|
||||||
# Please update docs/format-changelog.rst when changing the file version.
|
# Please update docs/format-changelog.rst when changing the file version.
|
||||||
__file_version__ = 13
|
__file_version__ = 14
|
||||||
__compatible_file_version__ = 1
|
__compatible_file_version__ = 1
|
||||||
|
@ -104,11 +104,14 @@ class Config:
|
|||||||
`name`.
|
`name`.
|
||||||
"""
|
"""
|
||||||
repo_defaults = self._config.get('defaults', {}).get('repos', {})
|
repo_defaults = self._config.get('defaults', {}).get('repos', {})
|
||||||
|
overrides = self._config.get('overrides', {}) \
|
||||||
|
.get('repos', {}).get(name, {})
|
||||||
config = self.get_repos_config()[name] or {}
|
config = self.get_repos_config()[name] or {}
|
||||||
return Repo.factory(name,
|
return Repo.factory(name,
|
||||||
config,
|
config,
|
||||||
repo_defaults,
|
repo_defaults,
|
||||||
self.top_repo_path)
|
self.top_repo_path,
|
||||||
|
overrides)
|
||||||
|
|
||||||
def _get_repo_dict(self):
|
def _get_repo_dict(self):
|
||||||
"""
|
"""
|
||||||
|
@ -90,7 +90,8 @@ class Repo:
|
|||||||
self.path, self._layers)
|
self.path, self._layers)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def factory(name, repo_config, repo_defaults, repo_fallback_path):
|
def factory(name, repo_config, repo_defaults, repo_fallback_path,
|
||||||
|
repo_overrides={}):
|
||||||
"""
|
"""
|
||||||
Returns a Repo instance depending on params.
|
Returns a Repo instance depending on params.
|
||||||
"""
|
"""
|
||||||
@ -119,8 +120,8 @@ class Repo:
|
|||||||
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')
|
||||||
refspec = repo_config.get('refspec',
|
refspec = repo_overrides.get('refspec', repo_config.get('refspec',
|
||||||
repo_defaults.get('refspec', None))
|
repo_defaults.get('refspec', None)))
|
||||||
if refspec is None and url is not None:
|
if refspec is None and url is not None:
|
||||||
logging.error('No refspec specified for repository "%s". This is '
|
logging.error('No refspec specified for repository "%s". This is '
|
||||||
'only allowed for local repositories.', name)
|
'only allowed for local repositories.', name)
|
||||||
|
@ -89,6 +89,24 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"overrides": {
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false,
|
||||||
|
"properties": {
|
||||||
|
"repos": {
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false,
|
||||||
|
"properties": {
|
||||||
|
"refspec" : {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"machine": {
|
"machine": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
|
Loading…
Reference in New Issue
Block a user