#!/bin/bash

########################
# Argumentpruefung
########################

if [ $# -eq 0 ]
then
    echo "Es wurden keine Parameter uebergeben."
    exit 1
fi

if [ $# -gt 1 ]
then
    echo "Es wurden mehr als ein Parameter uebergeben."
    exit 1
fi

if !([ -f "$1" ])
then
    echo "Datei $1 existiert nicht."
    exit 1
fi

########################
# "Globale" Variablen
# (Zum Veraendern!)
########################

# Zusatz beim Speichern der Paketliste
SUFFIX="all"

# Verzeichnis fuer temporaere Dateien
TEMP="/tmp"

########################
# "Lokale" Variablen
########################

# Quelldatei mit den Paketen, die installiert
# werden sollen.
ORIGIN="$1"

# Name der letzten Paketdatei
LAST="$ORIGIN"

# Name der neuen Paketdatei
NEW="$ORIGIN"

# Anzahl der Pakete in der Quelldatei
NUMBER=`wc -l "$ORIGIN" | nawk '{ print $1 }'`

# Alte Anzahl Pakete zum Vergleich
OLDNUMBER="0"

# Zaehler fuer die Iteration
COUNTER=0

########################
# Implementierung
########################

# Solange iterieren, bis keine neuen Pakete
# dazu gekommen sind.
while [ $OLDNUMBER != $NUMBER ]
do
    # Neue Iteration beginnen.
    # Neuen Dateinamen setzen.
    COUNTER=$(( $COUNTER + 1 ))
    NEW="$TEMP/$ORIGIN$COUNTER"
    TEMPFILE="$NEW-tmp"
    
    # Pakete extrahieren
    xargs -a "$LAST" apt-cache depends -i | \
        nawk '{ print $NF }' | sort | uniq | \
        egrep -v "<.*>" \
        > "$TEMPFILE" | exit 1

    # Alte Pakete hinzufuegen
    cat "$LAST" >> "$TEMPFILE" | exit 1
    
    # Paketliste sortieren
    cat "$TEMPFILE" | sort | uniq > "$NEW" | exit 1

    # Alte Daten sichern
    LAST="$NEW"
    OLDNUMBER=$NUMBER

    # Neue Anzahl Pakete berechnen
    NUMBER=`wc -l "$NEW" | nawk '{ print $1 }'`
done

# Kopiere komplette Paketliste
cp "$NEW" "$ORIGIN-$SUFFIX" | exit 1
echo
echo "Paketliste mit $NUMBER Paketen kopiert nach \"$ORIGIN-$SUFFIX\"."
echo
echo "Zum Download der Pakete:"
echo "xargs -a \"$ORIGIN-$SUFFIX\" sudo apt-get install --reinstall -d"
echo

exit 0
