Age | Commit message (Collapse) | Author |
|
... to be able to report the respective graph for later analysis
by other tools.
|
|
Like file or tree references, globs are restricted to the current
module; in fact, by the way we evaluate them, even to the top-level
directory of that module: a glob is a target having as artifacts and
runfiles those entries of the top-level directory of the specified
module that match the given pattern.
|
|
When constructing module names, we normalize the directory path
implicit in it. However, we take the empty string as valid canonical
name for the top-level directory (as it is the empty relative path).
When accessing git roots, however, only the file-system canonical
path "." is special cased as self reference. Hence explicitly
convert the empty string.
|
|
So that we can, also for header-only libraries, always declare the
direct dependencies without creating a cyclic dependency between
entity_name_data and expressions.
|
|
|
|
The expected size of the list that defines the target was not checked
consistently. So, in case a target expected a list with 4 elements,
but got just 3, a segfault would happen.
This patch resolves this issue.
|
|
A complete documentation of a rule should not only include how to
use it (i.e., which fields are present and what is their meaning)
but also what the result is. This is particularly true, as the result
is structured and can contain some complex logic or conventions in
the provided information.
|
|
DirectoryEntries must be constructed explicitly either via a GitTree*
or an unordered_map<string,ObjectType>. So, the case of an empty
directory, is represented by an empty map. Before this patch, empty
directories were represented by std::monostate and missing checks
on that led to a seg-fault.
|
|
|
|
... to foster the implementation of the built-in target "TREE"
|
|
... so remove it from the list of expected keys.
|
|
This patch introduces a templated ParseEntityName which can accept a
json or ExpressionPtr. Internally, performs a proper dispatch on these
cases
- isString
- isList
- size == 2
- size >= 3
A test is added for checking the proper handling of an empty list
|
|
EntityName now clearly expresses its double identity:
- NamedTarget
- AnonymousTarget
The usage of std::variant<NamedTarget,AnonymousTarget> guarantees that
EntityName, internally, is not a mix of the two - like could happen
before this patch.
NamedTarget features an enum ReferenceType to express the type of the
target, namely, "normal target" or an "explicit file reference".
Thanks to this refactoring, the introduction of new targets type
should be easier, since the design is more modular.
NamedTarget
|
|
|
|
|
|
Our rule names can be arbitrary strings, so improve readability of
error message by properly quoting the rule name; while there, also
properly quote the module name, resulting in better readability if
the module is "".
|
|
... to avoid unnecessary copying and moving of larger objects.
|
|
|
|
This is the initial version of our tool that is able to
build itself. In can be bootstrapped by
./bin/bootstrap.py
Co-authored-by: Oliver Reiche <oliver.reiche@huawei.com>
Co-authored-by: Victor Moreno <victor.moreno1@huawei.com>
|