|
|
-q, --quiet Be less verbose (also passed to emerge command) | -q, --quiet Be less verbose (also passed to emerge command) |
-v, --verbose Be more verbose | -v, --verbose Be more verbose |
-u, --no-util UTIL Do not use features provided by UTIL | -u, --no-util UTIL Do not use features provided by UTIL |
--no-util=UTIL UTIL can be one of portage-utils, pkgcore, or equery |
--no-util=UTIL UTIL can be one of portage-utils or pkgcore |
or it can be a *quoted* space-delimited list. | or it can be a *quoted* space-delimited list. |
-L, --library NAME Emerge existing packages that use the library with NAME | -L, --library NAME Emerge existing packages that use the library with NAME |
--library=NAME NAME can be a full path to the library or a basic | --library=NAME NAME can be a full path to the library or a basic |
|
|
progress $@ | progress $@ |
fi | fi |
} | } |
|
# Get the name of a package owning a file on the filesystem using one of several |
|
# utilities: This is a placeholder. The function is defined in get_args() |
|
get_file_owner() { :; } |
# Replace whitespace with linebreaks, normalize repeated '/' chars, and sort -u | # Replace whitespace with linebreaks, normalize repeated '/' chars, and sort -u |
# (If any libs have whitespace in their filenames, someone needs punishment.) | # (If any libs have whitespace in their filenames, someone needs punishment.) |
clean_var() { | clean_var() { |
|
|
shift | shift |
done | done |
# Check if various utils are allowed and installed | # Check if various utils are allowed and installed |
if [[ $avoid_utils != *portage-utils* ]] && hash q 2> /dev/null; then |
if [[ $avoid_utils != *portage-utils* ]] && hash qfile 2> /dev/null; then |
PORTAGE_UTILS=1 |
get_file_owner() { qfile -qvC "$@"; } |
elif [[ $avoid_utils != *pkgcore* ]] && hash pquery 2> /dev/null; then | elif [[ $avoid_utils != *pkgcore* ]] && hash pquery 2> /dev/null; then |
PKGCORE=1 |
get_file_owner() { local IFS=,; pquery --nocolor --owns="$*"; } |
elif [[ $avoid_utils != *equery* ]] && hash equery 2> /dev/null; then |
# equery disabled for incompatibility with modern portage. |
EQUERY=1 |
# elif [[ $avoid_utils != *equery* ]] && hash equery 2> /dev/null; then |
|
# get_file_owner() { equery -q -C b $@; } |
|
else |
|
get_file_owner() { |
|
local IFS=$'\n' |
|
find /var/db/pkg -name CONTENTS -print0 | |
|
xargs -0 grep -Fl "$*" | |
|
sed 's:/var/db/pkg/\(.*\)/CONTENTS:\1:' |
|
} |
fi | fi |
EMERGE_OPTIONS=(${EMERGE_OPTIONS[@]/%-p/--pretend}) | EMERGE_OPTIONS=(${EMERGE_OPTIONS[@]/%-p/--pretend}) |
EMERGE_OPTIONS=(${EMERGE_OPTIONS[@]/%-f/--fetchonly}) | EMERGE_OPTIONS=(${EMERGE_OPTIONS[@]/%-f/--fetchonly}) |
|
|
set_trap "$LIST.4_packages*" | set_trap "$LIST.4_packages*" |
rm -f $LIST.4* | rm -f $LIST.4* |
while read obj FILE; do | while read obj FILE; do |
if [[ $PORTAGE_UTILS ]]; then |
EXACT_PKG=$(get_file_owner $FILE) |
EXACT_PKG=$(qfile -qvC $FILE) |
|
elif [[ $PKGCORE ]]; then |
|
EXACT_PKG=$(pquery --nocolor --owns="$FILE") |
|
elif [[ $EQUERY ]]; then |
|
EXACT_PKG=$(equery -q -C b $FILE) |
|
else |
|
EXACT_PKG=$( |
|
find /var/db/pkg -name CONTENTS | |
|
xargs grep -Fl "obj $FILE " | |
|
sed -e 's:/var/db/pkg/\(.*\)/CONTENTS:\1:g' |
|
) |
|
fi |
|
if [[ $EXACT_PKG ]]; then | if [[ $EXACT_PKG ]]; then |
# Strip version information | # Strip version information |
PKG="${EXACT_PKG%%-r[[:digit:]]*}" | PKG="${EXACT_PKG%%-r[[:digit:]]*}" |
|
|
elif [[ -rs $LIST.3_rebuild ]]; then | elif [[ -rs $LIST.3_rebuild ]]; then |
rebuildList=" $(<"$LIST.3_rebuild") " | rebuildList=" $(<"$LIST.3_rebuild") " |
rebuildList=(${rebuildList//[[:space:]]obj[[:space:]]/ }) | rebuildList=(${rebuildList//[[:space:]]obj[[:space:]]/ }) |
if [[ $PORTAGE_UTILS ]]; then |
get_file_owner "${rebuildList[@]}" > $LIST.4_ebuilds |
qfile -qvC ${rebuildList[@]} |
|
elif [[ $PKGCORE ]]; then |
|
IFS=, |
|
pquery --nocolor --owns="${rebuildList[*]}" |
|
IFS="$oIFS" |
|
elif [[ $EQUERY ]]; then |
|
equery -q -C b ${rebuildList[@]} |
|
else |
|
find /var/db/pkg -name CONTENTS | |
|
xargs grep -Fl "$rebuildList" | |
|
sed 's:/var/db/pkg/\(.*\)/CONTENTS:=\1:' |
|
fi > $LIST.4_ebuilds |
|
einfo "Generated new $LIST.4_ebuilds" | einfo "Generated new $LIST.4_ebuilds" |
else | else |
einfo 'Nothing to rebuild.' | einfo 'Nothing to rebuild.' |