in src/buildstream_plugins/sources/git.py [0:0]
def configure(self, node):
ref = node.get_str("ref", None)
config_keys = [
"url",
"track",
"ref",
"submodules",
"checkout-submodules",
"ref-format",
"track-tags",
"tags",
]
node.validate_keys(config_keys + Source.COMMON_CONFIG_KEYS)
tags_node = node.get_sequence("tags", [])
for tag_node in tags_node:
tag_node.validate_keys(["tag", "commit", "annotated"])
tags = self._load_tags(node)
self.track_tags = node.get_bool("track-tags", default=False)
self.original_url = node.get_str("url")
self.mirror = GitMirror(self, "", self.original_url, ref, tags=tags, primary=True)
self.tracking = node.get_str("track", None)
self.ref_format = node.get_enum("ref-format", _RefFormat, _RefFormat.SHA1)
# At this point we now know if the source has a ref and/or a track.
# If it is missing both then we will be unable to track or build.
if self.mirror.ref is None and self.tracking is None:
raise SourceError(
"{}: Git sources require a ref and/or track".format(self),
reason="missing-track-and-ref",
)
self.checkout_submodules = node.get_bool("checkout-submodules", default=True)
# Parse a dict of submodule overrides, stored in the submodule_overrides
# and submodule_checkout_overrides dictionaries.
self.submodule_overrides = {}
self.submodule_checkout_overrides = {}
modules = node.get_mapping("submodules", {})
for path in modules.keys():
submodule = modules.get_mapping(path)
url = submodule.get_str("url", None)
# Make sure to mark all URLs that are specified in the configuration
if url:
self.mark_download_url(url, primary=False)
self.submodule_overrides[path] = url
if "checkout" in submodule:
checkout = submodule.get_bool("checkout")
self.submodule_checkout_overrides[path] = checkout
self.mark_download_url(self.original_url)