Elements with an open workspace cannot be fetched
Summary
It is impossible to fetch a source when its element has its workspace open.
This is a slightly obscure use-case because the normal invocation of bst workspace open expects the source to already be fetched, but that is not required if you use --no-checkout.
Steps to reproduce
From doc/examples/autotools:
bst workspace open --no-checkout --directory hello-workspace hello.bstbst source fetch hello.bst
NOTE: If you have already fetched this source, you will need to point buildstream at an empty source cache to see this behaviour.
What is the current bug behavior?
- After the workspace is opened, but before
bst source fetchis called, hello.bst is in state "waiting" - In the logs for
bst source fetch, hello.bst's dependency (base/alpine.bst) is fetched, but not hello.bst.
What is the expected correct behavior?
- In the logs for
bst source fetch, hello.bst is fetched as well
Relevant logs and/or screenshots
jonathanmaw@fafnir:~/workspace/buildstream/buildstream/doc/examples/autotools$ bst -c buildstream.conf source fetch hello.bst
[--:--:--][][] START Fetch
[--:--:--][][] START Loading elements
[00:00:00][][] SUCCESS Loading elements
[--:--:--][][] START Resolving elements
[00:00:00][][] SUCCESS Resolving elements
[--:--:--][][] START Resolving cached state
[00:00:00][][] SUCCESS Resolving cached state
[--:--:--][][] START Checking sources
[00:00:00][][] SUCCESS Checking sources
BuildStream Version 1.3.0+1163.gc96afb86
Session Start: Monday, 07-01-2019 at 15:45:36
Project: autotools (/home/jonathanmaw/workspace/buildstream/buildstream/doc/examples/autotools)
Targets: hello.bst
User Configuration
Configuration File: /home/jonathanmaw/workspace/buildstream/buildstream/doc/examples/autotools/buildstream.conf
Log Files: /tmp/buildstream/logs
Source Mirrors: /tmp/buildstream/sources
Build Area: /tmp/buildstream/build
Artifact Cache: /tmp/buildstream/artifacts
Strict Build Plan: Yes
Maximum Fetch Tasks: 10
Maximum Build Tasks: 4
Maximum Push Tasks: 4
Maximum Network Retries: 2
Pipeline
fetch needed fc05961cf6dfded6a2818cdbc603ff91e72e18d518a6315a19b106d85f1a42e3 base/alpine.bst
waiting b713a35f5efb5035e0cf7d9968e06aad7cc5b2e1296ed5abd0c776e1d00aa64d base.bst
waiting ???????????????????????????????????????????????????????????????? hello.bst Workspace: /home/jonathanmaw/workspace/buildstream/buildstream/doc/examples/autotools/hello-workspace
===============================================================================
[--:--:--][fc05961c][fetch:base/alpine.bst ] START autotools/base-alpine/fc05961c-fetch.5868.log
[--:--:--][fc05961c][fetch:base/alpine.bst ] START Fetching https://bst-integration-test-images.ams3.cdn.digitaloceanspaces.com/integration-tests-base.v1.x86_64.tar.xz
[00:00:14][fc05961c][fetch:base/alpine.bst ] SUCCESS Fetching https://bst-integration-test-images.ams3.cdn.digitaloceanspaces.com/integration-tests-base.v1.x86_64.tar.xz
[00:00:14][fc05961c][fetch:base/alpine.bst ] SUCCESS autotools/base-alpine/fc05961c-fetch.5868.log
[00:00:15][][] SUCCESS Fetch
Pipeline Summary
Total: 3
Session: 1
Fetch Queue: processed 1, skipped 0, failed 0
Possible fixes
I gather that whether an element's source is fetched depends on whether its state shows up as fetch needed. As the element has an open workspace, it is perfectly possible to build without fetching the source.
I can see two possible solutions:
-
bst fetchwill try to fetch even if the state isn'tfetch needed. - Elements that do not have a fetched source, but do have an open workspace have a new state, and will be fetched by
bst source fetch, but won't be fetched as part of a normal build.
Other relevant information
- BuildStream version affected: /milestone %BuildStream_v1.4