From: Christian Couder <christian.couder@gmail.com>
To: git@vger.kernel.org
Cc: Junio C Hamano <gitster@pobox.com>,
Derrick Stolee <dstolee@microsoft.com>, Jeff King <peff@peff.net>,
Taylor Blau <me@ttaylorr.com>,
Jonathan Tan <jonathantanmy@google.com>,
Jonathan Nieder <jrnieder@gmail.com>,
Christian Couder <chriscool@tuxfamily.org>
Subject: [PATCH 07/14] upload-pack: move allow_unadvertised_object_request to upload_pack_data
Date: Thu, 11 Jun 2020 14:05:11 +0200 [thread overview]
Message-ID: <20200611120518.10771-8-chriscool@tuxfamily.org> (raw)
In-Reply-To: <20200611120518.10771-1-chriscool@tuxfamily.org>
As we cleanup 'upload-pack.c' by using 'struct upload_pack_data'
more thoroughly, let's move the 'allow_unadvertised_object_request'
static variable into this struct.
It is used by code common to protocol v0 and protocol v2.
Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
---
upload-pack.c | 55 ++++++++++++++++++++++++++++++---------------------
1 file changed, 32 insertions(+), 23 deletions(-)
diff --git a/upload-pack.c b/upload-pack.c
index acddfe28d6..5cd1342f62 100644
--- a/upload-pack.c
+++ b/upload-pack.c
@@ -44,13 +44,13 @@
static timestamp_t oldest_have;
+/* Values for allow_unadvertised_object_request flags */
/* Allow specifying sha1 if it is a ref tip. */
#define ALLOW_TIP_SHA1 01
/* Allow request of a sha1 if it is reachable from a ref (possibly hidden ref). */
#define ALLOW_REACHABLE_SHA1 02
/* Allow request of any sha1. Implies ALLOW_TIP_SHA1 and ALLOW_REACHABLE_SHA1. */
#define ALLOW_ANY_SHA1 07
-static unsigned int allow_unadvertised_object_request;
/*
* Please annotate, and if possible group together, fields used only
@@ -83,6 +83,9 @@ struct upload_pack_data {
/* 0 for no sideband, otherwise DEFAULT_PACKET_MAX or LARGE_PACKET_MAX */
int use_sideband;
+ /* See ALLOW_* values defined above */
+ unsigned int allow_unadvertised_object_request;
+
struct list_objects_filter_options filter_options;
struct packet_writer writer;
@@ -514,7 +517,8 @@ static int get_common_commits(struct upload_pack_data *data,
}
}
-static int is_our_ref(struct object *o)
+static int is_our_ref(struct object *o,
+ unsigned int allow_unadvertised_object_request)
{
int allow_hidden_ref = (allow_unadvertised_object_request &
(ALLOW_TIP_SHA1 | ALLOW_REACHABLE_SHA1));
@@ -526,7 +530,8 @@ static int is_our_ref(struct object *o)
*/
static int do_reachable_revlist(struct child_process *cmd,
struct object_array *src,
- struct object_array *reachable)
+ struct object_array *reachable,
+ unsigned int allow_unadvertised_object_request)
{
static const char *argv[] = {
"rev-list", "--stdin", NULL,
@@ -560,7 +565,7 @@ static int do_reachable_revlist(struct child_process *cmd,
continue;
if (reachable && o->type == OBJ_COMMIT)
o->flags &= ~TMP_MARK;
- if (!is_our_ref(o))
+ if (!is_our_ref(o, allow_unadvertised_object_request))
continue;
memcpy(namebuf + 1, oid_to_hex(&o->oid), hexsz);
if (write_in_full(cmd->in, namebuf, hexsz + 2) < 0)
@@ -569,7 +574,7 @@ static int do_reachable_revlist(struct child_process *cmd,
namebuf[hexsz] = '\n';
for (i = 0; i < src->nr; i++) {
o = src->objects[i].item;
- if (is_our_ref(o)) {
+ if (is_our_ref(o, allow_unadvertised_object_request)) {
if (reachable)
add_object_array(o, NULL, reachable);
continue;
@@ -596,7 +601,7 @@ static int do_reachable_revlist(struct child_process *cmd,
return -1;
}
-static int get_reachable_list(struct object_array *src,
+static int get_reachable_list(struct upload_pack_data *data,
struct object_array *reachable)
{
struct child_process cmd = CHILD_PROCESS_INIT;
@@ -605,7 +610,8 @@ static int get_reachable_list(struct object_array *src,
char namebuf[GIT_MAX_HEXSZ + 2]; /* ^ + hash + LF */
const unsigned hexsz = the_hash_algo->hexsz;
- if (do_reachable_revlist(&cmd, src, reachable) < 0)
+ if (do_reachable_revlist(&cmd, &data->shallows, reachable,
+ data->allow_unadvertised_object_request) < 0)
return -1;
while ((i = read_in_full(cmd.out, namebuf, hexsz + 1)) == hexsz + 1) {
@@ -636,13 +642,15 @@ static int get_reachable_list(struct object_array *src,
return 0;
}
-static int has_unreachable(struct object_array *src)
+static int has_unreachable(struct object_array *src,
+ unsigned int allow_unadvertised_object_request)
{
struct child_process cmd = CHILD_PROCESS_INIT;
char buf[1];
int i;
- if (do_reachable_revlist(&cmd, src, NULL) < 0)
+ if (do_reachable_revlist(&cmd, src, NULL,
+ allow_unadvertised_object_request) < 0)
return 1;
/*
@@ -683,9 +691,10 @@ static void check_non_tip(struct upload_pack_data *data)
* non-tip requests can never happen.
*/
if (!data->stateless_rpc
- && !(allow_unadvertised_object_request & ALLOW_REACHABLE_SHA1))
+ && !(data->allow_unadvertised_object_request & ALLOW_REACHABLE_SHA1))
goto error;
- if (!has_unreachable(&data->want_obj))
+ if (!has_unreachable(&data->want_obj,
+ data->allow_unadvertised_object_request))
/* All the non-tip ones are ancestors of what we advertised */
return;
@@ -693,7 +702,7 @@ static void check_non_tip(struct upload_pack_data *data)
/* Pick one of them (we know there at least is one) */
for (i = 0; i < data->want_obj.nr; i++) {
struct object *o = data->want_obj.objects[i].item;
- if (!is_our_ref(o)) {
+ if (!is_our_ref(o, data->allow_unadvertised_object_request)) {
packet_writer_error(&data->writer,
"upload-pack: not our ref %s",
oid_to_hex(&o->oid));
@@ -774,7 +783,7 @@ static void deepen(struct upload_pack_data *data, int depth)
head_ref_namespaced(check_ref, NULL);
for_each_namespaced_ref(check_ref, NULL);
- get_reachable_list(&data->shallows, &reachable_shallows);
+ get_reachable_list(data, &reachable_shallows);
result = get_shallow_commits(&reachable_shallows,
depth + 1,
SHALLOW, NOT_SHALLOW);
@@ -992,8 +1001,8 @@ static void receive_needs(struct upload_pack_data *data,
}
if (!(o->flags & WANTED)) {
o->flags |= WANTED;
- if (!((allow_unadvertised_object_request & ALLOW_ANY_SHA1) == ALLOW_ANY_SHA1
- || is_our_ref(o)))
+ if (!((data->allow_unadvertised_object_request & ALLOW_ANY_SHA1) == ALLOW_ANY_SHA1
+ || is_our_ref(o, data->allow_unadvertised_object_request)))
has_non_tip = 1;
add_object_array(o, NULL, &data->want_obj);
}
@@ -1072,9 +1081,9 @@ static int send_ref(const char *refname, const struct object_id *oid,
packet_write_fmt(1, "%s %s%c%s%s%s%s%s%s agent=%s\n",
oid_to_hex(oid), refname_nons,
0, capabilities,
- (allow_unadvertised_object_request & ALLOW_TIP_SHA1) ?
+ (data->allow_unadvertised_object_request & ALLOW_TIP_SHA1) ?
" allow-tip-sha1-in-want" : "",
- (allow_unadvertised_object_request & ALLOW_REACHABLE_SHA1) ?
+ (data->allow_unadvertised_object_request & ALLOW_REACHABLE_SHA1) ?
" allow-reachable-sha1-in-want" : "",
data->stateless_rpc ? " no-done" : "",
symref_info.buf,
@@ -1112,19 +1121,19 @@ static int upload_pack_config(const char *var, const char *value, void *cb_data)
if (!strcmp("uploadpack.allowtipsha1inwant", var)) {
if (git_config_bool(var, value))
- allow_unadvertised_object_request |= ALLOW_TIP_SHA1;
+ data->allow_unadvertised_object_request |= ALLOW_TIP_SHA1;
else
- allow_unadvertised_object_request &= ~ALLOW_TIP_SHA1;
+ data->allow_unadvertised_object_request &= ~ALLOW_TIP_SHA1;
} else if (!strcmp("uploadpack.allowreachablesha1inwant", var)) {
if (git_config_bool(var, value))
- allow_unadvertised_object_request |= ALLOW_REACHABLE_SHA1;
+ data->allow_unadvertised_object_request |= ALLOW_REACHABLE_SHA1;
else
- allow_unadvertised_object_request &= ~ALLOW_REACHABLE_SHA1;
+ data->allow_unadvertised_object_request &= ~ALLOW_REACHABLE_SHA1;
} else if (!strcmp("uploadpack.allowanysha1inwant", var)) {
if (git_config_bool(var, value))
- allow_unadvertised_object_request |= ALLOW_ANY_SHA1;
+ data->allow_unadvertised_object_request |= ALLOW_ANY_SHA1;
else
- allow_unadvertised_object_request &= ~ALLOW_ANY_SHA1;
+ data->allow_unadvertised_object_request &= ~ALLOW_ANY_SHA1;
} else if (!strcmp("uploadpack.keepalive", var)) {
data->keepalive = git_config_int(var, value);
if (!data->keepalive)
--
2.27.0.90.gabb59f83a2
next prev parent reply other threads:[~2020-06-11 12:05 UTC|newest]
Thread overview: 108+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-05-15 10:04 [PATCH 00/13] upload-pack: use 'struct upload_pack_data' thoroughly, part 1 Christian Couder
2020-05-15 10:04 ` [PATCH 01/13] upload-pack: remove unused 'wants' from upload_pack_data Christian Couder
2020-05-15 18:03 ` Jeff King
2020-05-15 10:04 ` [PATCH 02/13] upload-pack: move {want,have}_obj to upload_pack_data Christian Couder
2020-05-15 18:05 ` Jeff King
2020-05-15 10:04 ` [PATCH 03/13] upload-pack: move 'struct upload_pack_data' around Christian Couder
2020-05-15 18:05 ` Jeff King
2020-05-15 10:04 ` [PATCH 04/13] upload-pack: use 'struct upload_pack_data' in upload_pack() Christian Couder
2020-05-15 10:30 ` Derrick Stolee
2020-05-15 18:13 ` Jeff King
2020-05-15 10:04 ` [PATCH 05/13] upload-pack: pass upload_pack_data to get_common_commits() Christian Couder
2020-05-15 18:17 ` Jeff King
2020-05-15 18:36 ` Jeff King
2020-05-15 10:04 ` [PATCH 06/13] upload-pack: pass upload_pack_data to receive_needs() Christian Couder
2020-05-15 18:20 ` Jeff King
2020-05-15 10:04 ` [PATCH 07/13] upload-pack: use upload_pack_data writer in receive_needs() Christian Couder
2020-05-15 18:23 ` Jeff King
2020-05-15 10:04 ` [PATCH 08/13] upload-pack: move symref to upload_pack_data Christian Couder
2020-05-15 18:28 ` Jeff King
2020-05-15 10:04 ` [PATCH 09/13] upload-pack: pass upload_pack_data to send_ref() Christian Couder
2020-05-15 18:33 ` Jeff King
2020-05-15 10:04 ` [PATCH 10/13] upload-pack: pass upload_pack_data to check_non_tip() Christian Couder
2020-05-15 10:04 ` [PATCH 11/13] upload-pack: remove static variable 'stateless_rpc' Christian Couder
2020-05-15 18:38 ` Jeff King
2020-05-15 10:04 ` [PATCH 12/13] upload-pack: pass upload_pack_data to create_pack_file() Christian Couder
2020-05-15 10:04 ` [PATCH 13/13] upload-pack: use upload_pack_data fields in receive_needs() Christian Couder
2020-05-15 18:42 ` Jeff King
2020-05-15 10:43 ` [PATCH 00/13] upload-pack: use 'struct upload_pack_data' thoroughly, part 1 Derrick Stolee
2020-05-19 9:49 ` Christian Couder
2020-05-15 18:47 ` Jeff King
2020-05-15 18:55 ` Jeff King
2020-05-19 9:44 ` Christian Couder
2020-05-27 16:47 ` [PATCH 00/12] upload-pack: use 'struct upload_pack_data' thoroughly, part 2 Christian Couder
2020-05-27 16:47 ` [PATCH 01/12] upload-pack: actually use some upload_pack_data bitfields Christian Couder
2020-05-27 16:47 ` [PATCH 02/12] upload-pack: move static vars to upload_pack_data Christian Couder
2020-05-27 18:06 ` Jeff King
2020-06-02 4:19 ` Christian Couder
2020-05-27 16:47 ` [PATCH 03/12] upload-pack: move use_sideband " Christian Couder
2020-05-27 18:07 ` Jeff King
2020-05-27 16:47 ` [PATCH 04/12] upload-pack: move filter_capability_requested " Christian Couder
2020-05-27 18:08 ` Jeff King
2020-05-27 16:47 ` [PATCH 05/12] upload-pack: move multi_ack " Christian Couder
2020-05-27 16:47 ` [PATCH 06/12] upload-pack: change multi_ack to an enum Christian Couder
2020-05-27 18:10 ` Jeff King
2020-05-27 16:47 ` [PATCH 07/12] upload-pack: pass upload_pack_data to upload_pack_config() Christian Couder
2020-05-27 18:36 ` Jeff King
2020-05-27 16:47 ` [PATCH 08/12] upload-pack: move keepalive to upload_pack_data Christian Couder
2020-05-27 18:38 ` Jeff King
2020-05-27 16:47 ` [PATCH 09/12] upload-pack: move allow_filter " Christian Couder
2020-05-27 18:39 ` Jeff King
2020-05-27 16:47 ` [PATCH 10/12] upload-pack: move allow_ref_in_want " Christian Couder
2020-05-27 18:41 ` Jeff King
2020-05-27 16:47 ` [PATCH 11/12] upload-pack: move allow_sideband_all " Christian Couder
2020-05-27 16:47 ` [PATCH 12/12] upload-pack: move pack_objects_hook " Christian Couder
2020-05-27 18:55 ` Jeff King
2020-05-27 18:57 ` [PATCH 00/12] upload-pack: use 'struct upload_pack_data' thoroughly, part 2 Jeff King
2020-05-27 20:41 ` Junio C Hamano
2020-06-02 4:16 ` [PATCH v2 00/13] " Christian Couder
2020-06-02 4:16 ` [PATCH v2 01/13] upload-pack: actually use some upload_pack_data bitfields Christian Couder
2020-06-02 4:16 ` [PATCH v2 02/13] upload-pack: annotate upload_pack_data fields Christian Couder
2020-06-02 4:16 ` [PATCH v2 03/13] upload-pack: move static vars to upload_pack_data Christian Couder
2020-06-02 6:59 ` Jeff King
2020-06-02 4:16 ` [PATCH v2 04/13] upload-pack: move use_sideband " Christian Couder
2020-06-02 4:16 ` [PATCH v2 05/13] upload-pack: move filter_capability_requested " Christian Couder
2020-06-02 4:16 ` [PATCH v2 06/13] upload-pack: move multi_ack " Christian Couder
2020-06-02 4:16 ` [PATCH v2 07/13] upload-pack: change multi_ack to an enum Christian Couder
2020-06-02 4:16 ` [PATCH v2 08/13] upload-pack: pass upload_pack_data to upload_pack_config() Christian Couder
2020-06-02 4:16 ` [PATCH v2 09/13] upload-pack: move keepalive to upload_pack_data Christian Couder
2020-06-02 4:16 ` [PATCH v2 10/13] upload-pack: move allow_filter " Christian Couder
2020-06-02 4:16 ` [PATCH v2 11/13] upload-pack: move allow_ref_in_want " Christian Couder
2020-06-02 4:16 ` [PATCH v2 12/13] upload-pack: move allow_sideband_all " Christian Couder
2020-06-02 4:16 ` [PATCH v2 13/13] upload-pack: move pack_objects_hook " Christian Couder
2020-06-02 7:08 ` [PATCH v2 00/13] upload-pack: use 'struct upload_pack_data' thoroughly, part 2 Jeff King
2020-06-02 17:24 ` Junio C Hamano
2020-06-02 19:05 ` [PATCH] fixup! upload-pack: change multi_ack to an enum Jonathan Tan
2020-06-02 19:28 ` Christian Couder
2020-06-04 17:54 ` [PATCH v3 00/13] upload-pack: use 'struct upload_pack_data' thoroughly, part 2 Christian Couder
2020-06-04 17:54 ` [PATCH v3 01/13] upload-pack: actually use some upload_pack_data bitfields Christian Couder
2020-06-04 17:54 ` [PATCH v3 02/13] upload-pack: annotate upload_pack_data fields Christian Couder
2020-06-04 17:54 ` [PATCH v3 03/13] upload-pack: move static vars to upload_pack_data Christian Couder
2020-06-04 17:54 ` [PATCH v3 04/13] upload-pack: move use_sideband " Christian Couder
2020-06-04 17:54 ` [PATCH v3 05/13] upload-pack: move filter_capability_requested " Christian Couder
2020-06-04 17:54 ` [PATCH v3 06/13] upload-pack: move multi_ack " Christian Couder
2020-06-04 17:54 ` [PATCH v3 07/13] upload-pack: change multi_ack to an enum Christian Couder
2020-06-04 17:54 ` [PATCH v3 08/13] upload-pack: pass upload_pack_data to upload_pack_config() Christian Couder
2020-06-04 17:54 ` [PATCH v3 09/13] upload-pack: move keepalive to upload_pack_data Christian Couder
2020-06-04 17:54 ` [PATCH v3 10/13] upload-pack: move allow_filter " Christian Couder
2020-06-04 17:54 ` [PATCH v3 11/13] upload-pack: move allow_ref_in_want " Christian Couder
2020-06-04 17:54 ` [PATCH v3 12/13] upload-pack: move allow_sideband_all " Christian Couder
2020-06-04 17:54 ` [PATCH v3 13/13] upload-pack: move pack_objects_hook " Christian Couder
2020-06-04 18:07 ` [PATCH v3 00/13] upload-pack: use 'struct upload_pack_data' thoroughly, part 2 Junio C Hamano
2020-06-05 10:38 ` Christian Couder
2020-06-11 12:05 ` [PATCH 00/14] upload-pack: use 'struct upload_pack_data' thoroughly, part 3 Christian Couder
2020-06-11 12:05 ` [PATCH 01/14] upload-pack: pass upload_pack_data to send_shallow_list() Christian Couder
2020-06-11 12:05 ` [PATCH 02/14] upload-pack: pass upload_pack_data to deepen() Christian Couder
2020-06-11 12:05 ` [PATCH 03/14] upload-pack: pass upload_pack_data to deepen_by_rev_list() Christian Couder
2020-06-11 12:05 ` [PATCH 04/14] upload-pack: pass upload_pack_data to send_unshallow() Christian Couder
2020-06-11 12:05 ` [PATCH 05/14] upload-pack: move shallow_nr to upload_pack_data Christian Couder
2020-06-11 12:05 ` [PATCH 06/14] upload-pack: move extra_edge_obj " Christian Couder
2020-06-11 12:05 ` Christian Couder [this message]
2020-06-11 12:05 ` [PATCH 08/14] upload-pack: change allow_unadvertised_object_request to an enum Christian Couder
2020-06-11 12:05 ` [PATCH 09/14] upload-pack: pass upload_pack_data to process_haves() Christian Couder
2020-06-11 12:05 ` [PATCH 10/14] upload-pack: pass upload_pack_data to send_acks() Christian Couder
2020-06-11 12:05 ` [PATCH 11/14] upload-pack: pass upload_pack_data to ok_to_give_up() Christian Couder
2020-06-11 12:05 ` [PATCH 12/14] upload-pack: pass upload_pack_data to got_oid() Christian Couder
2020-06-11 12:05 ` [PATCH 13/14] upload-pack: move oldest_have to upload_pack_data Christian Couder
2020-06-11 12:05 ` [PATCH 14/14] upload-pack: refactor common code into do_got_oid() Christian Couder
2020-06-11 20:04 ` [PATCH 00/14] upload-pack: use 'struct upload_pack_data' thoroughly, part 3 Jonathan Tan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200611120518.10771-8-chriscool@tuxfamily.org \
--to=christian.couder@gmail.com \
--cc=chriscool@tuxfamily.org \
--cc=dstolee@microsoft.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jonathantanmy@google.com \
--cc=jrnieder@gmail.com \
--cc=me@ttaylorr.com \
--cc=peff@peff.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).