This is an automated email from the ASF dual-hosted git repository. github-bot pushed a commit to branch jonathan/mirror-client-sourcedownloader-tidy in repository https://gitbox.apache.org/repos/asf/buildstream.git
commit 97f3408bbca0d095dbd50bb9cf0cca12d7a26bd5 Author: Jonathan Maw <[email protected]> AuthorDate: Fri Jun 22 15:06:59 2018 +0100 ostree.py: Adapt to use of alias overrides Because an OSTree repo may have its remote changed, the standard behaviour of using OSTree.RemoteRepoChange.ADD_IF_NOT_EXISTS isn't sufficient. --- buildstream/_ostree.py | 9 +++++++- buildstream/plugins/sources/ostree.py | 40 ++++++++++++++++++----------------- 2 files changed, 29 insertions(+), 20 deletions(-) diff --git a/buildstream/_ostree.py b/buildstream/_ostree.py index e40df5f..6c6fadd 100644 --- a/buildstream/_ostree.py +++ b/buildstream/_ostree.py @@ -535,8 +535,15 @@ def configure_remote(repo, remote, url, key_url=None): options = vd.end() try: + # If it exists, we want to change it, so ADD_IF_NOT_EXISTS is insufficient repo.remote_change(None, # Optional OSTree.Sysroot - OSTree.RepoRemoteChange.ADD_IF_NOT_EXISTS, + OSTree.RepoRemoteChange.DELETE_IF_EXISTS, + remote, # Remote name + url, # Remote url + options, # Remote options + None) # Optional Gio.Cancellable + repo.remote_change(None, # Optional OSTree.Sysroot + OSTree.RepoRemoteChange.ADD, remote, # Remote name url, # Remote url options, # Remote options diff --git a/buildstream/plugins/sources/ostree.py b/buildstream/plugins/sources/ostree.py index c77b3a7..5b03d90 100644 --- a/buildstream/plugins/sources/ostree.py +++ b/buildstream/plugins/sources/ostree.py @@ -67,11 +67,10 @@ class OSTreeSource(Source): self.node_validate(node, ['url', 'ref', 'track', 'gpg-key'] + Source.COMMON_CONFIG_KEYS) self.original_url = self.node_get_member(node, str, 'url') - self.url = self.translate_url(self.original_url) self.ref = self.node_get_member(node, str, 'ref', None) self.tracking = self.node_get_member(node, str, 'track', None) self.mirror = os.path.join(self.get_mirror_directory(), - utils.url_directory_name(self.url)) + utils.url_directory_name(self.original_url)) # (optional) Not all repos are signed. But if they are, get the gpg key self.gpg_key = self.node_get_member(node, str, 'gpg-key', None) @@ -97,32 +96,34 @@ class OSTreeSource(Source): def set_ref(self, ref, node): node['ref'] = self.ref = ref - def track(self): + def track(self, alias_override=None): # If self.tracking is not specified its' not an error, just silently return if not self.tracking: return None - self.ensure() + url = self.translate_url(self.original_url, alias_override=alias_override) + self.ensure(url) with self.timed_activity("Fetching tracking ref '{}' from origin: {}" - .format(self.tracking, self.url)): + .format(self.tracking, url)): try: _ostree.fetch(self.repo, ref=self.tracking, progress=self.progress) except OSTreeError as e: raise SourceError("{}: Failed to fetch tracking ref '{}' from origin {}\n\n{}" - .format(self, self.tracking, self.url, e)) from e + .format(self, self.tracking, url, e)) from e return _ostree.checksum(self.repo, self.tracking) - def fetch(self): - self.ensure() + def fetch(self, alias_override=None): + url = self.translate_url(self.original_url, alias_override=alias_override) + self.ensure(url) if not _ostree.exists(self.repo, self.ref): with self.timed_activity("Fetching remote ref: {} from origin: {}" - .format(self.ref, self.url)): + .format(self.ref, url)): try: _ostree.fetch(self.repo, ref=self.ref, progress=self.progress) except OSTreeError as e: raise SourceError("{}: Failed to fetch ref '{}' from origin: {}\n\n{}" - .format(self, self.ref, self.url, e)) from e + .format(self, self.ref, url, e)) from e def stage(self, directory): self.ensure() @@ -132,12 +133,12 @@ class OSTreeSource(Source): checkoutdir = os.path.join(tmpdir, 'checkout') with self.timed_activity("Staging ref: {} from origin: {}" - .format(self.ref, self.url)): + .format(self.ref, self.original_url)): try: _ostree.checkout(self.repo, checkoutdir, self.ref, user=True) except OSTreeError as e: raise SourceError("{}: Failed to checkout ref '{}' from origin: {}\n\n{}" - .format(self, self.ref, self.url, e)) from e + .format(self, self.ref, self.original_url, e)) from e # The target directory is guaranteed to exist, here we must move the # content of out checkout into the existing target directory. @@ -151,7 +152,7 @@ class OSTreeSource(Source): shutil.move(source_path, directory) except (shutil.Error, OSError) as e: raise SourceError("{}: Failed to move ostree checkout {} from '{}' to '{}'\n\n{}" - .format(self, self.url, tmpdir, directory, e)) from e + .format(self, self.original_url, tmpdir, directory, e)) from e def get_consistency(self): if self.ref is None: @@ -165,19 +166,20 @@ class OSTreeSource(Source): # # Local helpers # - def ensure(self): + def ensure(self, url=None): if not self.repo: - self.status("Creating local mirror for {}".format(self.url)) - + self.status("Creating local mirror") self.repo = _ostree.ensure(self.mirror, True) + + if url: + self.status("Configuring local mirror for {}".format(url)) gpg_key = None if self.gpg_key_path: gpg_key = 'file://' + self.gpg_key_path - try: - _ostree.configure_remote(self.repo, "origin", self.url, key_url=gpg_key) + _ostree.configure_remote(self.repo, "origin", url, key_url=gpg_key) except OSTreeError as e: - raise SourceError("{}: Failed to configure origin {}\n\n{}".format(self, self.url, e)) from e + raise SourceError("{}: Failed to configure origin {}\n\n{}".format(self, url, e)) from e def progress(self, percent, message): self.status(message)
