|
|
|
@ -238,31 +238,36 @@ void verify_non_filename(const char *prefix, const char *arg)
@@ -238,31 +238,36 @@ void verify_non_filename(const char *prefix, const char *arg)
|
|
|
|
|
*/ |
|
|
|
|
int is_git_directory(const char *suspect) |
|
|
|
|
{ |
|
|
|
|
char path[PATH_MAX]; |
|
|
|
|
size_t len = strlen(suspect); |
|
|
|
|
struct strbuf path = STRBUF_INIT; |
|
|
|
|
int ret = 0; |
|
|
|
|
size_t len; |
|
|
|
|
|
|
|
|
|
if (PATH_MAX <= len + strlen("/objects")) |
|
|
|
|
die("Too long path: %.*s", 60, suspect); |
|
|
|
|
strcpy(path, suspect); |
|
|
|
|
strbuf_addstr(&path, suspect); |
|
|
|
|
len = path.len; |
|
|
|
|
if (getenv(DB_ENVIRONMENT)) { |
|
|
|
|
if (access(getenv(DB_ENVIRONMENT), X_OK)) |
|
|
|
|
return 0; |
|
|
|
|
goto done; |
|
|
|
|
} |
|
|
|
|
else { |
|
|
|
|
strcpy(path + len, "/objects"); |
|
|
|
|
if (access(path, X_OK)) |
|
|
|
|
return 0; |
|
|
|
|
strbuf_addstr(&path, "/objects"); |
|
|
|
|
if (access(path.buf, X_OK)) |
|
|
|
|
goto done; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
strcpy(path + len, "/refs"); |
|
|
|
|
if (access(path, X_OK)) |
|
|
|
|
return 0; |
|
|
|
|
strbuf_setlen(&path, len); |
|
|
|
|
strbuf_addstr(&path, "/refs"); |
|
|
|
|
if (access(path.buf, X_OK)) |
|
|
|
|
goto done; |
|
|
|
|
|
|
|
|
|
strcpy(path + len, "/HEAD"); |
|
|
|
|
if (validate_headref(path)) |
|
|
|
|
return 0; |
|
|
|
|
strbuf_setlen(&path, len); |
|
|
|
|
strbuf_addstr(&path, "/HEAD"); |
|
|
|
|
if (validate_headref(path.buf)) |
|
|
|
|
goto done; |
|
|
|
|
|
|
|
|
|
return 1; |
|
|
|
|
ret = 1; |
|
|
|
|
done: |
|
|
|
|
strbuf_release(&path); |
|
|
|
|
return ret; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int is_inside_git_dir(void) |
|
|
|
|