summaryrefslogtreecommitdiff
path: root/src/xbs-abslibre/helper-abslibre
blob: d8ef6ee1e19b158ca087b5c57a85bbc26138fcdf (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
#!/bin/bash

#   Copyright (c) 2012-2013 Luke Shumaker <lukeshu@sbcglobal.net>
#
#   This program 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 2 of the License, or
#   (at your option) any later version.
#
#   This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.

status() {
	[[ -z $(git status -s .) ]]
}

download() {
	. $(librelib conf)
	load_files libretools
	check_vars libretools WORKDIR ABSLIBRERECV || return 1

	# Get the Parabola-added git repo
	libregit "$ABSLIBRERECV" master "$WORKDIR/abslibre" || return 1
	# This bit configures a 'pushUrl' to use ssh, leaves plain https for
	# 'url' (used for fetch).
	if [[ -n ${ABSLIBRESEND:-} ]]; then
		pushd "$WORKDIR/abslibre" >/dev/null
		local pushUrl="$(git config --get remote.origin.pushUrl)"
		if [[ $? != 0 ]]; then
			git config remote.origin.pushUrl "$ABSLIBRESEND";
		elif [[ $pushUrl != "$ABSLIBRESEND" ]]; then
			warning "A %s is configured for %s, but it doesn't match %s" pushUrl "$WORKDIR/abslibre" "$ABSLIBRESEND"
		fi
		popd >/dev/null
	fi

	# Get the everything-included tree
	abs
}

release() {
	local repo=$1
	local arch=$2

	local lookupfile=

	. libremessages
	. $(librelib conf)
	load_files libretools
	check_vars libretools WORKDIR || return 1

	read mode type sha1 file <<<"$(git ls-tree -d --full-tree HEAD "$(pwd)")"

	lock 9 "$lookupfile.lock" "Waiting for lock on %s" "$lookupfile"
	{
		sed "/^$repo $arch $pkgbase /d" < "$lookupfile"
		echo "$repo $arch $pkgbase $sha1 $path"
	} > "$lookupfile.$$"
	mv "$lookupfile.$$" "$lookupfile"
	lock_close 9
}

unrelease() {
	local pkgbase=$1
	local repo=$2
	local arch=$3

	lock 9 "$lookupfile.lock" "Waiting for lock on %s" "$lookupfile"
	sed -i "/^$repo $arch $pkgbase /d" "$lookupfile"
	lock_close 9
}

move() {
	local repo_from=$1
	local repo_to=$2
	local pkgbase=$3

	lock 9 "$lookupfile.lock" "Waiting for lock on %s" "$lookupfile"
	sed -ri "s/^${repo_from} (\S+) $pkgbase /${repo_to} \1 $pkgbase/" "$lookupfile"
	# TODO
	lock_close 9
	return 1
}

releasepath() {
	local pkgbase=$1
	local repo=$2
	local arch=$3

	local r=0
	. $(librelib conf)
	load_files libretools
	check_vars libretools WORKDIR || r=$?
	load_files abs
	check_vars abs ABSROOT || r=$?

	local abstree
	local dir
	for abstree in "$WORKDIR/abslibre" "$ABSROOT"; do
		dir="$abstree/$repo/$pkgbase"
		if [[ -f "$dir/PKGBUILD" ]]; then
			printf '%s\n' "$dir"
			return 0
		fi
	done
	return 1
}

case "$1" in
	status|download|release|unrelease|move|releasepath) "$@";;
	*) exit 127;;
esac