* [PATCH] push: respect --no-thin @ 2013-08-10 10:10 Nguyễn Thái Ngọc Duy 2013-08-10 10:31 ` Jeff King 2013-08-11 1:24 ` [PATCH v2] " Nguyễn Thái Ngọc Duy 0 siblings, 2 replies; 10+ messages in thread From: Nguyễn Thái Ngọc Duy @ 2013-08-10 10:10 UTC (permalink / raw) To: git Cc: Junio C Hamano, Jeff King, Ramkumar Ramachandra, Martin Fick, 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 <pclouds@gmail.com> --- 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 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH] push: respect --no-thin 2013-08-10 10:10 [PATCH] push: respect --no-thin Nguyễn Thái Ngọc Duy @ 2013-08-10 10:31 ` Jeff King 2013-08-10 11:45 ` Duy Nguyen 2013-08-11 1:24 ` [PATCH v2] " Nguyễn Thái Ngọc Duy 1 sibling, 1 reply; 10+ messages in thread From: Jeff King @ 2013-08-10 10:31 UTC (permalink / raw) To: Nguyễn Thái Ngọc Duy Cc: git, Junio C Hamano, Ramkumar Ramachandra, Martin Fick 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 <pclouds@gmail.com> 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 ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] push: respect --no-thin 2013-08-10 10:31 ` Jeff King @ 2013-08-10 11:45 ` Duy Nguyen 0 siblings, 0 replies; 10+ messages in thread From: Duy Nguyen @ 2013-08-10 11:45 UTC (permalink / raw) To: Jeff King; +Cc: git, Junio C Hamano, Ramkumar Ramachandra, Martin Fick 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< -- ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v2] push: respect --no-thin 2013-08-10 10:10 [PATCH] push: respect --no-thin Nguyễn Thái Ngọc Duy 2013-08-10 10:31 ` Jeff King @ 2013-08-11 1:24 ` Nguyễn Thái Ngọc Duy 2013-08-11 5:12 ` Eric Sunshine 2013-08-11 8:52 ` [PATCH v3] " Nguyễn Thái Ngọc Duy 1 sibling, 2 replies; 10+ messages in thread From: Nguyễn Thái Ngọc Duy @ 2013-08-11 1:24 UTC (permalink / raw) To: git Cc: Junio C Hamano, Jeff King, Ramkumar Ramachandra, Martin Fick, 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 <pclouds@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 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH v2] push: respect --no-thin 2013-08-11 1:24 ` [PATCH v2] " Nguyễn Thái Ngọc Duy @ 2013-08-11 5:12 ` Eric Sunshine 2013-08-11 8:52 ` [PATCH v3] " Nguyễn Thái Ngọc Duy 1 sibling, 0 replies; 10+ messages in thread From: Eric Sunshine @ 2013-08-11 5:12 UTC (permalink / raw) To: Nguyễn Thái Ngọc Duy Cc: Git List, Junio C Hamano, Jeff King, Ramkumar Ramachandra, Martin Fick On Sat, Aug 10, 2013 at 9:24 PM, Nguyễn Thái Ngọc Duy <pclouds@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 <pclouds@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 ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v3] push: respect --no-thin 2013-08-11 1:24 ` [PATCH v2] " Nguyễn Thái Ngọc Duy 2013-08-11 5:12 ` Eric Sunshine @ 2013-08-11 8:52 ` Nguyễn Thái Ngọc Duy 2013-08-12 5:59 ` Junio C Hamano 2013-08-12 13:55 ` [PATCH v4] " Nguyễn Thái Ngọc Duy 1 sibling, 2 replies; 10+ messages in thread From: Nguyễn Thái Ngọc Duy @ 2013-08-11 8:52 UTC (permalink / raw) To: git Cc: Eric Sunshine, Junio C Hamano, Jeff King, Ramkumar Ramachandra, Martin Fick, 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 <pclouds@gmail.com> --- v3 gets rid of seq in the test. builtin/push.c | 5 ++--- builtin/receive-pack.c | 8 +++++++- t/t5516-fetch-push.sh | 16 ++++++++++++++++ 3 files changed, 25 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..3cfd1cd 100755 --- a/t/t5516-fetch-push.sh +++ b/t/t5516-fetch-push.sh @@ -1172,4 +1172,20 @@ 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' ' + cat >>path1 <<\EOF && +keep base version of path1 big enough, compared to the new changes +later, in order to pass size heuristics in +builtin/pack-objects.c:try_delta() +EOF + git commit -am initial && + 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 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH v3] push: respect --no-thin 2013-08-11 8:52 ` [PATCH v3] " Nguyễn Thái Ngọc Duy @ 2013-08-12 5:59 ` Junio C Hamano 2013-08-12 11:30 ` Duy Nguyen 2013-08-12 13:55 ` [PATCH v4] " Nguyễn Thái Ngọc Duy 1 sibling, 1 reply; 10+ messages in thread From: Junio C Hamano @ 2013-08-12 5:59 UTC (permalink / raw) To: Nguyễn Thái Ngọc Duy Cc: git, Eric Sunshine, Jeff King, Ramkumar Ramachandra, Martin Fick Nguyễn Thái Ngọc Duy <pclouds@gmail.com> writes: > 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. Please name it "--reject-thin-pack-for-testing" to make it crystal clear that a documentation patch to "document undocumented option" is unwanted. > 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); Hmm, I am utterly confused. How does the original code have thin as an non-overridable default? The variable is initialized to 0, parse-options specifies it as OPT_BOOLEAN, and TRANS_OPT_THIN is set only if "thin" is set. Updated code flips the default to "1" but unconditionally uses TRANS_OPT_THIN to set it to either "yes" or NULL. While it is not wrong per-se, do_push() (i.e. the caller of this function) grabs the transport from transport_get() which initializes the transport with the thin option disabled by default, so it is not immediately obvious to me why "always call TRANS_OPT_THIN but set it explicitly to NULL when --no-thin is asked" is necessary or improvement. Puzzled.... ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v3] push: respect --no-thin 2013-08-12 5:59 ` Junio C Hamano @ 2013-08-12 11:30 ` Duy Nguyen 2013-08-13 16:43 ` Junio C Hamano 0 siblings, 1 reply; 10+ messages in thread From: Duy Nguyen @ 2013-08-12 11:30 UTC (permalink / raw) To: Junio C Hamano Cc: Git Mailing List, Eric Sunshine, Jeff King, Ramkumar Ramachandra, Martin Fick On Mon, Aug 12, 2013 at 12:59 PM, Junio C Hamano <gitster@pobox.com> wrote: >> @@ -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); > > Hmm, I am utterly confused. > > How does the original code have thin as an non-overridable default? > The variable is initialized to 0, parse-options specifies it as > OPT_BOOLEAN, and TRANS_OPT_THIN is set only if "thin" is set. > > Updated code flips the default to "1" but unconditionally uses > TRANS_OPT_THIN to set it to either "yes" or NULL. While it is not > wrong per-se, do_push() (i.e. the caller of this function) grabs the > transport from transport_get() which initializes the transport with > the thin option disabled by default, transport_get() actually sets thin option to 1 by default. If I don't misread the code, the first version of transport.c already flipped "thin" from 0 (in push.c) to 1 (in transport.c), see 9b28851 (Push code for transport library - 2007-09-10). The funny thing is that commit was just one day after Shawn flipped 'thin' from 1 to 0 in push.c in a4503a1. > so it is not immediately > obvious to me why "always call TRANS_OPT_THIN but set it explicitly > to NULL when --no-thin is asked" is necessary or improvement. -- Duy ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v3] push: respect --no-thin 2013-08-12 11:30 ` Duy Nguyen @ 2013-08-13 16:43 ` Junio C Hamano 0 siblings, 0 replies; 10+ messages in thread From: Junio C Hamano @ 2013-08-13 16:43 UTC (permalink / raw) To: Duy Nguyen Cc: Git Mailing List, Eric Sunshine, Jeff King, Ramkumar Ramachandra, Martin Fick Duy Nguyen <pclouds@gmail.com> writes: > transport_get() actually sets thin option to 1 by default. Yeah, I missed your message in the nearby thread. It indeed does. ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v4] push: respect --no-thin 2013-08-11 8:52 ` [PATCH v3] " Nguyễn Thái Ngọc Duy 2013-08-12 5:59 ` Junio C Hamano @ 2013-08-12 13:55 ` Nguyễn Thái Ngọc Duy 1 sibling, 0 replies; 10+ messages in thread From: Nguyễn Thái Ngọc Duy @ 2013-08-12 13:55 UTC (permalink / raw) To: git Cc: Eric Sunshine, Junio C Hamano, Jeff King, Ramkumar Ramachandra, Martin Fick, Nguyễn Thái Ngọc Duy - From the beginning of push.c in 755225d, 2006-04-29, "thin" option was enabled by default but could be turned off with --no-thin. - Then Shawn changed the default to 0 in favor of saving server resources in a4503a1, 2007-09-09. --no-thin worked great. - One day later, in 9b28851 Daniel extracted some code from push.c to create transport.c. He (probably accidentally) flipped the default value from 0 to 1 in transport_get(). From then on --no-thin is effectively no-op because git-push still expects the default value to be false and only calls transport_set_option() when "thin" variable in push.c is true (which is unnecessary). Correct the code to respect --no-thin by calling transport_set_option() in both cases. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> --- v4 elaborates a bit on the story of "thin" variable in push.c and renames receive-pack --no-thin to --reject-thin-pack-for-testing. builtin/push.c | 5 ++--- builtin/receive-pack.c | 8 +++++++- t/t5516-fetch-push.sh | 17 +++++++++++++++++ 3 files changed, 26 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..fc6d53a 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, "--reject-thin-pack-for-testing")) { + fix_thin = 0; + continue; + } usage(receive_pack_usage); } diff --git a/t/t5516-fetch-push.sh b/t/t5516-fetch-push.sh index 4691d51..99c32d7 100755 --- a/t/t5516-fetch-push.sh +++ b/t/t5516-fetch-push.sh @@ -1172,4 +1172,21 @@ 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' ' + cat >>path1 <<\EOF && +keep base version of path1 big enough, compared to the new changes +later, in order to pass size heuristics in +builtin/pack-objects.c:try_delta() +EOF + git commit -am initial && + 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 && + rcvpck="git receive-pack --reject-thin-pack-for-testing" && + git push --no-thin --receive-pack="$rcvpck" no-thin/.git refs/heads/master:refs/heads/foo +' + test_done -- 1.8.2.83.gc99314b ^ permalink raw reply related [flat|nested] 10+ messages in thread
end of thread, other threads:[~2013-08-13 16:43 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2013-08-10 10:10 [PATCH] push: respect --no-thin Nguyễn Thái Ngọc Duy 2013-08-10 10:31 ` Jeff King 2013-08-10 11:45 ` Duy Nguyen 2013-08-11 1:24 ` [PATCH v2] " Nguyễn Thái Ngọc Duy 2013-08-11 5:12 ` Eric Sunshine 2013-08-11 8:52 ` [PATCH v3] " Nguyễn Thái Ngọc Duy 2013-08-12 5:59 ` Junio C Hamano 2013-08-12 11:30 ` Duy Nguyen 2013-08-13 16:43 ` Junio C Hamano 2013-08-12 13:55 ` [PATCH v4] " Nguyễn Thái Ngọc Duy
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).