blob: 211e1919b3295022724d9509e6ec32dca4b5784d (
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
|
#!/bin/bash
source "$(dirname "$(readlink -e "$0")")/etc/dbscripts.cfg"
source "$(dirname "$(readlink -e "$0")")/share/db-functions"
if [ $# -lt 3 ]; then
msg "usage: %s <repo-from> <repo-to> <pkgname|pkgbase> ..." "${0##*/}"
exit 1
fi
args=("${@}")
repo_from="${args[0]}"
repo_to="${args[1]}"
ftppath_from="${root_dir}/${repo_from}/os/"
ftppath_to="${root_dir}/${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 %s to %s" "${repo_from}" "${repo_to}"
fi
# TODO: this might lock too much (native_architectures)
for pkgarch in "${native_architectures[@]}"; do
repo_lock "${repo_to}" "${pkgarch}" || exit 1
repo_lock "${repo_from}" "${pkgarch}" || exit 1
done
# First loop is to check that all necessary files exist
for pkgbase in "${args[@]:2}"; do
for pkgarch in "${native_architectures[@]}" 'any'; do
xbsrepo_from="$(xbs releasepath "${pkgbase}" "${repo_from}" "${pkgarch}")"
if [ -r "${xbsrepo_from}/PKGBUILD" ]; then
pkgnames=($(. "${xbsrepo_from}/PKGBUILD"; echo "${pkgname[@]}"))
if [ ${#pkgnames[@]} -lt 1 ]; then
die "Could not read pkgname"
fi
pkgver=$(. "${xbsrepo_from}/PKGBUILD"; get_full_version "${epoch:-0}" "${pkgver}" "${pkgrel}")
if [ -z "${pkgver}" ]; then
die "Could not read pkgver"
fi
if [ "${pkgarch}" == 'any' ]; then
tarches=("${native_architectures[@]}")
else
tarches=("${pkgarch}")
fi
for pkgname in "${pkgnames[@]}"; do
for tarch in "${tarches[@]}"; do
getpkgfile "${ftppath_from}/${tarch}/${pkgname}-${pkgver}-${pkgarch}"${package_extension_suffixfile} >/dev/null
done
done
continue 2
fi
done
die "%s not found in %s" "${pkgbase}" "${repo_from}"
done
msg "Moving packages from [%s] to [%s]..." "${repo_from}" "${repo_to}"
declare -A add_pkgs
declare -A remove_pkgs
for pkgbase in "${args[@]:2}"; do
# move the package in xbs
arches=($(xbs move "${repo_from}" "${repo_to}" "${pkgbase}"))
# move the package in ftp
for pkgarch in "${arches[@]}"; do
xbsrepo_to="$(xbs releasepath "$pkgbase" "$repo_to" "$pkgarch")"
if true; then # to add an indent level to make merging easier
if [ "${pkgarch}" == 'any' ]; then
tarches=("${native_architectures[@]}")
else
tarches=("${pkgarch}")
fi
msg2 '%s (%s)' "${pkgbase}" "${tarches[*]}"
pkgnames=($(. "${xbsrepo_to}/PKGBUILD"; echo "${pkgname[@]}"))
pkgver=$(. "${xbsrepo_to}/PKGBUILD"; get_full_version "${epoch:-0}" "${pkgver}" "${pkgrel}")
for pkgname in "${pkgnames[@]}"; do
for tarch in "${tarches[@]}"; do
pkgpath=$(getpkgfile "${ftppath_from}/${tarch}/${pkgname}-${pkgver}-${pkgarch}"${package_extension_suffixfile})
pkgfile="${pkgpath##*/}"
ln -s "../../../${packages_pool}/${pkgfile}" "${ftppath_to}/${tarch}/"
if [ -f "${root_dir}/${packages_pool}/${pkgfile}.sig" ]; then
ln -s "../../../${packages_pool}/${pkgfile}.sig" "${ftppath_to}/${tarch}/"
fi
add_pkgs[${tarch}]+="${root_dir}/${packages_pool}/${pkgfile} "
remove_pkgs[${tarch}]+="${pkgname} "
done
done
fi
done
done
for tarch in "${native_architectures[@]}"; 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 "${native_architectures[@]}"; do
repo_unlock "${repo_from}" "${pkgarch}"
repo_unlock "${repo_to}" "${pkgarch}"
done
|