about summary refs log tree commit diff
path: root/nixpkgs/pkgs/build-support/nuke-references/builder.sh
blob: 7da322032185d07311b10ae0e11406b7c574387d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
source $stdenv/setup

mkdir -p $out/bin
cat > $out/bin/nuke-refs <<EOF
#! $SHELL -e

excludes=""
while getopts e: o; do
    case "\$o" in
        e) storeId=\$(echo "\$OPTARG" | $perl/bin/perl -ne "print \"\\\$1\" if m|^\Q$NIX_STORE\E/([a-z0-9]{32})-.*|")
           if [ -z "\$storeId" ]; then
               echo "-e argument must be a Nix store path"
               exit 1
           fi
           excludes="\$excludes(?!\$storeId)"
        ;;
    esac
done
shift \$((\$OPTIND-1))

for i in "\$@"; do
    if test ! -L "\$i" -a -f "\$i"; then
        cat "\$i" | $perl/bin/perl -pe "s|\Q$NIX_STORE\E/\$excludes[a-z0-9]{32}-|$NIX_STORE/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-|g" > "\$i.tmp"
        if test -x "\$i"; then chmod +x "\$i.tmp"; fi
        mv "\$i.tmp" "\$i"
    fi
done
EOF
chmod +x $out/bin/nuke-refs