From 9d26e36b857a5893bf2b6c5b12ef6eb5d09ff1f9 Mon Sep 17 00:00:00 2001 From: Erin van der Veen Date: Tue, 23 Apr 2024 13:23:42 +0200 Subject: [PATCH] feat: update nix input to latest master The nix c bindings have now merged into master, with some small changes since these bindings were created. This commit updates the input, and adjusts it to the new API. (cherry picked from commit aa02380bfcc6221615f65152de60cf4cca3bbbbe) --- flake.lock | 103 +++++++++++++++++++++++++++++--- flake.nix | 2 +- rust/nix-expr/src/eval_state.rs | 18 ++++-- rust/nix-store/src/store.rs | 2 +- 4 files changed, 109 insertions(+), 16 deletions(-) diff --git a/flake.lock b/flake.lock index c9b0f69..bca20aa 100644 --- a/flake.lock +++ b/flake.lock @@ -92,10 +92,49 @@ "type": "github" } }, + "flake-parts_2": { + "inputs": { + "nixpkgs-lib": [ + "nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1712014858, + "narHash": "sha256-sB4SWl2lX95bExY2gMFG5HIzvva5AVMJd4Igm+GpZNw=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "9126214d0a59633752a136528f5f3b9aa8565b7d", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, "flake-utils": { "inputs": { "systems": "systems" }, + "locked": { + "lastModified": 1710146030, + "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_2": { + "inputs": { + "systems": "systems_2" + }, "locked": { "lastModified": 1701680307, "narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=", @@ -166,23 +205,24 @@ "nix": { "inputs": { "flake-compat": "flake-compat", + "flake-parts": "flake-parts_2", "libgit2": "libgit2", "nixpkgs": [ "nixpkgs" ], - "nixpkgs-regression": "nixpkgs-regression" + "nixpkgs-regression": "nixpkgs-regression", + "pre-commit-hooks": "pre-commit-hooks" }, "locked": { - "lastModified": 1711717219, - "narHash": "sha256-8nzsGORuUIkM91yKYz9f8/+eRMrLRHrqs+ExwLT01+8=", - "owner": "tweag", + "lastModified": 1713862243, + "narHash": "sha256-mfJSQyO7je+/WSBmnl/LTGvqrzv3k1F0kEd7Wg+VXw4=", + "owner": "nixos", "repo": "nix", - "rev": "926fbadcc30a4614b5f5a3d18a6f4096914f97da", + "rev": "1cfc9da472f8dcfa7f521e544531d5e4daf2076c", "type": "github" }, "original": { - "owner": "tweag", - "ref": "nix-c-bindings", + "owner": "nixos", "repo": "nix", "type": "github" } @@ -282,10 +322,42 @@ "type": "github" } }, + "pre-commit-hooks": { + "inputs": { + "flake-compat": [ + "nix" + ], + "flake-utils": "flake-utils", + "gitignore": [ + "nix" + ], + "nixpkgs": [ + "nix", + "nixpkgs" + ], + "nixpkgs-stable": [ + "nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1713775815, + "narHash": "sha256-Wu9cdYTnGQQwtT20QQMg7jzkANKQjwBD9iccfGKkfls=", + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "rev": "2ac4dcbf55ed43f3be0bae15e181f08a57af24a4", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "type": "github" + } + }, "pre-commit-hooks-nix": { "inputs": { "flake-compat": "flake-compat_2", - "flake-utils": "flake-utils", + "flake-utils": "flake-utils_2", "gitignore": "gitignore", "nixpkgs": [ "nixpkgs" @@ -409,6 +481,21 @@ "type": "github" } }, + "systems_2": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, "treefmt": { "inputs": { "nixpkgs": [ diff --git a/flake.nix b/flake.nix index ed97fa8..af50710 100644 --- a/flake.nix +++ b/flake.nix @@ -4,7 +4,7 @@ inputs = { flake-parts.url = "github:hercules-ci/flake-parts"; flake-parts.inputs.nixpkgs-lib.follows = "nixpkgs"; - nix.url = "github:tweag/nix/nix-c-bindings"; + nix.url = "github:nixos/nix"; nix.inputs.nixpkgs.follows = "nixpkgs"; nix-cargo-integration.url = "github:yusdacra/nix-cargo-integration"; nix-cargo-integration.inputs.nixpkgs.follows = "nixpkgs"; diff --git a/rust/nix-expr/src/eval_state.rs b/rust/nix-expr/src/eval_state.rs index a5ed53a..37458b1 100644 --- a/rust/nix-expr/src/eval_state.rs +++ b/rust/nix-expr/src/eval_state.rs @@ -5,6 +5,7 @@ use lazy_static::lazy_static; use nix_c_raw as raw; use nix_store::store::Store; use nix_util::context::Context; +use nix_util::string_return::callback_get_vec_u8; use std::ffi::CString; use std::ptr::null_mut; use std::ptr::NonNull; @@ -108,13 +109,18 @@ impl EvalState { } /// Not exposed, because the caller must always explicitly handle the context or not accept one at all. fn get_string(&self, value: &Value) -> Result { - let c_str_raw = unsafe { raw::nix_get_string(self.context.ptr(), value.raw_ptr()) }; + let mut raw_buffer: Vec = Vec::new(); + unsafe { + raw::nix_get_string( + self.context.ptr(), + value.raw_ptr(), + Some(callback_get_vec_u8), + &mut raw_buffer as *mut Vec as *mut std::ffi::c_void, + ) + }; self.context.check_err()?; - let cstring = unsafe { std::ffi::CStr::from_ptr(c_str_raw) }; - let str = cstring - .to_str() - .map_err(|e| anyhow::format_err!("Nix string is not valid UTF-8: {}", e))?; - Ok(str.to_owned()) + String::from_utf8(raw_buffer) + .map_err(|e| anyhow::format_err!("Nix string is not valid UTF-8: {}", e)) } /// NOTE: this will be replaced by two methods, one that also returns the context, and one that checks that the context is empty pub fn require_string(&self, value: &Value) -> Result { diff --git a/rust/nix-store/src/store.rs b/rust/nix-store/src/store.rs index 9304a6f..6b568dd 100644 --- a/rust/nix-store/src/store.rs +++ b/rust/nix-store/src/store.rs @@ -83,7 +83,7 @@ impl Store { raw::nix_store_get_uri( self.context.ptr(), self.inner.ptr(), - callback_get_vec_u8 as *mut std::ffi::c_void, + Some(callback_get_vec_u8), &mut raw_buffer as *mut Vec as *mut std::ffi::c_void, ) };