Skip to content
seblu-push 2.77 KiB
Newer Older
Seblu's avatar
Seblu committed
#!/bin/bash

# Copyright © Sébastien Luttringer
#
# 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, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.

Seblu's avatar
Seblu committed
repourl=${REPO_URL:-archlinux@white.v.seblu.net:2222}
repodir=${REPO_DIR:-incoming}
Seblu's avatar
Seblu committed

[[ -r /etc/makepkg.conf ]] && source /etc/makepkg.conf
[[ -r "$HOME/.makepkg.conf" ]]  && source "$HOME/.makepkg.conf"

shopt -s nullglob

Seblu's avatar
Seblu committed
declare -a to_commit

Seblu's avatar
Seblu committed
if [[ -t 0 && -t 2 ]]; then
Seblu's avatar
Seblu committed
	RED=$'\e''[1;31m'
	GREEN=$'\e''[1;32m'
	BLUE=$'\e''[1;34m'
	BOLD=$'\e''[0;1m'
	RESET=$'\e''[m'
Seblu's avatar
Seblu committed
msg() {
Seblu's avatar
Seblu committed
	printf "$GREEN==>$BOLD $1$RESET\n" "${@:1}"
Seblu's avatar
Seblu committed
}

msg2() {
Seblu's avatar
Seblu committed
	printf "$BLUE  ->$BOLD $1$RESET\n" "${@:1}"
Seblu's avatar
Seblu committed
}

# usage : in_array( $needle, $haystack )
# return : 0 - found
#          1 - not found
in_array() {
	local needle=$1; shift
	local item
	for item in "$@"; do
	   [[ $item = $needle ]] && return 0 # Found
	done
	return 1 # Not Found
}

source_pkgbuild() {
	[[ ! -f PKGBUILD ]] && echo 'No PKGBUILD' && exit 1
	source PKGBUILD

	[[ $(type -t pkgver) == 'function' ]] && pkgver=$(pkgver)

	for _pkgname in "${pkgname[@]}"; do
		# define filename base
		# handle epoch which is optional
		filebase="$_pkgname-"
		[[ -n $epoch ]] && (( $epoch > 0 )) && filebase+="$epoch:"
		filebase+="$pkgver-$pkgrel"

Seblu's avatar
Seblu committed
		for _arch in "${arch[@]}"; do
			filename="$filebase-$_arch$PKGEXT" 
			[[ -f "$filename" ]] && to_commit+=("$filename")
		done
Seblu's avatar
Seblu committed
	done
}

# push package to remote repository
push_pkg() {
	(( $# > 0 )) || return
	msg "Pushing packages into $repourl"
	# copy files
	for _pkg; do
		msg2 "Copying $_pkg"
		scp -p "./$_pkg" "scp://$repourl/$repodir" || exit 2
Seblu's avatar
Seblu committed
	done
}

# if packages are on command line add them, otherwise look in PKGBUILD
if (( $# > 0 )); then
	for _pkg; do
		case "$_pkg" in
Seblu's avatar
Seblu committed
			*-x86_64$PKGEXT) to_commit+=("$_pkg");;
			*-any$PKGEXT) to_commit+=("$_pkg");;
Seblu's avatar
Seblu committed
		esac
	done
else
	source_pkgbuild
fi

# if nothing to do, try to push current directory pakages
if (( ${#to_commit[@]} == 0 )); then
	to_commit=(*$PKGEXT)
fi

# exit early when no job
Seblu's avatar
Seblu committed
if (( ${#to_commit[@]} == 0 )); then
Seblu's avatar
Seblu committed
	echo -e "${RED}No package to add${RESET}" >&2
Seblu's avatar
Seblu committed
	exit 2
fi

Seblu's avatar
Seblu committed
push_pkg "${to_commit[@]}"
Seblu's avatar
Seblu committed

ssh "ssh://$repourl" -- "cd $repodir && seblu-commit" '-r' "${to_commit[@]}"
Seblu's avatar
Seblu committed

# vim:set ts=2 sw=2 ft=sh noet: