dart: Spoof Git dependency version checks

This commit is contained in:
hacker1024 2023-05-12 00:44:11 +10:00
parent 4f4359d6ca
commit 49ce83d5b4
5 changed files with 24 additions and 4 deletions

View file

@ -4,7 +4,7 @@ dartConfigHook() {
echo "Executing dartConfigHook"
echo "Installing dependencies"
eval "$pubGetScript" --offline
eval doPubGet "$pubGetScript" --offline
echo "Finished dartConfigHook"
}

View file

@ -1,6 +1,7 @@
{ stdenvNoCC
, lib
, makeSetupHook
, writeShellScriptBin
, dart
, git
, cacert
@ -170,12 +171,26 @@ let
'';
} // buildDrvInheritArgs);
# As of Dart 3.0.0, Pub checks the revision of cached Git-sourced packages.
# Git must be wrapped to return a positive result, as the real .git directory is wiped
# to produce a deteministic dependency derivation output.
# https://github.com/dart-lang/pub/pull/3791/files#diff-1639c4669c428c26e68cfebd5039a33f87ba568795f2c058c303ca8528f62b77R631
gitSourceWrapper = writeShellScriptBin "git" ''
args=("$@")
if [[ "''${args[0]}" == "rev-list" && "''${args[1]}" == "--max-count=1" ]]; then
revision="''${args[''${#args[@]}-1]}"
echo "$revision"
else
${git}/bin/git "''${args[@]}"
fi
'';
hook = (makeSetupHook {
# The setup hook should not be part of the fixed-output derivation.
# Updates to the hook script should not change vendor hashes, and it won't
# work at all anyway due to https://github.com/NixOS/nix/issues/6660.
name = "${name}-dart-deps-setup-hook";
substitutions = { inherit deps; };
substitutions = { inherit gitSourceWrapper deps; };
propagatedBuildInputs = [ dart git ];
passthru = {
files = deps.outPath;

View file

@ -39,3 +39,8 @@ _setupPubCache() {
exit 1
fi
}
# Performs the given pub get command with an appropriate environment.
doPubGet() {
PATH="@gitSourceWrapper@/bin:$PATH" "$@"
}

View file

@ -76,7 +76,7 @@ let
mkdir -p build/flutter_assets/fonts
flutter packages get --offline -v
doPubGet flutter pub get --offline -v
flutter build linux -v --release --split-debug-info="$debug" ${builtins.concatStringsSep " " (map (flag: "\"${flag}\"") finalAttrs.flutterBuildFlags)}
runHook postBuild

View file

@ -41,7 +41,7 @@ stdenvNoCC.mkDerivation (finalAttrs: {
configurePhase = ''
runHook preConfigure
dart pub get --offline
doPubGet dart pub get --offline
mkdir build
ln -s ${embedded-protocol} build/embedded-protocol
runHook postConfigure