#!/usr/bin/env bash
#
# Initialize a GIT repository.
# Copyright (c) Petr Baudis, 2005
#
# If `cg-init` is run in a non-empty directory files in the top and
# sub directory will automatically be added.
#
# OPTIONS
# -------
# -e EXCLUDEPATTERN::
#	Ignore files matching this pattern when importing files for the
#	initial commit. Note that if you are importing any .gitignore
#	files, they will be considered as well. If you want to make
#	en even more custom choice of files to be imported, use the -I
#	parameter and add and perform the initial commit manually.
#
# -I::
#	Do not perform the initial commit.
#
# -N::
#	Only update the cache: do not copy the data into the object database.
#	This is for special purposes when you might not actually _have_ any
#	object database. This option is normally not interesting.

USAGE="cg-init [-I] [-N] [-e EXCLUDEPATTERN]..."
_git_repo_unneeded=1

. ${COGITO_LIB}cg-Xlib || exit 1

excludes=()
no_initial_commit=
infoonly=
while optparse; do
	if optparse -e=; then
		excludes[${#excludes[@]}]="$OPTARG"
	elif optparse -I; then
		no_initial_commit=1
	elif optparse -N; then
		infoonly=-N
	else
		optfail
	fi
done

[ -e $_git ] && die "$_git already exists"

trap "rm -rf $_git; die \"interrupted\"" SIGINT SIGTERM

git-init-db
touch $_git/refs/heads/master

git-read-tree # Seed the dircache
if ! [ "$no_initial_commit" ]; then
	[ "$(ls)" ] && list_untracked_files exclude "${excludes[@]}" | xargs -0 cg-add ${infoonly}
	cg-commit -C -m"Initial commit" -E ${infoonly}
fi

exit 0
