Re: [PATCH] use local cloning if insteadOf makes a local URL

2014-07-17 Thread Michael Barabanov



On 07/17/2014 10:23 AM, Junio C Hamano wrote:

Michael Barabanov  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 
---


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.


Plus --no-local still works on command line, even if rewritten URL ends 
up to be local.




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).


In fact, I couldn't find where original "path" is freed anyway.
Memory will be freed when the clone process exits of course.

Michael.



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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] use local cloning if insteadOf makes a local URL

2014-07-17 Thread Junio C Hamano
Michael Barabanov  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 
> ---

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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH] use local cloning if insteadOf makes a local URL

2014-07-17 Thread Michael Barabanov
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 
---
 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))
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html