365527adbf
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>
34 lines
795 B
Bash
Executable File
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" ]
|