diff options
author | Johannes Schindelin <Johannes.Schindelin@gmx.de> | 2007-01-20 03:09:34 +0100 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2007-01-20 19:10:26 -0800 |
commit | 68025633e352264898de44ec4856552d9a3abece (patch) | |
tree | 4bd49df8df371710a6709a1dbb582d54a38f38fb /setup.c | |
parent | 06f6228a90c50618f0a9793c9e9695be15f93ae2 (diff) | |
download | git-68025633e352264898de44ec4856552d9a3abece.tar.gz git-68025633e352264898de44ec4856552d9a3abece.tar.xz |
Do not verify filenames in a bare repository
For example, it makes no sense to check the presence of a file
named "HEAD" when calling "git log HEAD" in a bare repository.
Noticed by Han-Wen Nienhuys.
Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Diffstat (limited to 'setup.c')
-rw-r--r-- | setup.c | 26 |
1 files changed, 26 insertions, 0 deletions
@@ -95,6 +95,8 @@ void verify_non_filename(const char *prefix, const char *arg) const char *name; struct stat st; + if (is_inside_git_dir()) + return; if (*arg == '-') return; /* flag */ name = prefix ? prefix_filename(prefix, strlen(prefix), arg) : arg; @@ -168,6 +170,28 @@ static int is_git_directory(const char *suspect) return 1; } +static int inside_git_dir = -1; + +int is_inside_git_dir(void) +{ + if (inside_git_dir < 0) { + char buffer[1024]; + + if (is_bare_repository()) + return (inside_git_dir = 1); + if (getcwd(buffer, sizeof(buffer))) { + const char *git_dir = get_git_dir(), *cwd = buffer; + while (*git_dir && *git_dir == *cwd) { + git_dir++; + cwd++; + } + inside_git_dir = !*git_dir; + } else + inside_git_dir = 0; + } + return inside_git_dir; +} + const char *setup_git_directory_gently(int *nongit_ok) { static char cwd[PATH_MAX+1]; @@ -206,6 +230,7 @@ const char *setup_git_directory_gently(int *nongit_ok) if (chdir(cwd)) die("Cannot come back to cwd"); setenv(GIT_DIR_ENVIRONMENT, cwd, 1); + inside_git_dir = 1; return NULL; } if (nongit_ok) { @@ -226,6 +251,7 @@ const char *setup_git_directory_gently(int *nongit_ok) offset++; cwd[len++] = '/'; cwd[len] = 0; + inside_git_dir = !strncmp(cwd + offset, ".git/", 5); return cwd + offset; } |