git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 1/4] send-pack: fix capability-sending logic

From
Jeff King <peff@peff.net>
Date
Aug 10, 2012, 07:57 UTC
Message-ID
<20120810075731.GA8399@sigill.intra.peff.net>
In-Reply-To
<20120810075342.GA30072@sigill.intra.peff.net>

If we have capabilities to send to the server, we send the regular "want" line followed by a NUL, then the capabilities; otherwise, we do not even send the NUL.

However, when checking whether we want to send the "quiet" capability, we check args->quiet, which is wrong. That flag only tells us whether the client side wanted to be quiet, not whether the server supports it (originally, in c207e34f, it meant both; however, that was later split into two flags by 01fdc21f).

We still check the right flag when actually printing "quiet", so this could only have two effects:

  1. We might send the trailing NUL when we do not otherwise
     need to. In theory, an antique pre-capability
     implementation of git might choke on this (since the
     client is instructed never to respond with capabilities
     that the server has not first advertised).
  2. We might also want to send the quiet flag if the
     args->progress flag is false, but this code path would
     not trigger in that instance.

In practice, it almost certainly never matters. The report-status capability dates back to 2005. Any real-world server is going to advertise that, and we will always respond with at least that capability.

Signed-off-by: Jeff King <peff@peff.net>
---
I'm tempted to remove this part of the conditional entirely to make the
code simpler, which would mean that we always send the extra NUL, even
if there are no capabilities. But I'm not 100% sure that pre-1.1.0
versions of git actually handle that, and who knows if there are other
implementations. This fix is the safe, conservative route.
 builtin/send-pack.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/builtin/send-pack.c b/builtin/send-pack.c
index c4d4211..5c69995 100644
--- a/builtin/send-pack.c
+++ b/builtin/send-pack.c
@@ -306,7 +306,7 @@ int send_pack(struct send_pack_args *args,
 			char *new_hex = sha1_to_hex(ref->new_sha1);
 			int quiet = quiet_supported && (args->quiet || !args->progress);
 
-			if (!cmds_sent && (status_report || use_sideband || args->quiet)) {
+			if (!cmds_sent && (status_report || use_sideband || quiet)) {
 				packet_buf_write(&req_buf,
 						 "%s %s %s%c%s%s%s agent=%s",
 						 old_hex, new_hex, ref->name, 0,
-- 
1.7.12.rc2.4.g7f05cf9
Previous: Jeff KingNext: Jeff King
Message 2 of 37 in “jk/version-string and google code”
  1. 0/4 jk/version-string and google codeJeff King, Aug 10, 2012
  2. 1/4 send-pack: fix capability-sending logicJeff King, Aug 10, 2012
  3. 2/4 do not send client agent unless server does firstJeff King, Aug 10, 2012
  4. Junio C HamanoAug 10, 2012
  5. Jeff KingAug 10, 2012
  6. 3/4 connect: learn to parse capabilities with valuesJeff King, Aug 10, 2012
  7. Eric SunshineAug 10, 2012
  8. Junio C HamanoAug 10, 2012
  9. Jeff KingAug 10, 2012
  10. Junio C HamanoAug 10, 2012
  11. Junio C HamanoAug 13, 2012
  12. 4/4 fetch-pack: mention server version with verbose outputJunio C Hamano, Aug 13, 2012
  13. Junio C HamanoAug 13, 2012
  14. Jeff KingAug 13, 2012
  15. Junio C HamanoAug 13, 2012
  16. Jeff KingAug 13, 2012
  17. Junio C HamanoAug 13, 2012
  18. Jeff KingAug 13, 2012
  19. Jeff KingAug 14, 2012
  20. Jeff KingAug 14, 2012
  21. Junio C HamanoAug 14, 2012
  22. 4/4 fetch-pack: mention server version with verbose outputJeff King, Aug 10, 2012
  23. Junio C HamanoAug 10, 2012
  24. Jeff KingAug 10, 2012
  25. Junio C HamanoAug 10, 2012
  26. Jeff KingAug 10, 2012
  27. Shawn PearceAug 10, 2012
  28. Junio C HamanoAug 10, 2012
  29. Junio C HamanoAug 10, 2012
  30. Dave BorowitzAug 10, 2012
  31. Jeff KingAug 10, 2012
  32. Dave BorowitzAug 10, 2012
  33. Jeff KingAug 10, 2012
  34. Junio C HamanoAug 10, 2012
  35. Jeff KingAug 10, 2012
  36. Junio C HamanoAug 10, 2012
  37. Junio C HamanoAug 10, 2012

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.