Thread (225 messages) 225 messages, 12 authors, 7h ago

Re: [PATCH GSoC RFC v13 06/12] connect: refactor packet writing

From: Pablo Sabater <hidden>
Date: 2026-06-24 12:08:41

El lun, 22 jun 2026 a las 22:43, Karthik Nayak
([off-list ref]) escribió:
Pablo Sabater [off-list ref] writes:

[snip]
quoted
diff --git a/connect.c b/connect.c
index 1dced8e632..78c69d4485 100644
--- a/connect.c
+++ b/connect.c
@@ -700,16 +700,16 @@ int server_supports(const char *feature)
      return !!server_feature_value(feature, NULL);
 }

-void write_fetch_command_and_capabilities(struct strbuf *req_buf,
-                                       const struct string_list *server_options)
+void write_command_and_capabilities(struct strbuf *req_buf, const char *command,
+                                 const struct string_list *server_options)
 {
      const char *hash_name;
      int advertise_sid;

      repo_config_get_bool(the_repository, "transfer.advertisesid", &advertise_sid);

-     ensure_server_supports_v2("fetch");
-     packet_buf_write(req_buf, "command=fetch");
+     ensure_server_supports_v2(command);
+     packet_buf_write(req_buf, "command=%s", command);
      if (server_supports_v2("agent"))
              packet_buf_write(req_buf, "agent=%s", git_user_agent_sanitized());
      if (advertise_sid && server_supports_v2("session-id"))
@@ -727,7 +727,7 @@ void write_fetch_command_and_capabilities(struct strbuf *req_buf,
                      die(_("mismatched algorithms: client %s; server %s"),
                          the_hash_algo->name, hash_name);
              packet_buf_write(req_buf, "object-format=%s", the_hash_algo->name);
-     } else if (hash_algo_by_ptr(the_hash_algo) != GIT_HASH_SHA1_LEGACY) {
+     } else if (hash_algo_by_ptr(the_hash_algo) != GIT_HASH_SHA1) {
              die(_("the server does not support algorithm '%s'"),
                  the_hash_algo->name);
      }
Why did we make this change? If the server doesn't support v2, then the
object format should be `GIT_HASH_SHA1_LEGACY`. While the value of it is
indeed `GIT_HASH_SHA1`, it indicates a scenario where there was no
option to select object hash, which is the scenario here.

If there is a reason to make such a change, perhaps we should highlight
this in the commit message.
Hi!
There should be no diff related to that line, In some point between
Eric's last version (v11) and mine's firs (v12) the original code
changed. On the diff from v11 [1] the object format is the same, i
didn't notice this change and it's wrong, I'll fix it for v14, Thanks!
quoted
diff --git a/connect.h b/connect.h
index c4f6ea4b0a..8f4c523892 100644
--- a/connect.h
+++ b/connect.h
@@ -34,8 +34,12 @@ void check_stateless_delimiter(int stateless_rpc,
                             struct packet_reader *reader,
                             const char *error);

+/*
+ * Writes a command along with the requested server capabilities/features into a
+ * request buffer.
+ */
 struct string_list;
The comment should be above the function and not the forward
declaration.
True, I'll fix it for v14.
While we're here, why not `#include "string-list.h"` and remove the
forward declaration, is there a circular dependency?
I believe this was right because from what I know forward declarations
are prefered in headers when in this case, the struct is only used as
a pointer. Investigating, this came from a review from patrick [2].

[snip]

[1]: https://lore.kernel.org/git/20250221190451.12536-5-eric.peijian@gmail.com/ (local)
[2]: https://lore.kernel.org/git/Z0RIqUAoEob8lGfM@pks.im/ (local)

Thanks for the review,
Pablo.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help