aboutsummaryrefslogtreecommitdiff
path: root/linux-firmware/dedup-firmware.sh
diff options
context:
space:
mode:
authorWoodpecker CI <emmett1.2miligrams@protonmail.com>2026-04-18 14:35:01 +0000
committerWoodpecker CI <emmett1.2miligrams@protonmail.com>2026-04-18 14:35:01 +0000
commit5f9797ffca7eff88a125f67378d4c86f7412abf5 (patch)
tree57714e45cd122e76b3c492c4ecd8db84c444a508 /linux-firmware/dedup-firmware.sh
parent4c7182a3f7c6ef1393fc504a94b40acc77411e11 (diff)
downloadalicelinux-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.sh53
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