-
-
Notifications
You must be signed in to change notification settings - Fork 15
/
Copy pathsync-form-other-arch.sh
executable file
·138 lines (117 loc) · 4.93 KB
/
sync-form-other-arch.sh
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#!/bin/bash
set -e
if test $# -ne 3; then
echo "error"
echo "syntax $0 DISTRO HOST ARCH"
exit 1
fi
reprepro --version
dpkg -l reprepro
DISTRO=$1
HOST=$2
ARCH=$3
declare -a old_versions=("9" "10" "11" "12" "13" "14" "15")
for version in "${old_versions[@]}"
do
excludes+=(--exclude "pool/main/l/llvm-toolchain-$version/" --exclude "dists/llvm-toolchain-$DISTRO-$version/")
done
echo "Ignore ${excludes[@]}"
TEMP=-i
rsync $TEMP -avzh --delete "${excludes[@]}" jenkins@$HOST:/srv/repository/$DISTRO/ /tmp/tmp-$DISTRO/
if ! test -d /tmp/tmp-$DISTRO/pool/main/; then
echo "Distro $DISTRO not existing yet"
exit 0
fi
versions=("15" "16" "17" "18" "")
for ver in "${versions[@]}"; do
declare -A src_pkg_versions
declare -A dst_pkg_versions
if test "$DISTRO" != "unstable"; then
base_dist="-$DISTRO"
else
base_dist=""
fi
dist="llvm-toolchain${base_dist}${ver:+-}$ver"
echo $dist
remote_packages=$(reprepro -b /tmp/tmp-$DISTRO/ list "$dist" | grep "$ARCH" | awk '{print $2,$3}')
while read -r line; do
pkg=$(echo "$line" | awk '{print $1}')
ver=$(echo "$line" | awk '{print $2}')
if [[ -n "$pkg" ]]; then
src_pkg_versions["$pkg"]=$ver
fi
done <<< "$remote_packages"
echo "Number packages coming from $ARCH: ${#src_pkg_versions[@]}"
echo "To see the list: reprepro -b /tmp/tmp-$DISTRO/ list '$dist'"
repo_packages=$(reprepro -b /srv/repository/$DISTRO/ list "$dist" | grep "amd64" | awk '{print $2,$3}')
while read -r line; do
pkg=$(echo "$line" | awk '{print $1}')
ver=$(echo "$line" | awk '{print $2}')
if [[ -n "$pkg" ]]; then
dst_pkg_versions["$pkg"]=$ver
fi
done <<< "$repo_packages"
echo "Number of local amd64 packages: ${#src_pkg_versions[@]}"
echo "To see the list: reprepro -b /srv/repository/$DISTRO/ list '$dist'"
for pkg in "${!src_pkg_versions[@]}"; do
if [[ -n "${dst_pkg_versions[$pkg]}" && "${src_pkg_versions[$pkg]}" != "${dst_pkg_versions[$pkg]}" ]]; then
echo "error: $pkg has different versions for $ARCH: ${src_pkg_versions[$pkg]} vs ${dst_pkg_versions[$pkg]}"
echo -n "build id: "
echo -n ${src_pkg_versions[$pkg]} | awk -F"." '{printf "%s", $2}'
echo -n " / "
echo ${dst_pkg_versions[$pkg]} | awk -F"." '{print $2}'
# exit 1
fi
done
done
echo "=== version check completed ==="
for f in /tmp/tmp-$DISTRO/dists/llvm-*/main/binary-$ARCH/; do
echo "f= $f"
echo "DISTRO = $DISTRO"
VERSION=$(echo "$f" | sed -E -e "s|/tmp/tmp-$DISTRO/dists/llvm-toolchain(-$DISTRO)?-?([[:digit:]]+)/.*|\2|g")
echo "VERSION $VERSION"
re='^[0-9]+$'
# Skip if version is in versions array
if [[ " ${old_versions[*]} " == *" $VERSION "* ]]; then
echo "Skipping old version $VERSION"
continue
fi
if ! [[ $VERSION =~ $re ]] ; then
# maybe debian unstable
VERSION=$(echo $f|sed -e "s|/tmp/tmp-$DISTRO/dists/llvm-toolchain-\([[:digit:]]\+\)/.*|\1|g")
if ! [[ $VERSION =~ $re ]] ; then
echo "Probably the nightly version"
break
fi
fi
# Workaround: don't import libclc (provided by amd64)
# checksum differences otherwise
rm -f /tmp/tmp-$DISTRO/pool/main/l/llvm-toolchain*/libclc-*deb
# Second workaround to remove _all packages
rm -f /tmp/tmp-$DISTRO/pool/main/l/llvm-toolchain*/*_all.deb
# Import of the stable and stabilisation version
if test $DISTRO == "unstable"; then
reprepro -Vb /srv/repository/$DISTRO/ includedeb llvm-toolchain-$VERSION /tmp/tmp-$DISTRO/pool/main/l/llvm-toolchain-$VERSION/*deb
else
echo reprepro -Vb /srv/repository/$DISTRO/ includedeb llvm-toolchain-$DISTRO-$VERSION /tmp/tmp-$DISTRO/pool/main/l/llvm-toolchain-$VERSION/*deb
reprepro -Vb /srv/repository/$DISTRO/ includedeb llvm-toolchain-$DISTRO-$VERSION /tmp/tmp-$DISTRO/pool/main/l/llvm-toolchain-$VERSION/*deb
fi
done
# Import of the nightly builds
if [[ -d /tmp/tmp-$DISTRO/pool/main/l/llvm-toolchain/ || -d /tmp/tmp-$DISTRO/pool/main/l/llvm-toolchain-snapshot/ ]]; then
# Determine package name based on DISTRO
PKG_NAME="llvm-toolchain"
if [[ $DISTRO != "unstable" ]]; then
PKG_NAME+="-$DISTRO"
fi
# Get the list of packages (but don't get the _all packages)
LIST=$(reprepro -A $ARCH -Vb /srv/repository/$DISTRO/ listfilter $PKG_NAME 'Architecture (!= all)' | awk '{print $2}')
echo "Delete $LIST (existing package) on $ARCH before includedeb"
# Remove the listed packages
for pkg in $LIST; do
echo "reprepro -A $ARCH -Vb /srv/repository/$DISTRO/ remove $PKG_NAME $pkg"
reprepro -A $ARCH -Vb /srv/repository/$DISTRO/ remove $PKG_NAME $pkg
done
# Include the deb package(s)
reprepro -Vb /srv/repository/$DISTRO/ includedeb $PKG_NAME /tmp/tmp-$DISTRO/pool/main/l/llvm-toolchain-snapshot/*deb
fi