#!/usr/bin/sh

#Licence GPLv3 and later
#Author: Alexey Loginov

export TEXTDOMAIN="aum++"
export TEXTDOMAINDIR="/usr/share/locale"
. gettext.sh

TARGET0="$1"
DISTR_ARCH="$2"
ADD_AUM="$3"
DISTR=mageia
DEV_DISTR=cauldron
USER0="mass_rebuild"
HOME0="/home"
TARGET="$DISTR$TARGET0"
DISTRIB="http://mirror.yandex.ru/$DISTR/distrib/$TARGET0/$DISTR_ARCH"
MEDIA1="$DISTRIB/media/core/release"
MEDIA2="$DISTRIB/media/core/updates"
PWD=`pwd`

MES0="$(gettext 'Usage:')"
MES1="$(eval_gettext 'the first parameter is distro number, for example, 4 or $DEV_DISTR')"
MES2="$(gettext 'the second parameter is architecture of builing packages, for example, i586 or x86_64')"
MES3="$(gettext 'the third parameter is additional options for aum++ (optional)')"
MES4="$(gettext 'You must be root')"
MES5="$(gettext 'Exit')"
MES6="$(eval_gettext 'The first parameter is not number of distro and not $DEV_DISTR')"
MES7="$(gettext 'No architecture by the second parameter')"
MES8="$(eval_gettext 'Unknown architecture $DISTR_ARCH')"
MES9="$(eval_gettext 'There is no $AUM')"
MES10="$(eval_gettext 'Using $AUM')"
MES11="$(eval_gettext 'There is no repo $SKEL_REPO, please install package aum++')"
MES12="$(eval_gettext 'There is no $SUDO')"
MES13="$(eval_gettext 'Using working directory $MASS_REBUILD')"
MES14="$(eval_gettext 'Archive of chroot $CHROOT did not find, creating is starting')"
MES15="$(gettext 'Finished')"
MES16="$(gettext 'There is no archive of chroot')"
MES17="$(eval_gettext 'Copying $SKEL_REPO/* into $REPO')"
MES18="$(gettext 'There is no /usr/bin/repo-hdlistgen, please install package aum++')"
MES19="$(gettext 'Starting script repo-hdlistgen')"
MES20="$(gettext 'Script repo-hdlistgen was finished')"
MES21="$(eval_gettext 'Please put src.rpm for rebuilding into $SRPMS')"
MES22="$(eval_gettext 'The list of packages for rebuilding $MASS_REBUILD/list.txt was created automatically')"
MES23="$(gettext 'Starting mass rebuilding')"
MES24="$(eval_gettext 'Log file: $LOG')"
MES25="$(eval_gettext 'MASS_REBUILD: Package $LINE was built successfully')"
MES26="$(eval_gettext 'MASS_REBUILD: Package $LINE was not built')"
MES27="$(gettext 'Mass rebuilding was finished')"
MES28="$(eval_gettext 'Please see $MASS_REBUILD/list_old.txt for packages, that were not built')"
MES29="$(eval_gettext 'Please see $MASS_REBUILD/repo for packages, that were built')"
MES30="$(eval_gettext 'Please see logs in $LOG')"
MES31="$(eval_gettext 'If you finished to build packages fully, then run mass_rebuild_test to test of installation for all packages from repo $MASS_REBUILD/repo.')"
MES32="$(gettext 'Attention: You must have enough free space in /home')"
MES33="$(gettext 'Starting new rebuild cycle')"

if [ $# -eq 0 ]
then
  echo "$MES0"
  echo "$MES1"
  echo "$MES2"
  echo "$MES3"
  exit 1
fi
if [ "$(id -u)" != "0" ]
then
  echo "$MES4"
  echo "$MES5"
  exit 1
fi
MASS_REBUILD="$HOME0/$USER0"
LOG="$MASS_REBUILD/mass_rebuild.log"
mkdir -p "$MASS_REBUILD"
if [ ! "$1" = "$DEV_DISTR" ]
then
  N=$(expr $1 + 0 2>/dev/null) || echo "$MES6"|tee -a $LOG; exit 1
else
  TARGET="$DEV_DISTR"
fi
if [ -z "$DISTR_ARCH" ]
then
  echo "$MES7"|tee -a $LOG
  exit 1
fi
if [ ! "$DISTR_ARCH" = "i586" ]
then
  if [ ! "$DISTR_ARCH" = "x86_64" ]
  then
    echo "$MES8"|tee -a $LOG
    exit 1
  fi
fi
AUM="$PWD/aum++"
if [ ! -f "$AUM" ]
then
  echo "$MES9"|tee -a $LOG
  AUM="/usr/bin/aum++"
  if [ ! -f "$AUM" ]
  then
    echo "$MES9"|tee -a $LOG
    echo "$MES5"|tee -a $LOG
    exit 1
  fi
fi
echo "$MES10"|tee -a $LOG
SKEL_REPO="/usr/share/aum++/skel/repo"
if [ ! -d "$SKEL_REPO" ]
then
  echo "$MES11"|tee -a $LOG
  echo "$MES5"|tee -a $LOG
  exit 1
fi
SUDO="/usr/bin/sudo"
if [ ! -f "$SUDO" ]
then
  echo "$MES12"|tee -a $LOG
  echo "$MES5"|tee -a $LOG
  exit 1
fi
echo "$MES13"|tee -a $LOG
CHROOT="$MASS_REBUILD/"$DISTR"_"$TARGET0"_"$DISTR_ARCH".tar.xz"
if [ ! -f "$CHROOT" ]
then
  echo "$MES14"|tee -a $LOG
  echo "%distro_section mrc" > /tmp/rpmmacros
  # workaround for genchroot-tarball without --upload-dir=
  cd "$MASS_REBUILD"
  # workaround for bug https://bugs.launchpad.net/aum/+bug/1185578 and for genchroot-tarball without --log-file=
  sudo echo n|genchroot-tarball -v --name=""$DISTR"_"$TARGET0"_"$DISTR_ARCH"" --format=xz --add-rpmmacros="/tmp/rpmmacros" --urpmi-options="--download-all,--quiet" --distrib="$DISTRIB" basesystem-minimal rpm-build sudo urpmi curl |tee -a $LOG
  sudo echo n|genchroot-tarball -v --name=""$DISTR"_"$TARGET0"_"$DISTR_ARCH"" --format=xz --add-rpmmacros="/tmp/rpmmacros" --urpmi-options="--download-all,--quiet" --distrib="$DISTRIB" basesystem-minimal rpm-build sudo urpmi curl |tee -a $LOG
  cd "$PWD"
  rm -f /tmp/rpmmacros
  echo "$MES15"|tee -a $LOG
fi
if [ ! -f "$CHROOT" ]
then
  echo "$MES16"|tee -a $LOG
  exit 1
fi
REPO="$MASS_REBUILD/repo/$TARGET"
if [ ! -d "$REPO" ]
then
  echo "$MES17"|tee -a $LOG
  mkdir -p $REPO
  cp -af $SKEL_REPO/* $REPO/
fi
if [ ! -f "/usr/bin/repo-hdlistgen" ]
then
  echo "$MES18"|tee -a $LOG
  exit 1
fi
echo "$MES19"|tee -a $LOG
repo-hdlistgen $USER0 $TARGET > /dev/null 2>&1
echo "$MES20"|tee -a $LOG
SRPMS="$MASS_REBUILD/SRPMS"
mkdir -p "$SRPMS"
PACKAGES=`dir $SRPMS`
if [ -z "$PACKAGES" ]
then
  echo "$MES21"|tee -a $LOG
  echo "$MES5"|tee -a $LOG
  exit 1
fi
if [ ! -f "$MASS_REBUILD/list.txt" ]
then
  dir -1 $SRPMS > "$MASS_REBUILD/list.txt"
  echo "$MES22"|tee -a $LOG
fi
# add Enter if somebody forgot (добавить Enter если кто-нибудь забыл)
printf "\n" >> "$MASS_REBUILD/list.txt"
# delete all spaces and tabs (удалить все пробелы и символы табуляции)
sed -i 's/^[ \t]*//;s/[ \t]*$//' "$MASS_REBUILD/list.txt"
# delete all empty lines (удалить все пустые строки)
sed -i '/^$/d' "$MASS_REBUILD/list.txt"
cp -f "$MASS_REBUILD/list.txt" "$MASS_REBUILD/list_old.txt"
echo "$MES23"|tee -a $LOG
rm -f "$MASS_REBUILD/list_new.txt"
if [ ! -f "$MASS_REBUILD/list_new.txt" ]
then
  cp -f "$MASS_REBUILD/list_old.txt" "$MASS_REBUILD/list_new.txt"
fi
echo "$MES24"|tee -a $LOG
FLAG=0
while [ "$FLAG" = "0" ]
do
  cat "$MASS_REBUILD/list_old.txt"|while read LINE
  do
    $AUM -v --chroot=$CHROOT --log-file="$LOG" --arch="$DISTR_ARCH" --upload-rpm-dir="$MASS_REBUILD/repo/$TARGET/RPMS" --upload-srpm-dir="$MASS_REBUILD/repo/$TARGET/SRPMS" --add-media="$MEDIA1" --add-media="$MEDIA2" --distrib-own="file://$MASS_REBUILD/repo/$TARGET/$DISTR_ARCH" "$ADD_AUM" "--tmp-dir=/home/mass_rebuild/mass_rebuild_tmp" "$SRPMS/$LINE"
    if [ "$?" = "0" ]
    then
      echo "$MES19"|tee -a $LOG
      repo-hdlistgen $USER0 $TARGET > /dev/null 2>&1
      echo "$MES20"|tee -a $LOG
      sed -i "/$LINE/d" "$MASS_REBUILD/list_new.txt"
      echo "$MES25"|tee -a $LOG
    else
      echo "$MES26"|tee -a $LOG
    fi
  done
  A=`cat "$MASS_REBUILD/list_old.txt"`
  B=`cat "$MASS_REBUILD/list_new.txt"`
  cp -f "$MASS_REBUILD/list_new.txt" "$MASS_REBUILD/list_old.txt"
  if [ "$A" = "$B" ]
  then
    FLAG=1
    echo "$MES27"|tee -a $LOG
    echo "$MES28"|tee -a $LOG
    echo "$MES29"|tee -a $LOG
    echo "$MES30"|tee -a $LOG
    echo "$MES31 $MES32"|tee -a $LOG
  else
    echo "$MES33"|tee -a $LOG
  fi
done
