You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
37 lines
880 B
37 lines
880 B
3 years ago
|
#!/bin/sh -f
|
||
|
# a script to transform a tag name, a list of tag names (ANDed then),
|
||
|
# or a complex boolean expression into a list of package list names.
|
||
|
# examples of expected stdin:
|
||
|
#
|
||
|
# kde
|
||
|
# live gnome
|
||
|
# (base && (kernel || apt || alterator))
|
||
|
#
|
||
|
# NB: tags are processed using word boundaries,
|
||
|
# so avoid using "-" in tag names
|
||
|
|
||
|
DIR="${1:?need base directory}"
|
||
|
|
||
|
warn() {
|
||
|
echo "$0: WARNING: $*" >&2
|
||
|
exit
|
||
|
}
|
||
|
|
||
|
[ -d "$DIR" ] || warn "$DIR nonexistent"
|
||
|
cd "$DIR" || warn "cannot change to $DIR"
|
||
|
|
||
|
# NB: care with quoting
|
||
|
transformed="$(sed \
|
||
|
-e "s,\([^&|! ()']\+\),-regex ^.*\\\\<\1\\\\>.*$,g" \
|
||
|
-e "s, *&& *, -a ,g" \
|
||
|
-e "s, *|| *, -o ,g" \
|
||
|
-e "s, *! *, ! ,g" \
|
||
|
-e "s, *( *, ( ,g" \
|
||
|
-e "s, *) *, ) ,g")"
|
||
|
|
||
|
[ "$DEBUG" = 2 ] && echo "`basename $0`: transformed = \"$transformed\"" >&2
|
||
|
[ -z "$transformed" ] ||
|
||
|
find $transformed \
|
||
|
| sed 's,^\./,,' \
|
||
|
| egrep -v '(\.sw.|~)$'
|