summaryrefslogtreecommitdiff
path: root/src/abslibre-tools/librestage
blob: 16dc7729a961290b45eb26b13475b5a7274d1a79 (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
#!/bin/bash
# LibreStage
# Prepares packages for upload

# Copyright 2010-2011 Nicolás Reynolds
# Copyright 2013 Luke Shumaker
#
# This file is part of Parabola.
#
# Parabola is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Parabola is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Parabola. If not, see <http://www.gnu.org/licenses/>.

. libremessages
. $(librelib conf.sh)

cmd=${0##*/}
usage() {
	print "Usage: %s REPO [REPO2 REPO3...]" "$cmd"
	print "Stages the package(s) build by ./PKGBUILD for upload."
	echo
	print "The package(s) are staged for the named repositories."
	print "It is in general a bad idea to stage a package on multiple"
	print "repositories, but it supported by this tool."
}

main() {
	if [[ -w / ]]; then
		error "This program should be run as regular user"
		return 1
	fi

	# Parse options, set up
	while getopts 'h' arg; do
		case $arg in
			h) usage; return 0;;
			*) usage >/dev/stderr; return 1;;
		esac
	done
	repos=("$@")
	if [[ ${#repos[@]} -eq 0 ]]; then
		usage >>/dev/stderr
		return 1;
	fi

	[[ ! -e ./PKGBUILD ]] && {
		error "PKGBUILD not found"
		return 1
	}

	# Load configuration
	load_files libretools
	check_vars libretools WORKDIR ARCHES || return 1

	# Load the PKGBUILD
	source ./PKGBUILD

	# Now for the main routine.
	staged=false
	for CARCH in "${ARCHES[@]}" any; do
		for _pkgname in "${pkgname[@]}"; do
			pkgfile=${_pkgname}-$(get_full_version $_pkgname)-${CARCH}${PKGEXT}
			pkgpath="$(find . "$PKGDEST" -maxdepth 1 -type f -name "$pkgfile"|sed 1q)"

			if [[ ! -f "${pkgpath}" ]]; then
				continue
			else
				pkgpath="$(readlink -f "$pkgpath")"
			fi

			msg "Found ${pkgfile}"

			canonical="" # is empty for the first iteration, set after that
			for repo in "${repos[@]}"; do
				mkdir -p "${WORKDIR}/staging/${repo}"
				if [[ -z $canonical ]]; then
					canonical="${WORKDIR}/staging/${repo}/${pkgfile}"
					cmd=(cp "$pkgpath" "$canonical")
				else
					cmd=(ln "$canonical" "${WORKDIR}/staging/${repo}/${pkgfile}")
				fi
				if "${cmd[@]}"; then
					msg2 "%s staged on [%s]" "$_pkgname" "$repo"
					staged=true
				else
					error "Can't put %s on [%s]" "$_pkgname" "$repo"
					return 1
				fi
			done
		done
	done

	if $staged ; then
		return 0
	else
		error "No package was staged"
		return 1
	fi
}

main "$@"