From: Eric Ju <eric.peijian@gmail•com>
To: git@vger•kernel.org
Cc: calvinwan@google•com, jonathantanmy@google•com,
chriscool@tuxfamily•org, eric.peijian@gmail•com,
karthik.188@gmail•com, toon@iotcl•com, jltobler@gmail•com
Subject: [PATCH v7 0/6] cat-file: add remote-object-info to batch-command
Date: Mon, 25 Nov 2024 00:36:10 -0500 [thread overview]
Message-ID: <20241125053616.25170-1-eric.peijian@gmail.com> (raw)
In-Reply-To: <20240628190503.67389-1-eric.peijian@gmail.com>
This patch series is a continuation of Calvin Wan’s (calvinwan@google•com)
patch series [PATCH v5 0/6] cat-file: add --batch-command remote-object-info
command at [1].
Sometimes it is beneficial to retrieve information about an object without
having to download it completely. The server logic for retrieving size has
already been implemented and merged in "a2ba162cda (object-info: support for
retrieving object info, 2021-04-20)"[2]. This patch series implement the client
option for it.
This patch series add the `remote-object-info` command to
`cat-file --batch-command`. This command allows the client to make an
object-info command request to a server that supports protocol v2.
If the server uses protocol v2 but does not support the object-info capability,
`cat-file --batch-command` will die.
If a user attempts to use `remote-object-info` with protocol v1,,
`cat-file --batch-command` will die.
Currently, only the size is supported in this implementation. If the batch
command format contains objecttype objectsize:disk or deltabase, it will die.
The default format is set to %(objectname) %(objectsize) when remote-object-info
is used. When "%(objecttype)" is supported, the default format will be unified.
[1] https://lore.kernel.org/git/20220728230210.2952731-1-calvinwan@google.com/#t
[2] https://git.kernel.org/pub/scm/git/git.git/commit/?id=a2ba162cda2acc171c3e36acbbc854792b093cb7
Changes since V6
================
- Removal of “Fetch and Inspect” Fallback. In the previous patch series, if the
object-info capability was not supported (i.e., transfer.advertiseobjectinfo
was set to false), the remote-object-info command would fall back to fetching
the object locally and inspecting it. This “fetch and inspect” behavior has
been removed. Instead, the client will now error and exit if the object-info
capability is not supported by the server. For more details, refer to the
discussion at this thread
https://lore.kernel.org/git/CAN2LT1Dm17-mmoMQr457fb5ta-TxG6Fj3Ma-gPh4YRJV9rRDrw@mail.gmail.com/.
- Test Updates. Adjusted tests to cover cases where the object-info capability
is not supported by the server.
- Documentation Updates. Removed references to the “fetch and inspect” fallback
mechanism.
- Typos and Formatting Fixes.
Calvin Wan (4):
fetch-pack: refactor packet writing
fetch-pack: move fetch initialization
serve: advertise object-info feature
transport: add client support for object-info
Eric Ju (2):
cat-file: add declaration of variable i inside its for loop
cat-file: add remote-object-info to batch-command
Documentation/git-cat-file.txt | 24 +-
Makefile | 1 +
builtin/cat-file.c | 110 ++++-
connect.c | 34 ++
connect.h | 8 +
fetch-object-info.c | 92 ++++
fetch-object-info.h | 18 +
fetch-pack.c | 51 +-
fetch-pack.h | 2 +
object-file.c | 11 +
object-store-ll.h | 3 +
serve.c | 4 +-
t/lib-cat-file.sh | 16 +
t/t1006-cat-file.sh | 13 +-
t/t1017-cat-file-remote-object-info.sh | 652 +++++++++++++++++++++++++
transport-helper.c | 11 +-
transport.c | 28 +-
transport.h | 11 +
18 files changed, 1021 insertions(+), 68 deletions(-)
create mode 100644 fetch-object-info.c
create mode 100644 fetch-object-info.h
create mode 100644 t/lib-cat-file.sh
create mode 100755 t/t1017-cat-file-remote-object-info.sh
Range-diff against v6:
1: 0998382d5e = 1: 92feca4218 cat-file: add declaration of variable i inside its for loop
2: 26b861f416 ! 2: 58a24a4b92 fetch-pack: refactor packet writing
@@ connect.h: void check_stateless_delimiter(int stateless_rpc,
struct packet_reader *reader,
const char *error);
++/**
++ * write_command_and_capabilities writes a command along with the requested
++ * server capabilities/features into a request buffer.
++ */
+void write_command_and_capabilities(struct strbuf *req_buf, const char *command,
+ const struct string_list *server_options);
+
3: 044d0ec46c = 3: 6bd0f945c2 fetch-pack: move fetch initialization
4: 09b4a2c081 = 4: 000c82b681 serve: advertise object-info feature
5: 4782211b31 ! 5: 97c03a9c2c transport: add client support for object-info
@@ Metadata
## Commit message ##
transport: add client support for object-info
- Sometimes it is useful to get information about an object without having
- to download it completely. The server logic has already been implemented
- in “a2ba162cda (object-info: support for retrieving object info,
- 2021-04-20)”.
+ Sometimes, it is beneficial to retrieve information about an object
+ without downloading it entirely. The server-side logic for this
+ functionality was implemented in commit "a2ba162cda (object-info:
+ support for retrieving object info, 2021-04-20)."
- Add client functions to communicate with the server.
+ This commit introduces client functions to interact with the server.
- The client currently supports requesting a list of object ids with
- feature 'size' from a v2 server. If a server does not
- advertise the feature, then the client falls back
- to making the request through 'fetch'.
+ Currently, the client supports requesting a list of object IDs with
+ the ‘size’ feature from a v2 server. If the server does not advertise
+ this feature (i.e., transfer.advertiseobjectinfo is set to false),
+ the client will return an error and exit.
Helped-by: Jonathan Tan <jonathantanmy@google•com>
Helped-by: Christian Couder <chriscool@tuxfamily•org>
@@ fetch-object-info.c (new)
+ switch (version) {
+ case protocol_v2:
+ if (!server_supports_v2("object-info"))
-+ return -1;
-+ if (unsorted_string_list_has_string(args->object_info_options, "size")
-+ && !server_supports_feature("object-info", "size", 0))
-+ return -1;
++ die(_("object-info capability is not enabled on the server"));
+ send_object_info_request(fd_out, args);
+ break;
+ case protocol_v1:
@@ transport.c
#include "remote.h"
#include "connect.h"
#include "send-pack.h"
-@@ transport.c: static int fetch_refs_via_pack(struct transport *transport,
- struct ref *refs = NULL;
- struct fetch_pack_args args;
- struct ref *refs_tmp = NULL, **to_fetch_dup = NULL;
-+ struct ref *object_info_refs = NULL;
-
- memset(&args, 0, sizeof(args));
- args.uploadpack = data->options.uploadpack;
@@ transport.c: static int fetch_refs_via_pack(struct transport *transport,
args.server_options = transport->server_options;
args.negotiation_tips = data->options.negotiation_tips;
@@ transport.c: static int fetch_refs_via_pack(struct transport *transport,
+ if (transport->smart_options
+ && transport->smart_options->object_info
+ && transport->smart_options->object_info_oids->nr > 0) {
-+ struct ref *ref_itr = object_info_refs = alloc_ref("");
+ struct packet_reader reader;
+ struct object_info_args obj_info_args = { 0 };
+
@@ transport.c: static int fetch_refs_via_pack(struct transport *transport,
+ data->version = discover_version(&reader);
+ transport->hash_algo = reader.hash_algo;
+
-+ if (!fetch_object_info(data->version, &obj_info_args, &reader,
-+ data->options.object_info_data, transport->stateless_rpc,
-+ data->fd[1])) {
-+ /*
-+ * If the code reaches here, fetch_object_info is successful and
-+ * remote object info are retrieved from packets (i.e. without
-+ * downloading the objects).
-+ */
-+ goto cleanup;
-+ }
++ ret = fetch_object_info(data->version, &obj_info_args, &reader,
++ data->options.object_info_data, transport->stateless_rpc,
++ data->fd[1]);
++ goto cleanup;
- if (!data->finished_handshake) {
-+ /*
-+ * If the code reaches here, it means we can't retrieve object info from
-+ * packets, and we will fallback to downland the pack files.
-+ * We set quiet and no_progress to be true, so that the internal call to
-+ * fetch-pack is less verbose.
-+ */
-+ args.object_info_data = data->options.object_info_data;
-+ args.quiet = 1;
-+ args.no_progress = 1;
-+
-+ /*
-+ * Allocate memory for object info data according to oids.
-+ * The actual results will be retrieved later from the downloaded
-+ * pack files.
-+ */
-+ for (size_t i = 0; i < transport->smart_options->object_info_oids->nr; i++) {
-+ ref_itr->old_oid = transport->smart_options->object_info_oids->oid[i];
-+ ref_itr->exact_oid = 1;
-+ if (i == transport->smart_options->object_info_oids->nr - 1)
-+ /* last element, no need to allocate to next */
-+ ref_itr->next = NULL;
-+ else
-+ ref_itr->next = alloc_ref("");
-+
-+ ref_itr = ref_itr->next;
-+ }
-+
-+ transport->remote_refs = object_info_refs;
-+
+ } else if (!data->finished_handshake) {
int i;
int must_list_refs = 0;
for (i = 0; i < nr_heads; i++) {
-@@ transport.c: static int fetch_refs_via_pack(struct transport *transport,
- &transport->pack_lockfiles, data->version);
-
- data->finished_handshake = 0;
-+
-+ /* Retrieve object info data from the downloaded pack files */
-+ if (args.object_info) {
-+ struct ref *ref_cpy_reader = object_info_refs;
-+ for (int i = 0; ref_cpy_reader; i++) {
-+ oid_object_info_extended(the_repository, &ref_cpy_reader->old_oid,
-+ &args.object_info_data[i], OBJECT_INFO_LOOKUP_REPLACE);
-+ ref_cpy_reader = ref_cpy_reader->next;
-+ }
-+ }
-+
- data->options.self_contained_and_connected =
- args.self_contained_and_connected;
- data->options.connectivity_checked = args.connectivity_checked;
-@@ transport.c: static int fetch_refs_via_pack(struct transport *transport,
- ret = -1;
-
- cleanup:
-+ free_refs(object_info_refs);
- close(data->fd[0]);
- if (data->fd[1] >= 0)
- close(data->fd[1]);
## transport.h ##
@@
@@ transport.h: struct git_transport_options {
unsigned connectivity_checked:1;
+ /*
-+ * Transport will attempt to pull only object-info. Fallbacks
-+ * to pulling entire object if object-info is not supported.
++ * Transport will attempt to retrieve only object-info.
++ * If object-info is not supported, the operation will error and exit.
+ */
+ unsigned object_info : 1;
+
6: 91689c0d0d ! 6: 7d1936591d cat-file: add remote-object-info to batch-command
@@ Commit message
Since the `info` command in cat-file --batch-command prints object info
for a given object, it is natural to add another command in cat-file
--batch-command to print object info for a given object from a remote.
+
Add `remote-object-info` to cat-file --batch-command.
- While `info` takes object ids one at a time, this creates overhead when
- making requests to a server so `remote-object-info` instead can take
- multiple object ids at once.
+ While `info` takes object ids one at a time, this creates
+ overhead when making requests to a server.So `remote-object-info`
+ instead can take multiple object ids at once.
cat-file --batch-command is generally implemented in the following
manner:
@@ Documentation/git-cat-file.txt: info <object>::
output of `--batch-check`.
+remote-object-info <remote> <object>...::
-+ Print object info for object references `<object>` at specified <remote>
-+ without downloading objects from remote. If the object-info capability
-+ is not supported by the server, the objects will be downloaded instead.
++ Print object info for object references `<object>` at specified
++ `<remote>` without downloading objects from the remote.
++ Error when the `object-info` capability is not supported by the server.
+ Error when no object references are provided.
+ This command may be combined with `--buffer`.
+
@@ builtin/cat-file.c: static void parse_cmd_info(struct batch_options *opt,
+ data->oid = object_info_oids.oid[i];
+
+ if (remote_object_info[i].sizep) {
-+ data->size = *remote_object_info[i].sizep;
-+ } else {
+ /*
-+ * When reaching here, it means remote-object-info can't retrieve
-+ * information from server without downloading them, and the objects
-+ * have been fetched to client already.
-+ * Print the information using the logic for local objects.
++ * When reaching here, it means remote-object-info can retrieve
++ * information from server without downloading them.
+ */
-+ data->skip_object_info = 0;
++ data->size = *remote_object_info[i].sizep;
++ opt->batch_mode = BATCH_MODE_INFO;
++ batch_object_write(argv[i+1], output, opt, data, NULL, 0);
+ }
-+
-+ opt->batch_mode = BATCH_MODE_INFO;
-+ batch_object_write(argv[i+1], output, opt, data, NULL, 0);
-+
+ }
+ opt->use_remote_info = 0;
+ data->skip_object_info = 0;
@@ t/t1017-cat-file-remote-object-info.sh (new)
+
+# Test --batch-command remote-object-info with 'git://' and
+# transfer.advertiseobjectinfo set to false, i.e. server does not have object-info capability
-+
-+test_expect_success 'remote-object-info fallback git://: fetch objects to client' '
++test_expect_success 'batch-command remote-object-info git:// fails when transfer.advertiseobjectinfo=false' '
+ (
+ git -C "$daemon_parent" config transfer.advertiseobjectinfo false &&
+ set_transport_variables "$daemon_parent" &&
-+ cd "$daemon_parent/daemon_client_empty" &&
-+
-+ # Prove object is not on the client
-+ echo "$hello_oid missing" >expect &&
-+ echo "$tree_oid missing" >>expect &&
-+ echo "$commit_oid missing" >>expect &&
-+ echo "$tag_oid missing" >>expect &&
+
-+ # These results prove remote-object-info can retrieve object info
-+ echo "$hello_oid $hello_size" >>expect &&
-+ echo "$tree_oid $tree_size" >>expect &&
-+ echo "$commit_oid $commit_size" >>expect &&
-+ echo "$tag_oid $tag_size" >>expect &&
-+
-+ # These results are for the info command
-+ # They prove objects are downloaded
-+ echo "$hello_oid $hello_size" >>expect &&
-+ echo "$tree_oid $tree_size" >>expect &&
-+ echo "$commit_oid $commit_size" >>expect &&
-+ echo "$tag_oid $tag_size" >>expect &&
-+
-+ git cat-file --batch-command="%(objectname) %(objectsize)" >actual <<-EOF &&
-+ info $hello_oid
-+ info $tree_oid
-+ info $commit_oid
-+ info $tag_oid
++ test_must_fail git cat-file --batch-command="%(objectname) %(objectsize)" 2>err <<-EOF &&
+ remote-object-info $GIT_DAEMON_URL/parent $hello_oid $tree_oid $commit_oid $tag_oid
-+ info $hello_oid
-+ info $tree_oid
-+ info $commit_oid
-+ info $tag_oid
+ EOF
++ test_grep "object-info capability is not enabled on the server" err &&
+
+ # revert server state back
-+ git -C "$daemon_parent" config transfer.advertiseobjectinfo true &&
++ git -C "$daemon_parent" config transfer.advertiseobjectinfo true
+
-+ test_cmp expect actual
+ )
+'
+
@@ t/t1017-cat-file-remote-object-info.sh (new)
+
+# Test --batch-command remote-object-info with 'file://' and
+# transfer.advertiseobjectinfo set to false, i.e. server does not have object-info capability
-+
-+test_expect_success 'remote-object-info fallback file://: fetch objects to client' '
++test_expect_success 'batch-command remote-object-info file:// fails when transfer.advertiseobjectinfo=false' '
+ (
+ set_transport_variables "server" &&
+ server_path="$(pwd)/server" &&
+ git -C "${server_path}" config transfer.advertiseobjectinfo false &&
-+ cd file_client_empty &&
+
-+ # Prove object is not on the client
-+ echo "$hello_oid missing" >expect &&
-+ echo "$tree_oid missing" >>expect &&
-+ echo "$commit_oid missing" >>expect &&
-+ echo "$tag_oid missing" >>expect &&
-+
-+ # These results prove remote-object-info can retrieve object info
-+ echo "$hello_oid $hello_size" >>expect &&
-+ echo "$tree_oid $tree_size" >>expect &&
-+ echo "$commit_oid $commit_size" >>expect &&
-+ echo "$tag_oid $tag_size" >>expect &&
-+
-+ # These results are for the info command
-+ # They prove objects are downloaded
-+ echo "$hello_oid $hello_size" >>expect &&
-+ echo "$tree_oid $tree_size" >>expect &&
-+ echo "$commit_oid $commit_size" >>expect &&
-+ echo "$tag_oid $tag_size" >>expect &&
-+
-+ git cat-file --batch-command="%(objectname) %(objectsize)" >actual <<-EOF &&
-+ info $hello_oid
-+ info $tree_oid
-+ info $commit_oid
-+ info $tag_oid
++ test_must_fail git cat-file --batch-command="%(objectname) %(objectsize)" 2>err <<-EOF &&
+ remote-object-info "file://${server_path}" $hello_oid $tree_oid $commit_oid $tag_oid
-+ info $hello_oid
-+ info $tree_oid
-+ info $commit_oid
-+ info $tag_oid
+ EOF
++ test_grep "object-info capability is not enabled on the server" err &&
+
+ # revert server state back
-+ git -C "${server_path}" config transfer.advertiseobjectinfo true &&
-+ test_cmp expect actual
++ git -C "${server_path}" config transfer.advertiseobjectinfo true
+ )
+'
+
@@ t/t1017-cat-file-remote-object-info.sh (new)
+ )
+'
+
-+test_expect_success 'remote-object-info fails on server with legacy protocol fallback' '
++test_expect_success 'remote-object-info fails on server with legacy protocol' '
+ (
+ set_transport_variables "$HTTPD_DOCUMENT_ROOT_PATH/http_parent" &&
+ cd "$HTTPD_DOCUMENT_ROOT_PATH/http_parent" &&
@@ t/t1017-cat-file-remote-object-info.sh (new)
+ )
+'
+
-+test_expect_success 'remote-object-info fails on malformed OID fallback' '
++test_expect_success 'remote-object-info fails on malformed OID with default filter' '
+ (
+ set_transport_variables "$HTTPD_DOCUMENT_ROOT_PATH/http_parent" &&
+ cd "$HTTPD_DOCUMENT_ROOT_PATH/http_parent" &&
@@ t/t1017-cat-file-remote-object-info.sh (new)
+ )
+'
+
++
+# Test --batch-command remote-object-info with 'http://' transport and
+# transfer.advertiseobjectinfo set to false, i.e. server does not have object-info capability
-+
-+test_expect_success 'remote-object-info fallback http://: fetch objects to client' '
++test_expect_success 'batch-command remote-object-info http:// fails when transfer.advertiseobjectinfo=false ' '
+ (
+ set_transport_variables "$HTTPD_DOCUMENT_ROOT_PATH/http_parent" &&
+ git -C "$HTTPD_DOCUMENT_ROOT_PATH/http_parent" config transfer.advertiseobjectinfo false &&
-+ cd "$HTTPD_DOCUMENT_ROOT_PATH/http_client_empty" &&
-+
-+ # Prove object is not on the client
-+ echo "$hello_oid missing" >expect &&
-+ echo "$tree_oid missing" >>expect &&
-+ echo "$commit_oid missing" >>expect &&
-+ echo "$tag_oid missing" >>expect &&
+
-+ # These results prove remote-object-info can retrieve object info
-+ echo "$hello_oid $hello_size" >>expect &&
-+ echo "$tree_oid $tree_size" >>expect &&
-+ echo "$commit_oid $commit_size" >>expect &&
-+ echo "$tag_oid $tag_size" >>expect &&
-+
-+ # These results are for the info command
-+ # They prove objects are downloaded
-+ echo "$hello_oid $hello_size" >>expect &&
-+ echo "$tree_oid $tree_size" >>expect &&
-+ echo "$commit_oid $commit_size" >>expect &&
-+ echo "$tag_oid $tag_size" >>expect &&
-+
-+ git cat-file --batch-command >actual <<-EOF &&
-+ info $hello_oid
-+ info $tree_oid
-+ info $commit_oid
-+ info $tag_oid
++ test_must_fail git cat-file --batch-command="%(objectname) %(objectsize)" 2>err <<-EOF &&
+ remote-object-info "$HTTPD_URL/smart/http_parent" $hello_oid $tree_oid $commit_oid $tag_oid
-+ info $hello_oid
-+ info $tree_oid
-+ info $commit_oid
-+ info $tag_oid
+ EOF
++ test_grep "object-info capability is not enabled on the server" err &&
+
+ # revert server state back
-+ git -C "$HTTPD_DOCUMENT_ROOT_PATH/http_parent" config transfer.advertiseobjectinfo true &&
-+
-+ test_cmp expect actual
++ git -C "$HTTPD_DOCUMENT_ROOT_PATH/http_parent" config transfer.advertiseobjectinfo true
+ )
+'
+
--
2.47.0
Information Footer:
base-commit: 8f8d6eee531b3fa1a8ef14f169b0cb5035f7a772
Merge Request: https://gitlab.com/gitlab-org/git/-/merge_requests/168
next prev parent reply other threads:[~2024-11-25 5:36 UTC|newest]
Thread overview: 175+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-28 19:04 [PATCH 0/6] cat-file: add remote-object-info to batch-command Eric Ju
2024-06-28 19:04 ` [PATCH 1/6] fetch-pack: refactor packet writing Eric Ju
2024-07-04 16:59 ` Karthik Nayak
2024-07-08 15:17 ` Peijian Ju
2024-07-10 9:39 ` Karthik Nayak
2024-07-15 16:40 ` Peijian Ju
2024-06-28 19:04 ` [PATCH 2/6] fetch-pack: move fetch initialization Eric Ju
2024-06-28 19:05 ` [PATCH 3/6] serve: advertise object-info feature Eric Ju
2024-06-28 19:05 ` [PATCH 4/6] transport: add client support for object-info Eric Ju
2024-07-09 7:15 ` Toon claes
2024-07-09 16:37 ` Junio C Hamano
2024-07-13 2:32 ` Peijian Ju
2024-07-13 2:30 ` Peijian Ju
2024-07-10 10:13 ` Karthik Nayak
2024-07-16 2:39 ` Peijian Ju
2024-06-28 19:05 ` [PATCH 5/6] cat-file: add declaration of variable i inside its for loop Eric Ju
2024-07-10 10:16 ` Karthik Nayak
2024-07-16 2:59 ` Peijian Ju
2024-06-28 19:05 ` [PATCH 6/6] cat-file: add remote-object-info to batch-command Eric Ju
2024-07-09 1:50 ` Justin Tobler
2024-07-12 17:41 ` Peijian Ju
2024-07-09 7:16 ` Toon claes
2024-07-13 2:35 ` Peijian Ju
2024-07-10 12:08 ` Karthik Nayak
2024-07-17 2:38 ` Peijian Ju
2024-07-20 3:43 ` [PATCH v2 0/6] " Eric Ju
2024-07-20 3:43 ` [PATCH v2 1/6] fetch-pack: refactor packet writing Eric Ju
2024-09-24 11:45 ` Christian Couder
2024-09-25 20:42 ` Peijian Ju
2024-07-20 3:43 ` [PATCH v2 2/6] fetch-pack: move fetch initialization Eric Ju
2024-07-20 3:43 ` [PATCH v2 3/6] serve: advertise object-info feature Eric Ju
2024-07-20 3:43 ` [PATCH v2 4/6] transport: add client support for object-info Eric Ju
2024-09-24 11:45 ` Christian Couder
2024-09-24 17:29 ` Junio C Hamano
2024-09-25 18:29 ` Peijian Ju
2024-07-20 3:43 ` [PATCH v2 5/6] cat-file: add declaration of variable i inside its for loop Eric Ju
2024-07-20 3:43 ` [PATCH v2 6/6] cat-file: add remote-object-info to batch-command Eric Ju
2024-09-11 13:11 ` Toon Claes
2024-09-25 18:18 ` Peijian Ju
2024-09-24 12:13 ` Christian Couder
2024-09-25 18:12 ` Peijian Ju
2024-08-22 21:24 ` [PATCH 0/6] " Peijian Ju
2024-09-26 1:38 ` [PATCH v3 " Eric Ju
2024-09-26 1:38 ` [PATCH v3 1/6] fetch-pack: refactor packet writing Eric Ju
2024-09-26 1:38 ` [PATCH v3 2/6] fetch-pack: move fetch initialization Eric Ju
2024-09-26 1:38 ` [PATCH v3 3/6] serve: advertise object-info feature Eric Ju
2024-09-26 1:38 ` [PATCH v3 4/6] transport: add client support for object-info Eric Ju
2024-10-23 9:48 ` Christian Couder
2024-10-24 20:23 ` Peijian Ju
2024-09-26 1:38 ` [PATCH v3 5/6] cat-file: add declaration of variable i inside its for loop Eric Ju
2024-09-26 1:38 ` [PATCH v3 6/6] cat-file: add remote-object-info to batch-command Eric Ju
2024-10-23 9:49 ` Christian Couder
2024-10-23 20:25 ` Taylor Blau
2024-10-24 20:28 ` Peijian Ju
2024-10-24 20:28 ` Peijian Ju
2024-10-24 20:53 ` [PATCH v4 0/6] " Eric Ju
2024-10-24 20:53 ` [PATCH v4 1/6] fetch-pack: refactor packet writing Eric Ju
2024-10-25 9:52 ` karthik nayak
2024-10-25 16:06 ` Peijian Ju
2024-10-24 20:53 ` [PATCH v4 2/6] fetch-pack: move fetch initialization Eric Ju
2024-10-24 20:53 ` [PATCH v4 3/6] serve: advertise object-info feature Eric Ju
2024-10-24 20:53 ` [PATCH v4 4/6] transport: add client support for object-info Eric Ju
2024-10-25 10:12 ` karthik nayak
2024-10-28 5:39 ` Peijian Ju
2024-10-24 20:53 ` [PATCH v4 5/6] cat-file: add declaration of variable i inside its for loop Eric Ju
2024-10-24 20:53 ` [PATCH v4 6/6] cat-file: add remote-object-info to batch-command Eric Ju
2024-10-25 10:53 ` karthik nayak
2024-10-25 13:55 ` Christian Couder
2024-10-25 20:56 ` [PATCH v4 0/6] " Taylor Blau
2024-10-27 3:54 ` Peijian Ju
2024-10-28 0:01 ` Taylor Blau
2024-10-28 20:34 ` [PATCH v5 " Eric Ju
2024-10-28 20:34 ` [PATCH v5 1/6] fetch-pack: refactor packet writing Eric Ju
2024-11-05 17:44 ` Christian Couder
2024-11-06 1:06 ` Junio C Hamano
2024-11-06 18:00 ` Peijian Ju
2024-11-06 19:50 ` Peijian Ju
2024-10-28 20:34 ` [PATCH v5 2/6] fetch-pack: move fetch initialization Eric Ju
2024-10-28 20:34 ` [PATCH v5 3/6] serve: advertise object-info feature Eric Ju
2024-10-28 20:34 ` [PATCH v5 4/6] transport: add client support for object-info Eric Ju
2024-10-28 20:34 ` [PATCH v5 5/6] cat-file: add declaration of variable i inside its for loop Eric Ju
2024-10-28 20:34 ` [PATCH v5 6/6] cat-file: add remote-object-info to batch-command Eric Ju
2024-11-08 16:24 ` [PATCH v6 0/6] " Eric Ju
2024-11-08 16:24 ` [PATCH v6 1/6] cat-file: add declaration of variable i inside its for loop Eric Ju
2024-11-08 16:24 ` [PATCH v6 2/6] fetch-pack: refactor packet writing Eric Ju
2024-11-08 16:24 ` [PATCH v6 3/6] fetch-pack: move fetch initialization Eric Ju
2024-11-08 16:24 ` [PATCH v6 4/6] serve: advertise object-info feature Eric Ju
2024-11-08 16:24 ` [PATCH v6 5/6] transport: add client support for object-info Eric Ju
2024-11-08 16:24 ` [PATCH v6 6/6] cat-file: add remote-object-info to batch-command Eric Ju
2024-11-11 4:38 ` [PATCH v6 0/6] " Junio C Hamano
2024-11-18 16:28 ` Peijian Ju
2024-11-19 0:16 ` Junio C Hamano
2024-11-19 6:31 ` Patrick Steinhardt
2024-11-19 6:48 ` Junio C Hamano
2024-11-19 16:35 ` Peijian Ju
2024-11-20 1:19 ` Junio C Hamano
2024-11-25 5:36 ` Eric Ju [this message]
2024-11-25 5:36 ` [PATCH v7 1/6] cat-file: add declaration of variable i inside its for loop Eric Ju
2024-11-25 9:51 ` Patrick Steinhardt
2024-12-03 19:26 ` Peijian Ju
2024-11-25 5:36 ` [PATCH v7 2/6] fetch-pack: refactor packet writing Eric Ju
2024-11-25 9:51 ` Patrick Steinhardt
2024-12-03 19:09 ` Peijian Ju
2024-11-25 5:36 ` [PATCH v7 3/6] fetch-pack: move fetch initialization Eric Ju
2024-11-25 5:36 ` [PATCH v7 4/6] serve: advertise object-info feature Eric Ju
2024-11-25 5:36 ` [PATCH v7 5/6] transport: add client support for object-info Eric Ju
2024-11-25 9:51 ` Patrick Steinhardt
2024-12-03 3:15 ` Peijian Ju
2024-11-25 5:36 ` [PATCH v7 6/6] cat-file: add remote-object-info to batch-command Eric Ju
2024-11-25 9:51 ` Patrick Steinhardt
2024-12-03 19:23 ` Peijian Ju
2024-12-05 9:50 ` Patrick Steinhardt
2024-12-05 10:34 ` Christian Couder
2024-12-23 23:25 ` [PATCH v8 0/6] " Eric Ju
2024-12-23 23:25 ` [PATCH v8 1/6] cat-file: add declaration of variable i inside its for loop Eric Ju
2024-12-23 23:25 ` [PATCH v8 2/6] fetch-pack: refactor packet writing Eric Ju
2024-12-23 23:25 ` [PATCH v8 3/6] fetch-pack: move fetch initialization Eric Ju
2024-12-23 23:25 ` [PATCH v8 4/6] serve: advertise object-info feature Eric Ju
2024-12-23 23:25 ` [PATCH v8 5/6] transport: add client support for object-info Eric Ju
2025-01-07 18:31 ` Calvin Wan
2025-01-07 18:53 ` Junio C Hamano
2025-01-08 15:55 ` Peijian Ju
2024-12-23 23:25 ` [PATCH v8 6/6] cat-file: add remote-object-info to batch-command Eric Ju
2025-01-07 21:29 ` Calvin Wan
2024-12-26 21:56 ` [PATCH v8 0/6] " Junio C Hamano
2024-12-30 23:25 ` Peijian Ju
2025-01-08 18:37 ` [PATCH v9 0/8] cat-file: " Eric Ju
2025-01-08 18:37 ` [PATCH v9 1/8] git-compat-util: add strtoul_ul() with error handling Eric Ju
2025-01-10 11:33 ` Christian Couder
2025-01-14 1:39 ` Peijian Ju
2025-01-08 18:37 ` [PATCH v9 2/8] cat-file: add declaration of variable i inside its for loop Eric Ju
2025-01-10 11:39 ` Christian Couder
2025-01-14 1:36 ` Peijian Ju
2025-01-08 18:37 ` [PATCH v9 3/8] cat-file: split test utility functions into a separate library file Eric Ju
2025-01-10 14:26 ` Christian Couder
2025-01-14 1:33 ` Peijian Ju
2025-01-08 18:37 ` [PATCH v9 4/8] fetch-pack: refactor packet writing Eric Ju
2025-01-08 18:37 ` [PATCH v9 5/8] fetch-pack: move fetch initialization Eric Ju
2025-01-08 18:37 ` [PATCH v9 6/8] serve: advertise object-info feature Eric Ju
2025-01-08 18:37 ` [PATCH v9 7/8] transport: add client support for object-info Eric Ju
2025-01-08 18:37 ` [PATCH v9 8/8] cat-file: add remote-object-info to batch-command Eric Ju
2025-01-10 11:20 ` Christian Couder
2025-01-14 1:24 ` Peijian Ju
2025-01-14 2:14 ` [PATCH v10 0/8] " Eric Ju
2025-01-14 2:14 ` [PATCH v10 1/8] git-compat-util: add strtoul_ul() with error handling Eric Ju
2025-01-14 2:14 ` [PATCH v10 2/8] cat-file: add declaration of variable i inside its for loop Eric Ju
2025-01-14 2:14 ` [PATCH v10 3/8] t1006: split test utility functions into new "lib-cat-file.sh" Eric Ju
2025-01-14 2:14 ` [PATCH v10 4/8] fetch-pack: refactor packet writing Eric Ju
2025-01-14 2:14 ` [PATCH v10 5/8] fetch-pack: move fetch initialization Eric Ju
2025-01-14 2:14 ` [PATCH v10 6/8] serve: advertise object-info feature Eric Ju
2025-01-14 2:14 ` [PATCH v10 7/8] transport: add client support for object-info Eric Ju
2025-02-01 2:08 ` Jeff King
2025-02-20 22:52 ` Peijian Ju
2025-01-14 2:15 ` [PATCH v10 8/8] cat-file: add remote-object-info to batch-command Eric Ju
2025-02-01 2:03 ` Jeff King
2025-02-21 15:34 ` Peijian Ju
2025-02-24 23:45 ` Jeff King
2025-03-12 19:53 ` Peijian Ju
2025-02-21 19:04 ` [PATCH v11 0/8] " Eric Ju
2025-02-21 19:04 ` [PATCH v11 1/8] git-compat-util: add strtoul_ul() with error handling Eric Ju
2025-02-21 19:04 ` [PATCH v11 2/8] cat-file: add declaration of variable i inside its for loop Eric Ju
2025-02-21 19:04 ` [PATCH v11 3/8] t1006: split test utility functions into new "lib-cat-file.sh" Eric Ju
2025-02-21 19:04 ` [PATCH v11 4/8] fetch-pack: refactor packet writing Eric Ju
2025-02-21 19:04 ` [PATCH v11 5/8] fetch-pack: move fetch initialization Eric Ju
2025-02-21 19:04 ` [PATCH v11 6/8] serve: advertise object-info feature Eric Ju
2025-02-21 19:04 ` [PATCH v11 7/8] transport: add client support for object-info Eric Ju
2025-02-21 19:04 ` [PATCH v11 8/8] cat-file: add remote-object-info to batch-command Eric Ju
2025-02-24 20:46 ` Junio C Hamano
2025-03-11 23:10 ` Peijian Ju
2025-02-24 23:47 ` Jeff King
2025-03-12 2:19 ` Peijian Ju
2025-03-13 6:02 ` Jeff King
2025-03-21 18:24 ` Peijian Ju
2025-03-24 3:39 ` Jeff King
2026-03-12 21:41 ` [GSoC] " Pablo Sabater
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=20241125053616.25170-1-eric.peijian@gmail.com \
--to=eric.peijian@gmail$(echo .)com \
--cc=calvinwan@google$(echo .)com \
--cc=chriscool@tuxfamily$(echo .)org \
--cc=git@vger$(echo .)kernel.org \
--cc=jltobler@gmail$(echo .)com \
--cc=jonathantanmy@google$(echo .)com \
--cc=karthik.188@gmail$(echo .)com \
--cc=toon@iotcl$(echo .)com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
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