)]}'
{
  "log": [
    {
      "commit": "60fcf46fa383bd110bfd0037e0c321d37c0da92d",
      "tree": "045ac211bcaf6266227f35627a62d5a3108a815f",
      "parents": [
        "0d4f8858d144beaaa7a85b35b5be9b528fdb8662",
        "4f81551cfbab5ff5f1f0258c592e7c6268a3d18c"
      ],
      "author": {
        "name": "George Engelbrecht",
        "email": "engeg@google.com",
        "time": "Fri Sep 18 15:31:18 2026 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Sep 18 15:31:18 2026 -0700"
      },
      "message": "Merge \"Add paths_only projection to the recursive tree JSON API\""
    },
    {
      "commit": "4f81551cfbab5ff5f1f0258c592e7c6268a3d18c",
      "tree": "8569926167bab2a8a563d1884db5a660ccde7b87",
      "parents": [
        "77d36f6ff5f50316daa82c6753af2c3217859df4"
      ],
      "author": {
        "name": "George Engelbrecht",
        "email": "engeg@google.com",
        "time": "Sat Sep 12 00:51:36 2026 +0000"
      },
      "committer": {
        "name": "George Engelbrecht",
        "email": "engeg@google.com",
        "time": "Fri Sep 18 16:43:57 2026 +0000"
      },
      "message": "Add paths_only projection to the recursive tree JSON API\n\nAdds ?paths_only\u003d1 to the recursive tree listing, returning just the\nblob path names and omitting the per-entry mode, type and object ID.\nThis is the payload a path-oriented client such as a file finder\nneeds; the existing listing carries several times more bytes than\nsuch a client can use.\n\nMeasured against chromium/src at 506,237 blobs, ?recursive\u003d1\ntransfers 17.1 MB gzipped while ?recursive\u003d1\u0026paths_only\u003d1 transfers\n3.4 MB.\n\nThe listing is deliberately unbounded. A caller cannot distinguish a\npath omitted by a cap from a path that does not exist, so a partial\nlisting would be a correctness bug rather than a load mitigation. No\nbound is needed in any case: this is a strict projection of\n?recursive\u003d1, which is itself unbounded and considerably more\nexpensive to serve.\n\nBecause it is unbounded it is also streamed rather than collected.\nPathList.SOURCE_ADAPTER writes each path to the JsonWriter as the\nTreeWalk yields it, so serializing a tree of any size costs constant\nmemory; buffering chromium/src first would have held roughly 65 MB of\ntransient strings per concurrent request. PathList itself remains the\ndeclared response shape, and PathServletTest deserializes the\nstreamed bytes back into it, which is what holds the writer and the\nshape in agreement. The existing ?recursive\u003d1 listing still buffers\nand is not touched here.\n\nOn chromium/src this moves time to first byte from 234 ms to 4 ms\nwith total response time unchanged at 0.38 s. The bytes are\nidentical: the full 43 MB response compares equal before and after,\nas does the gzipped path.\n\nThe trade is that a mid-walk object store error now arrives as\ntruncated JSON rather than as an error status, because the response\nis already partly written. Callers parse the body, so truncation\nfails loudly rather than silently shortening the listing.\n\npaths_only requires recursive\u003d1 and rejects the request otherwise. A\nnon-tree target already yields 404 through WalkResult.recursivePath,\nso it needs no separate type check of its own.\n\nTAG\u003dagy\nCONV\u003d0b3e4b30-d902-4587-8bb2-ce23109d6955\nChange-Id: I010e8f8b1d8f6cd4bb28492375481653186bd44e\n"
    },
    {
      "commit": "0d4f8858d144beaaa7a85b35b5be9b528fdb8662",
      "tree": "faf41f54061cd1ca42812710b4385b6299ea653c",
      "parents": [
        "e5135e39eac0f5f3b91c7616f9131be32286a136"
      ],
      "author": {
        "name": "Sam Saccone",
        "email": "samccone@google.com",
        "time": "Thu Sep 17 00:21:58 2026 +0000"
      },
      "committer": {
        "name": "Sam Saccone",
        "email": "samccone@google.com",
        "time": "Thu Sep 17 00:22:10 2026 +0000"
      },
      "message": "Render unchanged diff lines as grey instead of yellow\n\nIn Gitiles unified diff formatting (HtmlDiffFormatter), unchanged\ncontext lines (starting with \u0027 \u0027) are wrapped in \u003cspan class\u003d\"Diff-change\"\u003e.\nPreviously, dark mode support introduced --diff-change styled as #960\nin light mode and #fdd663 in dark mode, causing all unchanged lines\nin unified diffs to render as yellowish-brown / yellow instead of neutral\ngrey.\n\nUpdate --diff-change to #666 in light mode and #9aa0a6 in dark mode so\nthat unchanged context lines render in grey matching the secondary text\npalette.\n\nAdd unit tests to verify that unchanged lines are formatted with\nDiff-change and that --diff-change resolves to grey colors instead of\nyellow in base.css.\n\nBug: b/562476907\ngoogle-bug-id: 562476907\nTAG\u003dagy\nCONV\u003df9f02e8a-5730-4ba4-9c5c-f2415cbb4fd7\n\nChange-Id: Ie3c687845b707161f462b5e5cfe10ce481e9fa2b\n"
    },
    {
      "commit": "e5135e39eac0f5f3b91c7616f9131be32286a136",
      "tree": "2c8de116f87fbc4d53a1874cf9758c1a5bad1ec5",
      "parents": [
        "77d36f6ff5f50316daa82c6753af2c3217859df4"
      ],
      "author": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Mon Sep 14 19:19:58 2026 +0200"
      },
      "committer": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Wed Sep 16 08:29:36 2026 +0200"
      },
      "message": "Bazel: Package stamped JGit only in the Gitiles WAR\n\nJGit\u0027s default Bazel target is now non-stamped, so ordinary Gitiles\ncompile and test actions no longer depend on volatile workspace status.\n\nUpdate the JGit submodule to the change that adds the explicit\n//org.eclipse.jgit:jgit-stamped target, and use that target at the\ngitiles.war packaging boundary.\n\nExclude the non-stamped core JGit jar from the WAR so the packaged\napplication contains only the JGit jar with the Implementation-Version\nmanifest entry.\n\nFeature: Issue 561838827\nChange-Id: I3f90e2281004c1903dadc50919229982ef0ae48d\n"
    },
    {
      "commit": "77d36f6ff5f50316daa82c6753af2c3217859df4",
      "tree": "127145f63c4aaaec4503b87386b7fccf9dd42906",
      "parents": [
        "a9409d9529e6f2da746e126dba7a8f4126f01d3e",
        "f74576d007f6c5fbef5f6b226ab761626ddde2ea"
      ],
      "author": {
        "name": "Sam Saccone",
        "email": "samccone@google.com",
        "time": "Wed Sep 09 12:50:13 2026 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Sep 09 12:50:13 2026 -0700"
      },
      "message": "Merge \"Support code blocks within markdown tables\""
    },
    {
      "commit": "f74576d007f6c5fbef5f6b226ab761626ddde2ea",
      "tree": "377a832903fa3532fa0621cdf4bc3a8d3934879f",
      "parents": [
        "77be30bcac9ff7caaebd8d76634710b6c5a1f3b3"
      ],
      "author": {
        "name": "Sam Saccone",
        "email": "samccone@google.com",
        "time": "Tue Sep 08 18:36:58 2026 +0000"
      },
      "committer": {
        "name": "Sam Saccone",
        "email": "samccone@google.com",
        "time": "Wed Sep 09 19:31:26 2026 +0000"
      },
      "message": "Support code blocks within markdown tables\n\nMarkdown tables (GFM tables) require rows to be specified on single\nlines, preventing standard fenced or indented code blocks within cells.\nDocumentation generators (such as Bazel Stardoc) generate code blocks\ninside table cells using \u003cpre\u003e\u003ccode\u003e...\u003c/code\u003e\u003c/pre\u003e (or \u003cpre\u003e...)\nwith HTML line breaks or entity-encoded newlines (\u0026#10;).\n\nPreviously, GitilesHtmlExtension ignored \u003cpre\u003e and \u003ccode\u003e inline\ntags, causing MarkdownToHtml to strip them and rendering code blocks as\nplain inline text with collapsed spaces and no code styling.\nAdditionally, when GitilesHtmlExtension unlinked replaced sibling nodes\n(such as closing anchor tags), the visitor traversal prematurely ended,\nskipping subsequent siblings in the same container.\n\nThis change adds:\n1. TableCodeBlock, a CustomNode representing code blocks in inline\n   contexts like table cells.\n2. Handling in GitilesHtmlExtension to scan \u003cpre\u003e / \u003ccode\u003e tags,\n   extract language attributes, preserve newlines and code formatting,\n   and convert them to TableCodeBlock (and FencedCodeBlock for block\n   HTML).\n3. Traversal in GitilesHtmlExtension.visitChildren that safely advances\n   past replaced sibling ranges without skipping siblings.\n4. Support for \u003ca id\u003d\"...\"\u003e anchors in addition to \u003ca name\u003d\"...\"\u003e.\n5. Visitor handling in MarkdownToHtml to render TableCodeBlock via\n   codeInPre(...).\n\nChange-Id: I75c6420f19537d6b9836294f58bcdc6405410192\n"
    },
    {
      "commit": "a9409d9529e6f2da746e126dba7a8f4126f01d3e",
      "tree": "77a462ada0efdf4f33b1b3ea22d899dd8dbffa8e",
      "parents": [
        "170bc1c13ef7b5c62624dc647c37ebb416402601",
        "875f0657401099b214f7d98b2ed5409e86d5e018"
      ],
      "author": {
        "name": "George Engelbrecht",
        "email": "engeg@google.com",
        "time": "Wed Sep 09 09:46:21 2026 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Sep 09 09:46:21 2026 -0700"
      },
      "message": "Merge \"Include PRETTIFY_CSS_URL on repository index landing page when README is present\""
    },
    {
      "commit": "170bc1c13ef7b5c62624dc647c37ebb416402601",
      "tree": "0806c9da11093cf82d675bdbad56f1f4d9cd3913",
      "parents": [
        "77be30bcac9ff7caaebd8d76634710b6c5a1f3b3"
      ],
      "author": {
        "name": "George Engelbrecht",
        "email": "engeg@google.com",
        "time": "Tue Sep 08 20:29:50 2026 +0000"
      },
      "committer": {
        "name": "George Engelbrecht",
        "email": "engeg@google.com",
        "time": "Tue Sep 08 16:09:52 2026 -0700"
      },
      "message": "Add dark mode theme support for Mermaid diagrams\n\nGitiles renders Mermaid diagrams server-side into SVG. Previously, all\nSVG shapes (nodes, subgraphs, edges, markers, text, and labels) used\nhardcoded light-mode hex values, causing them to display as glaring\nwhite rectangles with poor contrast in dark mode.\n\nThis change:\n- Defines CSS variables for Mermaid diagram elements (--mermaid-node-bg,\n  --mermaid-node-stroke, --mermaid-node-text, --mermaid-edge,\n  --mermaid-subgraph-bg, etc.) in doc.css under :root, light mode,\n  dark media query, and html[data-theme\u003d\"dark\"].\n- Adds semantic CSS classes (.mermaid-node, .mermaid-subgraph,\n  .mermaid-edge, .mermaid-arrow, .mermaid-shadow, etc.) to rendered SVG\n  elements in SimpleMermaidRenderer while preserving presentation\n  attribute fallbacks.\n- Selectively applies fill/stroke classes when custom style directives\n  are absent, preserving user-defined colors without stylesheet overrides.\n- Supports `color:` in `style` directives and computes background\n  luminance for custom-filled nodes (e.g. pastel database cylinders)\n  to preserve dark, readable text without stylesheet theme inversion.\n- Adds comprehensive unit tests in SimpleMermaidRendererTest covering\n  theme classes, custom styles, and text contrast on custom-filled shapes.\n\nChange-Id: Iac234a2dd627a06ecceb41c4fabbbbdd92233605\n"
    },
    {
      "commit": "875f0657401099b214f7d98b2ed5409e86d5e018",
      "tree": "87a05fd0985956983c14d8c37998caa94659e441",
      "parents": [
        "77be30bcac9ff7caaebd8d76634710b6c5a1f3b3"
      ],
      "author": {
        "name": "George Engelbrecht",
        "email": "engeg@google.com",
        "time": "Tue Sep 08 20:24:37 2026 +0000"
      },
      "committer": {
        "name": "George Engelbrecht",
        "email": "engeg@google.com",
        "time": "Tue Sep 08 16:09:45 2026 -0700"
      },
      "message": "Include PRETTIFY_CSS_URL on repository index landing page when README is present\n\nRepositoryIndex.soy renders $readmeHtml when a root README.md exists,\nbut only passed DOC_CSS_URL to common.header. Pass PRETTIFY_CSS_URL as\nwell (matching PathDetail.soy and RevisionDetail.soy) so that fenced\ncode blocks in README.md on the repository landing page render with\nsyntax highlighting and theme variables.\n\nChange-Id: Ic7adc3a50e723d706135c275ea5e1efc6e525e83\n"
    },
    {
      "commit": "77be30bcac9ff7caaebd8d76634710b6c5a1f3b3",
      "tree": "ae45d96ae70fe2b30b833c86a6487d25061a2b6c",
      "parents": [
        "dc32d06d0d42bf9b6d9633fba630a100d28db874"
      ],
      "author": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Thu Sep 03 07:35:38 2026 +0200"
      },
      "committer": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Thu Sep 03 07:47:26 2026 +0200"
      },
      "message": "Bazel: Align dependency versions with Gerrit\n\nUpdate Gitiles\u0027 Bazel dependency pins to match versions used by Gerrit.\n\nChange-Id: Id0370c5434f55e64ed57ae0e23f5222cc49c7b45\n"
    },
    {
      "commit": "dc32d06d0d42bf9b6d9633fba630a100d28db874",
      "tree": "cf25595b7fc6ab03c654416aa347254afc537946",
      "parents": [
        "4d1e38b64e6576eba470b09a1e3e463deda1dc11"
      ],
      "author": {
        "name": "Devansh Varshney",
        "email": "devansh@libreoffice.org",
        "time": "Mon Aug 03 18:51:54 2026 +0530"
      },
      "committer": {
        "name": "Devansh Varshney",
        "email": "devansh@libreoffice.org",
        "time": "Wed Sep 02 15:55:55 2026 +0200"
      },
      "message": "TreeSoyData: link tree pages to content search\n\nAdd a search link to repository tree pages. The link opens the +grep\nHTML view at the current revision and preserves the current directory,\nso searches from a subtree remain limited to that path.\n\nIssue: 376381593\nChange-Id: Ie1015b890b34edf23cf938651ca1edbe7e17cb72\nSigned-off-by: Devansh Varshney \u003cdevansh@libreoffice.org\u003e\n"
    },
    {
      "commit": "4d1e38b64e6576eba470b09a1e3e463deda1dc11",
      "tree": "751df94d218b92aeed310eb99ceb82c648bdfe30",
      "parents": [
        "968a50e4c1d36687e876a75ce50ec521d1bdbdf2"
      ],
      "author": {
        "name": "Devansh Varshney",
        "email": "devansh@libreoffice.org",
        "time": "Wed Jun 24 21:32:04 2026 +0530"
      },
      "committer": {
        "name": "Devansh Varshney",
        "email": "devansh@libreoffice.org",
        "time": "Wed Sep 02 15:54:48 2026 +0200"
      },
      "message": "GrepServlet: add HTML view for content search\n\nThe +grep endpoint currently supports JSON responses only. Add a\nbasic Soy-backed HTML page with a search form and linked file/line\nresults, reusing the existing bounded grep implementation.\n\nHTML requests without the s parameter show the search form without\nrunning a search. JSON behavior is unchanged and still requires s.\n\nIssue: 376381593\nChange-Id: Ie5b2a513d61fb4c44d6efba868ae6faa9aa866d0\nSigned-off-by: Devansh Varshney \u003cdevansh@libreoffice.org\u003e\n"
    },
    {
      "commit": "968a50e4c1d36687e876a75ce50ec521d1bdbdf2",
      "tree": "2350a5ccfafb581801c190482e3df98ffc080e80",
      "parents": [
        "5ce062876aab5328ca7d9e87bc4782fed3befa6a"
      ],
      "author": {
        "name": "Devansh Varshney",
        "email": "devansh@libreoffice.org",
        "time": "Sat May 23 19:48:35 2026 +0530"
      },
      "committer": {
        "name": "Devansh Varshney",
        "email": "devansh@libreoffice.org",
        "time": "Wed Sep 02 15:51:00 2026 +0200"
      },
      "message": "GrepServlet: add JSON content search endpoint\n\nAdd a +grep endpoint that searches blob contents at one revision using\nJGit TreeWalk and ObjectReader.\n\nThis starts the git grep part of the Gitiles search issue without adding\nan index or UI. The endpoint is JSON-only for now and keeps the search\nbounded by skipping binary or large blobs and stopping after a fixed\nnumber of matches.\n\nIssue: 376381593\nChange-Id: I351e81bb378d2a759c6b5c6d686199c598c6e886\n"
    },
    {
      "commit": "5ce062876aab5328ca7d9e87bc4782fed3befa6a",
      "tree": "abde9b36adfde766e51bdb9308734dac1345ac3f",
      "parents": [
        "48e507c9a527e955a80faa6610f5eefa292b9059",
        "0b8ab6c71efb23845cfab57a588ac902bc6ad5aa"
      ],
      "author": {
        "name": "David Ostrovsky",
        "email": "david.ostrovsky@gmail.com",
        "time": "Tue Sep 01 07:55:14 2026 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Sep 01 07:55:14 2026 -0700"
      },
      "message": "Merge changes from topic \"gitiles-source-submodule\"\n\n* changes:\n  Mark war-provided libraries as neverlink inside the Gerrit tree\n  Make webassets packaging repo-path independent\n"
    },
    {
      "commit": "48e507c9a527e955a80faa6610f5eefa292b9059",
      "tree": "b696f3fdc3120bbe253878c18dbda2edf187bf8c",
      "parents": [
        "7426564caf1f66604769286e306aba681046fe6d"
      ],
      "author": {
        "name": "Sam Saccone",
        "email": "samccone@google.com",
        "time": "Sat Aug 29 21:44:25 2026 +0000"
      },
      "committer": {
        "name": "Sam Saccone",
        "email": "samccone@google.com",
        "time": "Mon Aug 31 17:08:38 2026 +0000"
      },
      "message": "Address all static analysis findings from internal import\n\nFix all static analysis findings identified during internal import across\n12 affected files in Gitiles:\n\n- Documentation: Add missing Javadoc comments to public classes,\n  interfaces, builder classes, and enums.\n- Language \u0026 Syntax Modernization: Convert multiline strings to Java text\n  blocks, convert statement switches to arrow expression switches,\n  adopt pattern matching for instanceof and switches, and group method\n  overloads together without interleaving helper methods.\n- Deprecation Resolutions: Migrate from deprecated PersonIdent constructor\n  to Instant/ZoneId variants, replace OrderedList.getStartNumber() with\n  getMarkerStartNumber(), and replace Splitter.onPattern() with\n  Splitter.on(Pattern.compile(...)).\n- Guava \u0026 Truth Assertions: Adopt ImmutableList/ImmutableSet where\n  appropriate, use buildOrThrow(), use computeIfAbsent(), and modernize\n  Truth assertions with isPresent(), hasSize(), and isEmpty().\n- Style \u0026 Cleanliness: Enforce lowerCamelCase identifier names, bracket\n  single-line control flow statements, split multi-variable declarations,\n  avoid Yoda conditions, and make utility class constructor private.\n\nChange-Id: Ia76966182374aef1c8cf6fb8d207567f4615c8f1\n"
    },
    {
      "commit": "0b8ab6c71efb23845cfab57a588ac902bc6ad5aa",
      "tree": "1fcf3a97f4db6cdf61bc5e48b7bcb00431729530",
      "parents": [
        "8bb664ebb09f271a6cc2996e401d8ae9ebdef478"
      ],
      "author": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Mon Aug 31 15:28:02 2026 +0200"
      },
      "committer": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Mon Aug 31 15:42:21 2026 +0200"
      },
      "message": "Mark war-provided libraries as neverlink inside the Gerrit tree\n\nWhen Gitiles is built as a Gerrit plugin from source, the plugin jar was\npackaging the full transitive closure of libraries that Gerrit already\nships in gerrit.war (Guava, Gson, Soy, ICU4J, JGit, commons-lang3/io,\ntext/reload4j/flogger, ASM, html-types, ...). That inflated gitiles.jar\nto ~34 MB of classes that are already on the plugin\u0027s runtime classpath\nvia gerrit.war -- pure duplication.\n\nIntroduce lib/provided.bzl with a provided_java_library() wrapper: a\nsingle java_library whose neverlink attribute is a select() on the\nexisting @com_googlesource_gerrit_bazlets//flags:in_gerrit_tree flag.\n\nGerrit sets that flag in its .bazelrc; standalone Gitiles never does, so\nit defaults to false.\n\n* Standalone (flag false): the libraries are linked exactly as before\n  and bundled into gitiles.war -- no behavioral change, zero regression\n  risk.\n* In the Gerrit tree (flag true): they become neverlink, so their\n  classes are dropped from the plugin\u0027s runtime closure and are not\n  re-packaged into gitiles.jar. Gerrit already provides them.\n\nOnly libraries that gerrit.war actually ships are converted (lib/BUILD,\nlib/soy, lib/flogger). Gitiles-only libraries (the commonmark family,\njava-prettify and autolink) stay linked in both configurations.\n\nAlternative considered: exclude the same closure with deploy_env from\nwithin the Gerrit plugin\u0027s BUILD (the pattern used by other plugins). We\ndefer that here because in_gerrit_tree is more principled -- Gitiles\nitself declares \"these are provided when I\u0027m built inside Gerrit,\" so\nthe knowledge lives with the dependency declarations instead of being\nduplicated as an exclusion list in Gerrit\u0027s plugin wiring. deploy_env\nremains a viable follow-up if we later prefer to keep this decision\nentirely on the Gerrit side.\n\nChange-Id: I4f12d3a4be71a89df8830ecc872877f869997a8c\n"
    },
    {
      "commit": "8bb664ebb09f271a6cc2996e401d8ae9ebdef478",
      "tree": "f41dcf9a2e7da5f400abb8cd45f635ae8700ebb6",
      "parents": [
        "7426564caf1f66604769286e306aba681046fe6d"
      ],
      "author": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Mon Aug 31 12:40:05 2026 +0200"
      },
      "committer": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Mon Aug 31 12:55:58 2026 +0200"
      },
      "message": "Make webassets packaging repo-path independent\n\nGitiles\u0027 webassets genrule copied resources by stripping one\npath component from the source paths. That works when Gitiles is\nthe main repository, where resource paths start with resources/...,\nbut not when another Bzlmod build consumes Gitiles as a local\nexternal repository.\n\nIn that case Bazel passes source paths below its external repository\ntree, so stripping one component leaves the wrong layout and the rule\ncannot cd into com/google/gitiles.\n\nCopy each source under the path segment after\nresources/com/google/gitiles/ instead. This preserves the existing\narchive layout for standalone Gitiles and allows Gerrit to\nsource-build Gitiles from a modules/gitiles submodule while supplying\nits own JGit and java-prettify repositories.\n\nChange-Id: Iec8dbd92411d0fd5a5669035dadc6da231242fb8\n"
    },
    {
      "commit": "7426564caf1f66604769286e306aba681046fe6d",
      "tree": "f09c3ff07eac628a9a0aef57132e8adde6ea0a6b",
      "parents": [
        "cbbc9e3bd4c59ba0cf46c543b3d2d426488ac7ad",
        "3c524d03cb015c77f03c15e2d64ee2ddf63b1cfe"
      ],
      "author": {
        "name": "David Ostrovsky",
        "email": "david.ostrovsky@gmail.com",
        "time": "Mon Aug 31 03:16:30 2026 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Aug 31 03:16:30 2026 -0700"
      },
      "message": "Merge \"Fix broken tar.xz archive download\""
    },
    {
      "commit": "cbbc9e3bd4c59ba0cf46c543b3d2d426488ac7ad",
      "tree": "a8615540a412794434d068252b4ad29a222babe0",
      "parents": [
        "9b632a9d4ab07242ffbce16ea3ae1c71ad859b32",
        "259f87e50f34d011ee3a93f822d6150c3bbc7111"
      ],
      "author": {
        "name": "David Ostrovsky",
        "email": "david.ostrovsky@gmail.com",
        "time": "Mon Aug 31 03:16:17 2026 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Aug 31 03:16:17 2026 -0700"
      },
      "message": "Merge \"Switch to Java 25\""
    },
    {
      "commit": "9b632a9d4ab07242ffbce16ea3ae1c71ad859b32",
      "tree": "4480a4d74749ff137819062d29f2d3b9b61fc652",
      "parents": [
        "55c1f19761e1fb594e080b9e135bd1eda0e17ca9",
        "843e958b9395ab7533a16bae6971f72baf06a7c5"
      ],
      "author": {
        "name": "David Ostrovsky",
        "email": "david.ostrovsky@gmail.com",
        "time": "Mon Aug 31 03:09:34 2026 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Aug 31 03:09:34 2026 -0700"
      },
      "message": "Merge \"Bump protobuf to 36.0 and rules_java to 9.9.0\""
    },
    {
      "commit": "3c524d03cb015c77f03c15e2d64ee2ddf63b1cfe",
      "tree": "8160adc67bd994faefcdc5f0e9681044d49c7218",
      "parents": [
        "259f87e50f34d011ee3a93f822d6150c3bbc7111"
      ],
      "author": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Sat Aug 29 09:54:18 2026 +0200"
      },
      "committer": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Sun Aug 30 22:50:15 2026 +0200"
      },
      "message": "Fix broken tar.xz archive download\n\nGitiles advertises the tar.xz archive format (ArchiveFormat.TXZ), but\nthe generated gitiles.war did not package org.tukaani.xz. JGit\u0027s Bazel\njgit-archive target failed to declare it (the //lib:xz target was\ntestonly), so it was never pulled transitively. Requesting a .tar.xz\narchive therefore failed at runtime with NoClassDefFoundError:\norg/tukaani/xz/..., and no test caught it because the only archive test\nexercised tar.gz.\n\nBump the JGit submodule to pick up the fix that declares org.tukaani.xz\nas a dependency of the archive library, and add a regression test that\nstreams a .tar.xz archive.\n\nDepends-On: https://eclipse.gerrithub.io/c/eclipse-jgit/jgit/+/1247298\nChange-Id: I1cd020dc4c4d0e3059d7f3b57ac2771f6037c50d\n"
    },
    {
      "commit": "55c1f19761e1fb594e080b9e135bd1eda0e17ca9",
      "tree": "0a00423416fc67f671ff4656589e8c8e0c96c7a2",
      "parents": [
        "2bdd88de3d6ccd5d5cf7c773b2a47d6b788069f8"
      ],
      "author": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Sat Aug 29 16:27:07 2026 +0200"
      },
      "committer": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Sun Aug 30 07:52:15 2026 +0200"
      },
      "message": "Format Mermaid SVG numbers with Locale.ROOT\n\nSimpleMermaidRenderer built SVG coordinates with\nString.format(\"%.1f\", ...) under the default locale, so on a JVM whose\nregion uses a comma decimal separator (e.g. de_DE) it emitted \"28,0\"\ninstead of \"28.0\". SVG requires \u0027.\u0027 as the decimal separator, so that\nmarkup is invalid; the renderer tests, which reparse coordinates with\nDouble.parseDouble, throw NumberFormatException for the same reason.\n\nPass Locale.ROOT to every String.format call so numeric output is\nalways \u0027.\u0027-separated and independent of the machine locale.\n\nAlternative considered: forcing an en-US locale from .bazelrc or\noverriding the JVM/system default locale. That does not make the\nrenderer correct on its own, and it still leaves production output\ndependent on process-wide locale configuration. The formatting point\nthat emits SVG numbers should declare its locale explicitly instead.\n\nChange-Id: Ia493dd426d3a1dffb5b7059df69c5a0001b1dab1\n"
    },
    {
      "commit": "259f87e50f34d011ee3a93f822d6150c3bbc7111",
      "tree": "6061b43dcf836603e0bf18e735cb62020bd66208",
      "parents": [
        "843e958b9395ab7533a16bae6971f72baf06a7c5"
      ],
      "author": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Fri Aug 28 18:37:30 2026 +0200"
      },
      "committer": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Sat Aug 29 10:54:58 2026 +0200"
      },
      "message": "Switch to Java 25\n\nBump the build and tool Java language/runtime versions from 21 to 25 and\nretarget the Error Prone default_java_toolchain at remotejdk_25.\n\nNo sun.misc.Unsafe workaround is needed: rules_java 9.9.0 (the parent\ncommit) bundles protobuf 36.0 for JavaBuilder and turbine, which no\nlonger call the sun.misc.Unsafe memory-access methods that required\n--sun-misc-unsafe-memory-access\u003dallow on JDK 24+. The JDK \u003c\u003d 21\n-XDaddTypeAnnotationsToSymbol workaround is also dropped, as it was a\nno-op on JDK 22+.\n\nAlso bump the Eclipse compiler compliance, source and target levels in\n.settings/org.eclipse.jdt.core.prefs from 1.8 to 25. That file dated\nback to when Gitiles was a Java 8 project and was never updated, so\nEclipse rejected Java 9+ syntax (e.g. the diamond operator on anonymous\nclasses) in imported sources even though the JRE container is JavaSE-25.\n\nChange-Id: Ic4765288722a9f3b2f4413cc9708d9a024f39c61\n"
    },
    {
      "commit": "843e958b9395ab7533a16bae6971f72baf06a7c5",
      "tree": "29869cf13a056efb05ab895e1cb27bdd462d303e",
      "parents": [
        "2bdd88de3d6ccd5d5cf7c773b2a47d6b788069f8"
      ],
      "author": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Fri Aug 28 18:34:39 2026 +0200"
      },
      "committer": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Sat Aug 29 09:59:13 2026 +0200"
      },
      "message": "Bump protobuf to 36.0 and rules_java to 9.9.0\n\nrules_java 9.9.0 bundles protobuf 36.0 for JavaBuilder and turbine,\nwhich no longer relies on the sun.misc.Unsafe memory-access methods that\nrequired --sun-misc-unsafe-memory-access\u003dallow on JDK 24+\n(protocolbuffers/protobuf#20760). Bumping it lets the upcoming Java 25\nswitch drop that workaround from the toolchain definition.\n\nAlso bump the Maven protobuf-java runtime artifact from 4.33.4 to 4.36.0\nto keep the protobuf version consistent, and re-pin\nexternal_deps.lock.json.\n\nChange-Id: Ib5132c5927e2ff720523c9b6a49131e2016211ed\n"
    },
    {
      "commit": "2bdd88de3d6ccd5d5cf7c773b2a47d6b788069f8",
      "tree": "c419a671c3e4c8d934e2d15eccbf9af61a329aad",
      "parents": [
        "2b3a9a56658c249ec037e7e32452360b18386beb",
        "33ba186227eb691fae79ce9423290f7f6b58efab"
      ],
      "author": {
        "name": "George Engelbrecht",
        "email": "engeg@google.com",
        "time": "Fri Aug 28 19:12:25 2026 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Aug 28 19:12:25 2026 -0700"
      },
      "message": "Merge \"Add canonical cross-browser favicon package\""
    },
    {
      "commit": "2b3a9a56658c249ec037e7e32452360b18386beb",
      "tree": "737c1f3a6ff812dc6ac5fd7c87befa5213f3d514",
      "parents": [
        "4534419144eef40f9fb50ead5be28d65d7963396",
        "4b8a8ad410c19cd16a759600304e005142753320"
      ],
      "author": {
        "name": "Ravi Mistry",
        "email": "rmistry@google.com",
        "time": "Fri Aug 28 16:21:29 2026 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Aug 28 16:21:29 2026 -0700"
      },
      "message": "Merge \"BlameCache: Support ignored revisions in get()\""
    },
    {
      "commit": "33ba186227eb691fae79ce9423290f7f6b58efab",
      "tree": "d75ff70020e0a0451fee06c8ef8f615c3ed6f574",
      "parents": [
        "4d478d36f4f3b56695a2250496e95ec83614d239"
      ],
      "author": {
        "name": "George Engelbrecht",
        "email": "engeg@google.com",
        "time": "Thu Aug 27 14:28:19 2026 +0000"
      },
      "committer": {
        "name": "George Engelbrecht",
        "email": "engeg@google.com",
        "time": "Fri Aug 28 19:50:17 2026 +0000"
      },
      "message": "Add canonical cross-browser favicon package\n\nIntroduce a complete, brand-neutral Git favicon set based on the\nGit coral-orange squircle with white branching commit nodes.\n\nIncludes:\n- favicon.svg: Lossless scalable vector for modern browsers\n- favicon.ico: Multi-resolution binary (16x16, 32x32, 48x48)\n- favicon-32x32.png \u0026 favicon-16x16.png: High-DPI and standard PNGs\n- apple-touch-icon.png: 180x180 for iOS/macOS Safari bookmarks\n- android-chrome-192x192.png \u0026 android-chrome-512x512.png: High-resolution assets\n\nUpdates Renderer.java and HTML head templates in Common.soy and Doc.soy\nto declare the canonical favicon links. Adds comprehensive servlet unit\ntests in FaviconTest.\n\nChange-Id: Ia4e17c7a17da2813a767a0d4f000afc5c6ccc284\n"
    },
    {
      "commit": "4534419144eef40f9fb50ead5be28d65d7963396",
      "tree": "673d37bd81f961c5ef62b7e961cc87fe29e1008d",
      "parents": [
        "4d478d36f4f3b56695a2250496e95ec83614d239"
      ],
      "author": {
        "name": "George Engelbrecht",
        "email": "engeg@google.com",
        "time": "Fri Aug 28 16:57:15 2026 +0000"
      },
      "committer": {
        "name": "George Engelbrecht",
        "email": "engeg@google.com",
        "time": "Fri Aug 28 17:58:43 2026 +0000"
      },
      "message": "Fix CheckReturnValue and remove indirect Doubles dependency in Mermaid\n\nWhen building Gitiles with strict ErrorProne checks during Google3\nimport (CL 972611210), compilation failed due to:\n\n1. In SimpleMermaidRenderer.CharScanner: next(), consume(String), and\n   consumeIgnoreCase(String) return values were ignored when advancing\n   tokens or skipping delimiters, triggering 64 CheckReturnValue compiler\n   errors. Refactor CharScanner to provide void advance(), void skip(String),\n   and void skipIgnoreCase(String) for token skipping, and boolean\n   tryConsume(String) / tryConsumeIgnoreCase(String) for the few sites\n   where the return value is tested. This eliminates unused return values\n   and avoids unnecessary CanIgnoreReturnValue annotations.\n2. In SimpleMermaidRendererTest:\n   - render(code5) return value was unused; assert that the returned\n     SvgDoc is not null.\n   - Doubles.tryParse(part) pulled in com.google.common.primitives.Doubles\n     as an indirect dependency; replace with inline Double.parseDouble(part)\n     in a try/catch block.\n\nChange-Id: I32de733a3bae5ba75a50d9f74af4c21084940f79\n"
    },
    {
      "commit": "4d478d36f4f3b56695a2250496e95ec83614d239",
      "tree": "199a4234064ca6d1fb546d2ca57f868eb85b0601",
      "parents": [
        "da05810b7b9c1424aa73832f230396dfd70cbe01",
        "2f1a119814bfeabaa1f80ebf87c79d71a984a437"
      ],
      "author": {
        "name": "George Engelbrecht",
        "email": "engeg@google.com",
        "time": "Fri Aug 28 08:22:52 2026 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Aug 28 08:22:52 2026 -0700"
      },
      "message": "Merge \"Add dark mode support to Gitiles\""
    },
    {
      "commit": "4b8a8ad410c19cd16a759600304e005142753320",
      "tree": "a9794f6211375a1f4c97a9428bfb6fcdc2f9f4cb",
      "parents": [
        "da05810b7b9c1424aa73832f230396dfd70cbe01"
      ],
      "author": {
        "name": "Ravi Mistry",
        "email": "rmistry@google.com",
        "time": "Fri Aug 28 14:47:53 2026 +0000"
      },
      "committer": {
        "name": "Ravi Mistry",
        "email": "rmistry@google.com",
        "time": "Fri Aug 28 08:14:41 2026 -0700"
      },
      "message": "BlameCache: Support ignored revisions in get()\n\nAdd 4-argument get(repo, commitId, path, ignoreIds) to BlameCache and\nBlameCacheImpl.\n\nWhen ignoreIds is non-empty, BlameCacheImpl passes the set of ObjectIds\nto BlameGenerator.setIgnoreRevs() so that blame calculations skip the\nspecified commits and attribute the affected lines to parent commits.\n\nCache entries are stored under BlameCacheImpl.Key(commitId, path,\nignoreIds), guaranteeing complete isolation from standard unignored\nblame cache entries.\n\nChange-Id: I595f0fc62e65a2a7d26d3ed5af1d6fccb6e0742d\n"
    },
    {
      "commit": "2f1a119814bfeabaa1f80ebf87c79d71a984a437",
      "tree": "2b2f37ebf02fb120cfc183d8d793beae79e2b4bf",
      "parents": [
        "658b32a8187d43e9a8429183719c580baa084544"
      ],
      "author": {
        "name": "George Engelbrecht",
        "email": "engeg@google.com",
        "time": "Wed Aug 26 22:43:53 2026 +0000"
      },
      "committer": {
        "name": "George Engelbrecht",
        "email": "engeg@google.com",
        "time": "Thu Aug 27 23:55:05 2026 +0000"
      },
      "message": "Add dark mode support to Gitiles\n\nImplement CSS custom properties across core UI, markdown docs, and\nsyntax highlighting stylesheets. Add a zero-FOUC theme initialization\nscript in \u003chead\u003e and an interactive toggle in the header that persists\npreference across sessions via localStorage and cookies.\n\nTested:\n- Added comprehensive unit tests in ThemeTest covering all HTML routes.\n- Ran all Gitiles servlet unit tests and downstream Gerrit HTTP tests.\n\nChange-Id: I2b8bf5dacd986710a62b61df87550d776ca20290\n"
    },
    {
      "commit": "da05810b7b9c1424aa73832f230396dfd70cbe01",
      "tree": "38aa7626feeeadeb75ee46737f77d527acd847f5",
      "parents": [
        "1cb80ac39b2c7e088d61f5b7649ad1a869c18257",
        "305570c765708225b2c19880861473bb5b6ef177"
      ],
      "author": {
        "name": "Sam Saccone",
        "email": "samccone@google.com",
        "time": "Thu Aug 27 15:47:53 2026 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Aug 27 15:47:53 2026 -0700"
      },
      "message": "Merge \"Add server-side Mermaid flowchart diagram rendering to Markdown\""
    },
    {
      "commit": "1cb80ac39b2c7e088d61f5b7649ad1a869c18257",
      "tree": "006d2a2ea3841c5093a94144f92685e34919b365",
      "parents": [
        "2d56b485bc542d0ffc80663b9581f31662addcc9"
      ],
      "author": {
        "name": "Ravi Mistry",
        "email": "rmistry@google.com",
        "time": "Thu Aug 27 17:14:23 2026 +0000"
      },
      "committer": {
        "name": "Ravi Mistry",
        "email": "rmistry@google.com",
        "time": "Thu Aug 27 11:42:33 2026 -0700"
      },
      "message": "BlameCacheImpl: Add ignoreIds to cache Key\n\nAdd ignored revisions (ignoreIds) to BlameCacheImpl.Key, including\ngetters, equals(), hashCode(), and toString() (formatting a\ndeterministically sorted list of revision SHAs).\n\nThis allows downstream implementations to safely update their key\nformatting and storage before introducing the get(..., ignoreIds) API.\n\nChange-Id: Ib2a71ea0e6c09babaf76354a50bceb2078e559a2\n"
    },
    {
      "commit": "2d56b485bc542d0ffc80663b9581f31662addcc9",
      "tree": "f14f17049e9d9b81d0b40f389106569f4fac86d0",
      "parents": [
        "658b32a8187d43e9a8429183719c580baa084544"
      ],
      "author": {
        "name": "Ravi Mistry",
        "email": "rmistry@google.com",
        "time": "Thu Aug 27 17:14:06 2026 +0000"
      },
      "committer": {
        "name": "Ravi Mistry",
        "email": "rmistry@google.com",
        "time": "Thu Aug 27 10:16:14 2026 -0700"
      },
      "message": "Update JGit submodule to fe01de69f\n\nUpdate JGit submodule to fe01de69f\n(https://gerrit.googlesource.com/jgit/+/fe01de69f44611049b664188652bf9e340f0b1f8)\nwhich adds support for ignoring revisions during blame traversal in\nBlameGenerator\n(https://review.gerrithub.io/c/eclipse-jgit/jgit/+/1228557), and repin\nexternal dependencies.\n\nChange-Id: I6da38beb51f03b72f5c19a60a95684d4d4ed7edd\n"
    },
    {
      "commit": "305570c765708225b2c19880861473bb5b6ef177",
      "tree": "8b469807116441792b9576cc715a0d0ec59844db",
      "parents": [
        "658b32a8187d43e9a8429183719c580baa084544"
      ],
      "author": {
        "name": "Sam Saccone",
        "email": "samccone@google.com",
        "time": "Wed Aug 26 01:36:26 2026 +0000"
      },
      "committer": {
        "name": "Sam Saccone",
        "email": "samccone@google.com",
        "time": "Wed Aug 26 23:17:57 2026 +0000"
      },
      "message": "Add server-side Mermaid flowchart diagram rendering to Markdown\n\nIntroduce server-side SVG rendering for Mermaid flowcharts and graph\ndiagrams (both \u0027graph\u0027 and \u0027flowchart\u0027 in TD, TB, LR, RL, BT orientations)\nembedded in Gitiles Markdown documents.\n\nExample rendering:\nhttps://imgur.com/a/JMuzziu\n\nKey components:\n- AST Parser: Token-based recursive scanner handling all standard node\n  shapes (rectangle, rounded, stadium, subroutine, cylinder, circle,\n  hexagon, diamond, asymmetric flag), full edge matrix (solid, dashed,\n  thick, arrows, lines, bidirectional), infix/inline edge labels,\n  multi-node ampersand chaining (e.g. A \u0026 B --\u003e C \u0026 D), and nested\n  subgraphs with direction overrides.\n- Layered Layout Engine: Sugiyama-inspired DAG layout supporting Coffman-\n  Graham layering, barycentric crossing minimization, connected\n  component partitioning for isolated subgraphs, lateral edge routing,\n  and cycle-breaking loopback paths.\n- Security \u0026 Hardening: Clean AST-to-SVG emission ensuring zero HTML/DOM\n  injection, strictly escaping XML text/tspans, eliminating raw\n  \u003cforeignObject\u003e/\u003ciframe\u003e elements, and ignoring malicious click/style\n  directives.\n- Fallback Mechanism: Safely falls back to raw \u003cpre class\u003d\"mermaid\"\u003e\n  when diagrams are unsupported or malformed.\n- Test Coverage: 100% test line coverage with comprehensive unit,\n  integration, and security attack test suites.\n\nBug: b/490107924\nChange-Id: I72ddb3eb67c2513c22444b62581ebd04aaa4afd2\nTAG\u003dagy\nCONV\u003d85f7f320-abab-4b77-9892-70da2847776b\n"
    },
    {
      "commit": "658b32a8187d43e9a8429183719c580baa084544",
      "tree": "7c2779aff261059f788d004c231a110fd9248df0",
      "parents": [
        "367b7b18a201937ddc44846c1012e32abdb26102"
      ],
      "author": {
        "name": "Sam Saccone",
        "email": "samccone@google.com",
        "time": "Mon Aug 24 18:26:19 2026 +0000"
      },
      "committer": {
        "name": "Sam Saccone",
        "email": "samccone@google.com",
        "time": "Mon Aug 24 18:26:19 2026 +0000"
      },
      "message": "Allow formatting parameters (?format\u003dTEXT, ?format\u003dJSON) on markdown files\n\nWhen requesting a markdown file path via the auto command `+` (e.g.\n`/repo/+/master/README.md?format\u003dTEXT`), ViewFilter previously\nunconditionally mapped all `.md` paths to `GitilesView.doc()`\n(`DocServlet`). Because `DocServlet` only handles HTML rendering and\ndoes not support TEXT (base64) or JSON representations, requesting\n`format\u003dTEXT` or `format\u003dJSON` resulted in an HTTP 400\n(UNSUPPORTED_RESPONSE_FORMAT) error.\n\nThis change updates `ViewFilter.parseAutoCommand` to check the requested\nformat. It only routes to `GitilesView.doc()` when the format is HTML or\nDEFAULT (the standard web browser view). For TEXT or JSON requests, it\npreserves `GitilesView.path()` so `PathServlet` serves the base64 or\nJSON representation as expected, matching the behavior for non-markdown\nfiles and the `+show` command.\n\nChange-Id: Idd02ce77dba03bcc922983821ee3f55c37bfa878\n"
    },
    {
      "commit": "367b7b18a201937ddc44846c1012e32abdb26102",
      "tree": "c7ba1702775c3d6eea355e95e487c786e2cb6c76",
      "parents": [
        "04e04f2b1bd79a555851082d32d592adbf0bd503"
      ],
      "author": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Sun Aug 16 13:46:57 2026 +0200"
      },
      "committer": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Wed Aug 19 10:06:49 2026 -0700"
      },
      "message": "Bump rules_java to 9.8.0\n\nUpdate rules_java from 9.3.0 to 9.8.0. The newer java_tools ship a\nnewer Error Prone that flags pre-existing violations; those are\naddressed in the preceding changes. Gitiles already runs its Java\ntools on JDK 21, so no toolchain runtime change is needed.\n\nChange-Id: Ibb3ce0a5fb3bb30b3b69b0aa39c9377a4508e56c\n"
    },
    {
      "commit": "04e04f2b1bd79a555851082d32d592adbf0bd503",
      "tree": "dcc193dafa8ae8efdebfee87d7344bf67f159ab0",
      "parents": [
        "8a17bff719ee0e59353fb376215186a5356b4db1",
        "4db80928643072a95f17b71153a0f0e69cdb9d08"
      ],
      "author": {
        "name": "David Ostrovsky",
        "email": "david.ostrovsky@gmail.com",
        "time": "Wed Aug 19 10:06:28 2026 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Aug 19 10:06:28 2026 -0700"
      },
      "message": "Merge \"Fix ReferenceEquality Error Prone errors\""
    },
    {
      "commit": "8a17bff719ee0e59353fb376215186a5356b4db1",
      "tree": "b44f2476e9479e1d8f982b0dd1ce6189d53b0ec2",
      "parents": [
        "67c7844b7f7f228229c037cf297296874f50692c"
      ],
      "author": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Sun Aug 16 13:46:57 2026 +0200"
      },
      "committer": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Mon Aug 17 21:12:00 2026 -0700"
      },
      "message": "Avoid NullArgumentForNonNullParameter false positive via javac flag\n\nrules_java 9.8.0\u0027s newer Error Prone flags idiomatic Guava calls\n(Iterables.getFirst(x, null); ToStringHelper.add(name, nullable) under\nomitNullValues) as NullArgumentForNonNullParameter. This is a false\npositive rooted in OpenJDK JDK-8225377: before JDK 22, javac does not\nattach type-use annotations loaded from classpath class files to their\nsymbols, so Error Prone cannot see Guava\u0027s @ParametricNullness /\nJSpecify @Nullable and treats the parameter as non-null. It reproduces\non the JDK 21 this repo targets (including the bundled 21.0.12) but not\non JDK 22+.\n\nSee this issue for more details:\nhttps://github.com/bazelbuild/bazel/issues/30743\n\nA TODO tracks removing the javacopt once JavaBuilder passes it upstream.\n\nChange-Id: I3fce51b27ada2a440b55ccb94b2d2e40ffff57c0\n"
    },
    {
      "commit": "67c7844b7f7f228229c037cf297296874f50692c",
      "tree": "b33cae9060d6acec6135350920d8fce21aa7a7b1",
      "parents": [
        "cbc954b18ae5a4677ee925688a3eb5dfb59012f3"
      ],
      "author": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Sun Aug 16 13:46:57 2026 +0200"
      },
      "committer": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Mon Aug 17 21:11:31 2026 -0700"
      },
      "message": "Fix JdkObsolete Error Prone errors by using Charset overloads\n\nThe newer Error Prone shipped with rules_java 9.8.0 reports\nJdkObsolete for the String-charset-name JDK APIs. Switch to the\nCharset overloads (URLEncoder/URLDecoder, new String,\nOutputStreamWriter, ByteArrayOutputStream.toString). Where the\ncharset is a StandardCharsets constant, .name()/the literal is\nreplaced by the constant; where it is dynamic, Charset.forName(...)\nis used. Now-dead UnsupportedEncodingException try/catch blocks and\nimports are removed.\n\nChange-Id: Ie4e8025bb463da9ebe80fe70af75bf4fdc9a9c4b\n"
    },
    {
      "commit": "4db80928643072a95f17b71153a0f0e69cdb9d08",
      "tree": "905f1d7bfdb9a272be50d169e25d5f023c4312cf",
      "parents": [
        "cbc954b18ae5a4677ee925688a3eb5dfb59012f3"
      ],
      "author": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Sun Aug 16 13:46:56 2026 +0200"
      },
      "committer": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Sun Aug 16 22:47:14 2026 +0200"
      },
      "message": "Fix ReferenceEquality Error Prone errors\n\nThe newer Error Prone shipped with rules_java 9.8.0 flags several\nreference-equality comparisons. Fix them following the conventions\nalready used in this codebase, keeping the check at ERROR:\n\n  - JGit FileMode comparisons use value equality (FileMode.X.equals),\n    matching PathServlet/ReadmeHelper: ArchiveServlet, PathServlet,\n    ImageLoader.\n  - commonmark AST nodes are intentionally compared by identity, so\n    suppress the check on those methods (as Revision already does):\n    MarkdownToHtml, NamedAnchorExtension, SmartQuotedExtension.\n\nChange-Id: Ie852ea8484717501e6b8302c71588a2bb45a230b\n"
    },
    {
      "commit": "cbc954b18ae5a4677ee925688a3eb5dfb59012f3",
      "tree": "85f52bdb669a82617492e0d4ad1a2b3a1dcffd6c",
      "parents": [
        "acd743facc8e9520173804d2a4ec93382fdc628f",
        "2151f53d2091f62c2e5544f36dcebebc139b9f5e"
      ],
      "author": {
        "name": "Nasser Grainawi",
        "email": "nasser.grainawi@oss.qualcomm.com",
        "time": "Wed Jul 29 10:08:15 2026 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jul 29 10:08:15 2026 -0700"
      },
      "message": "Merge \"Cache sorted ref lists in CommitData.getRefsById\""
    },
    {
      "commit": "acd743facc8e9520173804d2a4ec93382fdc628f",
      "tree": "d38ec78663e0cc5da66122334bccdf7070efe921",
      "parents": [
        "f2bd57f33548e0878d3eb4dcfde3e853871666e6",
        "e4dcf3a240d76c85134dee06e593e2fdc1c280b6"
      ],
      "author": {
        "name": "Nasser Grainawi",
        "email": "nasser.grainawi@oss.qualcomm.com",
        "time": "Tue Jul 28 14:21:04 2026 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Jul 28 14:21:04 2026 -0700"
      },
      "message": "Merge \"Add markdown.frontmatter option to strip YAML front matter\""
    },
    {
      "commit": "2151f53d2091f62c2e5544f36dcebebc139b9f5e",
      "tree": "658ed72839cb3033e665095d3af54f7025d25807",
      "parents": [
        "e7402f5c7ea414b3d86df68e26aaf85ed2083908"
      ],
      "author": {
        "name": "Ajay Gupta",
        "email": "ajagup@qti.qualcomm.com",
        "time": "Wed Jul 22 19:48:46 2026 +0530"
      },
      "committer": {
        "name": "Ajay Gupta",
        "email": "ajagup@qti.qualcomm.com",
        "time": "Thu Jul 23 07:36:16 2026 +0530"
      },
      "message": "Cache sorted ref lists in CommitData.getRefsById\n\ngetRefsById re-sorted the refs pointing at a commit on every call,\neven though the per-prefix index it looks them up in is built once\nand never changes afterward. Sort each id\u0027s refs when the index is\nbuilt instead, so repeated lookups for the same prefix reuse the\nalready-sorted list rather than re-sorting on every commit rendered.\n\nChange-Id: I8027c900e97f471dd6ba91b6b1b2ceeaca0afb2b\n"
    },
    {
      "commit": "f2bd57f33548e0878d3eb4dcfde3e853871666e6",
      "tree": "0041163bb6dcae60c4fe6b2e20f2159e64701c1b",
      "parents": [
        "bcbf5b005af0c682b2e5f393324569dd2b3843ab",
        "e7402f5c7ea414b3d86df68e26aaf85ed2083908"
      ],
      "author": {
        "name": "Nasser Grainawi",
        "email": "nasser.grainawi@oss.qualcomm.com",
        "time": "Wed Jul 22 08:00:33 2026 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jul 22 08:00:33 2026 -0700"
      },
      "message": "Merge \"Avoid scanning every ref to render the commit log\""
    },
    {
      "commit": "e4dcf3a240d76c85134dee06e593e2fdc1c280b6",
      "tree": "6630398f48bc544cdf53e2d994180970eec1ba08",
      "parents": [
        "bcbf5b005af0c682b2e5f393324569dd2b3843ab"
      ],
      "author": {
        "name": "Alexander Daryin",
        "email": "shurick@google.com",
        "time": "Tue Jul 21 22:37:13 2026 +0000"
      },
      "committer": {
        "name": "Alexander Daryin",
        "email": "shurick@google.com",
        "time": "Tue Jul 21 22:37:13 2026 +0000"
      },
      "message": "Add markdown.frontmatter option to strip YAML front matter\n\nMarkdown files authored for static site generators (Jekyll, Hugo, etc.)\noften begin with a YAML front matter block delimited by \"---\" lines.\nGitiles has no front matter support, so CommonMark parses the block as\nordinary content: the closing \"---\" turns the metadata into a setext\n\u003ch2\u003e, rendering an ugly heading of raw \"key: value\" pairs at the top of\nthe page.\n\nAdd an opt-in \"markdown.frontmatter\" option (default false, consistent\nwith the other non-GitHub-flavor extensions). When enabled,\nGitilesMarkdown installs commonmark-ext-yaml-front-matter so the leading\nblock is parsed into a YamlFrontMatterBlock, and MarkdownToHtml omits\nthat block from the rendered output instead of throwing on the unknown\nCustomBlock.\n\nDocumented in Documentation/{config,markdown}.md and covered by\nGitilesMarkdownTest.\n\nChange-Id: I2ace7227728e964d2e73d5149a06f2d9a884f0c8\n"
    },
    {
      "commit": "e7402f5c7ea414b3d86df68e26aaf85ed2083908",
      "tree": "3c4d068c817206aa84de3bab9f5eb7e7456cd5f8",
      "parents": [
        "a1a207b53f52a567c6f27f52013303420c344189"
      ],
      "author": {
        "name": "Ajay Gupta",
        "email": "ajagup@qti.qualcomm.com",
        "time": "Fri Jul 03 10:45:17 2026 +0530"
      },
      "committer": {
        "name": "Ajay Gupta",
        "email": "ajagup@qti.qualcomm.com",
        "time": "Fri Jul 03 10:45:17 2026 +0530"
      },
      "message": "Avoid scanning every ref to render the commit log\n\nThe commit log page shows, next to each commit, the branches and tags\nthat point at it. Computing those labels loaded and peeled every\nreference in the repository on each page load. On repositories with very\nlarge reference counts, such as those backing a code review system where\nevery change adds several references, this work dominated the request\nand pushed memory use into the gigabytes and response times past a\nminute.\n\nOnly branches and tags are ever displayed, so the lookup now examines\njust those two namespaces rather than the whole set of references, which\nis far smaller and does not grow with review activity. A reference that\ncannot be resolved is skipped instead of failing the entire page,\npreserving the previous tolerance for damaged repositories.\n\nChange-Id: I4673f8821542b8ddb642257b20dc997c4e9ff6a7\n"
    },
    {
      "commit": "bcbf5b005af0c682b2e5f393324569dd2b3843ab",
      "tree": "b4d4006b5be370eaa1e8cd9842a3c945e46588a9",
      "parents": [
        "a1a207b53f52a567c6f27f52013303420c344189"
      ],
      "author": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Fri Jun 26 11:30:42 2026 +0200"
      },
      "committer": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Tue Jun 30 15:18:49 2026 +0200"
      },
      "message": "Bazel: Move Gitiles off JGit servlet-4 via EE8 bridge\n\nJGit master uses jakarta.servlet in servlet-facing modules while Gitiles\nstill runs on Jetty 12 EE8 and javax.servlet. Maintaining a Gitiles-only\nservlet-4 JGit branch is not sustainable; switch Gitiles to consume the\nJGit-owned EE8 servlet bridge so modules/jgit can advance to master.\n\nRewire //lib:jgit-servlet to export\n@jgit//org.eclipse.jgit.http.server.ee8:jgit-servlet-ee8. The generated\nEE8 jar keeps the original JGit Java packages and rewrites only servlet\nimports from jakarta.servlet to javax.servlet, so Gitiles code keeps its\nexisting imports. Gitiles already builds on Jetty EE8 and\njavax.servlet-api 4.0.1, so only the jgit-servlet dependency changes.\n\nBump the modules/jgit gitlink off the servlet-4 branch to the JGit\nmaster commit that provides the EE8 bridge targets (the same commit the\nGerrit companion pins). Re-pin external_deps.lock.json for the resulting\njgit-master dependency set.\n\nChange-Id: I9b9006e51f701c2c0db43178ae82e4691ec8eb68\n"
    },
    {
      "commit": "a1a207b53f52a567c6f27f52013303420c344189",
      "tree": "26d5ed5d6674b241955c514df8b0bda728206d95",
      "parents": [
        "d084706359ec66a6c775798633b924370b013e24"
      ],
      "author": {
        "name": "Matthias Sohn",
        "email": "matthias.sohn@sap.com",
        "time": "Wed Jun 24 09:41:13 2026 +0200"
      },
      "committer": {
        "name": "Matthias Sohn",
        "email": "matthias.sohn@sap.com",
        "time": "Wed Jun 24 09:41:13 2026 +0200"
      },
      "message": "Update JGit to c89601f\n\nand repin dependencies.\n\n$ git log --oneline --no-merges c46df0c..c89601f\n0c4bb4039 Update jna to 5.19.1\nb05364919 DfsObjDatabase: expose method to translate descriptions to PackList\n476c6a5c7 Checkout: Reduce temp filename truncation from 200 to 50 chars\n1c6d8987c Update jetty to 12.1.10\n60880a27d Update apache mina-sshd to 2.18.0\n5a995932e Update jna to 5.19.0\n4d9cc4caa Update bytebuddy to 1.18.10\n2972195ae Prepare 7.8.0-SNAPSHOT builds\n11b7c3500 Prepare 7.7.1-SNAPSHOT builds\ne15d6597f JGit v7.7.0.202606012155-r\na14a4be39 Log loose ref deletion during ref cleanup\n\nChange-Id: I689d14d980c7b282ec70c420be91143e26d2d9fc\n"
    },
    {
      "commit": "d084706359ec66a6c775798633b924370b013e24",
      "tree": "05cf925eb0b74629b6acd5d9b91d5d054944f1a7",
      "parents": [
        "e1ace85515ef8b6651a724e478c4bd2347e44fba"
      ],
      "author": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Wed Jun 03 06:13:43 2026 +0200"
      },
      "committer": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Fri Jun 12 07:40:41 2026 -0700"
      },
      "message": "Bump Jetty to 12.1.10 (preserve javax.servlet via jetty-ee8 adapter)\n\nFollow the same pattern as in the gerrit repository Id82de0bc91: upgrade\nthe embedded Jetty in the gitiles dev server to Jetty 12 while keeping\ngitiles on javax.servlet 4.0.1 via the jetty-ee8-* adapter modules.\n\nDependency changes mirror gerrit\u0027s:\n\n* tools/java_deps.MODULE.bazel: JETTY_VERSION 9.4.57.v20241219 -\u003e\n  12.1.10. Replace jetty-servlet with jetty-ee8-{nested,security,\n  servlet}. Add jetty-session (standalone module in Jetty 12).\n  Drop jetty-continuation (deprecated since Jetty 9, removed in\n  Jetty 10+).\n\n* lib/jetty/BUILD: expose new :nested target; :servlet exports\n  jetty-ee8-servlet + runtime_deps :nested; :security exports both\n  jetty-ee8-security and jetty-security; :server pulls in :session.\n\nDevServer.java migration to the Jetty 12 ee8 API:\n\n* org.eclipse.jetty.servlet.{ServletContextHandler,ServletHolder}\n  -\u003e org.eclipse.jetty.ee8.servlet.{...}.\n* The ee8 ServletContextHandler implements Supplier\u003ccore Handler\u003e;\n  appHandler() returns handler.get() so ContextHandlerCollection\n  receives the core Handler.\n* Jetty 12 replaced PathResource/URL-based ResourceHandler config\n  with ResourceFactory. setBaseResource takes a Resource produced\n  by ResourceFactory.root().newResource(Path). setDirectoriesListed\n  was renamed to setDirAllowed.\n\nA full Jakarta EE migration (jakarta.servlet, jetty-ee10 adapter)\nremains possible as separate follow-up work, matching gerrit\u0027s\ndeferral.\n\nBug: Issue 359909531\nChange-Id: I430d21d4191d69595f73041cd4ea7aa40b3c864d\n"
    },
    {
      "commit": "e1ace85515ef8b6651a724e478c4bd2347e44fba",
      "tree": "2cc15c597c6c72af178b0c54618f51b2d99ed60e",
      "parents": [
        "77214a27c8e599ad5683f037ebd85e2f1c9bd36c"
      ],
      "author": {
        "name": "Matthias Sohn",
        "email": "matthias.sohn@sap.com",
        "time": "Fri Jun 12 15:59:36 2026 +0200"
      },
      "committer": {
        "name": "Matthias Sohn",
        "email": "matthias.sohn@sap.com",
        "time": "Fri Jun 12 16:32:44 2026 +0200"
      },
      "message": "Update JGit to c46df0c50 and update MODULE.bazel.lock\n\nI854cc58ad6129a053fd98073ad04af99317bf8ce updated JGit to\neeba63ed4ebfe817628da5a221305b0c72af7b04 which doesn\u0027t exist neither\nin https://eclipse.gerrithub.io/eclipse-jgit/jgit\nnor in https://gerrit.googlesource.com/jgit.\n\nFix this by updating JGit to the current servlet-4 branch and update\nthe bazel lock file.\n\nIn addition add /modules/jgit/ to .bazelignore to prevent that\n`bazel test //...`\ntries to run jgit tests in the jgit submodule.\n\nChange-Id: Iaccbec4c901ee20e5e7d64186f5791b83dcd58c9\n"
    },
    {
      "commit": "77214a27c8e599ad5683f037ebd85e2f1c9bd36c",
      "tree": "73ba9f7c8a8ade2d04a97819b8e44693b393c164",
      "parents": [
        "4fdf6125211909c432887ea47e1e8ada37167953"
      ],
      "author": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Sat May 30 07:41:23 2026 +0200"
      },
      "committer": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Mon Jun 01 15:13:28 2026 +0200"
      },
      "message": "Bazel: Bump to 9.1.0\n\nUpgrade Bazel to 9.1.0 and refresh Bazel module dependencies to\nversions that are compatible with Bazel 9.\n\nThis requires a few migration adjustments:\n\n* pin aspect_bazel_lib 2.22.5 and rules_nodejs 6.7.4 at the root;\n  older versions (2.11.0 / 6.2.0) were resolved transitively via\n  the bazlets / aspect_rules_rollup deps, and their toolchain\n  definitions still pass the incompatible_use_toolchain_transition\n  keyword to rule(), which was removed in Bazel 9\n* bump rules_java 8.16.1 -\u003e 9.3.0 and rules_python 2.0.0-rc4 -\u003e 2.0.2\n* bump the java-prettify submodule to a revision that loads\n  java_library / java_binary from @rules_java//java:defs.bzl, since\n  rules_java 9 no longer injects them as native rules\n* regenerate MODULE.bazel.lock\n\nChange-Id: Ia72e44952d2f8aab09c85671ec44deffbf0369fd\n"
    },
    {
      "commit": "4fdf6125211909c432887ea47e1e8ada37167953",
      "tree": "641330b09ff37a11af115e5c1b4633b6e78cfdd3",
      "parents": [
        "60e7e35c7c8ee042d41b5889e7eb18dc7cead694"
      ],
      "author": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Fri May 29 18:45:39 2026 +0200"
      },
      "committer": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Mon Jun 01 15:13:15 2026 +0200"
      },
      "message": "Migrate to Bazel modules\n\nMirror the structure used in Gerrit: split MODULE.bazel into\ninclude() fragments under tools/ for bazlets, repos, and Java deps,\nand consume jgit as an in-tree bazel_dep via local_path_override.\n\nAll maven_jar declarations are replaced by a single RJE\nmaven.install in tools/java_deps.MODULE.bazel publishing the shared\n\"external_deps\" repository, consistent with Gerrit and JGit.\n\nThe modules/jgit submodule is bumped to a servlet-4 commit that\nships a proper MODULE.bazel so jgit can be consumed as a Bazel\nmodule.\n\nForce Gitiles\u0027 root-selected Maven versions for artifacts that may\nalso be contributed by JGit, keeping the shared Maven graph consistent\nunder Bzlmod.\n\nBazel version is bumped to 8.6.0 and rules_java is pinned to 8.16.1.\n\nJava version is updated to Java 21 by default, and the obsolete\nJava 17 Error Prone toolchain registration and definition are removed.\n\nBug: Issue 303819949\nChange-Id: I854cc58ad6129a053fd98073ad04af99317bf8ce\n"
    },
    {
      "commit": "60e7e35c7c8ee042d41b5889e7eb18dc7cead694",
      "tree": "98f4168c558ef0e848aca51ee0fbde0aa0d15bae",
      "parents": [
        "6d2033603424fcaad1a7b12e8abd3a67bde51758"
      ],
      "author": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Wed Mar 18 12:04:15 2026 +0100"
      },
      "committer": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Fri May 29 18:12:52 2026 +0200"
      },
      "message": "Update protobuf-java to 4.33.4 to match Gerrit\n\nChange-Id: Ifd8d7d3ef3d7cb3b114bd447a561629f738ac49d\n"
    },
    {
      "commit": "6d2033603424fcaad1a7b12e8abd3a67bde51758",
      "tree": "763ef0036b6e39d83a029f67e6ed738387f4db6c",
      "parents": [
        "44f4d076132452bd5ad79862062ec69b85690fb8"
      ],
      "author": {
        "name": "Sven Selberg",
        "email": "sven.selberg@axis.com",
        "time": "Mon May 25 01:33:52 2026 -0700"
      },
      "committer": {
        "name": "Sven Selberg",
        "email": "sven.selberg@axis.com",
        "time": "Mon May 25 01:34:57 2026 -0700"
      },
      "message": "docs: Correct header level for log/limiting parameters\n\nChange-Id: Ibfeb4736ab5379fed38ca6f6799e3d8bd8bfbea4\n"
    },
    {
      "commit": "44f4d076132452bd5ad79862062ec69b85690fb8",
      "tree": "12d11c5f5346863271725ac113eff264e3714760",
      "parents": [
        "c4d9bd990a00bf097239409e618a61327c8776d1"
      ],
      "author": {
        "name": "Sven Selberg",
        "email": "svense@axis.com",
        "time": "Fri May 22 08:58:56 2026 +0200"
      },
      "committer": {
        "name": "Sven Selberg",
        "email": "svense@axis.com",
        "time": "Fri May 22 08:58:56 2026 +0200"
      },
      "message": "chore: Fix typo INCORECT_PARAMETER -\u003e INCORRECT_PARAMETER\n\nChange-Id: Ib740dd03d225befb9735b248c28c9f92bd012bd9\n"
    },
    {
      "commit": "c4d9bd990a00bf097239409e618a61327c8776d1",
      "tree": "9a1100448d8518b030373be94b1f3bc0872dcdb5",
      "parents": [
        "7a34d138a61916f3c0e1ed540b2a4f7c8eb35375"
      ],
      "author": {
        "name": "Sven Selberg",
        "email": "sven.selberg@axis.com",
        "time": "Mon May 18 23:15:58 2026 -0700"
      },
      "committer": {
        "name": "Sven Selberg",
        "email": "svense@axis.com",
        "time": "Tue May 19 09:47:06 2026 +0200"
      },
      "message": "docs: Document author and committer log parameters\n\nFormat the +log api documentation to make it more readable.\n\nIssue: 376381593\nChange-Id: Ia96889d6a16fc88eb27758b4e4915890cf6e9adb\n"
    },
    {
      "commit": "7a34d138a61916f3c0e1ed540b2a4f7c8eb35375",
      "tree": "3df1163bb7d4e1e66703ce61fa3202e30a1489ff",
      "parents": [
        "9df3a168e43bcb41015c16873c095ee7f9907542"
      ],
      "author": {
        "name": "Devansh Varshney",
        "email": "devansh@libreoffice.org",
        "time": "Fri May 15 00:46:48 2026 +0530"
      },
      "committer": {
        "name": "Devansh Varshney",
        "email": "devansh@libreoffice.org",
        "time": "Tue May 19 13:02:33 2026 +0530"
      },
      "message": "LogServlet: support grep for log messages\n\nAdd a `grep` query parameter to the log servlet. This lets Gitiles filter\nlog results by commit message using JGit\u0027s message filter.\n\nThe new filter is combined with the existing log filters, so it can be\nused together with author or committer filtering.\n\nAdd coverage that log grep stays in the log page navigation URD.\n\nIssue: 376381593\nChange-Id: Ib1ad5fe6cfdb29ce3528aedad983126d1f7590ed\n"
    },
    {
      "commit": "9df3a168e43bcb41015c16873c095ee7f9907542",
      "tree": "daaca0bec75bd1a7f8eec38f97dcfa902fe78bfe",
      "parents": [
        "1ffd4a1f72a4ba13f2e3a3c544c1428caaa2e330"
      ],
      "author": {
        "name": "Devansh Varshney",
        "email": "devansh@libreoffice.org",
        "time": "Thu May 14 00:02:15 2026 +0530"
      },
      "committer": {
        "name": "Devansh Varshney",
        "email": "devansh@libreoffice.org",
        "time": "Thu May 14 00:02:15 2026 +0530"
      },
      "message": "LogServletTest: cover author and committer log filters\n\nGitiles already supports filtering the log by author and committer\nthrough query parameters.\n\nAdd servlet coverage for this existing behavior before building more\nlog search support on top of it.\n\nIssue: 376381593\nChange-Id: I83aec3e5066c0591e49641228d69c285401382a4\n"
    },
    {
      "commit": "1ffd4a1f72a4ba13f2e3a3c544c1428caaa2e330",
      "tree": "afae0143659f5371cb3f2e00b3f590d3401dfbc0",
      "parents": [
        "d113c2721180bc0fe0da07950a4326e7bc4f5c3a"
      ],
      "author": {
        "name": "Jackson Toeniskoetter",
        "email": "jackdt@google.com",
        "time": "Tue Mar 31 14:40:08 2026 -0700"
      },
      "committer": {
        "name": "Jackson Toeniskoetter",
        "email": "jackdt@google.com",
        "time": "Wed Apr 01 15:37:38 2026 -0700"
      },
      "message": "In ViewFilter, if a revision cannot be found then throw an exception\ninstead of returning null.\n\nChange-Id: I9c00409c67688d319f6c440afa4ad73fb5ecb7a9\n"
    },
    {
      "commit": "d113c2721180bc0fe0da07950a4326e7bc4f5c3a",
      "tree": "4c05a3793819e47e4f109e29c8b75cd4d98f67b2",
      "parents": [
        "585d37dae3dab933127c7f1d67acb49d7181bb77",
        "b560a15ef9113934d66377e16de8beb95cbeb0b4"
      ],
      "author": {
        "name": "Terry Parker",
        "email": "tparker@google.com",
        "time": "Mon Feb 23 16:20:19 2026 -0800"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Feb 23 16:20:19 2026 -0800"
      },
      "message": "Merge \"Add missing commons-io dependency in BUILD file\""
    },
    {
      "commit": "b560a15ef9113934d66377e16de8beb95cbeb0b4",
      "tree": "d1eac13d0b5892e52e83c94a100ea7306f776b90",
      "parents": [
        "e8b6a00f55823e5a328e4ba2c7e51f048188a292"
      ],
      "author": {
        "name": "Terry Parker",
        "email": "tparker@google.com",
        "time": "Fri Feb 20 19:02:42 2026 -0800"
      },
      "committer": {
        "name": "Terry Parker",
        "email": "tparker@google.com",
        "time": "Mon Feb 23 16:05:57 2026 -0800"
      },
      "message": "Add missing commons-io dependency in BUILD file\n\nAdding //lib:commons-io to DEPS in java/com/google/gitiles/BUILD ensures\nthat archive generation (used by ArchiveServlet) has the required\nCountingOutputStream class available at runtime.\n\nThis fixes the NoClassDefFoundError occurring when using tgz links.\n\nChange-Id: Id7551f10385e01f6f9db6a73d1f5f877fd55c281\n"
    },
    {
      "commit": "585d37dae3dab933127c7f1d67acb49d7181bb77",
      "tree": "6eb016f7a7bf6ab74041dcc0fe522a26d30243c8",
      "parents": [
        "e8b6a00f55823e5a328e4ba2c7e51f048188a292"
      ],
      "author": {
        "name": "Nitzan Gur-Furman",
        "email": "nitzan@google.com",
        "time": "Sun Feb 22 23:32:21 2026 -0800"
      },
      "committer": {
        "name": "Nitzan Gur-Furman",
        "email": "nitzan@google.com",
        "time": "Sun Feb 22 23:32:21 2026 -0800"
      },
      "message": "Add @RunWith(JUnit4.class) to ArchiveServletTest.\n\nChange-Id: Ia2440b53ffe9cee645246dbc04ee31e64f1f2190"
    },
    {
      "commit": "e8b6a00f55823e5a328e4ba2c7e51f048188a292",
      "tree": "e96cadcac94a2c83a93c5ec7e4c58033b2556cef",
      "parents": [
        "080b31ca6b34b044d92697cad9b696c1cf43f1d8"
      ],
      "author": {
        "name": "Terry Parker",
        "email": "tparker@google.com",
        "time": "Fri Feb 20 18:33:41 2026 -0800"
      },
      "committer": {
        "name": "Terry Parker",
        "email": "tparker@google.com",
        "time": "Fri Feb 20 18:51:38 2026 -0800"
      },
      "message": "Fix 080b31c for updated protobuf dep and alpha ordering\n\n080b31c updated Gitiles dependencies but got merged too early\n\nThis change does the following:\n* Reports that diffutils moved from\ncom.googlecode.java-diff-utils:diffutils to\nio.github.java-diff-utils:java-diff-utils\n* Updates protobuf from 3.25.5 to 4.33.2\n* Alphabetizes the new common-io dependency\n\nChange-Id: I79c5ea1ee2081eba77cbfce9cd7762709666453e\n"
    },
    {
      "commit": "080b31ca6b34b044d92697cad9b696c1cf43f1d8",
      "tree": "1800c0e7bf718a7e6e10fe7b754e6521d6111e43",
      "parents": [
        "279e12103575b1c08223a8feacb1e62349a9b71f"
      ],
      "author": {
        "name": "Terry Parker",
        "email": "tparker@google.com",
        "time": "Fri Feb 13 16:28:39 2026 -0800"
      },
      "committer": {
        "name": "Terry Parker",
        "email": "tparker@google.com",
        "time": "Fri Feb 20 10:54:47 2026 -0800"
      },
      "message": "Update Gitiles dependencies\n\nThis area was overdue for attention, there are many bugs filed\nabout out-of-date Gitiles dependencies.\n\nGoogle uses its internal build system to build Gitiles, and we\nexperience friction in updating internally, since we need to update\nnot just Gitiles, but all internal uses of that dependency. With\nAI assistance I updated WORKSPACE library versions to match the\nones Google is using, if Google is using a newer version.\n\nAll of these updates involve stable APIs, no source file updates\nwere required.\n\nUpdating commons-compress added a new dependency on commons-io,\nso added that (thanks to David for finding that, Diffy for the\nwin!)\n\nTesting was to run `bazel test //...`, run the `tools/run.dev`\nscript and test localhost, and run `tools/maven/mvn.sh install`.\n\nI compared these updated versions with the versions in the JGit\nand Gerrit projects. All permutations are now there--Gitiles uses\na more recent version than the other two, JGit does, and Gerrit\ndoes. I can run the same update on JGit and Gerrit once this\nchange is in.\n\n+------------------------+-------------------+--------------------+\n| Library                | Old Version       | New Version        |\n+------------------------+-------------------+--------------------+\n| ASM (OW2)              | 9.2               | 9.9.1              |\n| Autolink               | 0.10.0            | 0.11.0             |\n| Byte Buddy             | 1.14.9            | 1.18.2             |\n| Commonmark             | 0.21.0            | 0.24.0             |\n| Commons Codec          | 1.16.0            | 1.18.0             |\n| Commons Compress       | 1.25.0            | 1.28.0             |\n| Commons IO             | \u003cnone\u003e            | 2.21.0             |\n| Commons Lang3          | 3.8.1             | 3.18.0             |\n| Commons Text           | 1.2               | 1.10.0             |\n| Diffutils              | 1.3.0             | 4.16               |\n| Error Prone Annot.     | 2.22.0            | 2.46.0             |\n| Gson                   | 2.10.1            | 2.13.2             |\n| Guava                  | 32.1.2-jre        | 33.5.0-jre         |\n| Guava Failureaccess    | 1.0.1             | 1.0.3              |\n| Hamcrest               | 2.2               | 3.0                |\n| ICU4J                  | 74.2              | 78.2               |\n| Jetty                  | 9.4.53.v20231009  | 9.4.57.v20241219   |\n| Junit                  | 4.12              | 4.13.2             |\n| Mockito                | 5.6.0             | 5.21.0             |\n| Objenesis              | 2.6               | 3.0.1              |\n| Protobuf               | 3.19.4            | 3.25.5             |\n| SLF4J                  | 1.7.36            | 2.0.17             |\n| Servlet API            | 3.1.0             | 4.0.1              |\n| Truth                  | 1.1               | 1.4.4              |\n| XZ                     | 1.9               | 1.11               |\n+------------------------+-------------------+--------------------+\n\nRelease-Notes: Stabilize WORKSPACE dependencies and fix checksums.\nChange-Id: Ic7dc1c8e96e8c1b26c80d259fb0b194ae4fc41f8\n"
    },
    {
      "commit": "279e12103575b1c08223a8feacb1e62349a9b71f",
      "tree": "c7ea6368ef04e04fed504b3900ad86a7fb86c8f7",
      "parents": [
        "f8b815b8b8e74136d0c1b45ae90bd4f66ba5916f",
        "6a98ba594edd03b030e70efa50097c00ea81d202"
      ],
      "author": {
        "name": "Terry Parker",
        "email": "tparker@google.com",
        "time": "Fri Feb 20 08:00:30 2026 -0800"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Feb 20 08:00:30 2026 -0800"
      },
      "message": "Merge \"Update Gitiles bazel version to 7.6.1 (matches JGit \u0026 Gerrit)\""
    },
    {
      "commit": "f8b815b8b8e74136d0c1b45ae90bd4f66ba5916f",
      "tree": "07121dd413ae2c99e870e4af5dc6756864f235bb",
      "parents": [
        "9b6c331d6f24db2d0faae016f801effb39a2de2f"
      ],
      "author": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Fri Feb 20 07:50:54 2026 +0100"
      },
      "committer": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Fri Feb 20 08:08:46 2026 +0100"
      },
      "message": "Add archive servlet integration test\n\nIn change Ic7dc1c8e96e an update of commons-compress from 1.25.0 to\n1.28.0 was attempted as part of a broader WORKSPACE dependency refresh.\n\ncommons-compress 1.28.0 introduces a runtime dependency on\ncommons-io (via org.apache.commons.io.output.CountingOutputStream),\nwhich is used by JGit\u0027s archive implementation\n(org.eclipse.jgit.archive.TarFormat / TgzFormat) when writing\ntar/tgz archives.\n\nGitiles\u0027 Bazel configuration does not automatically pull in Maven\ntransitive dependencies, so commons-io must be declared explicitly.\nThe attempted upgrade initially omitted this dependency, which would\nhave caused runtime failures when serving archive downloads, e.g.:\n\n  /\u003crepo\u003e/+archive/refs/heads/\u003cref\u003e.tar.gz\n\nresulting in:\n\n  java.lang.NoClassDefFoundError:\n    org/apache/commons/io/output/CountingOutputStream\n\nThis issue was identified during code review and corrected before\nsubmission, but the existing test suite did not exercise the archive\nservlet code path and therefore did not detect the breakage.\n\nAdd a servlet-level integration test for the archive endpoint that:\n\n* creates a small in-memory test repository\n* requests a .tar.gz archive via GitilesServlet\n* verifies HTTP 200 response\n* verifies response body is non-empty\n\nThis test executes ArchiveCommand.call() end-to-end and will fail\nwith NoClassDefFoundError if commons-io is missing from the runtime\nclasspath, preventing similar dependency regressions in future\ndependency updates.\n\nChange-Id: Ia9266aa6a6ca63b119e2216d8376ce0382ae6e44\n"
    },
    {
      "commit": "6a98ba594edd03b030e70efa50097c00ea81d202",
      "tree": "9e1838c066b45fe5afd06ac3988c8d858b415a59",
      "parents": [
        "9b6c331d6f24db2d0faae016f801effb39a2de2f"
      ],
      "author": {
        "name": "Terry Parker",
        "email": "tparker@google.com",
        "time": "Fri Feb 13 15:36:44 2026 -0800"
      },
      "committer": {
        "name": "Terry Parker",
        "email": "tparker@google.com",
        "time": "Fri Feb 13 15:42:35 2026 -0800"
      },
      "message": "Update Gitiles bazel version to 7.6.1 (matches JGit \u0026 Gerrit)\n\nAlso fix bazel\u0027s jdk tool registrations to match JGit \u0026 Gerrit.\n\nChange-Id: Iec03b7e28a8d20f49f27eb399c855cf4ffda7245\n"
    },
    {
      "commit": "9b6c331d6f24db2d0faae016f801effb39a2de2f",
      "tree": "1bdfbd91b35b9b17b69498a85c239fa2a5ca47fd",
      "parents": [
        "dd5fd429d1362bfc119c8bbd56235ff79c5662fd",
        "7fc3f09cab178489f80629a0c7940bb217fe7dc2"
      ],
      "author": {
        "name": "Theodore Dubois",
        "email": "tbodt@google.com",
        "time": "Wed Jan 28 14:49:35 2026 -0800"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jan 28 14:49:35 2026 -0800"
      },
      "message": "Merge \"Make copy/pasting breadcrumbs produce valid file paths\""
    },
    {
      "commit": "7fc3f09cab178489f80629a0c7940bb217fe7dc2",
      "tree": "62a14d36153553e3888574e373568aba003d10a0",
      "parents": [
        "ff3f30bb02ae529910784caffa2499596af49997"
      ],
      "author": {
        "name": "Theodore Dubois",
        "email": "tbodt@google.com",
        "time": "Wed Jan 28 14:26:17 2026 -0800"
      },
      "committer": {
        "name": "Theodore Dubois",
        "email": "tbodt@google.com",
        "time": "Wed Jan 28 14:41:51 2026 -0800"
      },
      "message": "Make copy/pasting breadcrumbs produce valid file paths\n\nBug: 479282458\nChange-Id: Ice76ba569b6f2b224676a5ad861b10746a6a6964\n"
    },
    {
      "commit": "dd5fd429d1362bfc119c8bbd56235ff79c5662fd",
      "tree": "000b6204ff002884b024ab27b936172119f4d819",
      "parents": [
        "ff3f30bb02ae529910784caffa2499596af49997",
        "8c3d87d6123823de8e4f515538aa93ef37210cb1"
      ],
      "author": {
        "name": "Matthias Sohn",
        "email": "matthias.sohn@gmail.com",
        "time": "Wed Jan 28 13:34:47 2026 -0800"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jan 28 13:34:47 2026 -0800"
      },
      "message": "Merge changes I0f844eaa,Ife1777c0\n\n* changes:\n  Fix dev server configuration\n  Format source code using google-java-format 1.24.0\n"
    },
    {
      "commit": "8c3d87d6123823de8e4f515538aa93ef37210cb1",
      "tree": "5530e2be9bee831ddc4f6d288c9fbe6e0188e4ac",
      "parents": [
        "318b4a1d0f29f7a1e1dd5d25f242c12e2f4f1e6f"
      ],
      "author": {
        "name": "Matthias Sohn",
        "email": "matthias.sohn@sap.com",
        "time": "Wed Jan 28 11:09:47 2026 +0100"
      },
      "committer": {
        "name": "Matthias Sohn",
        "email": "matthias.sohn@sap.com",
        "time": "Wed Jan 28 11:24:58 2026 +0100"
      },
      "message": "Fix dev server configuration\n\nThe config option gitiles.basePath was overloaded in [1]\nwhich broke the default behavior of gitiles in dev mode. It used to scan\nthe path configured via gitiles.basePath to find git repositories.\n\nWith [1] it now sets the servlet context path for gitiles to the value\nof the same option which doesn\u0027t work since the dev mode by default sets\ngitiles.basePath to the current working directory which doesn\u0027t work\nas a servlet context path which results in gitiles returning\n\"404 Not Found\" instead of showing the list of repositories found under\nbasePath.\n\nFix this by renaming the option introduced in [1] to\ngitiles.contextPath and adapt the documentation accordingly.\n\n[1] I1da95745d1bc8eaa7d5b204a942bcee0b6a027a8\n\nChange-Id: I0f844eaaaadbfd21161e04b915b541a534bbb4a6\n"
    },
    {
      "commit": "318b4a1d0f29f7a1e1dd5d25f242c12e2f4f1e6f",
      "tree": "81ad2c0152f4f02227e7ab4a503390ae7686d7b0",
      "parents": [
        "fbbb2969d93aef88173e0f0f59b77bd8b9f3d49d"
      ],
      "author": {
        "name": "Matthias Sohn",
        "email": "matthias.sohn@sap.com",
        "time": "Wed Jan 28 11:19:27 2026 +0100"
      },
      "committer": {
        "name": "Matthias Sohn",
        "email": "matthias.sohn@sap.com",
        "time": "Wed Jan 28 11:19:27 2026 +0100"
      },
      "message": "Format source code using google-java-format 1.24.0\n\nFollow gerrit which updated to google-java-format 1.24.0 in\nI8607721e9e83519fa2bab415462ace5255032068.\n\nChange-Id: Ife1777c0fea0cd002422960aed481bc46a955fb0\n"
    },
    {
      "commit": "ff3f30bb02ae529910784caffa2499596af49997",
      "tree": "a15f3bcda4eea72477246b31c35801204a29847e",
      "parents": [
        "91f481a71e22fe1438b6acea17f01f5e2422b965",
        "1b8d8e325823ed13b1ac97c8b68a28c0aac121b5"
      ],
      "author": {
        "name": "Adrià Vilanova Martínez",
        "email": "me@avm99963.com",
        "time": "Tue Jan 27 15:22:14 2026 -0800"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Jan 27 15:22:14 2026 -0800"
      },
      "message": "Merge \"Make metadata tables responsive\""
    },
    {
      "commit": "91f481a71e22fe1438b6acea17f01f5e2422b965",
      "tree": "d9f77226bcc4f87e5f046f5d5198c9c92dcff67c",
      "parents": [
        "2b3e80a07b5bd873b00610cb9113544e22dedcb8",
        "bff35388f5507d076b401592f2ce195ee04f6c9f"
      ],
      "author": {
        "name": "Xing Huang",
        "email": "xingkhuang@google.com",
        "time": "Tue Jan 27 08:32:20 2026 -0800"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Jan 27 08:32:20 2026 -0800"
      },
      "message": "Merge \"LogServlet: Handle HEAD symref to non-existent branch\""
    },
    {
      "commit": "2b3e80a07b5bd873b00610cb9113544e22dedcb8",
      "tree": "c95062bd5910d2080430ce82511d43bbfadbe16b",
      "parents": [
        "fbbb2969d93aef88173e0f0f59b77bd8b9f3d49d"
      ],
      "author": {
        "name": "Adrià Vilanova Martínez",
        "email": "me@avm99963.com",
        "time": "Thu Jan 15 22:11:16 2026 +0100"
      },
      "committer": {
        "name": "Adrià Vilanova Martínez",
        "email": "me@avm99963.com",
        "time": "Tue Jan 27 05:02:53 2026 -0800"
      },
      "message": "Clarify development server URL\n\nSince commit b1b8c4a45d5feb5bd11798a7d8469f7af0f04405, the dev server\nuses by default a base path equal to the absolute path of the current\ndirectory.\n\nThis CL clarifies this in the developer guide.\n\nChange-Id: I3c609736008760fad5748244960d82ca7595a590\n"
    },
    {
      "commit": "1b8d8e325823ed13b1ac97c8b68a28c0aac121b5",
      "tree": "31fadd1557b8608087b31452f5ad9bac8215f44c",
      "parents": [
        "fbbb2969d93aef88173e0f0f59b77bd8b9f3d49d"
      ],
      "author": {
        "name": "Adrià Vilanova Martínez",
        "email": "me@avm99963.com",
        "time": "Mon Dec 27 23:58:01 2021 +0100"
      },
      "committer": {
        "name": "Adrià Vilanova Martínez",
        "email": "me@avm99963.com",
        "time": "Tue Jan 27 04:39:22 2026 -0800"
      },
      "message": "Make metadata tables responsive\n\nIn commit 9b8a1eb9ea3a6945c82411ef6742637f11b6056f we made Gitiles\nresponsive so that it looked better in small screens. However, metadata\ntables weren\u0027t made responsive due to some accessibility challenges.\n\nThis CL finishes the responsiveness refactor by also making metadata\ntables responsive. We achieve this by changing the HTML table with a\ndescription list styled with a grid layout and subgrids[1] that adapt to\nthe screen width.\n\nWe use description lists since they are more semantically accurate for\nkey-value metadata pairs than tables.[2]\n\nThe linked bug contains screenshots that show the change.\n\n[1]: Subgrids achieved the Baseline status in 2023:\n     https://web.dev/articles/css-subgrid.\n[2]: https://html.spec.whatwg.org/multipage/grouping-content.html#the-dl-element\n\nBug: https://github.com/google/gitiles/issues/235\nChange-Id: I83026d0fbe7df7601a07be5e6122cdbb2d27ec81\n"
    },
    {
      "commit": "bff35388f5507d076b401592f2ce195ee04f6c9f",
      "tree": "acb9de58e85d3c5b9880c3c20c1427abac50fd2c",
      "parents": [
        "fbbb2969d93aef88173e0f0f59b77bd8b9f3d49d"
      ],
      "author": {
        "name": "Xing Huang",
        "email": "xingkhuang@google.com",
        "time": "Mon Jan 26 15:08:03 2026 -0600"
      },
      "committer": {
        "name": "Xing Huang",
        "email": "xingkhuang@google.com",
        "time": "Mon Jan 26 15:43:39 2026 -0600"
      },
      "message": "LogServlet: Handle HEAD symref to non-existent branch\n\nThe ObjectId of a Ref can be null. If HEAD is a symbolic ref to a\nnon-existent branch, headRef.getObjectId() will return null. The\ncurrent LogServlet code does not handle this, causing\nNullPointerException in RevWalk.\n\nThis issue is particularly common when a repo is created but nothing is\npushed yet; so a HEAD symmetry is created to point to refs/heads/main by default but lacks a commit SHA.\n\nTreat a HEAD ref with a null ObjectId as if the ref itself were null,\nreturning no view instead of throwing an internal error.\n\nChange-Id: I4fe85010db0694403770923fcdf957854e72cd34\nSigned-off-by: Xing Huang \u003cxingkhuang@google.com\u003e\n"
    },
    {
      "commit": "fbbb2969d93aef88173e0f0f59b77bd8b9f3d49d",
      "tree": "af445b18475c09ccf0fbb49ad0e3127410de40c3",
      "parents": [
        "97d418e1895740a2ee10eb54e6279ee762aaaa35"
      ],
      "author": {
        "name": "liyang",
        "email": "leeyoung.li@outlook.com",
        "time": "Tue Oct 07 21:53:01 2025 +0800"
      },
      "committer": {
        "name": "liyang",
        "email": "leeyoung.li@outlook.com",
        "time": "Wed Oct 15 12:23:26 2025 +0800"
      },
      "message": "Fix package WAR missing failureaccess JAR\n\nwebserver ClassNotFoundException due to WAR missing failureaccess JAR\nThe pkg_war() rule is missing this runtime dependency. Without it we get\nexceptions like:\njava.lang.ClassNotFoundException:\ncom.google.common.util.concurrent.internal.InternalFutureFailureAccess\n\nBug: Issue 450323474\nChange-Id: Icfb1f0e7625b5e64a01ca1552bc579b202ffb83a\n"
    },
    {
      "commit": "97d418e1895740a2ee10eb54e6279ee762aaaa35",
      "tree": "c9b12547365b9f6e78ea328d6d3461288393a6ba",
      "parents": [
        "b89ae948646625812b308b902a617ea63317a880"
      ],
      "author": {
        "name": "Antoine Musso",
        "email": "hashar@free.fr",
        "time": "Tue Sep 30 19:35:40 2025 +0200"
      },
      "committer": {
        "name": "Antoine Musso",
        "email": "hashar@free.fr",
        "time": "Tue Sep 30 19:39:56 2025 +0200"
      },
      "message": "Fix edit link when base URL has a path\n\nOn a setup having a path prefix such as `/r` the edit link woud be\nbroken because the prefix is stripped.\n\nThe reason is `URI.resolve()` is given an absolute path which strip the\npath from the base URI:\n\n  jshell\u003e new URI(\"https://example.org/r\").resolve(\"/admin/repos/edit\");\n                                      ^^\n  $2 \u003d\u003d\u003e https://example.org/admin/repos/edit\n                           ^^^____oops\n\nWhich is consistent with python `os.path`:\n\n  \u003e\u003e\u003e os.path.join(\u0027https://example.org/r\u0027, \u0027/admin/repos/edit\u0027);\n  \u0027/admin/repos/edit\u0027\n\nRemove the leading slash from the edit URI and update the test with the\nproper expected value.\n\nBug: https://phabricator.wikimedia.org/T405481\nChange-Id: I98e9d89cbc4850270f81b52665f2c8849f25c879\n"
    },
    {
      "commit": "b89ae948646625812b308b902a617ea63317a880",
      "tree": "5fa02b6b07c98990dfa8815cac0daeb79f3efa4f",
      "parents": [
        "c0094a91f4022f397396c486b5fdc6f814ae51af"
      ],
      "author": {
        "name": "Antoine Musso",
        "email": "hashar@free.fr",
        "time": "Tue Sep 30 19:31:35 2025 +0200"
      },
      "committer": {
        "name": "Antoine Musso",
        "email": "hashar@free.fr",
        "time": "Tue Sep 30 19:39:52 2025 +0200"
      },
      "message": "Tests: update path prefix in git urls\n\nWhen testing URLs, it is helpfull to distinguish between the base URL\n(which can contains a path prefix such as `/r`) and the application\npaths that is appended to it.\n\nUsing `/foo` is a bit meaningless, replace it by `/path-prefix` which is\nself describing and helps differentiating between the base URL and the\nrest of the path.\n\nChange-Id: I91230750cc67b7a2876e4da7779a0b0e20f62639\n"
    },
    {
      "commit": "c0094a91f4022f397396c486b5fdc6f814ae51af",
      "tree": "5c56efe245a2bbdf379d769c019e4157bf4e035a",
      "parents": [
        "0a3493eb4932ed3df16d253cbbb9f79709ace43c",
        "b1b8c4a45d5feb5bd11798a7d8469f7af0f04405"
      ],
      "author": {
        "name": "Adithya Chakilam",
        "email": "achakilam@nvidia.com",
        "time": "Tue Sep 09 09:13:41 2025 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Sep 09 09:13:41 2025 -0700"
      },
      "message": "Merge \"Add ability to set base path in dev mode\""
    },
    {
      "commit": "0a3493eb4932ed3df16d253cbbb9f79709ace43c",
      "tree": "f5dd4dd150b76f8e2b342703030259d4624120c2",
      "parents": [
        "38a4daf61095f7b28e6ca435a33f78f71c6b3fa4",
        "87218525f51613c0cb5e609f7afe424e6cf3e667"
      ],
      "author": {
        "name": "Matthias Sohn",
        "email": "matthias.sohn@gmail.com",
        "time": "Tue Sep 02 03:04:07 2025 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Sep 02 03:04:07 2025 -0700"
      },
      "message": "Merge \"Update JGit to d6923d6994df\""
    },
    {
      "commit": "87218525f51613c0cb5e609f7afe424e6cf3e667",
      "tree": "bdd46a66321deee7ba777cc196bc1fa757ef33a0",
      "parents": [
        "06b65fdf46c7bae589e11151ca834e8bd8319e86"
      ],
      "author": {
        "name": "Matthias Sohn",
        "email": "matthias.sohn@sap.com",
        "time": "Tue Sep 02 10:22:41 2025 +0200"
      },
      "committer": {
        "name": "Matthias Sohn",
        "email": "matthias.sohn@sap.com",
        "time": "Tue Sep 02 11:00:09 2025 +0200"
      },
      "message": "Update JGit to d6923d6994df\n\n$ git log --oneline --no-merges f693c0478...d6923d699\nacd1eff8b PendingGenerator: drop only buffers loaded in the generator\n7f9eeb969 Prepare 7.4.0-SNAPSHOT builds\n3ce0a6bc8 JGit v7.4.0.202508261455-rc1\n0ba68dfb0 Update apache sshd to 2.16.0\n8fd4cf3de Do not include 3rd party dependencies in features\ne109bad94 Ensure pack files are closed after git.close()\n38aaf90f9 Prepare 7.4.0-SNAPSHOT builds\ncad966d95 JGit v7.4.0.202508191000-m3\n7e2935241 Update mockito to 5.19.0\nbcbb2d6ce Update jetty to 12.1.0\n9b0bbd744 Update org.assertj:assertj-core to 3.27.4\ndeefd465a Update bytebuddy to 1.17.7\n610d7e191 util.Iterators: suppress warning about object arrays\n93e87dfc7 util.Iterators: private constructor for utility class\n901b651ec pgm: new command for the object size index\n2b64b5c6f WindowCursor: honor pack.useObjectSizeIndex\n6ebd2f5d7 Prevent CommitGraphWriter.write() from closing its stream\n1c0df9426 Make CancellableDigestOutputStream extend FilterOutputStream\n5155683dc Shortcut PackWriter reuse selection when possible\n0a32120fa Update org.apache.commons:commons-compress to 1.28.0\na762badfc SmartHttpFetchConnection: suppress errors on close()\n01123ee70 Mark Git(Repository repo, boolean closeRepo) public\nee304e465 Use volatiles for bitmap and revIndex in Pack\n37d1a65f0 Fix performance regression in Pack.idx()\n3a89c4e49 Don\u0027t use Yoda style conditions to improve readability\n0efc9c367 Use LocalObjectToPack representation more\nd9aba160b Use representation from LocalObjectToPack if possible\n6c8d6e299 Avoid conditional in LocalObjectRepresentation.wasDeltaAttempted\nd9de5e619 Prepare 7.4.0-SNAPSHOT builds\nee0b62d24 Update commons-lang3 to 3.18.0\n0962202b2 Update commons-io to 2.20.0\n16554a89d Update commons-codec to 1.19.0\nfb6b24142 JGit v7.4.0.202507290921-m2\ne02e00109 Add 4.37 target platform for Eclipse IDE 2025-09\nca6d673d5 Use chunked encoding when uploading LFS objects\n154032c2b Add Bundle-SCM header to OSGi manifests\nc86cdcb96 WindowCursor: Use the object size index when possible\na673f022a GC: Write object size index if config says so\nb0e06f3b0 MergeToolTest: update expected error from the tool\n160b81c0b Add dash license check for 3rd party dependencies\nd9ac2f31e ObjectDirectoryPackParser: Write object-size index with the pack\n8929300aa PackInserter: write object-size index with the pack\n427af1262 Pack: getter for the indexed object size (when available)\n8ab3e5324 Prepare 5.13.5-SNAPSHOT builds\n85c14b4da JGit v5.13.4.202507202350-r\n896d07370 AmazonS3: Do not accept DOCTYPE and entities\n8d30b5a75 ManifestParser: Do not accept DOCTYPE and entities\n518cc54f8 AdvertisedRequestValidator: fix WantNotValidException caused by race\n0d835f824 Prepare 5.13.4-SNAPSHOT builds\n36fef211d Fix packaging build\n918fdd774 [releng] Fix maven builds on JVM 21 and with newer git on MacOS\n010858e24 Fix missing import of org.eclipse.jetty:jetty-security:12.0.23\nee5eb8eee Restore WORKSPACE and Bazel 7.6.1\nee42baf81 Prepare 7.4.0-SNAPSHOT builds\n0653d24c9 JGit v7.4.0.202507080956-m1\nb943e49d2 Fix JGit version exposed in bazel module\na35be22e0 MODULE.bazel: Include version in the jgit module\nff407588c Update jetty to 12.0.23\nefe2e4d44 Update bytebuddy to 1.17.6\nc3f354edc Lock reftable auto-refresh to ensure consistency\n426a6c70c DfsObjDatabase.PackList: Remove PackListImpl subclass\n783b4a509 DfsObjDatabase.PackList: Remove dirty flag setters\n6f5e28454 DfsPackFile: Delete #getIndexedObjectSize for ObjectId\n7c7f7d32e MultiPackIndexLoader: Add NON-NLS annotation to message\n9fb0c4fca ChangedPathFilter: Suppress nls warnings in toString\ne3c003cac JGitText.properties: Use {n} instead %s in messages\nf52f450f9 DfsReader: Reuse index position when looking up object size\na0baaa03b DfsReader: Use new findPack instead of findPackWithObject\n1ffcbb98d DfsReader: return idx position when looking up object in packs\nf6bfc81cf DfsReader: Handle correctly invalid object-size indexes\n3f3f3b5a6 Fix: Close the \"preserved\" PackDirectory\neb82500ca Update jetty to 12.0.22\n5606070e1 Update bouncycastle to 1.81\ne043079ce Update last jgit release to 7.3.0.202506031305-r\nbceef6b91 Prepare 7.4.0-SNAPSHOT builds\n714830a3d Prepare 7.3.1-SNAPSHOT builds\n22e8820c6 JGit v7.3.0.202506031305-r\nf004052ae Update maven plugins\n1c7289509 Use the same ordering/locking in delete() as C git\n5ed259fac Prepare 7.3.0-SNAPSHOT builds\n340f99cab JGit v7.3.0.202505281347-rc1\nc9a1362b7 Prepare 7.1.2-SNAPSHOT builds\n7799eb070 JGit v7.1.1.202505221757-r\n1524db3c3 Prepare 7.0.2-SNAPSHOT builds\n4de5c79bc JGit v7.0.1.202505221510-r\nfc6fd5690 Prepare 6.10.2-SNAPSHOT builds\n9d12b89dd JGit v6.10.1.202505221210-r\n3e0eedc57 AmazonS3: Do not accept DOCTYPE and entities\n07d00f6df ManifestParser: Do not accept DOCTYPE and entities\nf5071dbfb Update mockito to 5.18.0\ne9178a803 Update Jetty to 12.0.21\n30b9c446f Update com.google.code.gson:gson to 2.13.1\n1d83aa4bb Prepare 7.3.0-SNAPSHOT builds\n34ba6ce64 JGit v7.3.0.202505211123-m3\n98494cd1a FS.getFileStoreAttributes: cancel failed task executed asynchronously\nca665a4f0 DfsReader/PackFile: Move represention to the packfile\n9b27a961f DfsPackFile: Remove unused getObjectCount method\n8fd6f34b6 Prepare 7.2.2-SNAPSHOT builds\nc212ced38 JGit v7.2.1.202505142326-r\nc6fc36070 AmazonS3: Do not accept DOCTYPE and entities\ndab4f52d4 ManifestParser: Do not accept DOCTYPE and entities\n4919c2b70 FileReftableStack: ensure new reftable files aren\u0027t missed on NFS\nf96e5e3b4 Encapsulate layout of reftable stack in FileReftableStack\nb5696bc08 Prepare 7.3.0-SNAPSHOT builds\n1a782ef7c JGit v7.3.0.202505070700-m2\nd0e7071b1 DfsInserter: Remove checkExisting setter and parameter\n32e0e27be PlotRefComparator: fix #timeof\n43d3bc6d6 PlotWalk: Replace call to deprecated method in PersonIdent\ne74771cb9 midx: Fix license header from Google Inc. to LLC\n0595aa0f0 Remove option to enable bzlmod\n991891570 Update bazel to 8.2.1\nf47c13fd1 Update bazel to 7.6.1\nb26ff8c5d MODULE.bazel: Move dependencies from WORKSPACE to bazel modules\n070757ab0 Update commons-io:commons-io to 2.19.0\n0a8a71825 Update com.google.code.gson:gson to 2.13.0\n2cef1a59f PackExt: Add value for the multipack index\n9b51ec8f2 MultiPackIndex: Add and implement #resolve() method\nf627e8914 MultiPackIndexWriter: Handle empty packs\n670c17b80 MultiPackIndexWriter: return bytes written\n7e574e388 MultiPackIndexV1: Calculate memsize with long\ncd7c9c1f0 Prepare 7.3.0-SNAPSHOT builds\ndb3cbe33a MultiPackIndexV1: Reorder methods and add NON-NLS annotations\nb02e6c3e0 MultiPackIndex: add #getMemorySize() method\nc2a8e0026 midx: reader for the multipack index\n2d7c43d18 JGit v7.3.0.202504081226-m1\nd3ecdce86 Update mockito to 5.17.0\n3cc101a0d Update jetty to 12.0.19\n070a8b7c0 Update bytebuddy to 1.17.5\n35d433add DfsPackFile.PackIndexes: pass primary index to reverse index\n324f75ea2 tools/BUILD: Make AssertEqualsArgumentOrder a warning\n32f659500 PullCommandTest: remove unnecessary method reference\n46a637878 Fix package name of spring boot JarLauncher class in jgit.sh\n8a05d5e0a tests: avoid assertEquals on same instance\n4957eeb00 Update bytebuddy to 1.17.3\n06775c667 Update mockito to 5.16.1\n7a6469b1c Update jna to 5.17.0\n06b5d2ccf Update jetty to 12.0.18\n\nChange-Id: I5a6f40726ab9c418991ed5bbf5358071bb44548e\n"
    },
    {
      "commit": "b1b8c4a45d5feb5bd11798a7d8469f7af0f04405",
      "tree": "c5a35f5747691950c25b5c5cd61fff1cde67b6d5",
      "parents": [
        "06b65fdf46c7bae589e11151ca834e8bd8319e86"
      ],
      "author": {
        "name": "Adithya Chakilam",
        "email": "achakilam@nvidia.com",
        "time": "Wed Aug 06 23:12:38 2025 -0500"
      },
      "committer": {
        "name": "Martin Fick US",
        "email": "mfick@nvidia.com",
        "time": "Fri Aug 15 13:16:25 2025 -0700"
      },
      "message": "Add ability to set base path in dev mode\n\nChange-Id: I1da95745d1bc8eaa7d5b204a942bcee0b6a027a8\n"
    },
    {
      "commit": "38a4daf61095f7b28e6ca435a33f78f71c6b3fa4",
      "tree": "0771c83160fdd7a18f269cc1dc38713452873e56",
      "parents": [
        "06b65fdf46c7bae589e11151ca834e8bd8319e86"
      ],
      "author": {
        "name": "Matthias Sohn",
        "email": "matthias.sohn@sap.com",
        "time": "Tue Jun 24 15:50:29 2025 +0200"
      },
      "committer": {
        "name": "Matthias Sohn",
        "email": "matthias.sohn@sap.com",
        "time": "Tue Jun 24 07:44:38 2025 -0700"
      },
      "message": "Document that compressed archive of a folder can be downloaded\n\nadd examples specifying version using\n- a ref\n- a commit id\n\nChange-Id: I9a519f4674ecbf0a4b632e240cd203a1150d4770\n"
    },
    {
      "commit": "06b65fdf46c7bae589e11151ca834e8bd8319e86",
      "tree": "4831ebb686033ac5a2ec0924341618f9b32328b1",
      "parents": [
        "6b3b1349915dac982c92cc73876e7a08cd69c33f"
      ],
      "author": {
        "name": "Xing Huang",
        "email": "xingkhuang@google.com",
        "time": "Mon Mar 10 12:50:09 2025 -0500"
      },
      "committer": {
        "name": "Xing Huang",
        "email": "xingkhuang@google.com",
        "time": "Mon Mar 24 13:17:32 2025 -0500"
      },
      "message": "LogServlet: enable Commit Graph and Bloom Filter serving\n\nThe current setup of LogServlet does not permit Commit Graph and Bloom\nFilter serving due to their RevWalk setup does not disable RetainBody\nflag and does not accept the intended ChangedPathTreeFilter.\n\nIncorporating RetainBody disable and ChangedPathTreeFilter into RevWalk\nsetup.\n\nChange-Id: I5e2d7f00df67708c41e2509d5a12e3661a0cecd9\nSigned-off-by: Xing Huang \u003cxingkhuang@google.com\u003e\n"
    },
    {
      "commit": "6b3b1349915dac982c92cc73876e7a08cd69c33f",
      "tree": "a90b91dbdba6837a91ee5f3926a729d6893e13dc",
      "parents": [
        "0d2b1790f0e48274a83352da9b6a7e4eec0df1bb"
      ],
      "author": {
        "name": "Xing Huang",
        "email": "xingkhuang@google.com",
        "time": "Mon Mar 24 11:06:42 2025 -0500"
      },
      "committer": {
        "name": "Xing Huang",
        "email": "xingkhuang@google.com",
        "time": "Mon Mar 24 13:16:14 2025 -0500"
      },
      "message": "Update jgit to f693c0478 (latest servlet-4 branch)\n\nThis is a rebase of 9d7a42772992d84791864512c57e86584f322853\n\nNotable changes in this JGit update:\n$ git log --oneline --no-merges 2d8777536..HEAD\n\n4a5dfce0d SystemReader: Add support for XDG_CACHE_HOME\nb37e2906c Removed redundant TreeFilter.ANY_DIFF in LogCommand.\n011f66df2 Bump minimum dependency for Bouncy Castle to 1.80.0\n967335858 BlameResult: Let generator decide when to use the blame cache\nd5f8a14ed (master) exttst: Pass encoding to InputStreamReader\n776ec5f71 Update last jgit release version to 7.2.0.202503040940-r\n21c8915f1 Update scm url in pom.xml to refer to gerrit homepage of jgit repo\ne2ddcc969 TreeRevFilter: enable Bloom Filter usage with ChangedPathTreeFilter\n18354e81f ReftableCompactor: Use instant to set the reflog expire time\ncd1cefd48 GC: Use new java.time API in PersonIdent\n14ecf2cb8 reftable.BlockWriter: Use time API methods from PersonIdent\n69f57d2a7 Add target platform jgit-4.36 for eclipse 2025-06\n82d195731 Checkout: Handle InvalidRefNameException\n52dc9fdd0 BlameGenerator: Use cache only for candidates modifying the path\n6c129d283 Update maven plugins\n1429ccbd8 Update spotbugs-maven-plugin to 4.9.2.0\n6c22087ef Update mockito to 5.16.0\n511242aeb Update jetty to 12.0.17\nf1bf54191 Update bytebuddy to 1.17.2\n9b08cf230 FileReftableDatabase: mark autoRefresh volatile\n2a3e1191e Prepare 7.3.0-SNAPSHOT builds\n4a5dfce0d SystemReader: Add support for XDG_CACHE_HOME\nb37e2906c Removed redundant TreeFilter.ANY_DIFF in LogCommand.\n011f66df2 Bump minimum dependency for Bouncy Castle to 1.80.0\n967335858 BlameResult: Let generator decide when to use the blame cache\nd5f8a14ed (master) exttst: Pass encoding to InputStreamReader\n776ec5f71 Update last jgit release version to 7.2.0.202503040940-r\n21c8915f1 Update scm url in pom.xml to refer to gerrit homepage of jgit repo\ne2ddcc969 TreeRevFilter: enable Bloom Filter usage with ChangedPathTreeFilter\n18354e81f ReftableCompactor: Use instant to set the reflog expire time\ncd1cefd48 GC: Use new java.time API in PersonIdent\n14ecf2cb8 reftable.BlockWriter: Use time API methods from PersonIdent\n69f57d2a7 Add target platform jgit-4.36 for eclipse 2025-06\n82d195731 Checkout: Handle InvalidRefNameException\n52dc9fdd0 BlameGenerator: Use cache only for candidates modifying the path\n6c129d283 Update maven plugins\n1429ccbd8 Update spotbugs-maven-plugin to 4.9.2.0\n6c22087ef Update mockito to 5.16.0\n511242aeb Update jetty to 12.0.17\nf1bf54191 Update bytebuddy to 1.17.2\n9b08cf230 FileReftableDatabase: mark autoRefresh volatile\n2a3e1191e Prepare 7.3.0-SNAPSHOT builds\n79736e412 (origin/stable-7.2) Prepare 7.2.1-SNAPSHOT builds\nfddef06cc (tag: v7.2.0.202503040940-r) JGit v7.2.0.202503040940-r\nc43126fc8 JGit v7.2.0.202503040805-r\n28136bc49 CacheRegion: fix non translatable text warnings\n4ef88700d Ensure access to autoRefresh is thread-safe\nac5146ffb FileReftableStack: use FileSnapshot to detect modification\n1ff9c2a1c FileReftableDatabase: consider ref updates by another process\n5db57fe2a BlameRegionMerger: report invalid regions with checked exception.\n1b70d59fc Prepare 7.2.0-SNAPSHOT builds\n3edab4e9f [ssh known_hosts] Handle unknown keys better\n9ad4310db [releng] Remove unused target platform definitions\n63d741669 (tag: v7.2.0.202502261823-rc1) JGit v7.2.0.202502261823-rc1\nc5bf0fba1 [ssh known_hosts] Handle host certificates\n7c6b51cef [ssh known_hosts] Improve updating modified keys\nce3b62c41 [ssh known_hosts] Add tests and fix problems\n4bd76e6bc [ssh, releng] Remove net.i2p.crypto.eddsa\n04ff530a2 AddCommand: Use parenthesis to make the operator precedence explicit\n46d742588 AddCommand: implement --all/--no-all\ne328d203f (origin/stable-6.10) Do not load bitmap indexes during directory scans\nadab727fd StringUtils: new #trim method\n6108fd8a2 Add --exclude option to describe CLI command\n8501e5d6a DescribeCommand: remove unnecessary else clause\n68f454af4 DescribeCommand: Add exclusion matches using setExclude()\n8720b352a Insert the Change-Id at the end of the footer block\n7c1f4fde0 Update byte-buddy to 1.17.1\n74aff4635 Update commons-logging:commons-logging to 1.3.5\n6f3abed9d Update commons-codec:commons-codec to 1.18.0\n92583e481 Update com.google.code.gson:gson to 2.12.1\nf2fad1fd1 Update ecj to 3.40.0\n8c801c2a6 Update maven plugins\ne10f876b4 ssh: bump Apache MINA sshd 2.14.0 -\u003e 2.15.0\n70a3131d6 Update Change-Id insertion logic to insert after footers\n4aae789d2 MultiPackIndexPrettyPrinter: add missing @since tag\n3a11e6cc9 Export new package org.eclipse.jgit.blame.cache\nfab9b3d96 Fix calculation of pack files and objects since bitmap\nae6665197 BlameGenerator: add @since tags to new methods and inner class\nbec51e7d7 pgm.MultiPackIndex: CLI command to write/print the multipack index\n871c5e177 BlameGenerator: cache and reuse blame results\n00528ac80 Prepare 7.2.0-SNAPSHOT builds\n24d08f221 (tag: v7.2.0.202502191417-m3) JGit v7.2.0.202502191417-m3\n5dae4a835 Pack: no longer set invalid in openFail()\n4c4bef885 DirCacheCheckout.preScanOneTree: consider mode bits\nf41253804 Merge: improve handling of case-variants\n\nChange-Id: Ia7f2a73b3ebd7104d1691e58550db7091a78a08e\n"
    },
    {
      "commit": "0d2b1790f0e48274a83352da9b6a7e4eec0df1bb",
      "tree": "ff85e0a50349d7c6fcd4339a400d71016b46a841",
      "parents": [
        "9d7a42772992d84791864512c57e86584f322853"
      ],
      "author": {
        "name": "Matthias Sohn",
        "email": "matthias.sohn@sap.com",
        "time": "Wed Feb 26 22:12:04 2025 +0100"
      },
      "committer": {
        "name": "Matthias Sohn",
        "email": "matthias.sohn@sap.com",
        "time": "Wed Feb 26 22:13:32 2025 +0100"
      },
      "message": "Prepare release 1.6.0\n\n$ git log --oneline --no-merges v1.5.0..HEAD\n9d7a427 Update jgit to 2d8777536 (servlet-4 branch)\n946a41d Bump minimum Java version to 17 and add Java 21 build\n98a9b85 README: Point link to gerrit\u0027s bugtracker\n859617c Documentation - API Reference\n5371b1f Add committeroneline template to gitiles LogDetail.soy\na37b23e Bump JGit to d5cc102e7 (stable-6.10)\n30851aa VisibilityChecker: Remove deprecated variant of isReachableFrom\n6454234 VisibilityChecker#isReachableFrom: Remove unused param and exceptions\n9b81f87 VisibilityCache/Checker: Use streams for the reachability starters\nace68b4 Document enabling edit links by setting gerritUrl\n04b5095 Fix source, log and blame URLs not showing in Markdown doc footers\n77c2325 Format sources using google-java-format 1.24.0\n\nChange-Id: I69ead0ac4b5901d161813d9194d2690a2ac09fff\n"
    },
    {
      "commit": "9d7a42772992d84791864512c57e86584f322853",
      "tree": "33818bbfa5778870d034831d37f3d79cebd8b43a",
      "parents": [
        "946a41d8a08fa01dbc50f09b272909ae7d4811f1"
      ],
      "author": {
        "name": "Matthias Sohn",
        "email": "matthias.sohn@sap.com",
        "time": "Thu Feb 20 22:23:11 2025 +0100"
      },
      "committer": {
        "name": "Matthias Sohn",
        "email": "matthias.sohn@sap.com",
        "time": "Wed Feb 26 11:32:22 2025 +0100"
      },
      "message": "Update jgit to 2d8777536 (servlet-4 branch)\n\nThe servlet-4 branch follows the master branch with servlet-api\ndowngraded to 4.0.4.\n\nNotable changes in this JGit update:\n\n2d8777536 Downgrade from servlet-api 6.1.0 to 4.0.4\ne295f7bd9 blame.cache: Define interface and POJO to cache blame results\nc625d67f8 URIish: fix stack overflow in regex matching\ne9f43b6c1 midx.MultiPackIndexPrettyPrinter: pretty printer to debug multi pack index\n072e93fde midx.MultiPackIndexWriter: a writer for the multipack index format\n6670e54e8 [ssh known_hosts] Correct parsing of host key lines\nff3a15049 Improve configuration of trusting file attributes in FileSnapshot\na86e2a7d7 Config: add getters for primitive types without default value\ndeae89f9e CommitConfig: fix potential NPE\n29e014aad midx.PackIndexMerger: Helper to iterate over n-indexes\na8efd046f RevWalk: Add an isMergedIntoAnyCommit() method\n772ee0e5f Log pruned packfiles as debug and not warn logs\n7b8ddc2ce RefDatabase#getReflogReader(String): use #exactRef to resolve refName\ne93294f01 Deprecate Repository#getReflogReader methods\n61a35e655 Update bouncycastle to 1.80\ne5e2e0269 Set repositoryformatversion\u003d0 when converting refStorage to files\n300a53dd6 GarbageCollectCommand, GC: use java.time API\nfc5cbf1d7 GitDateFormatter: use java.time API\n51d6c63fe Pack: separate an open/close accounting lock\nd91555854 Update jetty to 12.0.16\na783bb76c transport: Remove usage of CommitTimeRevFilter with long and Dates\n937cfdc76 CommitTimeRevFilter: Move to java.time API\ndbd0a6a74 Remove use of deprecated java.security.AccessController\n6fa28d767 Add pack-refs command to the CLI\nfbbd0c3e3 Don\u0027t fail when trying to prune pack which is already gone\nce3a7ca3b Rename numberOfPackFilesAfterBitmap to numberOfPackFilesSinceBitmap\n88f8321ba SystemReader: Offer methods with java.time API\nb2accb0e9 GPG: use BC PGP secret key parsing out of the box\nd1a14b8ff SSH signing: implement a SignatureVerifier\nc9958e9b7 SSH signing: implement a Signer\n4902b2baf Add `numberOfPackFilesAfterBitmap` to RepoStatistics\na202d9706 SSH signing: don\u0027t require a session in PasswordProviderWrapper\n06485d527 SSH signing: make OpenSSH pattern matching public\nd4ef88dae SSH signing: prepare config\n1519c1479 Align request policies with CGit\n30134f214 Update Apache sshd to 2.14.0\n7a4c05932 WindowCursor: Fix parameter name in javadoc\n0155f8bf6 RevolveMerger: honor ignoreConflicts also for binary files\n0fd76114e Replace custom encoder Constants#encodeASCII by JDK implementation\ne5d289899 Replace custom encoder `Constants#encode` by JDK implementation\n45689b4a2 Revert \"Remove deprecated LocalDiskRepositoryTestCase#create(boolean,boolean)\"\nb4bdf9841 Remove deprecated JschSession#getSftpChannel method\n0ae586b81 Remove deprecated AutoLFInputStream constructors\nf9a608b57 Remove deprecated RawParseUtils#UTF8_CHARSET\n2a10b416f Remove deprecated FS#setAsyncFileStoreAttributes method\n0b531cd6e FS, FS_Posix: remove deprecated #createNewFile(File) method\n8baef2271 Remove deprecated lastModified methods using long\n88053eedc UserAgent: remove deprecated #getAgent, #hasAgent methods\nd64e09230 Remove deprecated Transport#getFilterBlobLimit methods\nd67227653 Remove deprecated RefAdvertiser#send(Map\u003cString, Ref\u003e) method\n0d4e81e50 Remove deprecated ReceivePack#setEchoCommandFailures method\n66f340865 Remove deprecated class ReceivePack.FirstLine\n7b65a8472 PacketLineIn: make deprecated #END and #DELIM private\nfc76f226c WindowCacheStats: remove deprecated #getOpenFiles, #getOpenBytes\n0143d6de0 Remove deprecated PatchApplier#applyPatch(InputStream)\n42d318261 Remove deprecated MergeMessageFormatter#formatWithConflicts\ne54225460 Remove deprecated MergeFormatter#formatMerge using charset name\n987a24ba2 Remove deprecated MergeFormatter#formatMerge using charset name\n7162722e9 Remove deprecated TagBuilder#toByteArray method\n925f0d14d Remove deprecated Repository#hasObject(AnyObjectId) method\nac1265a51 Make deprecated Repository#peel(Ref) private\ndb9443d80 Remove deprecated RefDatabase#getRef(String) method\n8140ad78d CoreConfig: remove deprecated #isLogAllRefUpdates method\n16f8db059 Constants: remove deprecated #CHARSET and #CHARACTER_ENCODING\n3585035a7 Remove deprecated ConfigConstants#CONFIG_KEY_STREAM_FILE_TRESHOLD\n7650a68ad Remove deprecated CommitBuilder#setEncoding(String) method\n63348b21d Remove deprecated static #equals(AnyObjectId, AnyObjectId) method\nec97acb80 Remove deprecated FileSnapshot.save(long) method\n65bc6e4f0 Remove deprecated lastModified accessors returning long\n3c8b60b08 Remove deprecated PackInvalidException constructors\nf1a4afe37 DirCacheEntry: remove deprecated methods\na00b7c392 Remove deprecated DirCacheCheckout#checkoutEntry methods\n724626a9c Remove deprecated StashApplyCommand#setApplyUntracked method\nee02be9c8 Remove deprecated StashApplyCommand#setApplyIndex method\n8c81cfc9c Remove deprecated RemoteSetUrlCommand#setUri method\nb4243e431 Remove deprecated RemoteSetUrlCommand#setPush method\n30274153e Remove deprecated RemoteSetUrlCommand#setName method\n373fbb488 Remove deprecated RemoteRemoveCommand#setName method\n0757ca6bf Remove deprecated CheckoutCommand#setForce method\n22f7beaf2 Remove deprecated CheckoutCommand#setForce method\n6007aee36 Remove deprecated static AnyLongObjectId#equals method\n3682611ce Remove deprecated LocalDiskRepositoryTestCase#create(boolean,boolean)\n45e28716c walks: Remove deprecated #createReachabilityChecker() method\ne5cc3151a RepoCommand.RemoteReader: Remove @Deprecated method\n8438808f9 ReachabilityChecker: Remove @Deprecated method\nff1592ef7 UploadPack: Remove @Deprecated classes and methods\nf13a655c5 Update jakarta.servlet:jakarta.servlet-api to 6.1.0\na78e6eaef Signing: refactor interfaces\n299a7348e [ssh] Bump Apache MINA sshd 2.13.1 -\u003e 2.13.2\n026d46de1 Bump jetty version to 12.0.9 and servlet-api to 6.0\n7fd8a7a66 Update minimum Java version to 17\n\nChange-Id: I353d000b4aa5fdeddbee9cdb32c4a37e5a5824b1\n"
    },
    {
      "commit": "946a41d8a08fa01dbc50f09b272909ae7d4811f1",
      "tree": "46d1bdc211f3d8bc2e5b70fb9b9071865aacf408",
      "parents": [
        "98a9b8578cab271164d94914fc6b8cf251e51449"
      ],
      "author": {
        "name": "Matthias Sohn",
        "email": "matthias.sohn@sap.com",
        "time": "Thu Feb 20 22:19:50 2025 +0100"
      },
      "committer": {
        "name": "Matthias Sohn",
        "email": "matthias.sohn@sap.com",
        "time": "Fri Feb 21 01:36:34 2025 +0100"
      },
      "message": "Bump minimum Java version to 17 and add Java 21 build\n\nChange-Id: Ia063d5de28cd69152286a3dec4a6f614f1549915\n"
    },
    {
      "commit": "98a9b8578cab271164d94914fc6b8cf251e51449",
      "tree": "94ec501d4d2ad2dfc45bafbb70ce86f9481f2864",
      "parents": [
        "7bddf7d1b2eff695fe4201d37742ec57a3cf5c59"
      ],
      "author": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Mon Feb 10 13:37:13 2025 -0800"
      },
      "committer": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Mon Feb 10 14:18:11 2025 -0800"
      },
      "message": "README: Point link to gerrit\u0027s bugtracker\n\nREADME points to the github bugtracker, but that project is archived.\n\nUpdate the link to gerrit\u0027s bugtracker, because gitiles is hosted\ntogether with gerrit and both share many developers.\n\nChange-Id: Ifb144062290f3e3c823717afd7266af90e69d27d\n"
    },
    {
      "commit": "7bddf7d1b2eff695fe4201d37742ec57a3cf5c59",
      "tree": "2c5fc6feaedd01d6317701b63f057cd23420a267",
      "parents": [
        "5371b1f7691be043928f505edf753e6b747f4424",
        "859617c703227f52d7478b4280f6fa4e619daf11"
      ],
      "author": {
        "name": "Matthias Sohn",
        "email": "matthias.sohn@gmail.com",
        "time": "Fri Feb 07 04:58:47 2025 -0800"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Feb 07 04:58:47 2025 -0800"
      },
      "message": "Merge \"Documentation - API Reference\""
    },
    {
      "commit": "859617c703227f52d7478b4280f6fa4e619daf11",
      "tree": "cd1e8304d0fd4e35cc07fcf775472b08aaed68a5",
      "parents": [
        "a37b23eb0112ede3c16d21976353012e1248ad33"
      ],
      "author": {
        "name": "Wendy Wang",
        "email": "wendy.wang10@sap.com",
        "time": "Tue Feb 04 16:09:16 2025 +0100"
      },
      "committer": {
        "name": "Wendy Wen Wang",
        "email": "wendy.wang10@sap.com",
        "time": "Fri Feb 07 04:44:12 2025 -0800"
      },
      "message": "Documentation - API Reference\n\nDocumented behavior of:\n+refs, +log, +show, +archive, +doc, +blame, +diff\n\nIncluded working endpoints as examples.\n\nReferences (besides the Gitiles source code):\nhttps://www.chromium.org/developers/change-logs/\nhttps://github.com/google/gitiles/issues/52\n\nChange-Id: Icf3db82574b93be18b61772150baf56f3005b6e3\n"
    },
    {
      "commit": "5371b1f7691be043928f505edf753e6b747f4424",
      "tree": "0a8a7f2785241944cb94d946e22900d0cd990490",
      "parents": [
        "a37b23eb0112ede3c16d21976353012e1248ad33"
      ],
      "author": {
        "name": "Tim Zhou",
        "email": "timzhou@google.com",
        "time": "Wed Feb 05 19:26:00 2025 +0000"
      },
      "committer": {
        "name": "Tim Zhou",
        "email": "timzhou@google.com",
        "time": "Wed Feb 05 14:07:37 2025 -0800"
      },
      "message": "Add committeroneline template to gitiles LogDetail.soy\n\nThis is a workaround change to help alleviate pain from developers trying to use gitiles custom templates. These templates have been broken due to a soy LSC migrating to go/soy/reference/modifiable-templates. To use this new template, users may have to remove the respective configuration settings for their custom templates in gitiles.config. See b/389770745 for more context.\n\nChange-Id: Ice7d23c7902042d70f2e8ef7ac2f0a2377441cc1\n"
    },
    {
      "commit": "a37b23eb0112ede3c16d21976353012e1248ad33",
      "tree": "5c27a18d84667ee000f35efa9d78a74dc80e9807",
      "parents": [
        "30851aacbea3370c7be8179c890b3401526242eb"
      ],
      "author": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Fri Dec 20 09:51:43 2024 -0800"
      },
      "committer": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Fri Dec 20 09:51:43 2024 -0800"
      },
      "message": "Bump JGit to d5cc102e7 (stable-6.10)\n\nAfter this update, we can rebuild jgit-servlet with javax and keep\nupdate JGit to 7.x.\n\n$ git log --oneline --no-merges 2c86ef242..d5cc102e7\nd5cc102e7 http.server/BUILD: expose servlet resources as target\n1177e1e4a WindowCache: share removal work among multiple threads\n105a313ea Update target platform version in maven build to 4.32 (2024-06)\nfef56c3c8 FileSnapshot: fix warnings\ncdbea5ea9 Optionally.Hard: avoid Optional creation on every use,\nae53d6383 Pack: fix threading bug getting idx\nd2ff398bc Fix potential NPE in TreeWalk#getFilterCommandDefinition\n2b229df06 Advertise \"agent\" capability when using protocol v2\n7fedd15c8 FileSnapshot: silence \"Stale file handle\" exceptions\neb0ef9d16 FileSnapshot: silence \"Not a Directory\" exceptions\ndd8b13acc FileSnapshot: refactor to share error handling\n4156bdfe8 Mark Attribute#getValue as @Nullable\n7f246a05d Fix potential NPE in ResolveMerger#getAttributesContentMergeStrategy\nf2741cace Fix NPE in DiffFormatter#getDiffDriver\nfb6adb036 Pack: ensure packfile is still valid while still recoverable\n44d61a3d7 WindowCache: add bulk purge(), call from bulk sites\n702db13af UploadPack#implies: add missing @since tag\n9018baf9f Disable MergeToolTest#testEmptyToolName\nf026c19a0 PackDirectory: Filter out tmp GC pack files\n079dbe8ed Test advertised capabilities with protocol V0 and allow*Sha1InWant\n5b1513a28 Align request policies with CGit\nc824610ab DiffDriver: fix doc for rust built-in\n48f36f969 DiffDriver: fix formatting of javadoc\ne682a0239 Pack.java: Recover more often in Pack.copyAsIs2()\n\nChange-Id: I70a9ac7be1704d7dc0ddea2238fc31ffd55dd956\n"
    },
    {
      "commit": "30851aacbea3370c7be8179c890b3401526242eb",
      "tree": "05566305ab76896652fec21b4cebef6a01c7fc14",
      "parents": [
        "6454234da0f10e110fff147c2164d4bedc5ef2c0"
      ],
      "author": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Fri Dec 06 10:42:07 2024 -0800"
      },
      "committer": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Fri Dec 06 13:06:58 2024 -0800"
      },
      "message": "VisibilityChecker: Remove deprecated variant of isReachableFrom\n\nThis deprecated variant was already calling the new one. Subclasses\nshould move to override the new method.\n\nChange-Id: I2a3708dfd44dbaf047d785d56dfc9c732ec7c924\n"
    },
    {
      "commit": "6454234da0f10e110fff147c2164d4bedc5ef2c0",
      "tree": "dce2f26c822e14aad1008fe17411f437bfb60e11",
      "parents": [
        "9d903356828056ef35480eda39d97ccb8125a82c"
      ],
      "author": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Fri Dec 06 09:18:36 2024 -0800"
      },
      "committer": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Fri Dec 06 13:06:45 2024 -0800"
      },
      "message": "VisibilityChecker#isReachableFrom: Remove unused param and exceptions\n\nThe current signature of #isReachableFrom has couple of wrinkles: the\ndescription is not used and the only caller of this method doesn\u0027t\ndifferentiate the subclasses of IOException.\n\nFixing the method now, before deleting the deprecated variant, helps\ndownstream transition: subclasses can move to the updated API and\nignore the deprecated variant. If we want to change this later,\ndownstream needs to update at the same time than the superclass.\n\nUpdate also the tests, to use the \"new\" variant.\n\nChange-Id: If31043ab711a7a287ebf5529e2823fc8ed73ed97\n"
    },
    {
      "commit": "9d903356828056ef35480eda39d97ccb8125a82c",
      "tree": "ab8e6f7e0071f390a3105e089255951d48e2c33d",
      "parents": [
        "3e7f3028d96f28cdc572ad40e560c7a2a8468629",
        "9b81f8789d674585a8dd839fed43c2f8f0aa71d5"
      ],
      "author": {
        "name": "Matthias Sohn",
        "email": "matthias.sohn@gmail.com",
        "time": "Thu Dec 05 15:34:31 2024 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Dec 05 15:34:31 2024 +0000"
      },
      "message": "Merge \"VisibilityCache/Checker: Use streams for the reachability starters\""
    },
    {
      "commit": "3e7f3028d96f28cdc572ad40e560c7a2a8468629",
      "tree": "02895c4deadfae6b3b6a2fab93bf1dd13b91a95c",
      "parents": [
        "ace68b4a1dc3effb981ae2a9cf8633906620136f",
        "04b5095640207a5d73e81028adef5e8c4b74b788"
      ],
      "author": {
        "name": "Nasser Grainawi",
        "email": "nasser.grainawi@oss.qualcomm.com",
        "time": "Wed Dec 04 20:12:19 2024 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Dec 04 20:12:19 2024 +0000"
      },
      "message": "Merge \"Fix source, log and blame URLs not showing in Markdown doc footers\""
    }
  ],
  "next": "9b81f8789d674585a8dd839fed43c2f8f0aa71d5"
}
