#!/bin/sh -efu

. gb-sh-functions

REPO_DIR="$1"
shift

commit()
{
	local comp arch_all
	while read -r N EVR A F; do
		comp=$GB_REPO_FLAVOUR
		if [ -z "${N##*-debuginfo}" -a -d $REPO_DIR/$A/RPMS.debuginfo ]; then
			comp=debuginfo
		fi
		RM $REPO_DIR/$A/RPMS.$comp/$F
		if use_repo_files; then
			RM $REPO_DIR/files/$A/RPMS/$F
		fi
	done <plan/rm-bin
	while read -r N EVR A F P I; do
		comp=$GB_REPO_FLAVOUR
		if [ -z "${N##*-debuginfo}" -a -d $REPO_DIR/$A/RPMS.debuginfo ]; then
			comp=debuginfo
		fi
		if use_repo_files; then
			CP "$P" $REPO_DIR/files/$A/RPMS/$F
			LN ../../files/$A/RPMS/$F $REPO_DIR/$A/RPMS.$comp/$F
		else
			CP "$P" $REPO_DIR/$A/RPMS.$comp/$F
		fi
	done <plan/add-bin

	while read -r F A; do
		RM $REPO_DIR/$A/SRPMS.$GB_REPO_FLAVOUR/$F
		use_repo_files || continue
		if [ "$A" = 'noarch' ]; then
			arch_all="$GB_ARCH"
		else
			arch_all="$A"
		fi
		for arch in $arch_all; do
			if [ -e "$REPO_DIR/$arch/SRPMS.all/$F" ]; then
				RM "$REPO_DIR/$arch/SRPMS.all/$F"
			fi
		done
	done <plan/rm-srpm2arch
	while read -r N EVR F; do
		if use_repo_files; then
			RM $REPO_DIR/files/SRPMS/$F
		fi
	done <plan/rm-src

	while read -r N EVR F P I; do
		if use_repo_files; then
			CP "$P" $REPO_DIR/files/SRPMS/$F
		fi
	done <plan/add-src
	while read -r F P A; do
		if use_repo_files; then
			LN ../../files/SRPMS/$F $REPO_DIR/$A/SRPMS.$GB_REPO_FLAVOUR/$F
		else
			src=$(findsrc "$F")
			CP "$src" $REPO_DIR/$A/SRPMS.$GB_REPO_FLAVOUR/$F
			continue
		fi
		if [ "$A" = 'noarch' ]; then
			arch_all="$GB_ARCH"
		else
			arch_all="$A"
		fi
		for arch in $arch_all; do
			[ -e "$REPO_DIR/$arch/SRPMS.all/$F" ] ||
				LN "../../files/SRPMS/$F" "$REPO_DIR/$arch/SRPMS.all/$F"
		done
	done <plan/add-srpm2arch
}

RM()
{
	if ! [ -f "$1" ]; then
		echo "$1: file not found"
		return 0
	fi >&2
}

CP()
{
	if [ -e "$2" ] || [ -L "$2" ]; then
		echo "$2: file already exists"
		return 1
	fi >&2
}

LN()
{
	if [ -e "$2" ] || [ -L "$2" ]; then
		echo "$2: file already exists"
		return 1
	fi >&2
}

# test commit
commit

RM()
{
	rm -v -f "$1"
}

CP()
{
	cp -v -l "$1" "$2" 2>/dev/null || cp -v "$1" "$2"
}

LN()
{
	ln -v -s "$1" "$2"
	if ! [ -f "$2" ]; then
		echo "$2: created dangling symlink"
		rm -v "$2"
		return 1
	fi >&2
}

# real commit
commit
