git-sh-setup: Fail if the git directory was not found.
PATCH 1/1 git-sh-setup: Fail if the git directory was not found.
Always use git-rev-parse to find a valid git directory, as git-repo-config no longer returns an error code if a git directory wasn't found.
This fixes the message received when invoking certain commands implemented as shell scripts from outside of a git tree, so e.g. instead of receiving this:/home/rob/bin/git-fetch: line 89: /FETCH_HEAD: Permission denied
We get this again:
fatal: Not a git repository: '.git'
Also, move the setting of GIT_OBJECT_DIRECTORY to outside of the non-subdir-ok case as it isn't specific to that case.
--- git-sh-setup.sh | 12 +++--------- 1 files changed, 3 insertions(+), 9 deletions(-)
Hopefully this patch addresses the concerns of Junio and others by continuing to allow git-ls-remotes to work outside of a git repository.
git-sh-setup.sh +3 -9
@@ -37,15 +37,9 @@ esac if [ -z "$SUBDIRECTORY_OK" ] then - : ${GIT_DIR=.git} - : ${GIT_OBJECT_DIRECTORY="$GIT_DIR/objects"} - - # Make sure we are in a valid repository of a vintage we understand. - GIT_DIR="$GIT_DIR" git repo-config --get core.nosuch >/dev/null - if test $? = 128 - then - exit - fi + GIT_DIR=$(GIT_DIR=.git git-rev-parse --git-dir) || exit else GIT_DIR=$(git-rev-parse --git-dir) || exit fi + +GIT_OBJECT_DIRECTORY="$GIT_DIR/objects"
Robert Shearman, Fri, Aug 11, 2006 11:23:30 +0200:
Quoted 3 lines
Always use git-rev-parse to find a valid git directory, as git-repo-config no longer returns an error code if a git directory wasn't found.
BTW, did anyone notice that "--usage" almost always needs git directory? That is quite unusual.
Quoted 11 lines · Robert Shearman
Always use git-rev-parse to find a valid git directory, as git-repo-config no longer returns an error code if a git directory wasn't found.
This fixes the message received when invoking certain commands implemented as shell scripts from outside of a git tree, so e.g. instead of receiving this:
/home/rob/bin/git-fetch: line 89: /FETCH_HEAD: Permission denied We get this again:
fatal: Not a git repository: '.git'
Quoted 4 lines
Also, move the setting of
GIT_OBJECT_DIRECTORYto outside of the non-subdir-ok case as it isn't specific to that case.Signed-off-by Robert Shearman <[email protected]>
Moving the assignment of GIT_OBJECT_DIRECTORY is fine, but changing it to an unconditional assignment is wrong. The user can have a GIT_OBJECT_DIRECTORY set independently from GIT_DIR (or ../some/where/.git that is detected).
The rest looks sane; the new test should still detect the case the original test tried to catch.
Quoted 28 lines
git-sh-setup.sh | 12 +++--------- 1 files changed, 3 insertions(+), 9 deletions(-)Hopefully this patch addresses the concerns of Junio and others by continuing to allow git-ls-remotes to work outside of a git repository.
git-sh-setup.sh +3
-9@@ -37,15 +37,9 @@ esac if [ -z "$SUBDIRECTORY_OK" ] then - : ${GIT_DIR=.git} - : ${GIT_OBJECT_DIRECTORY="$GIT_DIR/objects"} - - # Make sure we are in a valid repository of a vintage we understand. - GIT_DIR="$GIT_DIR" git repo-config --get core.nosuch >/dev/null - if test $? = 128 - then - exit - fi + GIT_DIR=$(GIT_DIR=.git git-rev-parse --git-dir) || exit else GIT_DIR=$(git-rev-parse --git-dir) || exit fi + +GIT_OBJECT_DIRECTORY="$GIT_DIR/objects"
Quoted 4 lines · Junio C Hamano
Moving the assignment of
GIT_OBJECT_DIRECTORYis fine, but changing it to an unconditional assignment is wrong. The user can have aGIT_OBJECT_DIRECTORYset independently fromGIT_DIR(or ../some/where/.git that is detected).
How about this as a replacement?
-- >8 --
[PATCH] git-sh-setup: do not use repo-config to test the git directory
Since repo-config does not fail in non-git directory, it is not a good command to use to test the git-ness nor validate the repository revision of $GIT_DIR.
Original patch by Robert Shearman but with minor fixes.
--- git-sh-setup.sh | 11 +++-------- 1 files changed, 3 insertions(+), 8 deletions(-)
git-sh-setup.sh +3 -8
@@ -35,17 +35,12 @@ case "$1" in exit esac +# Make sure we are in a valid repository of a vintage we understand. if [ -z "$SUBDIRECTORY_OK" ] then : ${GIT_DIR=.git} - : ${GIT_OBJECT_DIRECTORY="$GIT_DIR/objects"} - - # Make sure we are in a valid repository of a vintage we understand. - GIT_DIR="$GIT_DIR" git repo-config --get core.nosuch >/dev/null - if test $? = 128 - then - exit - fi + GIT_DIR=$(GIT_DIR="$GIT_DIR" git-rev-parse --git-dir) || exit else GIT_DIR=$(git-rev-parse --git-dir) || exit fi +: ${GIT_OBJECT_DIRECTORY="$GIT_DIR/objects"}
Signature · 1 line
1.4.2.rc4.g9d8df
Quoted 10 lines · Junio C Hamano
Quoted 6 lines · Junio C Hamano
Moving the assignment of
GIT_OBJECT_DIRECTORYis fine, but changing it to an unconditional assignment is wrong. The user can have aGIT_OBJECT_DIRECTORYset independently fromGIT_DIR(or ../some/where/.git that is detected).
I'm not an expert in shell scripting so I didn't notice that it was a conditional assignment.
Quoted 3 lines
How about this as a replacement?
Looks good.
Thanks,
Signature · 1 line
Rob Shearman