init urpm-wrb script

This commit is contained in:
Mikhail Novosyolov 2019-06-13 01:41:51 +03:00
parent 5fdbcde0f9
commit b5c55c2504
2 changed files with 51 additions and 1 deletions

View file

@ -34,6 +34,7 @@ install:
for d in $(SUBDIRS); do make DESTDIR=$(DESTDIR) -C $$d install; [ $$? = 0 ] || exit 1; done for d in $(SUBDIRS); do make DESTDIR=$(DESTDIR) -C $$d install; [ $$? = 0 ] || exit 1; done
install -m 644 urpmmisc.py $(DESTDIR)/$(PKGDIR)/urpmmisc.py; install -m 644 urpmmisc.py $(DESTDIR)/$(PKGDIR)/urpmmisc.py;
install -m 755 urpm-wrb.sh $(DESTDIR)/usr/bin/urpm-wrb
for d in `python localizer.py --list`; do\ for d in `python localizer.py --list`; do\

49
urpm-wrb.sh Executable file
View file

@ -0,0 +1,49 @@
#!/usr/bin/env bash
# urpm-wrb: what to rebuild after ABI breakage or major so version bump
# Authors:
# - Mikhail Novosyolov <m.novosyolov@rosalinux.ru>, 2019
echo_help(){
echo "
urpm-wrb helps to find names of source packages which have to be rebuilt e.g. after ABI breakage or major so version bump.
Usage:
urpm-wrb <list of packages>
Examples:
urpm-wrb lib64krb5_3
urpm-wrb lib64krb5_3 lib64kdb5_8 lib64kadm5srv_mit10
"
exit "$1"
}
TMP="$(mktemp)"
trap 'rm -rf "$TMP"' EXIT INT QUIT TERM
_main_method2(){
while read -r line
do
while read -r line2
do
urpmq --sourcerpm "$line2" | awk -F ': ' '{print $2}' | rev | cut -d '-' -f 3- | rev
done < <(urpmq --whatrequires "$line")
done < <(echo "$@" | sed -e "s, ,\\n,g")
}
_main(){
# First try the fastest method, but it will not work if either of packages from the list
# does not have reverse dependencies
urpmq --whatrequires --sourcerpm "$@" | awk -F ': ' '{print $2}' | rev | cut -d '-' -f 3- | rev | sort -u > "$TMP"
method1_rc="${PIPESTATUS[0]}"
if [ "$method1_rc" != 1 ]
then if [ "$(cat "$TMP" | wc -l)" -gt 0 ]; then cat "$TMP"; return; fi
else exit 1
fi
# If nothing was found and if there were no errors, try a longer method
_main_method2 "$@" | sort -u
}
case "$1" in
-h | --help | -help ) echo_help 0 ;;
* ) if [ -n "$1" ]; then _main "$@"; else echo_help 2 ; fi ;;
esac