diff options
| author | Woodpecker CI <emmett1.2miligrams@protonmail.com> | 2026-04-18 14:35:01 +0000 |
|---|---|---|
| committer | Woodpecker CI <emmett1.2miligrams@protonmail.com> | 2026-04-18 14:35:01 +0000 |
| commit | 5f9797ffca7eff88a125f67378d4c86f7412abf5 (patch) | |
| tree | 57714e45cd122e76b3c492c4ecd8db84c444a508 /linux-firmware/dedup-firmware.sh | |
| parent | 4c7182a3f7c6ef1393fc504a94b40acc77411e11 (diff) | |
| download | alicelinux-5f9797ffca7eff88a125f67378d4c86f7412abf5.tar.gz alicelinux-5f9797ffca7eff88a125f67378d4c86f7412abf5.zip | |
Woodpecker CI 439f45812902545b3facf081829b896723743daf [SKIP CI]
Diffstat (limited to 'linux-firmware/dedup-firmware.sh')
| -rw-r--r-- | linux-firmware/dedup-firmware.sh | 53 |
1 files changed, 44 insertions, 9 deletions
diff --git a/linux-firmware/dedup-firmware.sh b/linux-firmware/dedup-firmware.sh index 64ce7169..51dad3e0 100644 --- a/linux-firmware/dedup-firmware.sh +++ b/linux-firmware/dedup-firmware.sh @@ -11,10 +11,10 @@ err() { verbose=: destdir= + while test $# -gt 0; do case $1 in -v | --verbose) - # shellcheck disable=SC2209 verbose=echo shift ;; @@ -22,7 +22,6 @@ while test $# -gt 0; do if test -n "$destdir"; then err "unknown command-line options: $*" fi - destdir="$1" shift ;; @@ -34,7 +33,7 @@ if test -z "$destdir"; then fi if ! test -d "$destdir"; then - err "provided directory does not exit." + err "provided directory does not exist." fi if ! command -v rdfind >/dev/null; then @@ -44,11 +43,47 @@ fi $verbose "Finding duplicate files" rdfind -makesymlinks true -makeresultsfile true "$destdir" >/dev/null -grep DUPTYPE_WITHIN_SAME_TREE results.txt | grep -o "$destdir.*" | while read -r l; do - target="$(realpath "$l")" - target="/lib/firmware/${target#$destdir}" - $verbose "Correcting path for $l" - ln -sf "$target" "$l" -done +# --relative is a GNU coreutils ln extension; not available in BusyBox. +# Compute the relative path ourselves using a portable shell function. +relpath() { + # relpath <target_abs> <link_abs> + # Prints the relative path from the directory of <link_abs> to <target_abs>. + target="$1" + link_dir=$(dirname "$2") + + # Strip common prefix component-by-component. + t="$target" + b="$link_dir" + + # Normalise: remove trailing slashes + t=${t%/} + b=${b%/} + + # Walk up from b until it is a prefix of t + up="" + while [ -n "$b" ] && [ "${t#$b/}" = "$t" ] && [ "$t" != "$b" ]; do + b=$(dirname "$b") + up="../$up" + done + + if [ "$t" = "$b" ]; then + # Same directory + rel="." + else + rel="$up${t#$b/}" + fi + + printf '%s\n' "$rel" +} + +grep DUPTYPE_WITHIN_SAME_TREE results.txt \ + | grep -o "$destdir[^ ]*" \ + | while read -r l; do + target=$(realpath "$l") + $verbose "Correcting path for $l" + rel=$(relpath "$target" "$l") + # BusyBox ln uses short flags: -s (symbolic), -f (force) + ln -sf "$rel" "$l" + done rm results.txt |