All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Update dependencies to fix security vulnerabilities affecting the following crates and versions:
linked-hash-map < 0.5.3
nix < 0.20.2
regex < 1.5.5
- Add
--ignore-uncommitted-changes
flag to optionally ignore uncommitted changes.
- Fix detection of uncommitted changes on inputs within submodules.
- Take uncommitted changes into account when computing which commit last changed a path
(technically: the required object in
cache::Cache::required_object
). This means artifact lookups will now always miss in the cache if one of its inputs has uncommitted changes.
- Separate cached outputs not only by the required commit but also by the artifact name. Previously, the outputs of all artifacts were stored under a directory named after the required commit. Thus, if the required commit was identical for two artifacts that had an identical output path, the outputs would collide in the cache, leading to false positive lookups or retrievals or overwrites on insertion. With this change, the outputs of each artifact are stored under a directory named after the artifact within the directory of the required commit, thereby preventing these collisions. A different way of thinking about this change is that the cache is now indexed by the required commit and the artifact name.
cache::Cache
: The pattern in Pattern Artifacts now matches three characters (-
,.
, and+
) in addition to word characters (i.e., alphanumerics and underscore_
). As the pattern now matches non-greedily, original behavior if a pattern does not contain one of the three characters but the string after the pattern does is preserved.
cache::Cache
:- The pattern in Pattern Artifacts now matches non-greedily.
- Fix documentation of outputs of Pattern Artifacts.
cache::Cache::cached_object
now returnsNone
as soon as the intersection set of candidate objects for the outputs is empty. Before, that function computed the candidates of all outputs before computing the intersection.cache::Cache
now caches the fact that a path does or does not change between two objects. This drastically reduces the number ofgit diff
invocations.git::Repo
now caches ancestry relations among objects. This drastically reduces the number ofgit rev-list
invocations.
cache::Cache::find_candidates
now also includes descendants when the ancestor itself is a candidate.
fs::copy
now also overwrites symlinks.
fs::copy
no longer follows and resolves symlinks. As a result, symlinks are now inserted and retrieved verbatim from the build artifact cache. Additionally, it is now possible to cache artifacts with circular or nonexistent symlink targets.
git::Repo::oldest_common_descendant_on_current_branch
: Add missing intersection of descendants.
- Add support for Pattern Artifacts, which allows one Artifact definition to match many actual
artifacts; see the documentation of
cache::Artifacts
for details. git::Object
: ImplementPartialOrd
.git::Repo
:- Add
oldest_object
method as counterpart ofyoungest_object
. - Add
oldest_common_descendant_on_current_branch
method to determine the oldest common descendant of a set of objects on the current branch.
- Add
cache::Cache
:artifacts
field is now private. Get an individual artifact by name using theartifact
method. Getting all artifact definitions is no longer possible outsideCache
.git::Repo
:youngest_object
method now returns aResult
instead of anOption
and no longer panics if any two givenobjects
are incomparable.youngest_object
method now takes aHashSet
asobjects
argument, because theobjects
are unordered.
cache::Cache::required_object
: Fix required object resolution when merges are involved.
git::Repo::last_commit_on_path
: ReturnNone
when Git log for given path is empty.cache::Cache::required_object
: ReturnNone
when required object for at least one input is not known.
- Implicitly add path of manifest to inputs of all artifacts.
- Add
lookup
command to determine whether an artifact is cached without copying the outputs.
- README: Add missing 'POSIX advisory record locks' URL.
Initial release.