feat(nix/sparseTree): add optional name argument

This allows pinning the name of the sparse tree derivation, which
stops the continous rebuilding of tvix-store-proto dependents.

I've opted to let the function take an attribute set instead and
refactored the call sites appropriately.

Change-Id: I3e57785094b1adbfffa24caf9f1c3384844fa200
Reviewed-on: https://cl.tvl.fyi/c/depot/+/8965
Reviewed-by: grfn <grfn@gws.fyi>
Tested-by: BuildkiteCI
Reviewed-by: sterni <sternenseemann@systemli.org>
This commit is contained in:
Vincent Ambo 2023-07-14 00:12:01 +03:00 committed by tazjin
parent 33fa42a1a3
commit fcda068235
5 changed files with 68 additions and 42 deletions

View file

@ -2,22 +2,33 @@
# and directories if they are listed in a supplied list:
#
# # A very minimal depot
# sparseTree ./depot [
# sparseTree {
# root = ./depot;
# paths = [
# ./default.nix
# ./depot/nix/readTree/default.nix
# ./third_party/nixpkgs
# ./third_party/overlays
# ]
# ];
# }
{ pkgs, lib, ... }:
# root path to use as a reference point
root:
# list of paths below `root` that should be
# included in the resulting directory
#
# If path, need to refer to the actual file / directory to be included.
# If a string, it is treated as a string relative to the root.
paths:
{
# root path to use as a reference point
root
, # list of paths below `root` that should be
# included in the resulting directory
#
# If path, need to refer to the actual file / directory to be included.
# If a string, it is treated as a string relative to the root.
paths
, # (optional) name to use for the derivation
#
# This should always be set when using roots that do not have
# controlled names, such as when passing the top-level of a git
# repository (e.g. `depot.path.origSrc`).
name ? builtins.baseNameOf root
}:
let
rootLength = builtins.stringLength (toString root);
@ -63,7 +74,7 @@ in
# TODO(sterni): teach readTree to also read symlinked directories,
# so we ln -sT instead of cp -aT.
pkgs.runCommand "sparse-${builtins.baseNameOf root}" { } (
pkgs.runCommand "sparse-${name}" { } (
lib.concatMapStrings
({ src, dst }: ''
mkdir -p "$(dirname "$out${dst}")"

View file

@ -9,4 +9,8 @@ let
protoFileNames = filter (hasSuffix ".proto") (attrNames (readDir ./.));
protoFiles = map (f: ./. + ("/" + f)) protoFileNames;
in
depot.nix.sparseTree depot.path.origSrc protoFiles
depot.nix.sparseTree {
name = "tvix-store-protos";
root = depot.path.origSrc;
paths = protoFiles;
}

View file

@ -10,10 +10,13 @@ depot.third_party.naersk.buildPackage {
# Workaround for a potential Nix bug related to restricted eval.
# See https://github.com/nix-community/naersk/issues/169
root = depot.nix.sparseTree ./. [
root = depot.nix.sparseTree {
root = ./.;
paths = [
./Cargo.toml
./Cargo.lock
];
};
passthru = {
docker = import ./docker.nix args;

View file

@ -1,11 +1,14 @@
{ depot, pkgs, ... }:
depot.third_party.naersk.buildPackage {
src = depot.nix.sparseTree ./. [
src = depot.nix.sparseTree {
root = ./.;
paths = [
./Cargo.lock
./Cargo.toml
./src
];
};
buildInputs = with pkgs; [
pkg-config

View file

@ -10,7 +10,11 @@ let
nint
;
minimalDepot = sparseTree depot.path.origSrc [
minimalDepot = sparseTree {
root = depot.path.origSrc;
name = "minimal-depot";
paths = [
# general depot things
"default.nix"
"nix/readTree"
@ -27,6 +31,7 @@ let
# for blog.nix
"users/sterni/nix"
];
};
statusCodes = {
# 1xx