From 759f9dbf39635cd3ec630bfccdb88bb8af8b7805 Mon Sep 17 00:00:00 2001 From: Vincent Ambo Date: Tue, 31 Jan 2023 19:43:33 +0300 Subject: feat(tvix/cli): implement builtins.placeholder This doesn't require any other corresponding handling *yet*, as the actual replacements happen in the builder logic (which we delegate to cppnix at the moment). Change-Id: I034147c933f05ae427c7a8794647132d108d0ede Reviewed-on: https://cl.tvl.fyi/c/depot/+/7972 Autosubmit: tazjin Tested-by: BuildkiteCI Reviewed-by: flokli --- tvix/nix-compat/src/lib.rs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'tvix/nix-compat/src/lib.rs') diff --git a/tvix/nix-compat/src/lib.rs b/tvix/nix-compat/src/lib.rs index 60775ad90e05..94fd88549af4 100644 --- a/tvix/nix-compat/src/lib.rs +++ b/tvix/nix-compat/src/lib.rs @@ -1,4 +1,22 @@ +use sha2::{Digest, Sha256}; + pub mod derivation; pub mod nar; pub mod nixbase32; pub mod store_path; + +/// Nix placeholders (i.e. values returned by `builtins.placeholder`) +/// are used to populate outputs with paths that must be +/// string-replaced with the actual placeholders later, at runtime. +/// +/// The actual placeholder is basically just a SHA256 hash encoded in +/// cppnix format. +pub fn hash_placeholder(name: &str) -> String { + let digest = { + let mut hasher = Sha256::new(); + hasher.update(format!("nix-output:{}", name)); + hasher.finalize() + }; + + format!("/{}", nixbase32::encode(&digest)) +} -- cgit 1.4.1