mirror of
https://github.com/ilyakooo0/nixpkgs.git
synced 2024-12-29 14:57:28 +03:00
fectchcargo: don't break old sha256
This commit is contained in:
parent
ccf72b8537
commit
f20b229aa1
@ -42,8 +42,7 @@ rustPlatform.buildRustPackage rec {
|
|||||||
sha256 = "0y5d1n6hkw85jb3rblcxqas2fp82h3nghssa4xqrhqnz25l799pj";
|
sha256 = "0y5d1n6hkw85jb3rblcxqas2fp82h3nghssa4xqrhqnz25l799pj";
|
||||||
};
|
};
|
||||||
|
|
||||||
cargoSha256 = "194lzn9xjkc041lmqnm676ydgbhn45xx9jhrhz6lzlg99yr6b880";
|
cargoSha256 = "0q68qyl2h6i0qsz82z840myxlnjay8p1w5z7hfyr8fqp7wgwa9cx";
|
||||||
useRealVendorConfig = true;
|
|
||||||
|
|
||||||
meta = with stdenv.lib; {
|
meta = with stdenv.lib; {
|
||||||
description = "A fast line-oriented regex search tool, similar to ag and ack";
|
description = "A fast line-oriented regex search tool, similar to ag and ack";
|
||||||
@ -65,14 +64,6 @@ When the `Cargo.lock`, provided by upstream, is not in sync with the
|
|||||||
added in `cargoPatches` will also be prepended to the patches in `patches` at
|
added in `cargoPatches` will also be prepended to the patches in `patches` at
|
||||||
build-time.
|
build-time.
|
||||||
|
|
||||||
The `useRealVendorConfig` parameter tells cargo-vendor to include a Cargo
|
|
||||||
configuration file in the fetched dependencies. This will fix problems with
|
|
||||||
projects, where Crates are downloaded from non-crates.io sources. Please note,
|
|
||||||
that currently this parameter defaults to `false` only due to compatibility
|
|
||||||
reasons, as setting this to `true` requires a change in `cargoSha256`.
|
|
||||||
Eventually this distinction will be deprecated, so please always set
|
|
||||||
`useRealVendorConfig` to `true` and make sure to recompute the `cargoSha256`.
|
|
||||||
|
|
||||||
To install crates with nix there is also an experimental project called
|
To install crates with nix there is also an experimental project called
|
||||||
[nixcrates](https://github.com/fractalide/nixcrates).
|
[nixcrates](https://github.com/fractalide/nixcrates).
|
||||||
|
|
||||||
|
@ -551,27 +551,6 @@ inherit (pkgs.nixos {
|
|||||||
<literal>stdenv.buildPlatform</literal>, <literal>stdenv.hostPlatform</literal>, and <literal>stdenv.targetPlatform</literal>.
|
<literal>stdenv.buildPlatform</literal>, <literal>stdenv.hostPlatform</literal>, and <literal>stdenv.targetPlatform</literal>.
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
<listitem>
|
|
||||||
<para>
|
|
||||||
The <literal>buildRustPackage</literal> function got the new
|
|
||||||
argument <literal>useRealVendorConfig</literal>, currently
|
|
||||||
defaulting to <literal>false</literal>. Setting it to
|
|
||||||
<literal>true</literal> necessates the recomputation of the
|
|
||||||
<literal>cargoSha256</literal> and fixes a problem with
|
|
||||||
dependencies, that were fetched from a non-crates.io source.
|
|
||||||
Eventually only the <literal>true</literal> behaviour will be kept,
|
|
||||||
so please set it explicitly to <literal>true</literal> and
|
|
||||||
recompute your <literal>cargoSha256</literal>, so that we can
|
|
||||||
migrate to the new behaviour and deprecate the option.
|
|
||||||
</para>
|
|
||||||
<para>
|
|
||||||
While recomputing <literal>cargoSha256</literal>, it is important
|
|
||||||
to first invalidate the hash (e.g. by changing a digit), so that
|
|
||||||
Nix actually rebuilds the fixed-output derivation. Otherwise this
|
|
||||||
could lead to hard to detect errors, where a package seemingly
|
|
||||||
builds on your computer, but breaks on others!
|
|
||||||
</para>
|
|
||||||
</listitem>
|
|
||||||
</itemizedlist>
|
</itemizedlist>
|
||||||
</section>
|
</section>
|
||||||
</section>
|
</section>
|
||||||
|
@ -17,15 +17,9 @@ in
|
|||||||
, cargoBuildFlags ? []
|
, cargoBuildFlags ? []
|
||||||
|
|
||||||
, cargoVendorDir ? null
|
, cargoVendorDir ? null
|
||||||
# This tells cargo-vendor to include a Cargo config file in the fixed-output
|
|
||||||
# derivation. This is desirable in every case, so please set it to true.
|
|
||||||
# Eventually this will default to true and even later this option and the old
|
|
||||||
# behaviour will be removed.
|
|
||||||
, useRealVendorConfig ? false
|
|
||||||
, ... } @ args:
|
, ... } @ args:
|
||||||
|
|
||||||
assert cargoVendorDir == null -> cargoSha256 != "unset";
|
assert cargoVendorDir == null -> cargoSha256 != "unset";
|
||||||
assert cargoVendorDir != null -> !useRealVendorConfig;
|
|
||||||
|
|
||||||
let
|
let
|
||||||
cargoDeps = if cargoVendorDir == null
|
cargoDeps = if cargoVendorDir == null
|
||||||
@ -33,7 +27,6 @@ let
|
|||||||
inherit name src srcs sourceRoot cargoUpdateHook;
|
inherit name src srcs sourceRoot cargoUpdateHook;
|
||||||
patches = cargoPatches;
|
patches = cargoPatches;
|
||||||
sha256 = cargoSha256;
|
sha256 = cargoSha256;
|
||||||
writeVendorConfig = useRealVendorConfig;
|
|
||||||
}
|
}
|
||||||
else null;
|
else null;
|
||||||
|
|
||||||
@ -68,19 +61,12 @@ in stdenv.mkDerivation (args // {
|
|||||||
${setupVendorDir}
|
${setupVendorDir}
|
||||||
|
|
||||||
mkdir .cargo
|
mkdir .cargo
|
||||||
'' + (if useRealVendorConfig then ''
|
config="$(pwd)/$cargoDepsCopy/.cargo/config";
|
||||||
substitute "$(pwd)/$cargoDepsCopy/.cargo/config" .cargo/config \
|
if [[ ! -e $config ]]; then
|
||||||
|
config=${./fetchcargo-default-config.toml};
|
||||||
|
fi;
|
||||||
|
substitute $config .cargo/config \
|
||||||
--subst-var-by vendor "$(pwd)/$cargoDepsCopy"
|
--subst-var-by vendor "$(pwd)/$cargoDepsCopy"
|
||||||
'' else ''
|
|
||||||
cat >.cargo/config <<-EOF
|
|
||||||
[source.crates-io]
|
|
||||||
registry = 'https://github.com/rust-lang/crates.io-index'
|
|
||||||
replace-with = 'vendored-sources'
|
|
||||||
|
|
||||||
[source.vendored-sources]
|
|
||||||
directory = '$(pwd)/$cargoDepsCopy'
|
|
||||||
EOF
|
|
||||||
'') + ''
|
|
||||||
|
|
||||||
unset cargoDepsCopy
|
unset cargoDepsCopy
|
||||||
|
|
||||||
|
7
pkgs/build-support/rust/fetchcargo-default-config.toml
Executable file
7
pkgs/build-support/rust/fetchcargo-default-config.toml
Executable file
@ -0,0 +1,7 @@
|
|||||||
|
[source."crates-io"]
|
||||||
|
"replace-with" = "vendored-sources"
|
||||||
|
|
||||||
|
[source."vendored-sources"]
|
||||||
|
"directory" = "@vendor@"
|
||||||
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
|||||||
{ stdenv, cacert, git, rust, cargo-vendor, python3 }:
|
{ stdenv, cacert, git, rust, cargo-vendor, python3 }:
|
||||||
{ name ? "cargo-deps", src, srcs, patches, sourceRoot, sha256, cargoUpdateHook ? "", writeVendorConfig ? false }:
|
|
||||||
let cargo-vendor-normalise = stdenv.mkDerivation {
|
let cargo-vendor-normalise = stdenv.mkDerivation {
|
||||||
name = "cargo-vendor-normalise";
|
name = "cargo-vendor-normalise";
|
||||||
src = ./cargo-vendor-normalise.py;
|
src = ./cargo-vendor-normalise.py;
|
||||||
@ -9,9 +8,10 @@ let cargo-vendor-normalise = stdenv.mkDerivation {
|
|||||||
preferLocalBuild = true;
|
preferLocalBuild = true;
|
||||||
};
|
};
|
||||||
in
|
in
|
||||||
|
{ name ? "cargo-deps", src, srcs, patches, sourceRoot, sha256, cargoUpdateHook ? "" }:
|
||||||
stdenv.mkDerivation {
|
stdenv.mkDerivation {
|
||||||
name = "${name}-vendor";
|
name = "${name}-vendor";
|
||||||
nativeBuildInputs = [ cacert cargo-vendor git rust.cargo ];
|
nativeBuildInputs = [ cacert cargo-vendor git cargo-vendor-normalise rust.cargo ];
|
||||||
inherit src srcs patches sourceRoot;
|
inherit src srcs patches sourceRoot;
|
||||||
|
|
||||||
phases = "unpackPhase patchPhase installPhase";
|
phases = "unpackPhase patchPhase installPhase";
|
||||||
@ -33,10 +33,15 @@ stdenv.mkDerivation {
|
|||||||
${cargoUpdateHook}
|
${cargoUpdateHook}
|
||||||
|
|
||||||
mkdir -p $out
|
mkdir -p $out
|
||||||
cargo vendor $out > config
|
cargo vendor $out | cargo-vendor-normalise > config
|
||||||
'' + stdenv.lib.optionalString writeVendorConfig ''
|
# fetchcargo used to never keep the config output by cargo vendor
|
||||||
mkdir $out/.cargo
|
# and instead hardcode the config in ./fetchcargo-default-config.toml.
|
||||||
< config ${cargo-vendor-normalise}/bin/cargo-vendor-normalise > $out/.cargo/config
|
# This broke on packages needing git dependencies, so now we keep the config.
|
||||||
|
# But not to break old cargoSha256, if the previous behavior was enough,
|
||||||
|
# we don't store the config.
|
||||||
|
if ! cmp config ${./fetchcargo-default-config.toml} > /dev/null; then
|
||||||
|
install -Dt $out/.cargo config;
|
||||||
|
fi;
|
||||||
'';
|
'';
|
||||||
|
|
||||||
outputHashAlgo = "sha256";
|
outputHashAlgo = "sha256";
|
||||||
|
Loading…
Reference in New Issue
Block a user