#!/usr/bin/sh

# Initialize a Freight directory (similar to git init).

#/ Usage: freight init -g<email> [--libdir=<libdir>] [--cachedir=<cachedir>] [--archs=<archs>] [--origin=<origin>] [--label=<label>] [-v] [-h] [<dirname>]
#/   -g<email>, --gpg=<email> GPG key to use
#/   -c<conf>, --conf=<conf>  config file to create (default etc/freight.conf)
#/   --libdir=<libdir>        library directory (default var/lib/freight)
#/   --cachedir=<cachedir>    cache directory (default var/cache/freight)
#/   --archs=<archs>          architectures to support (default "i386 amd64")
#/   --origin=<origin>        Debian archive Origin field (default "Freight")
#/   --label=<label>          Debian archive Label field (default "Freight")
#/   --suite=<suite>          Debian archive Suite field
#/   -v, --verbose            verbose mode
#/   -h, --help               show this help message

set -e

CONF="etc/freight.conf"
GPG=""

usage() {
    grep "^#/" "$0" | cut -c"4-" >&2
    exit "$1"
}
while [ "$#" -gt 0 ]; do
    case "$1" in
        -g | --gpg)
            if [ -z "$GPG" ]; then
                GPG=$2
            else
                GPG="$GPG $2"
            fi
            shift 2
            ;;
        -g*)
            if [ -z "$GPG" ]; then
                GPG=$(echo "$1" | cut -c"3-")
            else
                GPG="$GPG $(echo "$1" | cut -c"3-")"
            fi
            shift
            ;;
        --gpg=*)
            if [ -z "$GPG" ]; then
                GPG=$(echo "$1" | cut -c"7-")
            else
                GPG="$GPG $(echo "$1" | cut -c"7-")"
            fi
            shift
            ;;
        -c | --conf) CONF="$2" shift 2 ;;
        -c*) CONF="$(echo "$1" | cut -c"3-")" shift ;;
        --conf=*) CONF="$(echo "$1" | cut -c"8-")" shift ;;
        --libdir) VARLIB="$2" shift 2 ;;
        --libdir=*) VARLIB="$(echo "$1" | cut -c"10-")" shift ;;
        --cachedir) VARCACHE="$2" shift 2 ;;
        --cachedir=*) VARCACHE="$(echo "$1" | cut -c"12-")" shift ;;
        --archs) ARCHS="$2" shift 2 ;;
        --archs=*) ARCHS="$(echo "$1" | cut -c"9-")" shift ;;
        --origin) ORIGIN="$2" shift 2 ;;
        --origin=*) ORIGIN="$(echo "$1" | cut -c"10-")" shift ;;
        --label) LABEL="$2" shift 2 ;;
        --label=*) LABEL="$(echo "$1" | cut -c"9-")" shift ;;
        --suite) SUITE="$2" shift 2 ;;
        --suite=*) SUITE="$(echo "$1" | cut -c"9-")" shift ;;
        -v | --verbose) VERBOSE=1 shift ;;
        -h | --help) usage 0 ;;
        -*)
            echo "# [freight] unknown switch: $1" >&2
            usage 1
            ;;
        *) break ;;
    esac
done
DIRNAME="$(cd "${1:-"."}" && pwd)"
[ -z "$GPG" ] || [ -z "$DIRNAME" ] && usage 1

# The default value for VARLIB and VARCACHE lies within DIRNAME but otherwise
# follows the FHS style.
VARLIB="${VARLIB:-"$DIRNAME/var/lib"}"
VARCACHE="${VARCACHE:-"$DIRNAME/var/cache"}"

# Create the directory where `CONF` will be placed.  This is likely given
# relative to `DIRNAME` so change to that directory to make things easy.
mkdir -p "$DIRNAME"
cd "$DIRNAME"
mkdir -p "$(dirname "$CONF")"

# Generate `etc/freight.conf` (or some other pathname) with all the options.
cat >"$CONF" <<EOF
VARLIB="$VARLIB"
VARCACHE="$VARCACHE"
GPG="$GPG"
EOF
[ "$ARCHS" ] && echo "ARCHS=\"$ARCHS\"" >>"$CONF"
[ "$ORIGIN" ] && echo "ORIGIN=\"$ORIGIN\"" >>"$CONF"
[ "$LABEL" ] && echo "LABEL=\"$LABEL\"" >>"$CONF"
[ "$SUITE" ] && echo "SUITE=\"$SUITE\"" >>"$CONF"

# return 0 when we come here
exit 0

# vim: et:ts=4:sw=4
