)]}'
{
  "commit": "e44aca614596d49ca802f1602eaf9a4850c3c07d",
  "tree": "09acb672b8ddab07280fa783821a9b2293cd55c3",
  "parents": [
    "24f082e6f45e39dc36f55a3344696d707740f56e"
  ],
  "author": {
    "name": "Pablo Sabater",
    "email": "pabloosabaterr@gmail.com",
    "time": "Fri Jul 24 12:54:20 2026 +0200"
  },
  "committer": {
    "name": "Junio C Hamano",
    "email": "gitster@pobox.com",
    "time": "Fri Jul 24 08:46:59 2026 -0700"
  },
  "message": "protocol-caps: check object existence regardless of the attributes requested\n\nCurrently, send_info() only checks for existence when the attribute\n\u0027size\u0027 is also requested. Requesting a bare OID, without attributes only\nechoes back the OID.\n\nExtract the existence check to be done regardless of the number of\nattributes requested.\n\nWhile at it, introduce a wrapper called get_object_info() similar to\nodb_read_object_info() that returns OBJ_BAD on fail and adds\nOBJECT_INFO_SKIP_FETCH_OBJECT and OBJECT_INFO_QUICK flags.\nOBJECT_INFO_SKIP_FETCH_OBJECT is so a server with a partial clone\ndoesn\u0027t trigger fetching objects when it gets an object-info request\nwith an OID that is not available locally. A server should only report\nwhat it has locally.\n\nTighten the condition used to determine whether an object is\nrecognized. get_object_info() returns OBJ_BAD for unknown objects,\nbut OBJ_NONE (0) can also mean \"not found\". Change the check from \u0027\u003c 0\u0027\nto \u0027\u003c\u003d OBJ_NONE\u0027 to cover both as unrecognized.\n\nWith this patch, a bare OID has two possible responses:\n\n1. Recognized OID: the server answers with \"\u003cOID\u003e\"\n\n2. Unrecognized OID: the server answers with \"\u003cOID\u003e SP\"\n\nUpdate the object-info section in \u0027gitprotocol-v2.adoc\u0027:\n- Require full obj-oid explicitly.\n- Fix parentheses.\n- Define obj-size explicitly.\n- Make obj-size optional in obj-info and document the behavior\n  for unrecognized object IDs.\n- Describe the attr header as zero or more pkt-lines, one per attribute,\n  matching what the server implements. A request with no attributes gets\n  no header.\n\nSigned-off-by: Pablo Sabater \u003cpabloosabaterr@gmail.com\u003e\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "2beb70595fc1e5f163016941a564c7bf552041f3",
      "old_mode": 33188,
      "old_path": "Documentation/gitprotocol-v2.adoc",
      "new_id": "7bf62014c3917d59d9d0a5818507736a1c2d8579",
      "new_mode": 33188,
      "new_path": "Documentation/gitprotocol-v2.adoc"
    },
    {
      "type": "modify",
      "old_id": "8858ea4489d71448aa71d2089aedda9badf44ea0",
      "old_mode": 33188,
      "old_path": "protocol-caps.c",
      "new_id": "02261be14d817ae12f08d28ba15baa83f750426a",
      "new_mode": 33188,
      "new_path": "protocol-caps.c"
    },
    {
      "type": "modify",
      "old_id": "d4c28bae39e2adcc95162ea45cdacd25cf2ced63",
      "old_mode": 33261,
      "old_path": "t/t5701-git-serve.sh",
      "new_id": "cacff4456c6fea23f913f4141b9fb2b9c00fa338",
      "new_mode": 33261,
      "new_path": "t/t5701-git-serve.sh"
    }
  ]
}
