File: reprepro

package info (click to toggle)
simple-cdd 0.6.9
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, sid, trixie
  • size: 344 kB
  • sloc: python: 1,904; sh: 111; makefile: 13
file content (73 lines) | stat: -rw-r--r-- 2,966 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
conf=$MIRROR/conf

# attempt to resolve dependencies
test -z "$reprepro_retries" && reprepro_retries="40"
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/default_${CODENAME}_${component}_${a}_Packages"
    done
done

mytmpdir=$(mktemp -d)
trap "rm -rf $mytmpdir" EXIT

# get a list of provides
grep --no-filename ^Provides $upstream_package_lists | cut -d : -f 2- | tr ',' '\n' | perl -np -e 's/\s+\(.*\)//; s/^\s*//' | sort -u >$mytmpdir/provides

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}' | sed -e 's/:any//' | sort -u)"
    if [ "$NORECOMMENDS" != "1" ]; then
        recommends="$(awk -F Recommends: '/Recommends:/{print $2}' $package_lists | tr '|,' '\n' | awk '{print $1}' | sed -e 's/:any//' | sort -u)"
    else
        recommends=""
    fi

    for p in $all_packages $dependencies ; do
        echo $p
    done > $mytmpdir/packages
    provide_dependencies=$(providecheck "$mytmpdir/provides" "$mytmpdir/packages" | 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 || true)"
            if [ -z "$satisfies" ]; then
                # search for other packages that provide the desired features
                providers=$(grep-dctrl -n --show-field Package --field Provides $p $upstream_package_lists || true)
                if [ -z "$providers" ]; then
                    echo "failed to find a package providing the virtual package '$p'"
                    exit 1
                fi
                dependencies="$dependencies $providers"
            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
        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

if diff -q $conf/package-list $conf/package-list.old ; then
    echo "no new dependencies, finished in $i attempts."
else
    echo "dependencies still missing after $i attempts."
    echo "it could be that some dependencies are not satisfiable,"
    echo "or that more iterations are needed. if later steps fail"
    echo "due to missing dependencies, consider raising the value"
    echo "reprepro_retries in your configuration."
fi