You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@buildstream.apache.org by gi...@apache.org on 2020/12/29 13:14:44 UTC
[buildstream] 15/16: ostree.py: Adapt to use of alias overrides
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 <jo...@codethink.co.uk>
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)