Tiago Gomes pushed to branch tiagogomes/issue-577-backport at BuildStream / buildstream
Commits:
-
de73cc0b
by Valentin David at 2018-08-16T13:37:06Z
-
43f4ffba
by Valentin David at 2018-08-16T14:36:49Z
-
f15ff456
by Tiago Gomes at 2018-08-16T15:00:34Z
3 changed files:
- buildstream/_artifactcache/cascache.py
- buildstream/plugins/sources/ostree.py
- tests/frontend/mirror.py
Changes:
| ... | ... | @@ -24,6 +24,7 @@ import os |
| 24 | 24 |
import signal
|
| 25 | 25 |
import stat
|
| 26 | 26 |
import tempfile
|
| 27 |
+import errno
|
|
| 27 | 28 |
from urllib.parse import urlparse
|
| 28 | 29 |
|
| 29 | 30 |
import grpc
|
| ... | ... | @@ -81,7 +82,8 @@ class CASCache(ArtifactCache): |
| 81 | 82 |
|
| 82 | 83 |
tree = self.resolve_ref(ref, update_mtime=True)
|
| 83 | 84 |
|
| 84 |
- dest = os.path.join(self.extractdir, element._get_project().name, element.normal_name, tree.hash)
|
|
| 85 |
+ dest = os.path.join(self.extractdir, element._get_project().name,
|
|
| 86 |
+ element.normal_name, tree.hash)
|
|
| 85 | 87 |
if os.path.isdir(dest):
|
| 86 | 88 |
# artifact has already been extracted
|
| 87 | 89 |
return dest
|
| ... | ... | @@ -99,7 +101,7 @@ class CASCache(ArtifactCache): |
| 99 | 101 |
#
|
| 100 | 102 |
# If rename fails with these errors, another process beat
|
| 101 | 103 |
# us to it so just ignore.
|
| 102 |
- if e.errno not in [os.errno.ENOTEMPTY, os.errno.EEXIST]:
|
|
| 104 |
+ if e.errno not in [errno.ENOTEMPTY, errno.EEXIST]:
|
|
| 103 | 105 |
raise ArtifactError("Failed to extract artifact for ref '{}': {}"
|
| 104 | 106 |
.format(ref, e)) from e
|
| 105 | 107 |
|
| ... | ... | @@ -71,7 +71,7 @@ class OSTreeSource(Source): |
| 71 | 71 |
self.ref = self.node_get_member(node, str, 'ref', None)
|
| 72 | 72 |
self.tracking = self.node_get_member(node, str, 'track', None)
|
| 73 | 73 |
self.mirror = os.path.join(self.get_mirror_directory(),
|
| 74 |
- utils.url_directory_name(self.url))
|
|
| 74 |
+ utils.url_directory_name(self.original_url))
|
|
| 75 | 75 |
|
| 76 | 76 |
# (optional) Not all repos are signed. But if they are, get the gpg key
|
| 77 | 77 |
self.gpg_key_path = None
|
| ... | ... | @@ -104,10 +104,11 @@ class OSTreeSource(Source): |
| 104 | 104 |
return None
|
| 105 | 105 |
|
| 106 | 106 |
self.ensure()
|
| 107 |
+ remote_name = self.ensure_remote(self.url)
|
|
| 107 | 108 |
with self.timed_activity("Fetching tracking ref '{}' from origin: {}"
|
| 108 | 109 |
.format(self.tracking, self.url)):
|
| 109 | 110 |
try:
|
| 110 |
- _ostree.fetch(self.repo, ref=self.tracking, progress=self.progress)
|
|
| 111 |
+ _ostree.fetch(self.repo, remote=remote_name, ref=self.tracking, progress=self.progress)
|
|
| 111 | 112 |
except OSTreeError as e:
|
| 112 | 113 |
raise SourceError("{}: Failed to fetch tracking ref '{}' from origin {}\n\n{}"
|
| 113 | 114 |
.format(self, self.tracking, self.url, e)) from e
|
| ... | ... | @@ -116,11 +117,12 @@ class OSTreeSource(Source): |
| 116 | 117 |
|
| 117 | 118 |
def fetch(self):
|
| 118 | 119 |
self.ensure()
|
| 120 |
+ remote_name = self.ensure_remote(self.url)
|
|
| 119 | 121 |
if not _ostree.exists(self.repo, self.ref):
|
| 120 | 122 |
with self.timed_activity("Fetching remote ref: {} from origin: {}"
|
| 121 | 123 |
.format(self.ref, self.url)):
|
| 122 | 124 |
try:
|
| 123 |
- _ostree.fetch(self.repo, ref=self.ref, progress=self.progress)
|
|
| 125 |
+ _ostree.fetch(self.repo, remote=remote_name, ref=self.ref, progress=self.progress)
|
|
| 124 | 126 |
except OSTreeError as e:
|
| 125 | 127 |
raise SourceError("{}: Failed to fetch ref '{}' from origin: {}\n\n{}"
|
| 126 | 128 |
.format(self, self.ref, self.url, e)) from e
|
| ... | ... | @@ -171,14 +173,22 @@ class OSTreeSource(Source): |
| 171 | 173 |
self.status("Creating local mirror for {}".format(self.url))
|
| 172 | 174 |
|
| 173 | 175 |
self.repo = _ostree.ensure(self.mirror, True)
|
| 174 |
- gpg_key = None
|
|
| 175 |
- if self.gpg_key_path:
|
|
| 176 |
- gpg_key = 'file://' + self.gpg_key_path
|
|
| 177 | 176 |
|
| 178 |
- try:
|
|
| 179 |
- _ostree.configure_remote(self.repo, "origin", self.url, key_url=gpg_key)
|
|
| 180 |
- except OSTreeError as e:
|
|
| 181 |
- raise SourceError("{}: Failed to configure origin {}\n\n{}".format(self, self.url, e)) from e
|
|
| 177 |
+ def ensure_remote(self, url):
|
|
| 178 |
+ if self.original_url == self.url:
|
|
| 179 |
+ remote_name = 'origin'
|
|
| 180 |
+ else:
|
|
| 181 |
+ remote_name = utils.url_directory_name(url)
|
|
| 182 |
+ |
|
| 183 |
+ gpg_key = None
|
|
| 184 |
+ if self.gpg_key_path:
|
|
| 185 |
+ gpg_key = 'file://' + self.gpg_key_path
|
|
| 186 |
+ |
|
| 187 |
+ try:
|
|
| 188 |
+ _ostree.configure_remote(self.repo, remote_name, url, key_url=gpg_key)
|
|
| 189 |
+ except OSTreeError as e:
|
|
| 190 |
+ raise SourceError("{}: Failed to configure origin {}\n\n{}".format(self, self.url, e)) from e
|
|
| 191 |
+ return remote_name
|
|
| 182 | 192 |
|
| 183 | 193 |
def progress(self, percent, message):
|
| 184 | 194 |
self.status(message)
|
| ... | ... | @@ -466,10 +466,6 @@ def test_mirror_track_upstream_absent(cli, tmpdir, datafiles, kind): |
| 466 | 466 |
@pytest.mark.datafiles(DATA_DIR)
|
| 467 | 467 |
@pytest.mark.parametrize("kind", [(kind) for kind in ALL_REPO_KINDS])
|
| 468 | 468 |
def test_mirror_from_includes(cli, tmpdir, datafiles, kind):
|
| 469 |
- if kind == 'ostree':
|
|
| 470 |
- # FIXME: Mirroring fallback fails with ostree
|
|
| 471 |
- pytest.skip("Bug #538 - ostree mirror fallback breaks assertion")
|
|
| 472 |
- |
|
| 473 | 469 |
bin_files_path = os.path.join(str(datafiles), 'files', 'bin-files', 'usr')
|
| 474 | 470 |
upstream_repodir = os.path.join(str(tmpdir), 'upstream')
|
| 475 | 471 |
mirror_repodir = os.path.join(str(tmpdir), 'mirror')
|
