diff options
| author | Felix Fietkau | 2025-07-15 13:26:16 +0000 |
|---|---|---|
| committer | Felix Fietkau | 2025-07-15 18:48:45 +0000 |
| commit | 471fd0a50281ce2a37fece402c4c5bd609b6d580 (patch) | |
| tree | 7d307bd05251add41b76bebc80c981a7623b45d6 | |
| parent | 06267823a39c812e6ebea50264b0367ed8473ba4 (diff) | |
| download | openwrt-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-x | scripts/ipkg-remove | 21 |
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 |