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