Commit 596c818b authored by Seblu's avatar Seblu
Browse files

Rework commit code

parent 2a5f5de6
Loading
Loading
Loading
Loading
+92 −70
Original line number Diff line number Diff line
@@ -21,12 +21,11 @@ repo="/srv/ftp/archlinux/$dbname"
repo_32="$repo/i686"
repo_64="$repo/x86_64"

[[ ! -f PKGBUILD ]] && echo 'No PKGBUILD' && exit 1

source /etc/makepkg.conf
source PKGBUILD
# packages to add
declare -a to_32 to_64

[[ $(type -t pkgver) == 'function' ]] && pkgver=$(pkgver)
[[ -r /etc/makepkg.conf ]] && source /etc/makepkg.conf
[[ -r "$HOME/.makepkg.conf" ]]  && source "$HOME/.makepkg.conf"

shopt -s nullglob

@@ -34,6 +33,10 @@ msg() {
	printf "\e[1;32m==>\e[0;1m $1\e[m\n" "${@:1}"
}

msg2() {
	printf "\e[1;34m  ->\e[0;1m $1\e[m\n" "${@:1}"
}

# usage : in_array( $needle, $haystack )
# return : 0 - found
#          1 - not found
@@ -46,12 +49,6 @@ in_array() {
	return 1 # Not Found
}

# sign $1
sign() {
	msg "Sign $1"
	gpg --detach-sign "$1" || exit 1
}

# $1: srouce
# $2: destination
cp_acl() {
@@ -60,8 +57,11 @@ cp_acl() {
	cat < "$1" > "$2"
}

# commit
declare -a to_32 to_64
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
@@ -73,7 +73,6 @@ for _pkgname in "${pkgname[@]}"; do
		# add any pkg in both repo
		filename="$filebase-any$PKGEXT"
		if [[ -f "$filename" ]]; then
		[[ -f "$filename.sig" ]] || sign "$filename"
			# register
			to_32+=("$filename")
			to_64+=("$filename")
@@ -82,49 +81,72 @@ for _pkgname in "${pkgname[@]}"; do
		# add i686 repo
		filename="$filebase-i686$PKGEXT"
		if [[ -f "$filename" ]]; then
		[[ -f "$filename.sig" ]] || sign "$filename"
			to_32+=("$filename")
		fi

		# add x86_64 repo
		filename="$filebase-x86_64$PKGEXT"
		if [[ -f "$filename" ]]; then
		[[ -f "$filename.sig" ]] || sign "$filename"
			to_64+=("$filename")
		fi
	done
}

if ((${#to_32[@]} > 0)); then
	msg "Adding into $dbname i686 dir"
	# copy new
	for _i in "${to_32[@]}"; do
		cp_acl "$_i" "$repo_32/$_i" || exit 2
		cp_acl "$_i.sig" "$repo_32/$_i.sig" || exit 2
	done
	pushd "$repo_32" >/dev/null
	# update db
	msg "Adding into $dbname i686 db"
	repo-add -q -s "$dbname.db.tar.gz" "${to_32[@]}"
	msg "Adding into $dbname i686 file db"
	repo-add -q -s -f "$dbname.files.tar.gz" "${to_32[@]}"
	popd >/dev/null
sign_pkg() {
	msg 'Sign packages'
	for _pkg; do
		if [[ ! -f "$_pkg.sig" ]]; then
			msg2 "Signing $_pkg"
			gpg --detach-sign "$_pkg" || exit 1
		fi
	done
}


if ((${#to_64[@]} > 0)); then
	msg "Adding into $dbname x86_64 dir"
	# copy new
	for _i in "${to_64[@]}"; do
		cp_acl "$_i" "$repo_64/$_i" || exit 2
		cp_acl "$_i.sig" "$repo_64/$_i.sig" || exit 2
# add pkg ($2..$n) in argument into repo $1
add_pkg() {
	(( $# > 1 )) || return
	local repo="$1"
	shift
	msg "Adding packages into $1"
	# copy files
	for _pkg; do
		msg2 "Copying $_pkg"
		cp_acl "$_pkg" "$repo/$_pkg" || exit 2
		cp_acl "$_pkg.sig" "$repo/$_pkg.sig" || exit 2
	done
	pushd "$repo_64" >/dev/null
	# update db
	msg "Adding into $dbname x86_64 db"
	repo-add -q -s "$dbname.db.tar.gz" "${to_64[@]}"
	msg "Adding into $dbname x86_64 file db"
	repo-add -q -s -f "$dbname.files.tar.gz" "${to_64[@]}"
	pushd "$repo" >/dev/null
	msg2 "Updating $repo db"
	repo-add -q -s "$dbname.db.tar.gz" "$@"
	msg2 "Updating $repo file db"
	repo-add -q -s -f "$dbname.files.tar.gz" "$@"
	popd >/dev/null
}

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

if (( ${#to_32[@]} + ${#to_64[@]} == 0 )); then
	echo 'No package to add' >&2
	exit 2
fi

sign_pkg "${to_32[@]}" "${to_64[@]}"

# add i686 packages
add_pkg "$repo_32" "${to_32[@]}"

# add x86_64 packages
add_pkg "$repo_64" "${to_64[@]}"

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