Merge branch 'np/push-delta'
* np/push-delta: allow OFS_DELTA objects during a push
This commit is contained in:
commit
99ddd24ad7
@ -27,10 +27,9 @@ static int receive_unpack_limit = -1;
|
|||||||
static int transfer_unpack_limit = -1;
|
static int transfer_unpack_limit = -1;
|
||||||
static int unpack_limit = 100;
|
static int unpack_limit = 100;
|
||||||
static int report_status;
|
static int report_status;
|
||||||
|
static int prefer_ofs_delta = 1;
|
||||||
static const char *head_name;
|
static const char *head_name;
|
||||||
|
static char *capabilities_to_send;
|
||||||
static char capabilities[] = " report-status delete-refs ";
|
|
||||||
static int capabilities_sent;
|
|
||||||
|
|
||||||
static enum deny_action parse_deny_action(const char *var, const char *value)
|
static enum deny_action parse_deny_action(const char *var, const char *value)
|
||||||
{
|
{
|
||||||
@ -84,24 +83,29 @@ static int receive_pack_config(const char *var, const char *value, void *cb)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (strcmp(var, "repack.usedeltabaseoffset") == 0) {
|
||||||
|
prefer_ofs_delta = git_config_bool(var, value);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
return git_default_config(var, value, cb);
|
return git_default_config(var, value, cb);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int show_ref(const char *path, const unsigned char *sha1, int flag, void *cb_data)
|
static int show_ref(const char *path, const unsigned char *sha1, int flag, void *cb_data)
|
||||||
{
|
{
|
||||||
if (capabilities_sent)
|
if (!capabilities_to_send)
|
||||||
packet_write(1, "%s %s\n", sha1_to_hex(sha1), path);
|
packet_write(1, "%s %s\n", sha1_to_hex(sha1), path);
|
||||||
else
|
else
|
||||||
packet_write(1, "%s %s%c%s\n",
|
packet_write(1, "%s %s%c%s\n",
|
||||||
sha1_to_hex(sha1), path, 0, capabilities);
|
sha1_to_hex(sha1), path, 0, capabilities_to_send);
|
||||||
capabilities_sent = 1;
|
capabilities_to_send = NULL;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void write_head_info(void)
|
static void write_head_info(void)
|
||||||
{
|
{
|
||||||
for_each_ref(show_ref, NULL);
|
for_each_ref(show_ref, NULL);
|
||||||
if (!capabilities_sent)
|
if (capabilities_to_send)
|
||||||
show_ref("capabilities^{}", null_sha1, 0, NULL);
|
show_ref("capabilities^{}", null_sha1, 0, NULL);
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -687,6 +691,10 @@ int cmd_receive_pack(int argc, const char **argv, const char *prefix)
|
|||||||
else if (0 <= receive_unpack_limit)
|
else if (0 <= receive_unpack_limit)
|
||||||
unpack_limit = receive_unpack_limit;
|
unpack_limit = receive_unpack_limit;
|
||||||
|
|
||||||
|
capabilities_to_send = (prefer_ofs_delta) ?
|
||||||
|
" report-status delete-refs ofs-delta " :
|
||||||
|
" report-status delete-refs ";
|
||||||
|
|
||||||
add_alternate_refs();
|
add_alternate_refs();
|
||||||
write_head_info();
|
write_head_info();
|
||||||
clear_extra_refs();
|
clear_extra_refs();
|
||||||
|
@ -43,12 +43,16 @@ static int pack_objects(int fd, struct ref *refs, struct extra_have_objects *ext
|
|||||||
"--stdout",
|
"--stdout",
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
|
NULL,
|
||||||
};
|
};
|
||||||
struct child_process po;
|
struct child_process po;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
i = 4;
|
||||||
if (args->use_thin_pack)
|
if (args->use_thin_pack)
|
||||||
argv[4] = "--thin";
|
argv[i++] = "--thin";
|
||||||
|
if (args->use_ofs_delta)
|
||||||
|
argv[i++] = "--delta-base-offset";
|
||||||
memset(&po, 0, sizeof(po));
|
memset(&po, 0, sizeof(po));
|
||||||
po.argv = argv;
|
po.argv = argv;
|
||||||
po.in = -1;
|
po.in = -1;
|
||||||
@ -315,6 +319,8 @@ int send_pack(struct send_pack_args *args,
|
|||||||
ask_for_status_report = 1;
|
ask_for_status_report = 1;
|
||||||
if (server_supports("delete-refs"))
|
if (server_supports("delete-refs"))
|
||||||
allow_deleting_refs = 1;
|
allow_deleting_refs = 1;
|
||||||
|
if (server_supports("ofs-delta"))
|
||||||
|
args->use_ofs_delta = 1;
|
||||||
|
|
||||||
if (!remote_refs) {
|
if (!remote_refs) {
|
||||||
fprintf(stderr, "No refs in common and none specified; doing nothing.\n"
|
fprintf(stderr, "No refs in common and none specified; doing nothing.\n"
|
||||||
|
@ -6,6 +6,7 @@ struct send_pack_args {
|
|||||||
send_mirror:1,
|
send_mirror:1,
|
||||||
force_update:1,
|
force_update:1,
|
||||||
use_thin_pack:1,
|
use_thin_pack:1,
|
||||||
|
use_ofs_delta:1,
|
||||||
dry_run:1;
|
dry_run:1;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user