20100208

emerge-show-affected

Иногда требуется сохранить список портеджей дженту, которые будут изменены при том или ином вызове emerge.
накидал для этого скриптик, обозвав его emerge-show-affected:

Вот, напрпимер так можно сохранить бинарные версии пакетов, которые будут затронуты при обновлении мира, чтобы потом при необходимости восстановить:
. ./emerge-show-affected -auD world  | xargs quickpkg --include-config=y

Ещё несколько примеров:

Сохранить список изменяемых пакетов:
emerge-show-affected -auD world > ./list.txt

А так, например, посмотреть, что произойдет, если захочется перейти на нестабильную ветку.
ACCEPT_KEYWORDS="~amd64" . ./show-affected-emerge --update world


Посмотреть, что изменится, подгрузив список строк-параметров. например имён пакетов или параметров emerge.
. ./emerge-show-affected - < ./list.txt

Посмотреть что  изменится при обновлении системы подгрузив список программ, подлежащих обновлению из файла ./list.txt и сохранив результат в файл ./result.txt.
. ./emerge-show-affected - --update --newuse <./list.txt> ./result.txt


В общем — терпимый базовый набор функционала. Того, который мне требуется.

Скрипт — простой набросок, который выбирает из вывода emerge записи, указывающие на обновление-удаление-пересборку пакетов и выдаёт их полные названия пользователю.
Сырость заключается в том, что при неправильном запросе к emerge  результат будет ошибочным.


#!/bin/bash
# emerge-show-affected
# show affected packages when emerge execute
#echo "a"
#b="init"

# if parameter "-" present, read stdin as adititional parameters list

#
# example:
#  $0 -uD world - < /path/to/addititional/list.txt
#
# example w/o stdin reading:
#  $0 -uD world
#

params=""
needForSTDIN="false"
for i in $@; do
    if ! [ "$i" = "-" ]; then
        params="$params $i"
    else
        needForSTDIN="true"
    fi 
done

if [ $needForSTDIN =  "true" ];  then
   read  -d@  params2
fi

params="${params} ${params2}"


if ! [ -z "$params" ] ;  then
 emerge -p --color n $params |  egrep "ebuild.*[D|U|R].*\]"  | awk '{print $4}'
fi

Комментариев нет: