conf=$MIRROR/conf

# attempt to resolve dependencies
test -z "$reprepro_retries" && reprepro_retries="20"
package_lists=""
for a in $ARCHES ; do
    for component in $mirror_components ; do
        package_lists="$package_lists $MIRROR/dists/$CODENAME/$component/binary-$a/Packages"
        upstream_package_lists="$upstream_package_lists $MIRROR/lists/${CODENAME}_default_deb_${component}_${a}"
    done
done

# get a list of provides
provides="$(zgrep ^Provides $upstream_package_lists | cut -d : -f 2 | tr ',' '\n' | sort -u)"
for i in $(seq $reprepro_retries); do
    cp $conf/package-list $conf/package-list.old

    dependencies="$(awk -F Depends: '/Depends:/{print $2}' $package_lists | tr '|,' '\n' | awk '{print $1}' | sort -u)"
    if [ "$NORECOMMENDS" != "1" ]; then
        recommends="$(awk -F Recommends: '/Recommends:/{print $2}' $package_lists | tr '|,' '\n' | awk '{print $1}' | sort -u)"
    else
        recommends=""
    fi

    provide_dependencies="$(providecheck "$provides" "$all_packages $dependencies" | sort -u)"
    if [ -n "$provide_dependencies" ]; then
        for p in $provide_dependencies ; do
            # see if a package already satisfies the provides
            satisfies="$(grep-dctrl -n --show-field Package --field Provides --field Package $p $package_lists)"
            if [ -z "$satisfies" ]; then
                # search for other packages that provide the desired features
                dependencies="$dependencies $(zcat $upstream_package_lists | grep-dctrl -n --show-field Package --field Provides $p)"
            fi
        done
    fi

    for p in $dependencies $recommends $all_packages ; do
        echo $p install 
    done | sort -u > $conf/package-list

    if diff -q $conf/package-list $conf/package-list.old ; then
        echo "no new dependencies, finished in $i attempts."
        break
    else
        echo "getting missing dependencies... attempt $i"
        if ! reprepro $reprepro_opts --nolistsdownload --noskipold update ; then
            ret=$?
            echo "reprepro failed with exit code: $ret"
            exit 1
        fi
    fi
done
