summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelix Fietkau2025-07-15 13:26:16 +0000
committerFelix Fietkau2025-07-15 18:48:45 +0000
commit471fd0a50281ce2a37fece402c4c5bd609b6d580 (patch)
tree7d307bd05251add41b76bebc80c981a7623b45d6
parent06267823a39c812e6ebea50264b0367ed8473ba4 (diff)
downloadopenwrt-471fd0a50281ce2a37fece402c4c5bd609b6d580.tar.gz
build: ipkg-remove: fix source name / package confusion, optimize
The script always gets passed the package name, not the source name. Optimize for the default case where the package name matches the filename prefix. Signed-off-by: Felix Fietkau <nbd@nbd.name>
-rwxr-xr-xscripts/ipkg-remove21
1 files changed, 14 insertions, 7 deletions
diff --git a/scripts/ipkg-remove b/scripts/ipkg-remove
index f4957004c0..19d7148e83 100755
--- a/scripts/ipkg-remove
+++ b/scripts/ipkg-remove
@@ -3,17 +3,24 @@
sourcename="$1"; shift
for pkg in "$@"; do
- tar -Ozxf "$pkg" ./control.tar.gz 2>/dev/null | tar -Ozxf - ./control 2>/dev/null | \
- while read field value; do
- if [ "$field" = "SourceName:" ] && [ "$value" = "$sourcename" ]; then
- rm -vf "$pkg"
- break
- fi
- done
case "$pkg" in
*/"${sourcename}_"*.ipk)
rm -vf "$pkg"
;;
+ *)
+ tar -Ozxf "$pkg" ./control.tar.gz 2>/dev/null | tar -Ozxf - ./control 2>/dev/null | {
+ packagename=
+ abiversion=
+ while read field value; do
+ case "$field" in
+ Package:) packagename="$value";;
+ ABIVersion:) abiversion="$value";;
+ esac
+ done
+ [ -n "$abiversion" ] && packagename="${packagename%%$abiversion}"
+ [ "$packagename" = "$sourcename" ] && rm -vf "$pkg"
+ }
+ ;;
esac
done