Age | Commit message (Collapse) | Author |
|
|
|
|
|
In all presentations of actions to the user, we use output paths
relative to the root of the action directory. Therefore, we should
do the same in the profile. However, when noting the completion of
an action, we get paths as in the wire protocol, i.e., relative to
the working directory of the action. Therefore, rebase appropriately.
|
|
|
|
and while there, replace `auto` with explicit signatures.
|
|
|
|
|
|
We use a pointer to the actual Profile object to handle profiling,
if requested. For this to work, actual object needs to stay in
scope. However, we handle most of the operations, including parsing
of arguments, in a global try-catch block. In order to be able to
also correctly write a profile file outside this block, move the
scope of the Profile object to top-level in main.
While there, also improve the signature of the Profile class. That
class is only meaningful, if a profile should eventually be writting
to disk. So reflect this in the constructur. Also, once we know the
file name to write the profile to (if any), we have already parsed
the command line; so the making available of the command line to the
profile can be enforced by adding this to the constructor as well.
Co-authored-by: Denisov Maksim <denisov.maksim@huawei.com>
|
|
As parsing the the command-line is non-trivial, we include all the
relevant information about the command line in the profile. This
should also include the subcommand. For sake of completeness, we
also include the non-option arguments of the subcommand.
|
|
Extend the profile by including non-zero exit codes of individual
actions. When looking at an individual build invocation, the actions
with non-zero exit code are often the interesting ones, like root
cause of a build failure, or failing tests. Therefore, it is useful
information to include this information; by leaving out the exit
code if it is zero, we do not significantly increase the profile.
|
|
|
|
The BazelNetworkReader contains an optimization for reading directories
in case the remote execution (in compatible mode) supports the GetTree
request. This is, however not the case for many remote exeuciton
services, including our own single-node execution service. So the
code is basically untested and rarely used, if at all. Moreover,
justbuild is usually used in native mode and using compatibility
mode is expected to handle tree operations less efficient.
Therefore, remove this basically dead code and decrease complexity
this way.
|
|
|
|
... instead of at debug. We expect actions to be not in cache, so the fact
that we experience cache misses is not surprising. Given the information
available at this point, a useful logging indicating (in terms meaningful
to the user) is not possible. Therefore, keep the debug-level log clean.
|
|
At various places in the build tool, we try to read files from various
CASes and caches. The absence of a file there is normal; therefore,
reduce log level in order to not overload the debug-level log.
|
|
Those are the sha256sum of the serialisation of an artifact and that
serialisation does not end up in the compatible CAS. In other words,
they do not refer to anything the user can access. Therefore, drop
this message that is not helpful.
|
|
|
|
|
|
... instead of only the file name. Having the full path into the
tree makes it more easy for the user to understand the root cause
of a conflict.
|
|
... as that failure does not necessarily abort the build.
|
|
Those operations require fetching objects through the network. The
fetch is already restricted to only the tree-objects where a merge
is necessary, leaving out unchanged trees as well as all blobs.
Still, some time may be required, especially over slow networks.
Therefore report this activity in the progress.
|
|
Now that we generate tree-overlay action identifiers that are disjoint
from identifiers of regular actions, having a joint origin map
does not cause any confusion. Concerning the numbering of subtasks,
we always see tree-overlay actions following the regular actions,
even if defined in a different order. In this way, the identifiers
for the regular actions don't change. Including tree-overlay
actions in the origin map also has the advantage that the origin
is properly reported in case of failure (e.g., non-disjointness of
the obtained trees).
|
|
While our traverser correctly keeps separate identifier spaces for
those entities, having disjoint identifiers allows easier reading
of log messages and more simple reporting of origins of actions.
|
|
... calling them as such, and not trying to report command and
environment.
|
|
- break lines at logicial point, following the layout of our other
error messages
- fix a typo
- properly quote the path of the conflict
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
In order to stay backwards compatible, the "tree_overlays" entry
in action-graph descriptions is optional.
|
|
|
|
|
|
... that, like trees, are given by their identifier.
|
|
|
|
... and only as late as possible wait for that parallel task.
Serializing a large task to JSON can take several seconds and as
building does not depend on it, we shouldn't delay the build for
with extra information.
|
|
... to avoid duplicate log entries.
|
|
... instead of blindly logging globally.
|
|
|
|
The built-in rule "tree" does not support the field "data". Hence
remove it from the list of white-listed fields so that an appropriate
warning is issued if it occurs for that rule.
|
|
The public interface of our graph traverser is typically called
once per program invocation, so there is no benefit in optimizing
across the boundaries of that call. Many calls do happen within the
internal functions of the graph traverser; but for that, the benefit
of being in the same compilation unit also happens if everything
is moved to the same cpp file. Therefore, make the graph traverser
a standard library and in this way, clean up our code basis.
|
|
Produces the mapping between correspondingly indexed entries of two
lists, one containing the keys and the other of values. The keys
list must have string entries. If the two input lists are of
different sizes, the extra elements are ignored.
|
|
Produces the list containing the results of evaluating the body on
the corresponding elementwise pairs from the two input lists. If
the input lists are of different sizes, the extra elements are
ignored.
|
|
|
|
to avoid downloading the same blobs.
|
|
...to avoid downloading the same blobs.
|
|
|
|
|