summaryrefslogtreecommitdiff
path: root/src/abslibre-tools/librestage
blob: 52e761aab329c5019e90e206b63e9ca4e059d9fe (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
#!/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() {
	# 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[@]} == 0 ]]; then
		usage >>/dev/stderr
		return 1;
	fi

	if [[ -w / ]]; then
		error "This script should be run as regular user"
		return 1
	fi

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

	# Load configuration

	load_files libretools
	check_vars libretools WORKDIR || return 1

	load_files makepkg

	# Load the PKGBUILD
	source ./PKGBUILD
	if [[ $arch == 'any' ]]; then
		CARCH='any'
	fi

	# Now for the main routine.
	staged=false
	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

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

main "$@"