diff options
| author | Peter Anvin <hpa@tazenda.sc.orionmulti.com> | 2005-10-03 12:04:44 -0700 |
|---|---|---|
| committer | Peter Anvin <hpa@tazenda.sc.orionmulti.com> | 2005-10-03 12:04:44 -0700 |
| commit | 79a9d8ea0d88a3667ad19be8e705405ab5d896f1 (patch) | |
| tree | 15d04fe258e969f2a43aaff3c292286984d0147c /setup.c | |
| parent | 039c6f162a63e9d91f360e2e6138e21a4015c543 (diff) | |
| parent | baaac6a7143ad07de62926421f8740cd640c241c (diff) | |
| download | git-79a9d8ea0d88a3667ad19be8e705405ab5d896f1.tar.xz | |
Merge with master.kernel.org:/pub/scm/git/git.git
Diffstat (limited to 'setup.c')
| -rw-r--r-- | setup.c | 16 |
1 files changed, 9 insertions, 7 deletions
@@ -76,18 +76,20 @@ const char **get_pathspec(const char *prefix, const char **pathspec) * Test it it looks like we're at the top * level git directory. We want to see a * - * - a HEAD symlink and a refs/ directory under ".git" * - either a .git/objects/ directory _or_ the proper * GIT_OBJECT_DIRECTORY environment variable + * - a refs/ directory under ".git" + * - either a HEAD symlink or a HEAD file that is formatted as + * a proper "ref:". */ static int is_toplevel_directory(void) { - struct stat st; - - return !lstat(".git/HEAD", &st) && - S_ISLNK(st.st_mode) && - !access(".git/refs/", X_OK) && - (getenv(DB_ENVIRONMENT) || !access(".git/objects/", X_OK)); + if (access(".git/refs/", X_OK) || + access(getenv(DB_ENVIRONMENT) ? + getenv(DB_ENVIRONMENT) : ".git/objects/", X_OK) || + validate_symref(".git/HEAD")) + return 0; + return 1; } const char *setup_git_directory(void) |
