Michael Barabanov <michael.barabanov@xxxxxxxxxxxxx> writes: > Move the is_local logic to the place where origin remote has been setup and > check if the remote url can be used to do local cloning. > > This saves a lot of space (and time) in some of the mirroring scenarios that > involve insteadOf rewrites. > > Signed-off-by: Michael Barabanov <michael.barabanov@xxxxxxxxxxxxx> > --- Strictly speaking, this change introduces a regression to those who would rather use --no-local if they knew the are cloning from a local copy, but they can rewrite their insteadOf to use file:// URL as a workaround. The code change looked OK from a cursory read, modulo possibly introducing a new memory leak on the old value of "path" (I didn't check carefully). Thanks. > builtin/clone.c | 25 +++++++++++++------------ > 1 file changed, 13 insertions(+), 12 deletions(-) > > diff --git a/builtin/clone.c b/builtin/clone.c > index f0dabec..bbd169c 100644 > --- a/builtin/clone.c > +++ b/builtin/clone.c > @@ -799,18 +799,6 @@ int cmd_clone(int argc, const char **argv, const char *prefix) > die(_("repository '%s' does not exist"), repo_name); > else > repo = repo_name; > - is_local = option_local != 0 && path && !is_bundle; > - if (is_local) { > - if (option_depth) > - warning(_("--depth is ignored in local clones; use file:// instead.")); > - if (!access(mkpath("%s/shallow", path), F_OK)) { > - if (option_local > 0) > - warning(_("source repository is shallow, ignoring --local")); > - is_local = 0; > - } > - } > - if (option_local > 0 && !is_local) > - warning(_("--local is ignored")); > > /* no need to be strict, transport_set_option() will validate it again */ > if (option_depth && atoi(option_depth) < 1) > @@ -903,6 +891,19 @@ int cmd_clone(int argc, const char **argv, const char *prefix) > > remote = remote_get(option_origin); > transport = transport_get(remote, remote->url[0]); > + path = get_repo_path(remote->url[0], &is_bundle); > + is_local = option_local != 0 && path && !is_bundle; > + if (is_local) { > + if (option_depth) > + warning(_("--depth is ignored in local clones; use file:// instead.")); > + if (!access(mkpath("%s/shallow", path), F_OK)) { > + if (option_local > 0) > + warning(_("source repository is shallow, ignoring --local")); > + is_local = 0; > + } > + } > + if (option_local > 0 && !is_local) > + warning(_("--local is ignored")); > transport->cloning = 1; > > if (!transport->get_refs_list || (!is_local && !transport->fetch)) -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html