| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
| |
Added app.print_error() to consistently print an error while
running the pipeline stuff.
Also make bst push & pull commands more consistent with
the rest, and print the summary at the end as expected.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
o Now print the message itself on the same line in place of the abbreviated log file
o When reading back the last lines of the log file, prefix that
with an informative message about whence the log lines come,
showing the full unabbreviated log file.
o Fixed the behavior of read_last_lines() so that it works as
intended, problems were:
- Was prepending an additional newline when the log contains
more lines than we want to print
- Was not printing anything at all in the case we want to
print more lines than exist in the log
|
| |
|
| |
|
|
|
|
|
|
|
| |
Now any BuildStream exception can potentially add detail to
the errors they raise.
Allow detail strings already in PluginError()
|
|
|
|
|
| |
Dont make the ERROR message explicitly anymore, leave that
to the frontend to sort out.
|
| |
|
|
|
|
|
|
|
| |
This is already problematic as this particular error is
reported but fails to fail the session correctly.
Documented this in issue #187
|
|
|
|
|
|
|
|
|
|
| |
using it.
Errors are fatal, as such plugins must raise either SourceError() or ElementError().
This method was never used in plugins so far, lets remove it even
though we are technically breaking (unused) API for the overall
betterment of the API.
|
|
|
|
|
|
|
|
| |
Technically this breaks cache keys for the local source, but as
this comes in a branch which fixes local source cache keys to be
stable (they were random before this branch), we wont bother with
considering this enhancement a separate API break, the cache key
breakage was inescapable anyway.
|
|
|
|
|
|
|
|
|
|
|
| |
This is needed because plugins make use of this function to
generate a cache key which must be stable.
In addition to the above, this patch also mitigates the performance
hit of sorting, and allows _process_list() to function to iterate
through the generator when additional sorting is not needed.
This patch is an enhanced version of Sam Thursfield's patch on MR !216
|
|
|
|
|
| |
If a plugin raises an error, prepend the plugin identifier to the
error message and raise PipelineError.
|
|
|
|
|
|
|
| |
This also makes main.py less redundant, for some reason there was a stray
call to app.pipeline.initialize() beside app.initialize() in every function,
instead move that into app.initialize() where we now handle the error
and exit gracefully.
|
|
|
|
|
|
| |
This makes writes done by `bst track` atomic, meaning a crash or power
loss while overwriting a .bst file should never cause the the contents
of that file to be lost or partially written.
|
|
|
|
|
| |
This avoids a circular dependency between the 'utils' and '_yaml'
modules.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is a context manager that can be used to divert file writes into a
temporary file, which is then renamed into place once writing is
complete. It is primarily intended for use by source plugins which
download files, so they can ensure that their downloads appear atomic
and there is no risk of leaving half-downloaded files in the cache.
So far this is not used in the core, but it is needed by the Docker
source plugin that is proposed for the bst-external plugins repo. See:
https://gitlab.com/BuildStream/bst-external/merge_requests/9
|
|
|
|
|
|
|
|
| |
Recently I added the `reason` member which can be used to set
machine readable error reason strings for the purpose of testing.
Forgot to add the necessary `*` argument, forcing `reason` to be
a keyword-only argument.
|
|
|
|
|
|
|
| |
When fetching a downloadable source, we make a defensive check
to avoid redundant download at fetch() time by checking if it's
already cached, but fetch() will never be called if the source
is already cached.
|
|
|
|
|
|
|
|
| |
The local plugin is always Consistency.CACHED, this means that
fetch(), set_ref() and get_ref() methods will never be called.
Instead of omitting them, just "pragma: nocover" on the `pass`
statements, making our coverage report more realistic.
|
|
|
|
|
|
|
|
|
| |
The patch plugin was checking if the target directory exists, however
this is automatically guaranteed by the Source abstract class and
documented to be guaranteed as well.
Since this error cannot be caught by the plugin (it will be caught
in advance by the Source class), removing the check from patch.py.
|
|
|
|
|
|
|
| |
directory
This changes the UX to report a better human readable error, which
is otherwise a BUG message with stack trace.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Outline of changes to exceptions:
o Now BstError base class has a `domain` and `reason` member,
reason members are optional.
o All derived error classes now specify their `domain`
o For LoadError, LoadErrorReason defines the error's `reason`
o Now the scheduler `job` class takes care of sending the error
reason and domain back to the main process where the last
exception which caused a child task to fail can be discretely stored.
|
|
|
|
|
|
|
|
| |
It's possible for the custom termination handlers to raise exceptions.
Indeed this was actually the case for utils._call(). They're especially
difficult to reach with tests, so make extra effort to insulate them.
Print any exceptions encountered as a regular traceback before exiting.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Tested by inflating the chance of hitting the race. First, insert a
sleep between opening the terminator context and starting the process,
then:
python3 -c 'import buildstream.utils; import os; \
buildstream.utils._call(["echo", "hello"], True); \
print(os.getpid())' & sleep 1; kill $!
|
| |
|
|
|
|
|
| |
It's not required to raise SourceError() manually when calling
utils.get_host_tool().
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Report UtilError instead of OSError and similar python errors.
Also ensure we catch system errors and raise UtilError with
descriptive text instead; for the user experience; this is the
difference between:
o A FAILURE message with a description as to
what went wrong (exception handled with UtilError)
o A BUG message with the unhandled system error printed
with a stack trace (exception left unhandled)
Also, UtilsError and ProgramNotFoundError are now public exceptions
declared in utils.py, where they will appear in the documentation.
|
|
|
|
|
| |
This is often useful, for example when the main element needs to do
something with a path like /etc/%{project-name}/ .
|
| |
|
| |
|
| |
|
|
|
|
|
| |
Source plugins typically do not have an accompanying YAML file with
their default settings.
|
| |
|
|
|
|
|
|
| |
In addition, it changes the "plugins" and "required-versions" fields,
combining them for plugins and adding a new "required-project-version"
field.
|
| |
|
| |
|
| |
|
|
|
|
|
| |
Make it explicit that we should not rely on 'finally' clauses to clean
up for us in the event of termination.
|
|
|
|
|
|
|
|
|
|
|
| |
Now we just assume that logging is turned on all the time, any
messages must now always go through the central context messaging
APIs.
As a side effect, we now send all output messages that
buildstream generates to stderr, leaving stdout only to
payload types of output, such as parsible `bst show` output,
the output of `bst workspace list` or `bst shell`.
|
|
|
|
|
|
|
|
| |
Currently this does not update the task list, and is for timing
groups of activities from the frontend, or for timing long standing
tasks which run directly in the frontend and not in a child task
(like downloading the refs from a remote at load time before a build
commences).
|
| |
|
|
|
|
| |
A version of the function which can be shared with the frontend too.
|
| |
|
| |
|
| |
|