|
|
|
#!/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)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
[PATCH] Make .git directory validation code test HEAD
Inspired by a report by Kalle Valo, this changes git-sh-setup-script and
the "setup_git_directory()" function to test that $GIT_DIR/HEAD is a
symlink, since a number of core git features depend on that these days.
We used to allow a regular file there, but git-fsck-cache has been
complaining about that for a while, and anything that uses branches
depends on the HEAD file being a symlink, so let's just encode that as a
fundamental requirement.
Before, a non-symlink HEAD file would appear to work, but have subtle bugs
like not having the HEAD show up as a valid reference (because it wasn't
under "refs"). Now, we will complain loudly, and the user can fix it up
trivially instead of getting strange behaviour.
This also removes the tests for "$GIT_DIR" and "$GIT_OBJECT_DIRECTORY"
being directories, since the other tests will implicitly test for that
anyway (ie the tests for HEAD, refs and 00 would fail).
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
20 years ago
|
|
|
[ -h "$GIT_DIR/HEAD" ] &&
|
|
|
|
[ -d "$GIT_DIR/refs" ] &&
|
|
|
|
[ -d "$GIT_OBJECT_DIRECTORY/00" ]
|