#!/bin/sh -efu

. girar-sh-functions
PROG='girar-pocket create'

usage()
{
	[ -z "$*" ] || message "$*"
	echo >&2 "usage: $PROG <pocket_name> [<binary_repository_name>]"
	exit 1
}

gen_gb_sh_conf()
{
	cat >files/pocket/gb-sh-conf <<EOF
GB_REPO_NAME="$repo"
GB_POCKETS_SOURCES=\$GB_POCKETS_DIR/$pocket/files/pocket/sources.list
GB_REPO_DIR=\$GB_POCKETS_DIR/$pocket
GB_REPO_CODENAME="Pocket $pocket for $repo"
GB_REPO_LABEL="Pocket $pocket for $repo"
GB_REPO_FLAVOUR=pocket
GB_ADDITIONAL_FLAVOURS=
EOF
}

gen_sources()
{
	cat >files/pocket/sources.list <<EOF
rpm file:@GB_POCKETS_DIR@/$pocket @arch@ pocket
rpm file:@GB_POCKETS_DIR@/$pocket noarch pocket
EOF
}

if [ "${1-}" = '--help' ]; then
	usage
fi

[ "$#" -le 2 ] || usage 'Too many arguments.'
[ "$#" -ge 1 ] || usage 'Not enough arguments.'

umask 0002

pocket="$(validate_pocket_name "$1")"; shift
set_repo "${1-}"

cd "$GIRAR_POCKETS"

enable -f /usr/lib/bash/lockf lockf
builtin lockf -v .

pocketdir="$GIRAR_POCKETS/$pocket"

[ -e "$pocketdir" ] && fatal "Pocket directory '$pocketdir' already exists."

cd "$GIRAR_POCKETS"
mkdir "$pocketdir"
cd "$pocketdir"

mkdir -p files/pocket
printf '%s\n' "$GIRAR_USER" >files/pocket/owner
printf '%s\n' "$repo" >files/pocket/repo
printf '%s\n' "0" >files/pocket/counter

mkdir -p files/{i586,x86_64,noarch}/RPMS files/{SRPMS,list,gears,plan}
mkdir -p {i586,x86_64}/{SRPMS.all,SRPMS.pocket,RPMS.pocket,base}
mkdir -p noarch/{SRPMS.pocket,RPMS.pocket,base}
touch files/list/src.list
touch files/list/bin.list

gen_gb_sh_conf
gen_sources

for arch in i586 x86_64 noarch; do
	genbasedir \
		--architectures="i586 x86_64 noarch" \
		--architecture="$arch" \
		--archive="Pocket $pocket" \
		--description="Pocket $pocket" \
		--label="$pocket" \
		--origin="ALT Linux Team" \
		--suite="$pocket" \
		--version="$pocket" \
		--topdir="$pocketdir" \
		--flat --bloat --no-oldhashfile --bz2only --mapi $arch pocket
done

echo >&2 "new pocket $pocket: owner=$GIRAR_USER repo=$repo"
printf '%s\n' "$pocket"
