All pastes #922218 Raw Edit

Someone

public text v1 · immutable
#922218 ·published 2008-02-28 17:24 UTC
rendered paste body
#!/bin/sh
# SCRIPT: emerge-pf [-a|--all] [-m|--mirrors] [emerge options] [package|class]

# Выдаем на стандартный вывод URL'ы для скачки пакетов,
# а на стандартный вывод ошибок список соответсвующих файлов,
# необходимых для построения указанных пакетов (или класса).
# Опция [-a|--all] игнорирует уже скаченные файлы в distfiles.
# Опция {-m|--mirrors} включает вывод URL всех зеркал.
# После опций скрипта (если они исп.) доступны типичные опции emerge.
# В качестве пакета можно указать слово "bootstrap" тогда процесс
# будет выполнен для пакетов необходимых для bootstrap.sh (EXPERIMENTED).
#
#                                           Идея Alex Zorg 2004; Mellon 2007

flg=""
flg2=""

if [ "$1" == "-a" ] || [ "$1" == "--all" ]; then
  flg="ALL"
  shift 1
fi

if [ "$1" == "-m" ] || [ "$1" == "--mirrors" ]; then
  flg2="MIRRORS"
  shift 1
fi

pkg="$*"

if [ "$pkg" == "bootstrap" ]
then
  pkg="baselayout portage gettext binutils gcc glibc texinfo zlib ncurses"

  fi

tmp1=`tempfile || echo /tmp/_emerge-tmp1_`
tmp2=`tempfile || echo /tmp/_emerge-tmp2_`
tmp3=`tempfile || echo /tmp/_emerge-tmp3_`
tmp4=`tempfile || echo /tmp/_emerge-tmp4_`

> $tmp2
> $tmp3

print_all() {
emerge -p -f $pkg >$tmp1

if [ -n "$flg2" ]; then
  cat $tmp1 | grep '^http:\|^ftp:' | sed s/" "/"\n"/g > $tmp4
else
  cat $tmp1 | grep '^http:\|^ftp:' | awk '{print $1}' > $tmp4
fi

for i in `cat $tmp4`
do
  #file=`echo "$i" | sed -e's|.*/||'`
  file=`basename "$i"`
  echo "$file" >> $tmp2 # files collector
  echo "$i"    >> $tmp3 # full URLs collector
done
}

print_needed_only() {
FETCHCOMMAND="echo \${URI}" RESUMECOMMAND="echo \${URI}" emerge -f $pkg >$tmp1 2>/dev/null

for i in `cat $tmp1 | grep '^http:\|^ftp:'`
do
  #file=`echo "$i" | sed -e's|.*/||'`
  file=`basename "$i"`
  echo "$file" >> $tmp2 # files collector
  echo "$i"    >> $tmp4 # full URLs collector
done

cat $tmp4 > $tmp3

if [ -z "$flg2" ]; then
  for i in `cat $tmp2`
  do
    grep -m 1 $i $tmp4 > $tmp3 # removing unneeded mirrors
  done
fi
}

if [ -n "$flg" ]; then
  print_all
else
  print_needed_only
fi

cat $tmp2 | sort -u >&2
cat $tmp3 | sort -u

rm -f $tmp1 $tmp2 $tmp3 $tmp4