diff options
Diffstat (limited to 'third_party/git/setup.c')
-rw-r--r-- | third_party/git/setup.c | 45 |
1 files changed, 8 insertions, 37 deletions
diff --git a/third_party/git/setup.c b/third_party/git/setup.c index 5ea9285a128c..8dcb4631f7d3 100644 --- a/third_party/git/setup.c +++ b/third_party/git/setup.c @@ -4,7 +4,6 @@ #include "dir.h" #include "string-list.h" #include "chdir-notify.h" -#include "promisor-remote.h" static int inside_git_dir = -1; static int inside_work_tree = -1; @@ -120,13 +119,8 @@ char *prefix_path_gently(const char *prefix, int len, char *prefix_path(const char *prefix, int len, const char *path) { char *r = prefix_path_gently(prefix, len, NULL, path); - if (!r) { - const char *hint_path = get_git_work_tree(); - if (!hint_path) - hint_path = get_git_dir(); - die(_("'%s' is outside repository at '%s'"), path, - absolute_path(hint_path)); - } + if (!r) + die(_("'%s' is outside repository"), path); return r; } @@ -202,26 +196,9 @@ static void NORETURN die_verify_filename(struct repository *r, */ static int looks_like_pathspec(const char *arg) { - const char *p; - int escaped = 0; - - /* - * Wildcard characters imply the user is looking to match pathspecs - * that aren't in the filesystem. Note that this doesn't include - * backslash even though it's a glob special; by itself it doesn't - * cause any increase in the match. Likewise ignore backslash-escaped - * wildcard characters. - */ - for (p = arg; *p; p++) { - if (escaped) { - escaped = 0; - } else if (is_glob_special(*p)) { - if (*p == '\\') - escaped = 1; - else - return 1; - } - } + /* anything with a wildcard character */ + if (!no_wildcard(arg)) + return 1; /* long-form pathspec magic */ if (starts_with(arg, ":(")) @@ -501,7 +478,7 @@ static int check_repository_format_gently(const char *gitdir, struct repository_ } repository_format_precious_objects = candidate->precious_objects; - set_repository_format_partial_clone(candidate->partial_clone); + repository_format_partial_clone = xstrdup_or_null(candidate->partial_clone); repository_format_worktree_config = candidate->worktree_config; string_list_clear(&candidate->unknown_extensions, 0); @@ -820,7 +797,7 @@ static const char *setup_discovered_git_dir(const char *gitdir, set_git_dir(gitdir); inside_git_dir = 0; inside_work_tree = 1; - if (offset >= cwd->len) + if (offset == cwd->len) return NULL; /* Make "offset" point past the '/' (already the case for root dirs) */ @@ -942,7 +919,7 @@ static enum discovery_result setup_git_directory_gently_1(struct strbuf *dir, const char *env_ceiling_dirs = getenv(CEILING_DIRECTORIES_ENVIRONMENT); struct string_list ceiling_dirs = STRING_LIST_INIT_DUP; const char *gitdirenv; - int ceil_offset = -1, min_offset = offset_1st_component(dir->buf); + int ceil_offset = -1, min_offset = has_dos_drive_prefix(dir->buf) ? 3 : 1; dev_t current_device = 0; int one_filesystem = 1; @@ -970,12 +947,6 @@ static enum discovery_result setup_git_directory_gently_1(struct strbuf *dir, if (ceil_offset < 0) ceil_offset = min_offset - 2; - if (min_offset && min_offset == dir->len && - !is_dir_sep(dir->buf[min_offset - 1])) { - strbuf_addch(dir, '/'); - min_offset++; - } - /* * Test in the following order (relative to the dir): * - .git (file containing "gitdir: <path>") |