[PATCH v2] 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.

receive-pack learns about --no-thin only for testing purposes, hence
no document update.

Signed-off-by: Nguyễn Thái Ngọc Duy pclo...@gmail.com
---
 v2 adds a test for push --no-thin. I figured out the problem in my
 test. I hit size filtering heuristics in pack-objects.c:try_delta().

 builtin/push.c |  5 ++---
 builtin/receive-pack.c |  8 +++-
 t/t5516-fetch-push.sh  | 12 
 3 files changed, 21 insertions(+), 4 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);
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..e80247b 100755
--- a/t/t5516-fetch-push.sh
+++ b/t/t5516-fetch-push.sh
@@ -1172,4 +1172,16 @@ test_expect_success 'push --follow-tag only pushes 
relevant tags' '
test_cmp expect actual
 '
 
+test_expect_success 'push --no-thin must produce non-thin pack' '
+   for i in `seq 100`; do echo modified  path1; done 
+   git commit -am path1 big enough to pass size heuristics in try_delta 

+   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 repack -adf 
+   git push --no-thin --receive-pack=git receive-pack --no-thin 
no-thin/.git refs/heads/master:refs/heads/foo
+'
+
 test_done
-- 
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


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

2013-08-10 Thread Eric Sunshine
On Sat, Aug 10, 2013 at 9:24 PM, Nguyễn Thái Ngọc Duy pclo...@gmail.com 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.

 receive-pack learns about --no-thin only for testing purposes, hence
 no document update.

 Signed-off-by: Nguyễn Thái Ngọc Duy pclo...@gmail.com
 ---
 diff --git a/t/t5516-fetch-push.sh b/t/t5516-fetch-push.sh
 index 4691d51..e80247b 100755
 --- a/t/t5516-fetch-push.sh
 +++ b/t/t5516-fetch-push.sh
 @@ -1172,4 +1172,16 @@ test_expect_success 'push --follow-tag only pushes 
 relevant tags' '
 test_cmp expect actual
  '

 +test_expect_success 'push --no-thin must produce non-thin pack' '
 +   for i in `seq 100`; do echo modified  path1; done 

s/seq/test_seq/

d17cf5f3a32f07bf (tests: Introduce test_seq;  2012-08-03)

 +   git commit -am path1 big enough to pass size heuristics in 
 try_delta 
 +   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 repack -adf 
 +   git push --no-thin --receive-pack=git receive-pack --no-thin 
 no-thin/.git refs/heads/master:refs/heads/foo
 +'
 +
  test_done
 --
 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