#!/bin/bash
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
urequire DEFAULTS vcs ptools

function display_help() {
    uecho "$scriptname: faire une archive du projet

USAGE
    $scriptname

OPTIONS
    -C, --projdir PROJDIR
        Spécifier le répertoire de base du projet qui est dans git. Par défaut,
        on travaille dans le répertoire courant et on laisse git trouver le
        répertoire de base du projet. Avec cette option, le répertoire courant
        est modifié avant de lancer les commandes git.
    -d, --destdir DESTDIR
        Spécifier le répertoire dans lequel générer l'archive. Par défaut,
        prendre le répertoire parent du répertoire de base du dépôt."
}

projdir=
destdir=
parse_opts "${PRETTYOPTS[@]}" \
    --help '$exit_with display_help' \
    -C:,--projdir: projdir= \
    -d:,--destdir: destdir= \
    @ args -- "$@" && set -- "${args[@]}" || die "$args"

if [ -n "$projdir" ]; then
    cd "$projdir" || die
    git_ensure_gitvcs
else
    git_ensure_gitvcs
    setx projdir=git rev-parse --show-toplevel
    cd "$projdir" || die
fi
setx projdir=pwd

if [ -z "$destdir" ]; then
    setx destdir=dirname -- "$projdir"
fi

setx name=basename -- "$projdir"
setx branch=git rev-parse --short HEAD 2>/dev/null
setx version=pver --show --allow-empty
[ -n "$version" ] && setx version=pver --show --string "$version" --add-metadata "$branch"
[ -n "$version" ] || version="+$branch"

if check_sysinfos -d debian -v squeeze-; then
    # git archive sous debian squeeze a un bug: il génère un fichier tar au lieu
    # d'un fichier tar compressé. Nous ferons donc la compression nous même.
    dest="$destdir/$name${version:+-$version}.tar"
    gzip=1
else
    dest="$destdir/$name${version:+-$version}.tar.gz"
    gzip=
fi

estep "Création de $(ppath "$dest")"
git archive -o "$dest" --prefix="$name${version:+-$version}/" HEAD || die
[ -n "$gzip" ] || exit 0

estep "Compression de l'archive"
gzip -f "$dest"
