Re: [PATCH] push: respect --no-thin

2013-08-10 Thread Duy Nguyen
On Sat, Aug 10, 2013 at 06:31:23AM -0400, Jeff King wrote:
> It might be nice to have a test, but I am not sure of a good way to
> check whether a push was thin. I guess we can grep the output of
> GIT_TRACE, though it feels a bit hacky.

In theory, if we have a way to tell receive-pack not to pass
--fix-thin to index-pack, then it should barf on the thin pack
received from push/send-pack. But it does not work this way, or at
least I set up the test the wrong way, or pack-objects decides not to
create deltas.. anybody sees what's wrong in this test?

-- 8< --
diff --git a/builtin/receive-pack.c b/builtin/receive-pack.c
index e3eb5fc..da60817 100644
--- a/builtin/receive-pack.c
+++ b/builtin/receive-pack.c
@@ -38,6 +38,7 @@ static int quiet;
 static int prefer_ofs_delta = 1;
 static int auto_update_server_info;
 static int auto_gc = 1;
+static int fix_thin = 1;
 static const char *head_name;
 static void *head_name_to_free;
 static int sent_capabilities;
@@ -869,7 +870,8 @@ static const char *unpack(int err_fd)
keeper[i++] = "--stdin";
if (fsck_objects)
keeper[i++] = "--strict";
-   keeper[i++] = "--fix-thin";
+   if (fix_thin)
+   keeper[i++] = "--fix-thin";
keeper[i++] = hdr_arg;
keeper[i++] = keep_arg;
keeper[i++] = NULL;
@@ -975,6 +977,10 @@ int cmd_receive_pack(int argc, const char **argv, const 
char *prefix)
stateless_rpc = 1;
continue;
}
+   if (!strcmp(arg, "--no-thin")) {
+   fix_thin = 0;
+   continue;
+   }
 
usage(receive_pack_usage);
}
diff --git a/t/t5516-fetch-push.sh b/t/t5516-fetch-push.sh
index 4691d51..9c9d43c 100755
--- a/t/t5516-fetch-push.sh
+++ b/t/t5516-fetch-push.sh
@@ -126,6 +126,16 @@ test_expect_success setup '
 
 '
 
+test_expect_success 'push --no-thin' '
+   git init no-thin &&
+   git --git-dir=no-thin/.git config receive.unpacklimit 0 &&
+   git push no-thin/.git refs/heads/master:refs/heads/foo &&
+   echo modified >> path1 &&
+   git commit -am modified &&
+   git push --no-thin --receive-pack="git receive-pack --no-thin" 
no-thin/.git refs/heads/master:refs/heads/foo
+   false
+'
+
 test_expect_success 'fetch without wildcard' '
mk_empty testrepo &&
(
-- 8< --
--
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] push: respect --no-thin

2013-08-10 Thread Jeff King
On Sat, Aug 10, 2013 at 05:10:07PM +0700, Nguyen Thai Ngoc Duy wrote:

> Over the time the default value for --thin has been switched between
> on and off. As of now it's always on, even if --no-thin is given.
> Correct the code to respect --no-thin.
> 
> Signed-off-by: Nguyễn Thái Ngọc Duy 

This makes sense, and I confirmed with the script I posted earlier that
it does work (and didn't before). Thanks.

It might be nice to have a test, but I am not sure of a good way to
check whether a push was thin. I guess we can grep the output of
GIT_TRACE, though it feels a bit hacky.

-Peff
--
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] push: respect --no-thin

2013-08-10 Thread Nguyễn Thái Ngọc Duy
Over the time the default value for --thin has been switched between
on and off. As of now it's always on, even if --no-thin is given.
Correct the code to respect --no-thin.

Signed-off-by: Nguyễn Thái Ngọc Duy 
---
 builtin/push.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/builtin/push.c b/builtin/push.c
index 04f0eaf..333a1fb 100644
--- a/builtin/push.c
+++ b/builtin/push.c
@@ -15,7 +15,7 @@ static const char * const push_usage[] = {
NULL,
 };
 
-static int thin;
+static int thin = 1;
 static int deleterefs;
 static const char *receivepack;
 static int verbosity;
@@ -313,8 +313,7 @@ static int push_with_options(struct transport *transport, 
int flags)
if (receivepack)
transport_set_option(transport,
 TRANS_OPT_RECEIVEPACK, receivepack);
-   if (thin)
-   transport_set_option(transport, TRANS_OPT_THIN, "yes");
+   transport_set_option(transport, TRANS_OPT_THIN, thin ? "yes" : NULL);
 
if (verbosity > 0)
fprintf(stderr, _("Pushing to %s\n"), transport->url);
-- 
1.8.2.83.gc99314b

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