From: Junio C Hamano Date: Sun, 28 Apr 2013 18:57:54 +0000 (-0700) Subject: Merge branch 'jk/check-corrupt-objects-carefully' X-Git-Tag: v1.8.3-rc1~14 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/a6fed65a6aae37bb7e126674d44587b828e90e52?ds=inline;hp=-c Merge branch 'jk/check-corrupt-objects-carefully' * jk/check-corrupt-objects-carefully: clone: Make the 'junk_mode' symbol a file static --- a6fed65a6aae37bb7e126674d44587b828e90e52 diff --combined builtin/clone.c index 58fee9874f,2238ae8286..035ab64950 --- a/builtin/clone.c +++ b/builtin/clone.c @@@ -232,26 -232,16 +232,26 @@@ static void strip_trailing_slashes(cha static int add_one_reference(struct string_list_item *item, void *cb_data) { char *ref_git; + const char *repo; struct strbuf alternate = STRBUF_INIT; - /* Beware: real_path() and mkpath() return static buffer */ + /* Beware: read_gitfile(), real_path() and mkpath() return static buffer */ ref_git = xstrdup(real_path(item->string)); - if (is_directory(mkpath("%s/.git/objects", ref_git))) { + + repo = read_gitfile(ref_git); + if (!repo) + repo = read_gitfile(mkpath("%s/.git", ref_git)); + if (repo) { + free(ref_git); + ref_git = xstrdup(repo); + } + + if (!repo && is_directory(mkpath("%s/.git/objects", ref_git))) { char *ref_git_git = mkpathdup("%s/.git", ref_git); free(ref_git); ref_git = ref_git_git; } else if (!is_directory(mkpath("%s/objects", ref_git))) - die(_("reference repository '%s' is not a local directory."), + die(_("reference repository '%s' is not a local repository."), item->string); strbuf_addf(&alternate, "%s/objects", ref_git); @@@ -387,7 -377,7 +387,7 @@@ static void clone_local(const char *src static const char *junk_work_tree; static const char *junk_git_dir; static pid_t junk_pid; - enum { + static enum { JUNK_LEAVE_NONE, JUNK_LEAVE_REPO, JUNK_LEAVE_ALL