blob: 2bb2ea84702e80543202df3a090a4666d61007ec (
plain)
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
|
#!/bin/bash
. "$(dirname $0)/config"
. "$(dirname $0)/db-functions"
if [ $# -lt 3 ]; then
msg "usage: ${0##*/} <repo-from> <repo-to> <pkgname|pkgbase> ..."
exit 1
fi
args=(${@})
repo_from="${args[0]}"
repo_to="${args[1]}"
ftppath_from="${FTP_BASE}/${repo_from}/os/"
ftppath_to="${FTP_BASE}/${repo_to}/os/"
if ! check_repo_permission $repo_to || ! check_repo_permission $repo_from; then
die "You don't have permission to move packages from ${repo_from} to ${repo_to}"
fi
# TODO: this might lock too much (architectures)
for pkgarch in ${ARCHES[@]}; do
repo_lock ${repo_to} ${pkgarch} || exit 1
repo_lock ${repo_from} ${pkgarch} || exit 1
done
# check if packages to be moved exist in svn and ftp dir
/usr/bin/svn checkout -q -N "${SVNREPO}" "${WORKDIR}/svn" >/dev/null
for pkgbase in ${args[@]:2}; do
/usr/bin/svn up -q "${WORKDIR}/svn/${pkgbase}" >/dev/null
for pkgarch in ${ARCHES[@]} 'any'; do
svnrepo_from="${WORKDIR}/svn/${pkgbase}/repos/${repo_from}-${pkgarch}"
if [ -r "${svnrepo_from}/PKGBUILD" ]; then
pkgnames=($(. "${svnrepo_from}/PKGBUILD"; echo ${pkgname[@]}))
if [ ${#pkgnames[@]} -lt 1 ]; then
die "Could not read pkgname"
fi
pkgver=$(. "${svnrepo_from}/PKGBUILD"; echo $(get_full_version ${epoch:-0} ${pkgver} ${pkgrel}))
if [ -z "${pkgver}" ]; then
die "Could not read pkgver"
fi
if [ "${pkgarch}" == 'any' ]; then
tarches=(${ARCHES[@]})
else
tarches=("${pkgarch}")
fi
for pkgname in ${pkgnames[@]}; do
for tarch in ${tarches[@]}; do
getpkgfile "${ftppath_from}/${tarch}/"${pkgname}-${pkgver}-${pkgarch}${PKGEXT} >/dev/null
done
done
continue 2
fi
done
die "${pkgbase} not found in ${repo_from}"
done
msg "Moving packages from [${repo_from}] to [${repo_to}]..."
declare -A add_pkgs
declare -A remove_pkgs
for pkgbase in ${args[@]:2}; do
tag_list=""
for pkgarch in ${ARCHES[@]} 'any'; do
svnrepo_from="${WORKDIR}/svn/${pkgbase}/repos/${repo_from}-${pkgarch}"
svnrepo_to="${WORKDIR}/svn/${pkgbase}/repos/${repo_to}-${pkgarch}"
if [ -f "${svnrepo_from}/PKGBUILD" ]; then
if [ "${pkgarch}" == 'any' ]; then
tarches=(${ARCHES[@]})
else
tarches=("${pkgarch}")
fi
msg2 "${pkgbase} ($(echo ${tarches[@]}))"
pkgnames=($(. "${svnrepo_from}/PKGBUILD"; echo ${pkgname[@]}))
pkgver=$(. "${svnrepo_from}/PKGBUILD"; echo $(get_full_version ${epoch:-0} ${pkgver} ${pkgrel}))
if [ -d "${svnrepo_to}" ]; then
for file in $(/usr/bin/svn ls "${svnrepo_to}"); do
/usr/bin/svn rm -q "${svnrepo_to}/$file"
done
else
mkdir "${svnrepo_to}"
/usr/bin/svn add -q "${svnrepo_to}"
fi
for file in $(svn ls "${svnrepo_from}"); do
/usr/bin/svn mv -q -r HEAD "${svnrepo_from}/$file" "${svnrepo_to}/"
done
/usr/bin/svn rm --force -q "${svnrepo_from}"
tag_list="$tag_list, $pkgarch"
for pkgname in ${pkgnames[@]}; do
for tarch in ${tarches[@]}; do
pkgpath=$(getpkgfile "${ftppath_from}/${tarch}/"${pkgname}-${pkgver}-${pkgarch}${PKGEXT})
pkgfile="${pkgpath##*/}"
# copy package to pool if needed
# TODO: can be removed once every package has been moved to the package pool
if [ ! -f ${FTP_BASE}/${PKGPOOL}/${pkgfile} ]; then
cp ${pkgpath} ${FTP_BASE}/${PKGPOOL}
fi
ln -s "../../../${PKGPOOL}/${pkgfile}" ${ftppath_to}/${tarch}/
if [ -f ${FTP_BASE}/${PKGPOOL}/${pkgfile}.sig ]; then
ln -s "../../../${PKGPOOL}/${pkgfile}.sig" ${ftppath_to}/${tarch}/
fi
add_pkgs[${tarch}]+="${FTP_BASE}/${PKGPOOL}/${pkgfile} "
remove_pkgs[${tarch}]+="${pkgname} "
done
done
fi
done
tag_list="${tag_list#, }"
/usr/bin/svn commit -q "${WORKDIR}/svn/${pkgbase}" -m "${0##*/}: moved ${pkgbase} from [${repo_from}] to [${repo_to}] (${tag_list})"
done
for tarch in ${ARCHES[@]}; do
if [ -n "${add_pkgs[${tarch}]}" ]; then
arch_repo_add "${repo_to}" "${tarch}" ${add_pkgs[${tarch}]}
arch_repo_remove "${repo_from}" "${tarch}" ${remove_pkgs[${tarch}]}
fi
done
for pkgarch in ${ARCHES[@]}; do
repo_unlock ${repo_from} ${pkgarch}
repo_unlock ${repo_to} ${pkgarch}
done
|