git-commit-vandalism/git-sh-setup.sh
Junio C Hamano 365527adbf Fix CDPATH problem.
CDPATH has two problems:

 * It takes scripts to unexpected places (somebody had
   CDPATH=..:../..:$HOME and the "cd" in git-clone.sh:get_repo_base
   took him to $HOME/.git when he said "clone foo bar" to clone a
   repository in "foo" which had "foo/.git").  CDPATH mechanism does
   not implicitly give "." at the beginning of CDPATH, which is
   the most irritating part.

 * The extra echo when it does its thing confuses scripts further.

Most of our scripts that use "cd" includes git-sh-setup so the problem
is primarily fixed there.  git-clone starts without a repository, and
it needs its own fix.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-09-12 22:52:51 -07:00

34 lines
795 B
Bash
Executable File

#!/bin/sh
#
# Set up GIT_DIR and GIT_OBJECT_DIRECTORY
# and return true if everything looks ok
#
: ${GIT_DIR=.git}
: ${GIT_OBJECT_DIRECTORY="$GIT_DIR/objects"}
# Having this variable in your environment would break scripts because
# you would cause "cd" to be be taken to unexpected places. If you
# like CDPATH, define it for your interactive shell sessions without
# exporting it.
unset CDPATH
die() {
echo "$@" >&2
exit 1
}
check_clean_tree() {
dirty1_=`git-update-index -q --refresh` && {
dirty2_=`git-diff-index --name-only --cached HEAD`
case "$dirty2_" in '') : ;; *) (exit 1) ;; esac
} || {
echo >&2 "$dirty1_"
echo "$dirty2_" | sed >&2 -e 's/^/modified: /'
(exit 1)
}
}
[ -h "$GIT_DIR/HEAD" ] &&
[ -d "$GIT_DIR/refs" ] &&
[ -d "$GIT_OBJECT_DIRECTORY/00" ]