Commit 2acfbade authored by bst-marge-bot's avatar bst-marge-bot

Merge branch 'tristan/fix-non-strict-push' into 'master'

Fix non strict push

Closes #990

See merge request !1290
parents b9eec0ca 188c0983
Pipeline #56934152 failed with stage
in 3 minutes and 26 seconds
......@@ -441,6 +441,20 @@ class Stream():
self._message(MessageType.INFO, "Attempting to fetch missing artifact buildtrees")
# FIXME: This hack should be removed as a result of refactoring
# Element._update_state()
# This workaround marks all dependencies of all selected elements as
# "pulled" before trying to push.
# Instead of lying to the elements and telling them they have already
# been pulled, we should have something more consistent with how other
# state bits are handled; and explicitly tell the elements that they
# need to be pulled with something like Element._schedule_pull().
for element in elements:
push_queue = ArtifactPushQueue(self._scheduler)
......@@ -454,3 +454,58 @@ def test_build_remote_option(caplog, cli, tmpdir, datafiles):
assert_shared(cli, sharecli, project, element_name)
assert_not_shared(cli, shareuser, project, element_name)
assert_not_shared(cli, shareproject, project, element_name)
# This test ensures that we are able to run `bst artifact push` in non strict mode
# and that we do not crash when trying to push elements even though they
# have not yet been pulled.
# This is a regression test for issue #990
@pytest.mark.parametrize("buildtrees", [('buildtrees'), ('normal')])
def test_push_no_strict(caplog, cli, tmpdir, datafiles, buildtrees):
project = os.path.join(datafiles.dirname, datafiles.basename)
with create_artifact_share(os.path.join(str(tmpdir), 'artifactshare')) as share:
'artifacts': {
'url': share.repo,
'push': True
'projects': {
'test': {
'strict': False
# First get us a build
result =, args=['build', 'target.bst'])
# Now cause one of the dependenies to change their cache key
# Here we just add a file, causing the strong cache key of the
# import-bin.bst element to change due to the local files it
# imports changing.
path = os.path.join(project, 'files', 'bin-files', 'newfile')
with open(path, 'w') as f:
f.write("PONY !")
# Now build again after having changed the dependencies
result =, args=['build', 'target.bst'])
# Now run `bst artifact push`.
# Optionally try it with --pull-buildtrees, since this causes
# a pull queue to be added to the `push` command, the behavior
# around this is different.
args = []
if buildtrees == 'buildtrees':
args += ['--pull-buildtrees']
args += ['artifact', 'push', '--deps', 'all', 'target.bst']
result =, args=args)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment