patchShebangs: add more tests
- Add test to ensure ability to patch read-only-files (see https://github.com/NixOS/nixpkgs/pull/414448#issuecomment-3016010151) - Add test to ensure the timestamp is preserved - Add test to ensure read-only permissions are preserved
This commit is contained in:
parent
d762c7ac78
commit
f2f55c5267
@ -105,6 +105,105 @@ let
|
||||
assertion = "grep '^#!/usr/bin/builtin' $out/bin/test > /dev/null";
|
||||
};
|
||||
};
|
||||
|
||||
read-only-script =
|
||||
(derivation {
|
||||
name = "read-only-script";
|
||||
system = stdenv.buildPlatform.system;
|
||||
builder = "${stdenv.__bootPackages.stdenv.__bootPackages.bashNonInteractive}/bin/bash";
|
||||
initialPath = [
|
||||
stdenv.__bootPackages.stdenv.__bootPackages.coreutils
|
||||
];
|
||||
strictDeps = false;
|
||||
args = [
|
||||
"-c"
|
||||
''
|
||||
set -euo pipefail
|
||||
. ${../../stdenv/generic/setup.sh}
|
||||
. ${../../build-support/setup-hooks/patch-shebangs.sh}
|
||||
mkdir -p $out/bin
|
||||
echo "#!/bin/bash" > $out/bin/test
|
||||
echo "echo -n hello" >> $out/bin/test
|
||||
chmod 555 $out/bin/test
|
||||
patchShebangs $out/bin/test
|
||||
''
|
||||
];
|
||||
assertion = "grep '^#!${stdenv.shell}' $out/bin/test > /dev/null";
|
||||
})
|
||||
// {
|
||||
meta = { };
|
||||
};
|
||||
|
||||
preserves-read-only =
|
||||
(derivation {
|
||||
name = "preserves-read-only";
|
||||
system = stdenv.buildPlatform.system;
|
||||
builder = "${stdenv.__bootPackages.stdenv.__bootPackages.bashNonInteractive}/bin/bash";
|
||||
initialPath = [
|
||||
stdenv.__bootPackages.stdenv.__bootPackages.coreutils
|
||||
];
|
||||
strictDeps = false;
|
||||
args = [
|
||||
"-c"
|
||||
''
|
||||
set -euo pipefail
|
||||
. ${../../stdenv/generic/setup.sh}
|
||||
. ${../../build-support/setup-hooks/patch-shebangs.sh}
|
||||
mkdir -p $out/bin
|
||||
echo "#!/bin/bash" > $out/bin/test
|
||||
echo "echo -n hello" >> $out/bin/test
|
||||
chmod 555 $out/bin/test
|
||||
original_perms=$(stat -c %a $out/bin/test)
|
||||
patchShebangs $out/bin/test
|
||||
new_perms=$(stat -c %a $out/bin/test)
|
||||
if ! [ "$original_perms" = "$new_perms" ]; then
|
||||
echo "Permissions changed from $original_perms to $new_perms"
|
||||
exit 1
|
||||
fi
|
||||
''
|
||||
];
|
||||
assertion = "grep '^#!${stdenv.shell}' $out/bin/test > /dev/null";
|
||||
})
|
||||
// {
|
||||
meta = { };
|
||||
};
|
||||
|
||||
# Preserve times, see: https://github.com/NixOS/nixpkgs/pull/33281
|
||||
preserves-timestamp =
|
||||
(derivation {
|
||||
name = "preserves-timestamp";
|
||||
system = stdenv.buildPlatform.system;
|
||||
builder = "${stdenv.__bootPackages.stdenv.__bootPackages.bashNonInteractive}/bin/bash";
|
||||
initialPath = [
|
||||
stdenv.__bootPackages.stdenv.__bootPackages.coreutils
|
||||
];
|
||||
strictDeps = false;
|
||||
args = [
|
||||
"-c"
|
||||
''
|
||||
set -euo pipefail
|
||||
. ${../../stdenv/generic/setup.sh}
|
||||
. ${../../build-support/setup-hooks/patch-shebangs.sh}
|
||||
mkdir -p $out/bin
|
||||
echo "#!/bin/bash" > $out/bin/test
|
||||
echo "echo -n hello" >> $out/bin/test
|
||||
chmod +x $out/bin/test
|
||||
# Set a specific timestamp (2000-01-01 00:00:00)
|
||||
touch -t 200001010000 $out/bin/test
|
||||
original_timestamp=$(stat -c %Y $out/bin/test)
|
||||
patchShebangs $out/bin/test
|
||||
new_timestamp=$(stat -c %Y $out/bin/test)
|
||||
if ! [ "$original_timestamp" = "$new_timestamp" ]; then
|
||||
echo "Timestamp changed from $original_timestamp to $new_timestamp"
|
||||
exit 1
|
||||
fi
|
||||
''
|
||||
];
|
||||
assertion = "grep '^#!${stdenv.shell}' $out/bin/test > /dev/null";
|
||||
})
|
||||
// {
|
||||
meta = { };
|
||||
};
|
||||
};
|
||||
in
|
||||
stdenv.mkDerivation {
|
||||
@ -116,6 +215,10 @@ stdenv.mkDerivation {
|
||||
updates-nix-store
|
||||
split-string
|
||||
without-trailing-newline
|
||||
dont-patch-builtins
|
||||
read-only-script
|
||||
preserves-read-only
|
||||
preserves-timestamp
|
||||
;
|
||||
};
|
||||
buildCommand = ''
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user