feat(tools/tvlc): pass list of derivations to depot-scanner

You can now provide a list of Nix derivations to tvlc to get a git worktree + sparse-checkout containing only the paths needed to build the specified derivations.

Known bugs: even though //third_party is only passed to readdir(), git doesn't know this and includes all of //third_party/*.

Change-Id: I9dccebd3fbff4bb04ebd568175cf0a7e37d71ab3
Reviewed-on: https://cl.tvl.fyi/c/depot/+/1826
Tested-by: BuildkiteCI
Reviewed-by: tazjin <mail@tazj.in>
This commit is contained in:
Kane York 2020-08-20 18:15:33 -07:00 committed by kanepyork
parent e539242032
commit a9650041bb
4 changed files with 36 additions and 7 deletions

View file

@ -79,7 +79,8 @@ if [ -f "$DEPOT_ROOT/.git/refs/heads/$branch_name" ]; then
exit 1
fi
# TODO(riking): tvlc-get-depends
# The big one: call into Nix to figure out what paths the desired derivations depend on.
readarray -t includedPaths < <("$depot_scanner" --mode 'print' --only 'DEPOT' --relpath --depot "$DEPOT_ROOT" --nix-bin "$tvix_instantiate" "$@")
# bash math
checkout_id=$(("$(cat "$tvlc_root/next_clientid")"))
@ -95,7 +96,7 @@ mkdir "$DEPOT_ROOT/.git/worktrees/$checkout_id/info"
cd "$checkout_dir"
git sparse-checkout init --cone
git sparse-checkout set "$@"
git sparse-checkout set "${includedPaths[@]}"
ln -s "$checkout_dir" "$nice_checkout_root"/"$checkout_name"