send-pack: stop using the_repository
Stop using `the_repository` in the "send-pack" subsystem by passing in a repository when sending a packfile. Adjust callers accordingly by using `the_repository`. While there may be some callers that have a repository available in their context, this trivial conversion allows for easier verification and bubbles up the use of `the_repository` by one level. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
395b584b57
commit
5ee907bb3f
@ -317,7 +317,7 @@ int cmd_send_pack(int argc,
|
|||||||
set_ref_status_for_push(remote_refs, args.send_mirror,
|
set_ref_status_for_push(remote_refs, args.send_mirror,
|
||||||
args.force_update);
|
args.force_update);
|
||||||
|
|
||||||
ret = send_pack(&args, fd, conn, remote_refs, &extra_have);
|
ret = send_pack(the_repository, &args, fd, conn, remote_refs, &extra_have);
|
||||||
|
|
||||||
if (helper_status)
|
if (helper_status)
|
||||||
print_helper_status(remote_refs);
|
print_helper_status(remote_refs);
|
||||||
|
77
send-pack.c
77
send-pack.c
@ -1,5 +1,3 @@
|
|||||||
#define USE_THE_REPOSITORY_VARIABLE
|
|
||||||
|
|
||||||
#include "git-compat-util.h"
|
#include "git-compat-util.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "commit.h"
|
#include "commit.h"
|
||||||
@ -44,10 +42,11 @@ int option_parse_push_signed(const struct option *opt,
|
|||||||
die("bad %s argument: %s", opt->long_name, arg);
|
die("bad %s argument: %s", opt->long_name, arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void feed_object(const struct object_id *oid, FILE *fh, int negative)
|
static void feed_object(struct repository *r,
|
||||||
|
const struct object_id *oid, FILE *fh, int negative)
|
||||||
{
|
{
|
||||||
if (negative &&
|
if (negative &&
|
||||||
!repo_has_object_file_with_flags(the_repository, oid,
|
!repo_has_object_file_with_flags(r, oid,
|
||||||
OBJECT_INFO_SKIP_FETCH_OBJECT |
|
OBJECT_INFO_SKIP_FETCH_OBJECT |
|
||||||
OBJECT_INFO_QUICK))
|
OBJECT_INFO_QUICK))
|
||||||
return;
|
return;
|
||||||
@ -61,7 +60,8 @@ static void feed_object(const struct object_id *oid, FILE *fh, int negative)
|
|||||||
/*
|
/*
|
||||||
* Make a pack stream and spit it out into file descriptor fd
|
* Make a pack stream and spit it out into file descriptor fd
|
||||||
*/
|
*/
|
||||||
static int pack_objects(int fd, struct ref *refs, struct oid_array *advertised,
|
static int pack_objects(struct repository *r,
|
||||||
|
int fd, struct ref *refs, struct oid_array *advertised,
|
||||||
struct oid_array *negotiated,
|
struct oid_array *negotiated,
|
||||||
struct send_pack_args *args)
|
struct send_pack_args *args)
|
||||||
{
|
{
|
||||||
@ -74,7 +74,7 @@ static int pack_objects(int fd, struct ref *refs, struct oid_array *advertised,
|
|||||||
FILE *po_in;
|
FILE *po_in;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
trace2_region_enter("send_pack", "pack_objects", the_repository);
|
trace2_region_enter("send_pack", "pack_objects", r);
|
||||||
strvec_push(&po.args, "pack-objects");
|
strvec_push(&po.args, "pack-objects");
|
||||||
strvec_push(&po.args, "--all-progress-implied");
|
strvec_push(&po.args, "--all-progress-implied");
|
||||||
strvec_push(&po.args, "--revs");
|
strvec_push(&po.args, "--revs");
|
||||||
@ -87,7 +87,7 @@ static int pack_objects(int fd, struct ref *refs, struct oid_array *advertised,
|
|||||||
strvec_push(&po.args, "-q");
|
strvec_push(&po.args, "-q");
|
||||||
if (args->progress)
|
if (args->progress)
|
||||||
strvec_push(&po.args, "--progress");
|
strvec_push(&po.args, "--progress");
|
||||||
if (is_repository_shallow(the_repository))
|
if (is_repository_shallow(r))
|
||||||
strvec_push(&po.args, "--shallow");
|
strvec_push(&po.args, "--shallow");
|
||||||
if (args->disable_bitmaps)
|
if (args->disable_bitmaps)
|
||||||
strvec_push(&po.args, "--no-use-bitmap-index");
|
strvec_push(&po.args, "--no-use-bitmap-index");
|
||||||
@ -104,15 +104,15 @@ static int pack_objects(int fd, struct ref *refs, struct oid_array *advertised,
|
|||||||
*/
|
*/
|
||||||
po_in = xfdopen(po.in, "w");
|
po_in = xfdopen(po.in, "w");
|
||||||
for (size_t i = 0; i < advertised->nr; i++)
|
for (size_t i = 0; i < advertised->nr; i++)
|
||||||
feed_object(&advertised->oid[i], po_in, 1);
|
feed_object(r, &advertised->oid[i], po_in, 1);
|
||||||
for (size_t i = 0; i < negotiated->nr; i++)
|
for (size_t i = 0; i < negotiated->nr; i++)
|
||||||
feed_object(&negotiated->oid[i], po_in, 1);
|
feed_object(r, &negotiated->oid[i], po_in, 1);
|
||||||
|
|
||||||
while (refs) {
|
while (refs) {
|
||||||
if (!is_null_oid(&refs->old_oid))
|
if (!is_null_oid(&refs->old_oid))
|
||||||
feed_object(&refs->old_oid, po_in, 1);
|
feed_object(r, &refs->old_oid, po_in, 1);
|
||||||
if (!is_null_oid(&refs->new_oid))
|
if (!is_null_oid(&refs->new_oid))
|
||||||
feed_object(&refs->new_oid, po_in, 0);
|
feed_object(r, &refs->new_oid, po_in, 0);
|
||||||
refs = refs->next;
|
refs = refs->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -146,10 +146,10 @@ static int pack_objects(int fd, struct ref *refs, struct oid_array *advertised,
|
|||||||
*/
|
*/
|
||||||
if (rc > 128 && rc != 141)
|
if (rc > 128 && rc != 141)
|
||||||
error("pack-objects died of signal %d", rc - 128);
|
error("pack-objects died of signal %d", rc - 128);
|
||||||
trace2_region_leave("send_pack", "pack_objects", the_repository);
|
trace2_region_leave("send_pack", "pack_objects", r);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
trace2_region_leave("send_pack", "pack_objects", the_repository);
|
trace2_region_leave("send_pack", "pack_objects", r);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -164,7 +164,8 @@ static int receive_unpack_status(struct packet_reader *reader)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int receive_status(struct packet_reader *reader, struct ref *refs)
|
static int receive_status(struct repository *r,
|
||||||
|
struct packet_reader *reader, struct ref *refs)
|
||||||
{
|
{
|
||||||
struct ref *hint;
|
struct ref *hint;
|
||||||
int ret;
|
int ret;
|
||||||
@ -172,7 +173,7 @@ static int receive_status(struct packet_reader *reader, struct ref *refs)
|
|||||||
int new_report = 0;
|
int new_report = 0;
|
||||||
int once = 0;
|
int once = 0;
|
||||||
|
|
||||||
trace2_region_enter("send_pack", "receive_status", the_repository);
|
trace2_region_enter("send_pack", "receive_status", r);
|
||||||
hint = NULL;
|
hint = NULL;
|
||||||
ret = receive_unpack_status(reader);
|
ret = receive_unpack_status(reader);
|
||||||
while (1) {
|
while (1) {
|
||||||
@ -221,10 +222,10 @@ static int receive_status(struct packet_reader *reader, struct ref *refs)
|
|||||||
if (!strcmp(key, "refname"))
|
if (!strcmp(key, "refname"))
|
||||||
report->ref_name = xstrdup_or_null(val);
|
report->ref_name = xstrdup_or_null(val);
|
||||||
else if (!strcmp(key, "old-oid") && val &&
|
else if (!strcmp(key, "old-oid") && val &&
|
||||||
!parse_oid_hex(val, &old_oid, &val))
|
!parse_oid_hex_algop(val, &old_oid, &val, r->hash_algo))
|
||||||
report->old_oid = oiddup(&old_oid);
|
report->old_oid = oiddup(&old_oid);
|
||||||
else if (!strcmp(key, "new-oid") && val &&
|
else if (!strcmp(key, "new-oid") && val &&
|
||||||
!parse_oid_hex(val, &new_oid, &val))
|
!parse_oid_hex_algop(val, &new_oid, &val, r->hash_algo))
|
||||||
report->new_oid = oiddup(&new_oid);
|
report->new_oid = oiddup(&new_oid);
|
||||||
else if (!strcmp(key, "forced-update"))
|
else if (!strcmp(key, "forced-update"))
|
||||||
report->forced_update = 1;
|
report->forced_update = 1;
|
||||||
@ -271,7 +272,7 @@ static int receive_status(struct packet_reader *reader, struct ref *refs)
|
|||||||
new_report = 1;
|
new_report = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
trace2_region_leave("send_pack", "receive_status", the_repository);
|
trace2_region_leave("send_pack", "receive_status", r);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -293,9 +294,9 @@ static int advertise_shallow_grafts_cb(const struct commit_graft *graft, void *c
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void advertise_shallow_grafts_buf(struct strbuf *sb)
|
static void advertise_shallow_grafts_buf(struct repository *r, struct strbuf *sb)
|
||||||
{
|
{
|
||||||
if (!is_repository_shallow(the_repository))
|
if (!is_repository_shallow(r))
|
||||||
return;
|
return;
|
||||||
for_each_commit_graft(advertise_shallow_grafts_cb, sb);
|
for_each_commit_graft(advertise_shallow_grafts_cb, sb);
|
||||||
}
|
}
|
||||||
@ -426,13 +427,14 @@ static void reject_invalid_nonce(const char *nonce, int len)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void get_commons_through_negotiation(const char *url,
|
static void get_commons_through_negotiation(struct repository *r,
|
||||||
|
const char *url,
|
||||||
const struct ref *remote_refs,
|
const struct ref *remote_refs,
|
||||||
struct oid_array *commons)
|
struct oid_array *commons)
|
||||||
{
|
{
|
||||||
struct child_process child = CHILD_PROCESS_INIT;
|
struct child_process child = CHILD_PROCESS_INIT;
|
||||||
const struct ref *ref;
|
const struct ref *ref;
|
||||||
int len = the_hash_algo->hexsz + 1; /* hash + NL */
|
int len = r->hash_algo->hexsz + 1; /* hash + NL */
|
||||||
int nr_negotiation_tip = 0;
|
int nr_negotiation_tip = 0;
|
||||||
|
|
||||||
child.git_cmd = 1;
|
child.git_cmd = 1;
|
||||||
@ -466,7 +468,7 @@ static void get_commons_through_negotiation(const char *url,
|
|||||||
break;
|
break;
|
||||||
if (read_len != len)
|
if (read_len != len)
|
||||||
die("invalid length read %d", read_len);
|
die("invalid length read %d", read_len);
|
||||||
if (parse_oid_hex(hex_hash, &oid, &end) || *end != '\n')
|
if (parse_oid_hex_algop(hex_hash, &oid, &end, r->hash_algo) || *end != '\n')
|
||||||
die("invalid hash");
|
die("invalid hash");
|
||||||
oid_array_append(commons, &oid);
|
oid_array_append(commons, &oid);
|
||||||
} while (1);
|
} while (1);
|
||||||
@ -480,7 +482,8 @@ static void get_commons_through_negotiation(const char *url,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int send_pack(struct send_pack_args *args,
|
int send_pack(struct repository *r,
|
||||||
|
struct send_pack_args *args,
|
||||||
int fd[], struct child_process *conn,
|
int fd[], struct child_process *conn,
|
||||||
struct ref *remote_refs,
|
struct ref *remote_refs,
|
||||||
struct oid_array *extra_have)
|
struct oid_array *extra_have)
|
||||||
@ -518,17 +521,17 @@ int send_pack(struct send_pack_args *args,
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
git_config_get_bool("push.negotiate", &push_negotiate);
|
repo_config_get_bool(r, "push.negotiate", &push_negotiate);
|
||||||
if (push_negotiate) {
|
if (push_negotiate) {
|
||||||
trace2_region_enter("send_pack", "push_negotiate", the_repository);
|
trace2_region_enter("send_pack", "push_negotiate", r);
|
||||||
get_commons_through_negotiation(args->url, remote_refs, &commons);
|
get_commons_through_negotiation(r, args->url, remote_refs, &commons);
|
||||||
trace2_region_leave("send_pack", "push_negotiate", the_repository);
|
trace2_region_leave("send_pack", "push_negotiate", r);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!git_config_get_bool("push.usebitmaps", &use_bitmaps))
|
if (!repo_config_get_bool(r, "push.usebitmaps", &use_bitmaps))
|
||||||
args->disable_bitmaps = !use_bitmaps;
|
args->disable_bitmaps = !use_bitmaps;
|
||||||
|
|
||||||
git_config_get_bool("transfer.advertisesid", &advertise_sid);
|
repo_config_get_bool(r, "transfer.advertisesid", &advertise_sid);
|
||||||
|
|
||||||
/* Does the other end support the reporting? */
|
/* Does the other end support the reporting? */
|
||||||
if (server_supports("report-status-v2"))
|
if (server_supports("report-status-v2"))
|
||||||
@ -554,7 +557,7 @@ int send_pack(struct send_pack_args *args,
|
|||||||
if (server_supports("push-options"))
|
if (server_supports("push-options"))
|
||||||
push_options_supported = 1;
|
push_options_supported = 1;
|
||||||
|
|
||||||
if (!server_supports_hash(the_hash_algo->name, &object_format_supported))
|
if (!server_supports_hash(r->hash_algo->name, &object_format_supported))
|
||||||
die(_("the receiving end does not support this repository's hash algorithm"));
|
die(_("the receiving end does not support this repository's hash algorithm"));
|
||||||
|
|
||||||
if (args->push_cert != SEND_PACK_PUSH_CERT_NEVER) {
|
if (args->push_cert != SEND_PACK_PUSH_CERT_NEVER) {
|
||||||
@ -596,7 +599,7 @@ int send_pack(struct send_pack_args *args,
|
|||||||
if (use_push_options)
|
if (use_push_options)
|
||||||
strbuf_addstr(&cap_buf, " push-options");
|
strbuf_addstr(&cap_buf, " push-options");
|
||||||
if (object_format_supported)
|
if (object_format_supported)
|
||||||
strbuf_addf(&cap_buf, " object-format=%s", the_hash_algo->name);
|
strbuf_addf(&cap_buf, " object-format=%s", r->hash_algo->name);
|
||||||
if (agent_supported)
|
if (agent_supported)
|
||||||
strbuf_addf(&cap_buf, " agent=%s", git_user_agent_sanitized());
|
strbuf_addf(&cap_buf, " agent=%s", git_user_agent_sanitized());
|
||||||
if (advertise_sid)
|
if (advertise_sid)
|
||||||
@ -646,7 +649,7 @@ int send_pack(struct send_pack_args *args,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!args->dry_run)
|
if (!args->dry_run)
|
||||||
advertise_shallow_grafts_buf(&req_buf);
|
advertise_shallow_grafts_buf(r, &req_buf);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Finally, tell the other end!
|
* Finally, tell the other end!
|
||||||
@ -686,7 +689,7 @@ int send_pack(struct send_pack_args *args,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (args->stateless_rpc) {
|
if (args->stateless_rpc) {
|
||||||
if (!args->dry_run && (cmds_sent || is_repository_shallow(the_repository))) {
|
if (!args->dry_run && (cmds_sent || is_repository_shallow(r))) {
|
||||||
packet_buf_flush(&req_buf);
|
packet_buf_flush(&req_buf);
|
||||||
send_sideband(out, -1, req_buf.buf, req_buf.len, LARGE_PACKET_MAX);
|
send_sideband(out, -1, req_buf.buf, req_buf.len, LARGE_PACKET_MAX);
|
||||||
}
|
}
|
||||||
@ -711,7 +714,7 @@ int send_pack(struct send_pack_args *args,
|
|||||||
PACKET_READ_DIE_ON_ERR_PACKET);
|
PACKET_READ_DIE_ON_ERR_PACKET);
|
||||||
|
|
||||||
if (need_pack_data && cmds_sent) {
|
if (need_pack_data && cmds_sent) {
|
||||||
if (pack_objects(out, remote_refs, extra_have, &commons, args) < 0) {
|
if (pack_objects(r, out, remote_refs, extra_have, &commons, args) < 0) {
|
||||||
if (args->stateless_rpc)
|
if (args->stateless_rpc)
|
||||||
close(out);
|
close(out);
|
||||||
if (git_connection_is_socket(conn))
|
if (git_connection_is_socket(conn))
|
||||||
@ -724,7 +727,7 @@ int send_pack(struct send_pack_args *args,
|
|||||||
* we get one).
|
* we get one).
|
||||||
*/
|
*/
|
||||||
if (status_report)
|
if (status_report)
|
||||||
receive_status(&reader, remote_refs);
|
receive_status(r, &reader, remote_refs);
|
||||||
|
|
||||||
if (use_sideband) {
|
if (use_sideband) {
|
||||||
close(demux.out);
|
close(demux.out);
|
||||||
@ -743,7 +746,7 @@ int send_pack(struct send_pack_args *args,
|
|||||||
packet_flush(out);
|
packet_flush(out);
|
||||||
|
|
||||||
if (status_report && cmds_sent)
|
if (status_report && cmds_sent)
|
||||||
ret = receive_status(&reader, remote_refs);
|
ret = receive_status(r, &reader, remote_refs);
|
||||||
else
|
else
|
||||||
ret = 0;
|
ret = 0;
|
||||||
if (args->stateless_rpc)
|
if (args->stateless_rpc)
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
struct child_process;
|
struct child_process;
|
||||||
struct oid_array;
|
struct oid_array;
|
||||||
struct ref;
|
struct ref;
|
||||||
|
struct repository;
|
||||||
|
|
||||||
/* Possible values for push_cert field in send_pack_args. */
|
/* Possible values for push_cert field in send_pack_args. */
|
||||||
#define SEND_PACK_PUSH_CERT_NEVER 0
|
#define SEND_PACK_PUSH_CERT_NEVER 0
|
||||||
@ -35,7 +36,7 @@ struct option;
|
|||||||
int option_parse_push_signed(const struct option *opt,
|
int option_parse_push_signed(const struct option *opt,
|
||||||
const char *arg, int unset);
|
const char *arg, int unset);
|
||||||
|
|
||||||
int send_pack(struct send_pack_args *args,
|
int send_pack(struct repository *r, struct send_pack_args *args,
|
||||||
int fd[], struct child_process *conn,
|
int fd[], struct child_process *conn,
|
||||||
struct ref *remote_refs, struct oid_array *extra_have);
|
struct ref *remote_refs, struct oid_array *extra_have);
|
||||||
|
|
||||||
|
@ -932,7 +932,7 @@ static int git_transport_push(struct transport *transport, struct ref *remote_re
|
|||||||
break;
|
break;
|
||||||
case protocol_v1:
|
case protocol_v1:
|
||||||
case protocol_v0:
|
case protocol_v0:
|
||||||
ret = send_pack(&args, data->fd, data->conn, remote_refs,
|
ret = send_pack(the_repository, &args, data->fd, data->conn, remote_refs,
|
||||||
&data->extra_have);
|
&data->extra_have);
|
||||||
break;
|
break;
|
||||||
case protocol_unknown_version:
|
case protocol_unknown_version:
|
||||||
|
Reference in New Issue
Block a user