)]}'
{
  "log": [
    {
      "commit": "0b82311632d14d3f49675fb6a017c20f7a7dee37",
      "tree": "265e41f241585ae11afd6f4b12dfa0e9a60ef726",
      "parents": [
        "06c4f9e1cca33a51b5396de2d1d975648e9f2ce4"
      ],
      "author": {
        "name": "Andrew Chant",
        "email": "achant@google.com",
        "time": "Fri Jul 17 15:09:06 2026 -0700"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Jul 21 13:42:38 2026 -0700"
      },
      "message": "sync: allow syncing groups with repo sync -g group\n\nSimilar to how repo init -g can restrict repo syncs to\na subset of the manifest globally, allow \"repo sync -g\" to only sync a\nsubset of projects from the manifest when running that specific\nsync command.\n\nChange-Id: I4929aad109de05c73a7db42bb27fd8d47eea32fc\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/609481\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\nCommit-Queue: Andrew Chant \u003cachant@google.com\u003e\nReviewed-by: Gavin Mak \u003cgavinmak@google.com\u003e\nTested-by: Andrew Chant \u003cachant@google.com\u003e\n"
    },
    {
      "commit": "06c4f9e1cca33a51b5396de2d1d975648e9f2ce4",
      "tree": "0db9673ac4ba01d024d5e23b62a4c009c89a0055",
      "parents": [
        "dd1130352be015979413da0caa3cbd882ee5bf87"
      ],
      "author": {
        "name": "Andrew Chant",
        "email": "achant@google.com",
        "time": "Tue Jul 21 10:07:14 2026 -0700"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Jul 21 13:42:30 2026 -0700"
      },
      "message": "git_superproject: don\u0027t filter rewritten manifest\n\nWhen creating the superproject manifest, take all groups\nfrom the original manifest, including notdefault.\n\nUsing the ManifestGroupsStr will inadvertantly filter out\nnotdefault projects from the superproject manifest.\n\nChange-Id: If3daf41e9a6572348de9182fe8679b90d3cec833\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/610021\nCommit-Queue: Andrew Chant \u003cachant@google.com\u003e\nTested-by: Andrew Chant \u003cachant@google.com\u003e\nReviewed-by: Gavin Mak \u003cgavinmak@google.com\u003e\n"
    },
    {
      "commit": "dd1130352be015979413da0caa3cbd882ee5bf87",
      "tree": "d603401070867fdef220e1b75eb0b70b85b40fb3",
      "parents": [
        "eeba6f268d0220bc928ed7af41d310dfbe215205"
      ],
      "author": {
        "name": "Josef Malmström",
        "email": "josef.malmstrom@arm.com",
        "time": "Thu Jul 16 11:09:40 2026 +0200"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Jul 21 00:19:21 2026 -0700"
      },
      "message": "sync: Deprecate fetch-submodules flag names\n\nThe names for flags --fetch-submodules / --no-fetch-submodules are\nmisleading, since they impact the full sync operation (fetch and\ncheckout), not just the fetching.\n\nIntroduce new flags --recurse-submodules / --no-recurse-submodules\nand treat the old ones as deprecated aliases.\n\nChange-Id: I78339a3e0496a855c222c1869b27b578507886a7\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/608881\nCommit-Queue: Josef Malmstrom \u003cJosef.Malmstrom@arm.com\u003e\nReviewed-by: Gavin Mak \u003cgavinmak@google.com\u003e\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\nTested-by: Josef Malmstrom \u003cJosef.Malmstrom@arm.com\u003e\n"
    },
    {
      "commit": "eeba6f268d0220bc928ed7af41d310dfbe215205",
      "tree": "60dbb9793ede294214181e175c9c92a8d6fc6ae9",
      "parents": [
        "1729aaebaed8912cec20e5191d961400c08e98b1"
      ],
      "author": {
        "name": "Rahul Yadav",
        "email": "yadavrah@google.com",
        "time": "Fri Jul 10 08:39:24 2026 -0700"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Jul 20 07:56:03 2026 -0700"
      },
      "message": "hooks: pass yes flag when available\n\nPass the -y flag as a keyword argument \"yes\" to the hook main function.\nThis allows upload hooks (such as auto-fixers) to automatically\napply fixes when the -y flag is passed, rather than prompting the user.\n\nBug: 498893733\nChange-Id: I12096029aa3af471ba9175314d749deb0ebd1007\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/605261\nCommit-Queue: Rahul Yadav \u003cyadavrah@google.com\u003e\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\nTested-by: Rahul Yadav \u003cyadavrah@google.com\u003e\n"
    },
    {
      "commit": "1729aaebaed8912cec20e5191d961400c08e98b1",
      "tree": "dd79e3469727929b249e492e0819f2408a2f8851",
      "parents": [
        "978adb7ea504ae5c9238d03cea63f916035765c4"
      ],
      "author": {
        "name": "Ajay Gupta",
        "email": "ajagup@qti.qualcomm.com",
        "time": "Fri Apr 17 12:43:57 2026 +0530"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Jul 16 11:51:00 2026 -0700"
      },
      "message": "project: Skip superproject upstream check for MetaProjects\n\nThe superproject-gated upstream check in _CheckForImmutableRevision\nonly applies to user projects listed in the manifest. MetaProjects\n(ManifestProject and RepoProject) never participate in a superproject\nrelationship, so evaluating git_superproject.UseSuperproject(...,\nself.manifest) for them serves no purpose and, worse, calls the\nmanifest.superproject property which forces a manifest load.\n\nDuring repo init, ManifestProject._ConfigureDependencies calls\nself.Sync_NetworkHalf before manifest.xml has been linked into\n.repo/. That reaches _CheckForImmutableRevision, which triggered the\nmanifest load and failed with:\n\n  ManifestParseError: .../.repo/manifest.xml: [Errno 2] No such file\n  or directory\n\nbreaking fresh repo init with SHA-based --manifest-branch combined\nwith --manifest-upstream-branch.\n\nFactor the \"should we consult the superproject for upstream?\"\ndecision into a small overridable hook, _UseSuperprojectForUpstream.\nProject\u0027s default delegates to git_superproject.UseSuperproject;\nMetaProject overrides it to return False, localizing the\nMetaProject-specific behavior to MetaProject.\n\nTest verifies that calling _CheckForImmutableRevision on a\nManifestProject whose manifest.xml is not yet on disk returns False\nwithout raising and does not create the file.\n\nChange-Id: I22059109243d914036c06c6fe0081a5aba05da89\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/574201\nReviewed-by: Gavin Mak \u003cgavinmak@google.com\u003e\nCommit-Queue: Ajay Gupta \u003cajagup@qti.qualcomm.com\u003e\nTested-by: Ajay Gupta \u003cajagup@qti.qualcomm.com\u003e\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\nReviewed-by: Nasser Grainawi \u003cnasser.grainawi@oss.qualcomm.com\u003e\n"
    },
    {
      "commit": "978adb7ea504ae5c9238d03cea63f916035765c4",
      "tree": "2c75b3585c3f13dab843667a0842376fada75cbc",
      "parents": [
        "0398c6718e8a17c374d868fbf253530bbc6ca13c"
      ],
      "author": {
        "name": "Josef Malmström",
        "email": "josef.malmstrom@arm.com",
        "time": "Mon Jul 13 12:50:52 2026 +0200"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Jul 16 01:19:51 2026 -0700"
      },
      "message": "sync: Add CLI flag for globally disabling submodule fetch\n\nA global setting for disabling fetching of submodules is useful\nsince this can currently otherwise only be done by modifying\nthe manifest, or by explicitly providing projects on command line.\n\nAdd this setting as --no-fetch-submodules to mirror the existing\n--fetch-submodules.\n\nChange-Id: Ic727c54f11a594aa52315751284b87138cf246bb\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/607641\nCommit-Queue: Josef Malmstrom \u003cJosef.Malmstrom@arm.com\u003e\nReviewed-by: Gavin Mak \u003cgavinmak@google.com\u003e\nTested-by: Josef Malmstrom \u003cJosef.Malmstrom@arm.com\u003e\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\n"
    },
    {
      "commit": "0398c6718e8a17c374d868fbf253530bbc6ca13c",
      "tree": "872ceb12d035484f9f7d1b35ad61971dbfe75a75",
      "parents": [
        "3bb4871c4407c9029be9741ec40f261f1ead377d"
      ],
      "author": {
        "name": "Brian Gan",
        "email": "brgan@google.com",
        "time": "Tue Jul 07 21:19:56 2026 +0000"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Jul 07 14:55:56 2026 -0700"
      },
      "message": "color: Replace anonymous sentinel with named class\n\nReplace the bare `object()` sentinel used for `_CHECK_CONSOLE` with an\ninstance of a dedicated `_CheckConsoleSentinel` class. This gives the\nsentinel a meaningful repr and type, making it easier to identify in\ndebugging output and type checks compared to an opaque `\u003cobject\u003e`.\n\nChange-Id: I916521d47ba13207e29a2412e00f3576aff8afff\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/605021\nCommit-Queue: Brian Gan \u003cbrgan@google.com\u003e\nTested-by: Brian Gan \u003cbrgan@google.com\u003e\nReviewed-by: Gavin Mak \u003cgavinmak@google.com\u003e\n"
    },
    {
      "commit": "3bb4871c4407c9029be9741ec40f261f1ead377d",
      "tree": "bb7b0ce7d12620a22c66ed74a68bea1e667a5180",
      "parents": [
        "35bbf701d04de5c6a71937279bc3d16f6ce36808"
      ],
      "author": {
        "name": "Gavin Mak",
        "email": "gavinmak@google.com",
        "time": "Tue Jul 07 18:53:21 2026 +0000"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Jul 07 13:40:52 2026 -0700"
      },
      "message": "rebase: Resolve revisionExpr to tracking branch for --onto-manifest\n\nWhen running `repo rebase -m` (`--onto-manifest`), the command uses the\nraw `revisionExpr` from the manifest (e.g. `main`) directly as the\n`--onto` target. This can fail or behave incorrectly if it should\nreference the local tracking branch (e.g. `refs/remotes/\u003cremote\u003e/main`).\n\nResolve `project.revisionExpr` to its local tracking branch using\n`project.GetRemote().ToLocal()`. Fall back to using the raw\n`revisionExpr` value if the resolution fails (raising a `GitError`).\n\nBug: 532028666\nChange-Id: I4c1bca1374a5842688be227f6aa2afffcdad5397\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/604941\nReviewed-by: Brian Gan \u003cbrgan@google.com\u003e\nTested-by: Gavin Mak \u003cgavinmak@google.com\u003e\nCommit-Queue: Gavin Mak \u003cgavinmak@google.com\u003e\n"
    },
    {
      "commit": "35bbf701d04de5c6a71937279bc3d16f6ce36808",
      "tree": "dd85fb9c0d2fcaa8b5685fe8e775ca1cf6ab17a3",
      "parents": [
        "881af15cdc4a72894adc9e6b9504e6ca6d4d7c8e"
      ],
      "author": {
        "name": "Brian Gan",
        "email": "brgan@google.com",
        "time": "Tue Jun 30 21:38:51 2026 +0000"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Jul 01 15:59:45 2026 -0700"
      },
      "message": "color: Treat \"true\" and \"yes\" as \"auto\", not \"always\"\n\nPer the git documentation for color.ui [1], setting color.ui to \"true\"\n(or \"yes\") should behave identically to \"auto\", enabling color only\nwhen output is written to a terminal or an active pager. Previously,\nrepo was equating \"true\" and \"yes\" with \"always\", which caused color\nescape codes to be emitted unconditionally, even when output was piped\nor redirected.\n\nReplace the duplicated string-matching logic in SetDefaultColoring and\nColoring.__init__ with a single CONFIG_TO_COLOR_SETTING dict that maps\nall git color config values to their behavior. This makes the mapping\neasy to verify against the git docs and impossible to get out of sync\nbetween the two call sites.\n\nAdded tests for SetDefaultColoring and Coloring.__init__ covering\nall color mode values (auto, true, yes, always, never, no, false),\ncase insensitivity, TTY vs pipe behavior, active pager detection,\nand unrecognised input.\n\n[1] https://git-scm.com/docs/git-config#Documentation/git-config.txt-colorui\n\nBug: 295841573\nChange-Id: I8a04b9c7e4154de37ed7518c010233039e0afdc9\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/602981\nTested-by: Brian Gan \u003cbrgan@google.com\u003e\nReviewed-by: Gavin Mak \u003cgavinmak@google.com\u003e\nCommit-Queue: Brian Gan \u003cbrgan@google.com\u003e\n"
    },
    {
      "commit": "881af15cdc4a72894adc9e6b9504e6ca6d4d7c8e",
      "tree": "fcd849fb32ca010487ffc4e32a23f3de1637437b",
      "parents": [
        "fbc9c7919246ea74c295be888db4ae332cced202"
      ],
      "author": {
        "name": "Gavin Mak",
        "email": "gavinmak@google.com",
        "time": "Wed Jul 01 15:39:44 2026 -0700"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Jul 01 15:45:23 2026 -0700"
      },
      "message": "agents: run review agents manually\n\nThe review agents are broken right now, so don\u0027t run them automatically.\nThey should still be runnable on demand.\n\nChange-Id: I22e5ff46f917a49d0c267a0b1e8c63ae2165347d\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/603461\nReviewed-by: Brian Gan \u003cbrgan@google.com\u003e\nCommit-Queue: Brian Gan \u003cbrgan@google.com\u003e\nTested-by: Gavin Mak \u003cgavinmak@google.com\u003e\nTested-by: Brian Gan \u003cbrgan@google.com\u003e\n"
    },
    {
      "commit": "fbc9c7919246ea74c295be888db4ae332cced202",
      "tree": "16ae236200c38405f54de49ac37d1499be92b70a",
      "parents": [
        "ead4b2d7aa86fde803066f59c1dda94aefe2b9fe"
      ],
      "author": {
        "name": "Brian Gan",
        "email": "brgan@google.com",
        "time": "Tue Jun 30 21:11:54 2026 +0000"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Jun 30 15:35:57 2026 -0700"
      },
      "message": "tests: Fix test compatibility with Python 3.14 forkserver\n\nPython 3.14 changed the default multiprocessing start method on Linux\nfrom \"fork\" to \"forkserver\". The test_forall_all_projects_called_once\ntest uses mock.patch.object on Project.GetRevisionId, but class-level\nmock patches do not survive into forkserver worker processes because\nthey start from a clean Python interpreter rather than inheriting the\nparent\u0027s memory.\n\nReplace the mock with setting revisionId directly on each Project\ninstance so GetRevisionId() short-circuits without touching git.\nThis works with any multiprocessing start method since the string\nattribute is part of the Project objects stored in _parallel_context,\nwhich is properly serialized to workers via initargs.\n\nBug: 425319437\nChange-Id: Icd3bbd010921d7652bb2425fad85974df9198367\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/602941\nTested-by: Brian Gan \u003cbrgan@google.com\u003e\nCommit-Queue: Brian Gan \u003cbrgan@google.com\u003e\nReviewed-by: Gavin Mak \u003cgavinmak@google.com\u003e\n"
    },
    {
      "commit": "ead4b2d7aa86fde803066f59c1dda94aefe2b9fe",
      "tree": "7f1f0792f9435263a4e85a7effd97834164de32d",
      "parents": [
        "e7cac4bca6b8e4276a5a64287653b5c56555d6f4"
      ],
      "author": {
        "name": "Gavin Mak",
        "email": "gavinmak@google.com",
        "time": "Mon Jun 15 23:23:04 2026 +0000"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Jun 30 13:20:15 2026 -0700"
      },
      "message": "sync: Implement fetchcmd for standard Git layouts\n\nIntroduce support for `repo.fetchcmd` configuration, allowing users to\nspecify a custom command to fetch project data instead of\n`_RemoteFetch`.\n\nWhen `repo.fetchcmd` is specified, `repo` will execute it instead of\n`_RemoteFetch` during the network half of sync. Note that\n`repo.fetchcmd` requires `repo.uselocalgitdirs` to be enabled.\n\nThe command is executed in a subshell with project-context environment\nvariables, including the new `REPO_TREV` (target revision resolved to a\ncommit hash) and `REPO_PROJECT_FETCH_URL`.\n\nAfter execution, `repo` verifies that the target commit is available and\nthat the tracking ref and FETCH_HEAD are correctly updated.\n\nTested with:\n```\n\u003e ~/git-repo/repo init -u https://android-review.googlesource.com/platform/manifest \\\n    --repo-url file:///usr/local/google/home/gavinmak/git-repo \\\n    --groups developers \\\n    --no-repo-verify \\\n    --use-local-gitdirs\n...\n\n\u003e git config --file .repo/manifests.git/config repo.fetchcmd \u0027mkdir -p $REPO_PATH \u0026\u0026 cd $REPO_PATH \u0026\u0026 if [ ! -d .git ]; then git init \u0026\u0026 git remote add aosp $REPO_PROJECT_FETCH_URL; fi \u0026\u0026 git fetch aosp $REPO_TREV \u0026\u0026 git reset --hard $REPO_TREV \u0026\u0026 mkdir -p .git/refs/remotes/aosp \u0026\u0026 echo $REPO_TREV \u003e .git/refs/remotes/aosp/main \u0026\u0026 echo $REPO_TREV \u003e .git/FETCH_HEAD\u0027\n\n\u003e ~/git-repo/repo sync -j32\nwarning: repo is not tracking a remote branch, so it will not receive updates; run `repo init --repo-rev\u003dstable` to fix.\nYou are currently enrolled in Git submodules experiment (go/android-submodules-quickstart).  Use --no-use-superproject to override.\n\nSyncing: 100% (4/4), done in 1m15.686s\nFinalizing sync state...\nrepo sync has finished successfully.\n```\n\nBug: 513329573\nChange-Id: I754d3f3c78e86fdeee1a72115297a75b571bc497\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/583883\nReviewed-by: Becky Siegel \u003cbeckysiegel@google.com\u003e\nTested-by: Gavin Mak \u003cgavinmak@google.com\u003e\nCommit-Queue: Gavin Mak \u003cgavinmak@google.com\u003e\n"
    },
    {
      "commit": "e7cac4bca6b8e4276a5a64287653b5c56555d6f4",
      "tree": "e8ca4cb8a677489515a3bd914614aae2fb445f55",
      "parents": [
        "91986011b012ca7cf881246976282dd581b88ad3"
      ],
      "author": {
        "name": "Brian Gan",
        "email": "brgan@google.com",
        "time": "Mon Jun 29 20:15:53 2026 +0000"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Jun 30 11:13:14 2026 -0700"
      },
      "message": "status: Show ahead/behind info for local branches\n\nWhen viewing `repo status`, it is difficult to distinguish between branches that have active unpushed changes and stale branches that are fully synced. Previously, developers had to run commands like `repo forall -c \"git status\"` to see their ahead/behind counts.\n\nThis change updates Project.PrintWorkTreeStatus to automatically calculate and display the number of commits a branch is ahead and/or behind its upstream tracking branch. We use `git rev-list --left-right --count` to fetch this information natively and efficiently.\n\nIf the branch is completely synced with upstream, no extra text is shown.\n\nAdded tests for ahead-only, behind-only, diverged, no-tracking, and fully-synced branch states.\n\nBug: 319412954\nChange-Id: I23879b2d472c7a7e11d01b565428a84b1b4f09c1\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/602423\nReviewed-by: Gavin Mak \u003cgavinmak@google.com\u003e\nTested-by: Brian Gan \u003cbrgan@google.com\u003e\nCommit-Queue: Brian Gan \u003cbrgan@google.com\u003e\n"
    },
    {
      "commit": "91986011b012ca7cf881246976282dd581b88ad3",
      "tree": "d4791c5b21e2f667946815dfe43c4dc1fcd5079a",
      "parents": [
        "a27dbcdb7bba1b8a2cc84112fa31c8f9f818604e"
      ],
      "author": {
        "name": "Gavin Mak",
        "email": "gavinmak@google.com",
        "time": "Mon Jun 29 10:42:01 2026 -0700"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Jun 30 09:19:35 2026 -0700"
      },
      "message": "info: Parallelize project data gathering for JSON output\n\nhttps://gerrit-review.googlesource.com/c/git-repo/+/581921 parallelized\n`repo info` for text output. This commit does the same for JSON output\nformat.\n\nBenchmarked `repo info --format\u003djson` on an Android workspace with ~3k\nprojects (N\u003d3):\n- Before (sequential): 1m 30s average\n- After (parallelized): 46s average (~2x speedup)\n\nVerified that the JSON output is identical before and after.\n\nBug: 526685287\nChange-Id: If573223aba584f8b932f87d29e34ed565c5c930a\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/601861\nCommit-Queue: Gavin Mak \u003cgavinmak@google.com\u003e\nReviewed-by: Brian Gan \u003cbrgan@google.com\u003e\nTested-by: Gavin Mak \u003cgavinmak@google.com\u003e\n"
    },
    {
      "commit": "a27dbcdb7bba1b8a2cc84112fa31c8f9f818604e",
      "tree": "f68592217a0d606d0cdc418efa2d7c825c80df6d",
      "parents": [
        "547dc9985ca6d401284b7ee0018721e8aa3324d3"
      ],
      "author": {
        "name": "Rahul Yadav",
        "email": "yadavrah@google.com",
        "time": "Mon Jun 29 09:27:57 2026 +0000"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Jun 30 04:44:38 2026 -0700"
      },
      "message": "git_trace2_event_log: Fix index out of range on empty config values\n\nIn git_trace2_event_log_base.py\u0027s GetDataEventName method, it parses\nvalue to identify if it represents a JSON list. When a config key has an\nempty string value, GetDataEventName evaluates value[0], which raises\nIndexError: string index out of range.\n\nThis change fixes the crash by checking if the value is a string and using\nstartswith/endswith to check for JSON lists instead of direct indexing.\n\nTest: PYTHONPATH\u003d. pytest tests/test_git_trace2_event_log.py\n\nBug: 512518342\nTAG\u003dagy\nCONV\u003dff5d70d7-e5b3-42b3-8f16-23b9e3070754\n\nChange-Id: Ic40a8c6a22df57d0e97f268f6e1bc8a14a5024a4\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/602201\nReviewed-by: Gavin Mak \u003cgavinmak@google.com\u003e\nTested-by: Rahul Yadav \u003cyadavrah@google.com\u003e\nCommit-Queue: Rahul Yadav \u003cyadavrah@google.com\u003e\n"
    },
    {
      "commit": "547dc9985ca6d401284b7ee0018721e8aa3324d3",
      "tree": "fd82c27f2cb49ffc27c40bb882970e4e539471e0",
      "parents": [
        "88a7e88e54d27f8d6068ba3d86fe61c291ab76a5"
      ],
      "author": {
        "name": "Gavin Mak",
        "email": "gavinmak@google.com",
        "time": "Wed Jun 24 14:24:52 2026 -0700"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Jun 29 11:06:23 2026 -0700"
      },
      "message": "repo: Normalize GNUPGHOME path for MSYS GPG on Windows\n\nConvert GNUPGHOME to a POSIX path using cygpath on Windows\nso MSYS GPG can read it correctly.\n\nBug: 510840000\nChange-Id: I7d25564dd6521f6e887ff45548f42984e709ef5e\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/601121\nTested-by: Gavin Mak \u003cgavinmak@google.com\u003e\nReviewed-by: Brian Gan \u003cbrgan@google.com\u003e\nCommit-Queue: Gavin Mak \u003cgavinmak@google.com\u003e\n"
    },
    {
      "commit": "88a7e88e54d27f8d6068ba3d86fe61c291ab76a5",
      "tree": "abe7a9ca75e6c42747618301ec4bb371a69393b3",
      "parents": [
        "c21a41c7ccc0350841cb57733f845dd2054bd285"
      ],
      "author": {
        "name": "Gavin Mak",
        "email": "gavinmak@google.com",
        "time": "Mon Jun 22 22:36:20 2026 +0000"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Jun 29 10:50:02 2026 -0700"
      },
      "message": "info: Report actual checked-out HEAD revision\n\nWhen `repo info` runs, the reported \"Current revision\" is resolved using\nthe manifest\u0027s target branch tracking ref (e.g. refs/remotes/goog/main).\n\nIntroduce Project.GetHeadRevisionId(), which gets the checked-out HEAD\ncommit in the worktree, and use it in `repo info` with a fallback to the\nold behavior if the project is not checked out.\n\nBug: 526685287\nChange-Id: I72280ce27daa210cada27d722a94e365644f06e0\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/599481\nReviewed-by: Brian Gan \u003cbrgan@google.com\u003e\nCommit-Queue: Gavin Mak \u003cgavinmak@google.com\u003e\nTested-by: Gavin Mak \u003cgavinmak@google.com\u003e\n"
    },
    {
      "commit": "c21a41c7ccc0350841cb57733f845dd2054bd285",
      "tree": "588fdb46f7d4015925e513a6b141afacf3a7e953",
      "parents": [
        "6586efe79ab12e59466b67eaf59d19002abdf268"
      ],
      "author": {
        "name": "Gavin Mak",
        "email": "gavinmak@google.com",
        "time": "Tue Jun 23 22:47:32 2026 +0000"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Jun 26 15:40:55 2026 -0700"
      },
      "message": "git_config: Support SHA-256 object IDs\n\nUpdate ID_RE to match both 40-char (SHA-1) and 64-char (SHA-256) IDs as\npart of Git 3.0 support.\n\nBug: 483758905\nChange-Id: Ie5d9a2a5df4c6e7adda7f1d89f1bfb7724846057\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/600341\nReviewed-by: Brian Gan \u003cbrgan@google.com\u003e\nTested-by: Gavin Mak \u003cgavinmak@google.com\u003e\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\nCommit-Queue: Gavin Mak \u003cgavinmak@google.com\u003e\n"
    },
    {
      "commit": "6586efe79ab12e59466b67eaf59d19002abdf268",
      "tree": "4fb5ad140585ee2f1e3eac86e8be8387d23d6b8c",
      "parents": [
        "3af9e2f1462a13a3e344b4fd2e6ed6c4f5403f72"
      ],
      "author": {
        "name": "Brian Gan",
        "email": "brgan@google.com",
        "time": "Thu Jun 25 20:48:34 2026 +0000"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Jun 25 16:07:53 2026 -0700"
      },
      "message": "man: disable line wrapping\n\nWhen help2man runs the repo script to generate man pages, the argparse\nmodule relies on the COLUMNS environment variable to wrap help text.\nThis wrapping can cause URLs and descriptions to be awkwardly broken\nacross lines. Setting COLUMNS\u003d\"10000\" prevents argparse from wrapping\nthe output, keeping URLs intact in the generated man pages.\n\nAdditionally, this fixes a broken git documentation URL fragment for\n--partial-clone in the repo script.\n\nBug: 295374161\nChange-Id: I0c79f37fbfe2bebe71ff90585f2e5e1f88ea33cb\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/601482\nTested-by: Brian Gan \u003cbrgan@google.com\u003e\nCommit-Queue: Brian Gan \u003cbrgan@google.com\u003e\nReviewed-by: Gavin Mak \u003cgavinmak@google.com\u003e\n"
    },
    {
      "commit": "3af9e2f1462a13a3e344b4fd2e6ed6c4f5403f72",
      "tree": "86dae645176976811c024fcb2e2a4e5422b3fdf0",
      "parents": [
        "d32b70275c3d1541026aa87d8b1bea55cac215c5"
      ],
      "author": {
        "name": "Sainath Varanasi",
        "email": "varanasisai@google.com",
        "time": "Thu Jun 25 22:09:03 2026 +0000"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Jun 25 15:28:46 2026 -0700"
      },
      "message": "project: fix sync of shallow projects sharing objdir\n\nRepo sync fails when the following conditions are met:\n\n* There are several checkouts of the same project\n  in different paths.\n* The checkouts are using git hashes as revisions\n  (not branches).\n* There is a clone-depth set on these projects.\n* sync-c\u003d\"true\" is set in the manifest.\n* The revision specified in the manifest\n  has moved forward since the first repo init.\n\nThe sync fails because only the first gitdir gets the \"shallow\" file,\nand subsequent dirs can\u0027t be synced.\n\nDo not optimize away the fetch when the conditions above happen.\n\nSimplified the boolean check in Sync_NetworkHalf and _RemoteFetch\nusing has_shallow, renamed loop variable to avoid shadowing.\n\nTest: create a manifest matching conditions above, repo init,\nforward the hash, and repo sync.\nTest: added tests in test_project.py\nBug: 505072873\nOriginally-by: Elvira Khabirova \u003celvira.khabirova@volvocars.com\u003e\n\nChange-Id: I37c533c382e34fc5ddab489c5593b9e5d3875be2\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/601441\nTested-by: Sainath Varanasi \u003cvaranasisai@google.com\u003e\nReviewed-by: Gavin Mak \u003cgavinmak@google.com\u003e\nCommit-Queue: Sainath Varanasi \u003cvaranasisai@google.com\u003e\n"
    },
    {
      "commit": "d32b70275c3d1541026aa87d8b1bea55cac215c5",
      "tree": "12216ea44d8921e18d5ce1fabe0da9e059deefc2",
      "parents": [
        "7f585437036e056389fbaa5904ceb926ae73033b"
      ],
      "author": {
        "name": "Gavin Mak",
        "email": "gavinmak@google.com",
        "time": "Mon Jun 22 14:23:06 2026 -0700"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Jun 24 13:31:45 2026 -0700"
      },
      "message": "agents: Add CRAG-generated review agents and skills\n\nWith cl/930783235, this change sets up two AI review agents that run\nautomatically on new changes.\n\nBug: 522929179\nChange-Id: I315a7ec327dd30af842ec890818cf697756fd55c\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/596721\nCommit-Queue: Gavin Mak \u003cgavinmak@google.com\u003e\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\nTested-by: Gavin Mak \u003cgavinmak@google.com\u003e\n"
    },
    {
      "commit": "7f585437036e056389fbaa5904ceb926ae73033b",
      "tree": "26414d513b1eef503b6a8b7125158e42aee98330",
      "parents": [
        "39c0b6090071c1039faf9dea2be9ca285054e4f6"
      ],
      "author": {
        "name": "Nasser Grainawi",
        "email": "nasser.grainawi@oss.qualcomm.com",
        "time": "Wed Apr 15 10:53:21 2026 -0700"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Jun 22 16:19:30 2026 -0700"
      },
      "message": "gitignore: Add AI agent files\n\nAllow contributors to use local AI agent files without polluting the\nrepository with brand-specific files.\n\nFurther AI agent improvements will be done roughly following the same\nframework being used for Chromium [1].\n\n[1] https://chromium.googlesource.com/chromium/src/+/HEAD/agents\n\nChange-Id: I791f318b4f9cad1705f94e05522089809097cc96\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/573601\nTested-by: Nasser Grainawi \u003cnasser.grainawi@oss.qualcomm.com\u003e\nReviewed-by: Gavin Mak \u003cgavinmak@google.com\u003e\nCommit-Queue: Mike Frysinger \u003cvapier@google.com\u003e\n"
    },
    {
      "commit": "39c0b6090071c1039faf9dea2be9ca285054e4f6",
      "tree": "dc670de4b75cd7517abd1fec65ac91752d568caa",
      "parents": [
        "cd307a6089f136e8f4f0fe85ce0393782cf99af1"
      ],
      "author": {
        "name": "Rahul Yadav",
        "email": "yadavrah@google.com",
        "time": "Mon Jun 08 15:28:23 2026 +0000"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Jun 18 09:48:49 2026 -0700"
      },
      "message": "sync: Support pluggable remote helpers for smart sync manifest server.\n\nIntroduce support for pluggable remote helpers (declared via the\noptional \u0027helper\u0027 attribute in \u003cmanifest-server\u003e) to dynamically resolve\nproxy addresses. Route the XML-RPC manifest server connection through\nthe resolved proxy.\n\nBug: b/517477903\nChange-Id: I3b6b8ea2640bb077521df4b4a9e8a34a8c6ecdad\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/591642\nTested-by: Rahul Yadav \u003cyadavrah@google.com\u003e\nCommit-Queue: Rahul Yadav \u003cyadavrah@google.com\u003e\nReviewed-by: Gavin Mak \u003cgavinmak@google.com\u003e\n"
    },
    {
      "commit": "cd307a6089f136e8f4f0fe85ce0393782cf99af1",
      "tree": "1d81589db855c92f7771a9ed1fc38ac0c1d09d82",
      "parents": [
        "4b462634e0841f47a035167cf7c08ac21abf53a2"
      ],
      "author": {
        "name": "Gavin Mak",
        "email": "gavinmak@google.com",
        "time": "Mon Jun 15 23:22:53 2026 +0000"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Jun 16 10:30:47 2026 -0700"
      },
      "message": "project: Add REPO_PROJECT_FETCH_URL environment variable\n\nAdd REPO_PROJECT_FETCH_URL to Project.GetEnvVars(), which resolves to\nthe remote fetch URL of the project. This is useful for exposing the\nURL to custom fetch commands or other external scripts.\n\nBug: 513329573\nChange-Id: Ic2b0a83493934d16bb1152366ee4e1a2c35ea2dc\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/596121\nTested-by: Gavin Mak \u003cgavinmak@google.com\u003e\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\nCommit-Queue: Gavin Mak \u003cgavinmak@google.com\u003e\n"
    },
    {
      "commit": "4b462634e0841f47a035167cf7c08ac21abf53a2",
      "tree": "2ebf9c378b124d857a0e06fa6916dd726b9982b0",
      "parents": [
        "d9d86fb59533853adfce354860a2c01dfa72f69f"
      ],
      "author": {
        "name": "Josef Malmström",
        "email": "josef.malmstrom@arm.com",
        "time": "Fri Jun 05 10:05:42 2026 +0200"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Jun 16 00:21:27 2026 -0700"
      },
      "message": "sync: do not init sibling submodules in parallel\n\nInitializing a submodule requires locking \u003cparent\u003e/.git/config.\nAs the implementation was currently doing this in parallel for\nsibling submodules, it lead to a race condition causing\nintermittent errors like:\n\nerror: could not lock config file .git/config: File exists\n\nThis commit enforces that sibling submodules are initialized\nsequentially, eliminating the race condition.\n\nChange-Id: I5ffb3de90276ba43e262d0e279a3d34324220b63\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/591241\nTested-by: Josef Malmstrom \u003cJosef.Malmstrom@arm.com\u003e\nCommit-Queue: Josef Malmstrom \u003cJosef.Malmstrom@arm.com\u003e\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\nReviewed-by: Gavin Mak \u003cgavinmak@google.com\u003e\n"
    },
    {
      "commit": "d9d86fb59533853adfce354860a2c01dfa72f69f",
      "tree": "5f9ba70fc0c87f89567cdbba478514e22f3ff60a",
      "parents": [
        "f7a24df00cdde9b1c2d51e5d0b03e8a36d655f76"
      ],
      "author": {
        "name": "Gavin Mak",
        "email": "gavinmak@google.com",
        "time": "Tue May 26 10:35:57 2026 -0700"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Jun 11 10:39:45 2026 -0700"
      },
      "message": "repo: Bump launcher version to 2.65\n\nhttps://gerrit-review.git.corp.google.com/c/git-repo/+/569001 didn\u0027t\nupdate the repo launcher script version for the newly added\n`--use-local-gitdirs` flag.\n\nBug: 513329573\nBug: 508146070\nChange-Id: I07ad939a40466ed50e439c815608797689fd505f\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/587381\nTested-by: Gavin Mak \u003cgavinmak@google.com\u003e\nCommit-Queue: Gavin Mak \u003cgavinmak@google.com\u003e\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\n"
    },
    {
      "commit": "f7a24df00cdde9b1c2d51e5d0b03e8a36d655f76",
      "tree": "e98a0ec351d8fc9abacdc9a0156c83cdf524e1e5",
      "parents": [
        "e0bd39c691e365ce1988e1f727ddf8b37637599c"
      ],
      "author": {
        "name": "Gavin Mak",
        "email": "gavinmak@google.com",
        "time": "Thu Jun 04 21:54:33 2026 +0000"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Jun 05 09:16:22 2026 -0700"
      },
      "message": "project: handle corrupted projects in DeleteWorktree\n\nCatch GitError from IsDirty() during DeleteWorktree so corrupted\nprojects can be cleanly wiped instead of crashing.\n\nBug: 515415221\nChange-Id: Ic03ae77c30a722f9aa06f2220747251e0aea4ab7\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/591001\nCommit-Queue: Gavin Mak \u003cgavinmak@google.com\u003e\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\nTested-by: Gavin Mak \u003cgavinmak@google.com\u003e\n"
    },
    {
      "commit": "e0bd39c691e365ce1988e1f727ddf8b37637599c",
      "tree": "7b4deb6ecd6414648a3d83ea6231173a4f042ea7",
      "parents": [
        "c883613e317561579e164a7d92ea4347d502b86d"
      ],
      "author": {
        "name": "Gavin Mak",
        "email": "gavinmak@google.com",
        "time": "Tue May 26 11:10:44 2026 -0700"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed May 27 12:58:02 2026 -0700"
      },
      "message": "project: Extract project envvar generation to GetEnvVars\n\nMove project environment variable setup from subcmds/forall.py to a\nreusable Project.GetEnvVars() helper method.\n\nBug: 513329573\nChange-Id: I3b4b113aa5a086e5fa5eaf4461c7ce517d928610\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/583881\nTested-by: Gavin Mak \u003cgavinmak@google.com\u003e\nCommit-Queue: Gavin Mak \u003cgavinmak@google.com\u003e\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\n"
    },
    {
      "commit": "c883613e317561579e164a7d92ea4347d502b86d",
      "tree": "5c6c4a8bc0895791777b1eea4f5eed772ebfee8d",
      "parents": [
        "384c059f9e7c7497a1f003cbe9b50a49260f3f6d"
      ],
      "author": {
        "name": "Xin Li",
        "email": "delphij@google.com",
        "time": "Tue May 26 15:52:48 2026 -0700"
      },
      "committer": {
        "name": "Xin Li",
        "email": "delphij@google.com",
        "time": "Wed May 27 10:36:32 2026 -0700"
      },
      "message": "sync: Skip copyfile/linkfile for unavailable projects\n\nCommit 5534f16 made UpdateCopyLinkfileList to retry _CopyAndLinkFiles\nfor all projects in the manifest to handle directory-to-symlink\ntransistions. However, for partial sync\u0027s (e.g. repo sync \u003cproject\u003e),\nprojects not included in the sync may not have their local directories\npopulated, attempts to perform the operation on unavailable projects\nwould result in dangling symlinks, or errors like:\n\nerror: Cannot copy file \u003csource\u003e to \u003cdestination\u003e\n\nFix this by adding a check inside _CopyAndLinkFiles in project.py to\nso these operations happen only when the project\u0027s worktree exists\nand is a directory.\n\nTAG\u003dagy\nCONV\u003d90f5fca7-2199-4017-8f62-a010b0ab1dbf\n\nChange-Id: I9ae1e8d62d8fd129cb4535e574c38339c87af441\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/587501\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\nTested-by: Xin Li \u003cdelphij@google.com\u003e\n"
    },
    {
      "commit": "384c059f9e7c7497a1f003cbe9b50a49260f3f6d",
      "tree": "12f1c2a3a3a1b6b0ebeeb530948d28b5b1c6c42a",
      "parents": [
        "b8531133deb053b333a3e90ce3b91a6f448b034e"
      ],
      "author": {
        "name": "Gavin Mak",
        "email": "gavinmak@google.com",
        "time": "Thu May 14 22:44:02 2026 +0000"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue May 26 10:29:06 2026 -0700"
      },
      "message": "tests: Deduplicate test setup in test_project.py\n\nBug: 513329573\nChange-Id: Id729c590a69d2e81d4bce2942c65bd0b3ce3a11a\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/583882\nTested-by: Gavin Mak \u003cgavinmak@google.com\u003e\nCommit-Queue: Gavin Mak \u003cgavinmak@google.com\u003e\nReviewed-by: Dan Willemsen \u003cdwillemsen@google.com\u003e\n"
    },
    {
      "commit": "b8531133deb053b333a3e90ce3b91a6f448b034e",
      "tree": "e4ac7ddaaedc1e037018626568b5cad91070ae31",
      "parents": [
        "2d54384a5e59fddd0626ec091cc0ad11511d834e"
      ],
      "author": {
        "name": "Gavin Mak",
        "email": "gavinmak@google.com",
        "time": "Fri Apr 03 01:11:35 2026 +0000"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue May 26 10:26:25 2026 -0700"
      },
      "message": "init: Add --use-local-gitdirs for standard Git layouts\n\nIntroduce --use-local-gitdirs to bypass repo\u0027s symlink-based layouts in\nfavor of standard local .git directories.\n\nBug: 513329573\nBug: 508146070\nChange-Id: I53d1602e61be0b86964529bcbea3dc801471f9c9\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/569001\nTested-by: Gavin Mak \u003cgavinmak@google.com\u003e\nCommit-Queue: Gavin Mak \u003cgavinmak@google.com\u003e\nReviewed-by: Dan Willemsen \u003cdwillemsen@google.com\u003e\n"
    },
    {
      "commit": "2d54384a5e59fddd0626ec091cc0ad11511d834e",
      "tree": "c0a9d642bb4064a23df2044777b6f81f2c047473",
      "parents": [
        "1b4e7a04be7b49d8c0c5e161d36f209bca4b6498"
      ],
      "author": {
        "name": "Gavin Mak",
        "email": "gavinmak@google.com",
        "time": "Wed Apr 22 00:39:42 2026 +0000"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed May 20 12:28:55 2026 -0700"
      },
      "message": "sync: Add --superproject-rev flag to sync to specific revision\n\nAllow syncing the outer manifest to a state defined by a specific\nsuperproject revision. It updates the superproject, reads the manifest\ncommit from .supermanifest, and checks out the outer manifest project\nto that commit.\n\nSubmanifests are then processed normally, allowing them to be updated\nto the revisions specified in the new outer manifest state.\n\nBug: 416589884\nChange-Id: I304c37a2b8794f9b74cb7e5e209a8a93762bdb52\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/576321\nCommit-Queue: Gavin Mak \u003cgavinmak@google.com\u003e\nTested-by: Gavin Mak \u003cgavinmak@google.com\u003e\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\n"
    },
    {
      "commit": "1b4e7a04be7b49d8c0c5e161d36f209bca4b6498",
      "tree": "e806e49daa47688240c75f6d5fdb20cc97cec509",
      "parents": [
        "a94c9e2b521096ff961da1bc6daf97d74add121c"
      ],
      "author": {
        "name": "Josef Malmström",
        "email": "josef.malmstrom@arm.com",
        "time": "Wed May 06 16:19:52 2026 +0200"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed May 20 06:05:57 2026 -0700"
      },
      "message": "Fix submodules not synced for repeated repo\n\nIf I check out e.g. multiple branches of the same repo in one\nmanifest, only the submodules of one checkout are synced.\n\nFix this by adding the relative path  of the checkout as a key\nto the mapping of derived projects, preventing overwrite.\n\nThe fix was originally proposed here:\nhttps://issues.gerritcodereview.com/issues/40013218\n\nBug: 40013218\nChange-Id: Ia86518ccf2c0af7bd7e4daf8d703a55b7e10ba52\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/581062\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\nReviewed-by: Gavin Mak \u003cgavinmak@google.com\u003e\nCommit-Queue: Josef Malmstrom \u003cJosef.Malmstrom@arm.com\u003e\nTested-by: Josef Malmstrom \u003cJosef.Malmstrom@arm.com\u003e\n"
    },
    {
      "commit": "a94c9e2b521096ff961da1bc6daf97d74add121c",
      "tree": "bc17a531062493aee0c12d8bc549a137282f870d",
      "parents": [
        "51021fb209b118e6ff4350016657ce5f020b1bc2"
      ],
      "author": {
        "name": "gurusai-voleti",
        "email": "gvoleti@google.com",
        "time": "Mon Apr 27 08:15:09 2026 +0000"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu May 14 21:31:49 2026 -0700"
      },
      "message": "Automated: Migrate gerrit/git-repo from gsutil to gcloud storage\n\nBug: 486536908\nChange-Id: I248b093e189a3784b8959e837a5d66857f1ce0fc\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/577201\nReviewed-by: Gavin Mak \u003cgavinmak@google.com\u003e\nTested-by: Guru sai rama subbarao Voleti (xWF) \u003cgvoleti@google.com\u003e\nCommit-Queue: Guru sai rama subbarao Voleti (xWF) \u003cgvoleti@google.com\u003e\n"
    },
    {
      "commit": "51021fb209b118e6ff4350016657ce5f020b1bc2",
      "tree": "f33f17dd35fab90bb1f83483efc5e0ab14faede1",
      "parents": [
        "d453273f0638f7090846a9f95e3cae578569a6c7"
      ],
      "author": {
        "name": "Gavin Mak",
        "email": "gavinmak@google.com",
        "time": "Tue May 12 20:21:14 2026 +0000"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu May 14 13:19:55 2026 -0700"
      },
      "message": "abandon/start/info: Make them respect smart sync override\n\nCall TryOverrideManifestWithSmartSync in start, abandon, and info\ncommands.\n\nThis ensures they pick up the pinned revisions from the smart sync\noverride manifest if it exists, rather than falling back to ToT from\nthe default manifest.\n\nBug: 279204331\nChange-Id: I637f054a77773805daf0bf9cf5a712d82a5959b4\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/582503\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\nTested-by: Gavin Mak \u003cgavinmak@google.com\u003e\nCommit-Queue: Gavin Mak \u003cgavinmak@google.com\u003e\n"
    },
    {
      "commit": "d453273f0638f7090846a9f95e3cae578569a6c7",
      "tree": "80d0d994901c7023b60efaa42dcd1c978917d309",
      "parents": [
        "0129ac1c460381ea42e907901c256561d1d8f353"
      ],
      "author": {
        "name": "Gavin Mak",
        "email": "gavinmak@google.com",
        "time": "Tue May 12 20:21:10 2026 +0000"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu May 14 13:19:26 2026 -0700"
      },
      "message": "command: Move smart sync override logic to Command base class\n\nDeduplicate the logic for loading `smart_sync_override.xml` by\nmoving it from `forall.py` to the `Command` base class. This allows\nother commands to reuse it to respect smart tags.\n\nBug: 279204331\nChange-Id: I6f2f03995266c2a68c3225cacb92b2f580a89178\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/582502\nTested-by: Gavin Mak \u003cgavinmak@google.com\u003e\nCommit-Queue: Gavin Mak \u003cgavinmak@google.com\u003e\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\n"
    },
    {
      "commit": "0129ac1c460381ea42e907901c256561d1d8f353",
      "tree": "2159ba773b3f22ef4132978cb4172b08c24eb77d",
      "parents": [
        "bf8c59f4a05677e978eb0466a35b8896dce1613d"
      ],
      "author": {
        "name": "Mike Frysinger",
        "email": "vapier@google.com",
        "time": "Thu May 14 09:49:06 2026 -0400"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu May 14 09:03:56 2026 -0700"
      },
      "message": "docs: drop period in headers\n\nWe don\u0027t do this in most places, so standardize the outliers.\n\nChange-Id: I80c1ef16c5fa7355dcb7797bc8e56852b22c24d5\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/583641\nTested-by: Mike Frysinger \u003cvapier@google.com\u003e\nCommit-Queue: Mike Frysinger \u003cvapier@google.com\u003e\nReviewed-by: Gavin Mak \u003cgavinmak@google.com\u003e\n"
    },
    {
      "commit": "bf8c59f4a05677e978eb0466a35b8896dce1613d",
      "tree": "2eb6004a8c8e025f2079f236631b4b48d2a1fa15",
      "parents": [
        "003f0407fc5a301105a457f5ddc9773f1224cc97"
      ],
      "author": {
        "name": "Mike Frysinger",
        "email": "vapier@google.com",
        "time": "Wed May 13 00:33:49 2026 -0400"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu May 14 09:03:52 2026 -0700"
      },
      "message": "run_tests: help2man: update to latest release\n\nChange-Id: I30e4a6452ac5504b782fe545a59ca1f58ac70385\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/583621\nTested-by: Mike Frysinger \u003cvapier@google.com\u003e\nReviewed-by: Gavin Mak \u003cgavinmak@google.com\u003e\nCommit-Queue: Mike Frysinger \u003cvapier@google.com\u003e\n"
    },
    {
      "commit": "003f0407fc5a301105a457f5ddc9773f1224cc97",
      "tree": "34b3f9612ab576b02293a67f6b1893587723324e",
      "parents": [
        "1db50e49fb7f99a61f7a3ceee3e1f6289208e249"
      ],
      "author": {
        "name": "Josef Malmström",
        "email": "josef.malmstrom@arm.com",
        "time": "Mon May 04 14:11:46 2026 +0200"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed May 13 00:00:27 2026 -0700"
      },
      "message": "Fix missing `None` check in Remote.Save\n\nThis code was causing an exception in cases where `pushUrl` was set\nbut `projectname` was not.\n\nThis can happen when `pushUrl` is set for the manifest repo which does\nnot have a `projectname`. For example:\n\nrepo init --manifest-url ssh://url.to/my/manifest\n\ncd .repo/manifests\ngit config remote.origin.pushurl ssh://url.to/my/manifest\n\nrepo init --manifest-url ssh://url.to/my/manifest --repo-rev main\n\nThe last `repo init` invocation causes an error.\n\nChange-Id: Ibb68c8446880cfbac22feee595d1fd1b678c7ade\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/579162\nReviewed-by: Gavin Mak \u003cgavinmak@google.com\u003e\nCommit-Queue: Josef Malmstrom \u003cJosef.Malmstrom@arm.com\u003e\nTested-by: Josef Malmstrom \u003cJosef.Malmstrom@arm.com\u003e\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\n"
    },
    {
      "commit": "1db50e49fb7f99a61f7a3ceee3e1f6289208e249",
      "tree": "5477fb7c061034df31db59a15c2741f5b575817c",
      "parents": [
        "c97a306fe7e9493fc3bed034da5e84bcd5f67a41"
      ],
      "author": {
        "name": "Josef Malmström",
        "email": "josef.malmstrom@arm.com",
        "time": "Mon May 04 14:16:40 2026 +0200"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed May 13 00:00:11 2026 -0700"
      },
      "message": "Add support for self referencing submodules\n\nWhen working with relative submodule paths, The \"./\" needs special\nhandling similar to \"../\".\n\nSee information on:\nhttps://git-scm.com/docs/git-submodule\nWhich currently states:\n\"\u003crepository\u003e is the URL of the new submodule’s origin repository.\nThis may be either an absolute URL, or (if it begins with ./ or ../),\nthe location relative to the superproject’s default remote\nrepository (Please note that to specify a repository foo.git which is\nlocated right next to a superproject bar.git, you’ll have to use\n../foo.git instead of ./foo.git - as one might expect when following\nthe rules for relative URLs - because the evaluation of relative URLs\nin Git is identical to that of relative directories).\"\n\nThe implementation also was not handling file/directory names\nstarting with \".\" or \"..\". Explicitly look for \"./\" and \"../\"\ninstead.\n\nChange-Id: I8ae68d61fb0cbb1624183b175236e98a36e4afdb\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/579182\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\nReviewed-by: Gavin Mak \u003cgavinmak@google.com\u003e\nCommit-Queue: Josef Malmstrom \u003cJosef.Malmstrom@arm.com\u003e\nTested-by: Josef Malmstrom \u003cJosef.Malmstrom@arm.com\u003e\n"
    },
    {
      "commit": "c97a306fe7e9493fc3bed034da5e84bcd5f67a41",
      "tree": "2d7f9c0d7ad84722a88a303c9e1153bd9450c0e3",
      "parents": [
        "5534f164d6aff567f7ea0b5b41e2e5bb35a0212c"
      ],
      "author": {
        "name": "Mike Frysinger",
        "email": "vapier@google.com",
        "time": "Tue May 12 13:25:09 2026 -0400"
      },
      "committer": {
        "name": "Mike Frysinger",
        "email": "vapier@google.com",
        "time": "Tue May 12 11:50:38 2026 -0700"
      },
      "message": "release: update-manpages: revert color filtering\n\nWe pull a pinned help2man from cipd now, so we should get stable\nbehavior between developers.  That means the color filtering should\nnot be necessary anymore, and we can drop the logic \u0026 unittest.\n\nChange-Id: Ib53e1ce7f8d610d7f624c9a019c79dc5f438ac0d\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/582402\nTested-by: Mike Frysinger \u003cvapier@google.com\u003e\nReviewed-by: Gavin Mak \u003cgavinmak@google.com\u003e\n"
    },
    {
      "commit": "5534f164d6aff567f7ea0b5b41e2e5bb35a0212c",
      "tree": "c5cfaedb059c82a61bf0972b743cd5470fdc7fb9",
      "parents": [
        "67e52a120b210f70b7a5de06996d9036f9f68011"
      ],
      "author": {
        "name": "Carlos Fernandez",
        "email": "carlosfsanz@meta.com",
        "time": "Thu May 07 09:00:33 2026 -0700"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue May 12 11:10:43 2026 -0700"
      },
      "message": "linkfile: Handle directory-to-symlink transitions safely\n\nWhen a manifest changes from individual linkfiles inside a directory\n(e.g. dest\u003d\".llms/rules\", dest\u003d\".llms/skills\") to a single linkfile\nfor the whole directory (e.g. dest\u003d\".llms\", src\u003d\"dot-llms\"), two\nthings need to happen:\n\n1. __linkIt must replace a real directory with a symlink.  Use\n   os.rmdir() instead of platform_utils.remove() for real directories.\n   rmdir only removes empty directories, so user-created content is\n   never deleted.\n\n2. UpdateCopyLinkfileList must handle the cleanup correctly:\n   - Use os.rmdir() for directories (safe for non-empty)\n   - Remove empty parent directories after cleaning old dests\n   - Retry _CopyAndLinkFiles for all projects, since in interleaved\n     sync mode _CopyAndLinkFiles runs before cleanup and may have\n     failed because the directory was not yet empty\n\nChange-Id: I0437b80beab98bce064cea81c11c47d699be91aa\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/569243\nTested-by: Carlos Fernandez \u003ccarlosfsanz@meta.com\u003e\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\nReviewed-by: Gavin Mak \u003cgavinmak@google.com\u003e\nCommit-Queue: Carlos Fernandez \u003ccarlosfsanz@meta.com\u003e\n"
    },
    {
      "commit": "67e52a120b210f70b7a5de06996d9036f9f68011",
      "tree": "26691a1515a19a7fd49b7019d6da0ef09c31d382",
      "parents": [
        "d5037230e94e50c30698f9dd8d9404e293e23c7e"
      ],
      "author": {
        "name": "Mike Frysinger",
        "email": "vapier@google.com",
        "time": "Tue May 12 13:17:59 2026 -0400"
      },
      "committer": {
        "name": "Mike Frysinger",
        "email": "vapier@google.com",
        "time": "Tue May 12 10:45:13 2026 -0700"
      },
      "message": "run_tests: leverage cipd when available for help2man\n\nThis tool isn\u0027t installed on CI bot images so we\u0027ve been skipping it,\nbut this is causing people to not run tests locally, and ignore errors.\nUse cipd to pull the tool in when available.\n\nThen revert a recent man change that the tool rejects.\n\nChange-Id: I1030d0070fd5a624656eba7434ae6ec99b2e3f2d\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/582401\nReviewed-by: Greg Edelston \u003cgredelston@google.com\u003e\nTested-by: Mike Frysinger \u003cvapier@google.com\u003e\n"
    },
    {
      "commit": "d5037230e94e50c30698f9dd8d9404e293e23c7e",
      "tree": "3e91817d0984bdef99f2fdc4f982675de328f5c0",
      "parents": [
        "7cc99b24c1869d54168708a2df6e6f936c36f980"
      ],
      "author": {
        "name": "Gavin Mak",
        "email": "gavinmak@google.com",
        "time": "Mon May 11 15:56:08 2026 -0700"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue May 12 10:41:47 2026 -0700"
      },
      "message": "sync: Re-raise KeyboardInterrupt in main process\n\nWhen running sync -j1, worker functions run directly in the main\nprocess. Swallowing KeyboardInterrupt causes the loop to continue to the\nnext project instead of aborting.\n\nRe-raise KeyboardInterrupt if running in the MainProcess, while\nmaintaining the suppression of stack traces in worker processes.\n\nBug: 468170157\nChange-Id: I156d66bc209a265f7fa25eea0eb88737d1b51a34\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/581342\nCommit-Queue: Gavin Mak \u003cgavinmak@google.com\u003e\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\nTested-by: Gavin Mak \u003cgavinmak@google.com\u003e\n"
    },
    {
      "commit": "7cc99b24c1869d54168708a2df6e6f936c36f980",
      "tree": "e2bb1235e55d9c57a259b618aa5b4b42eb6dd2da",
      "parents": [
        "12ad396f6708fa31cc4a979580a9456114b4beaa"
      ],
      "author": {
        "name": "Mike Frysinger",
        "email": "vapier@google.com",
        "time": "Tue May 12 12:19:59 2026 -0400"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue May 12 10:04:15 2026 -0700"
      },
      "message": "git_config: fix error message command output\n\nstr() inside an f-string is redundant.  Actually join the array together\nas a string to show a proper error message, and include the full command\nline, not the extra options passed in.\n\nBefore:\nerror.GitError: git config (\u0027--null\u0027, \u0027--list\u0027): fatal: unable to read config file \u0027xxx\u0027: No such file or directory\n\nAfter:\nerror.GitError: git config --system --includes --null --list: fatal: unable to read config file \u0027xxx\u0027: No such file or directory\n\nChange-Id: I8983389aa2e0de7808991e73e636b77810f04c4b\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/582341\nCommit-Queue: Mike Frysinger \u003cvapier@google.com\u003e\nTested-by: Mike Frysinger \u003cvapier@google.com\u003e\nReviewed-by: Gavin Mak \u003cgavinmak@google.com\u003e\n"
    },
    {
      "commit": "12ad396f6708fa31cc4a979580a9456114b4beaa",
      "tree": "cca60867e286b0be7f7fc7d64a7f6b198f3d643b",
      "parents": [
        "a6bc1b7cf0b4c71f9448eb57a2d478049d356c65"
      ],
      "author": {
        "name": "Greg Edelston",
        "email": "gredelston@google.com",
        "time": "Mon May 11 17:13:23 2026 -0600"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue May 12 09:59:07 2026 -0700"
      },
      "message": "info: Parallelize repo info to improve performance\n\nFor a large checkout like chromiumos or android, `repo info` takes a\nreally long time! On my machine it took ~6 minutes. On a randomly\nselected ChromiumOS cq-orchestrator build it took 4.1 minutes:\nhttps://ci.chromium.org/b/8682060180498819729. This adds up to a lot of\nwasted runtime for both humans and bots.\n\nThe problem is that `repo info` was single-threaded, which causes poor\nperformance when the checkout has 1000+ projects. We already have a\npattern for parallelization; let\u0027s use it.\n\nBUG\u003dNone\nTEST\u003dManually run, ensure no diff\n\nChange-Id: I6b82b9495eb2a0e602a142dd3a16f09217871e1b\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/581921\nTested-by: Greg Edelston \u003cgredelston@google.com\u003e\nCommit-Queue: Greg Edelston \u003cgredelston@google.com\u003e\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\n"
    },
    {
      "commit": "a6bc1b7cf0b4c71f9448eb57a2d478049d356c65",
      "tree": "4ccac49b9d5a5834274c761a6cfc23e7801e8e22",
      "parents": [
        "a98e4221139765f4475d7c0a524b59c688077e75"
      ],
      "author": {
        "name": "Gavin Mak",
        "email": "gavinmak@google.com",
        "time": "Mon May 11 19:19:14 2026 +0000"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon May 11 19:36:59 2026 -0700"
      },
      "message": "sync: Exclude stateless sync pruned projects from bloat check\n\nIf a project has been pruned for stateless sync, it has already\nundergone aggressive garbage collection. There should be no bloat\nto check for.\n\nChange-Id: I9233a4611e05b7a0b7c097827d6f408144f7380d\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/581841\nTested-by: Gavin Mak \u003cgavinmak@google.com\u003e\nReviewed-by: Becky Siegel \u003cbeckysiegel@google.com\u003e\nCommit-Queue: Gavin Mak \u003cgavinmak@google.com\u003e\n"
    },
    {
      "commit": "a98e4221139765f4475d7c0a524b59c688077e75",
      "tree": "73284468dfa2078d18020691be3191639aa5af9f",
      "parents": [
        "5d8585012f384d1e2566f9c0b7ad7c0efcc5edd2"
      ],
      "author": {
        "name": "Gavin Mak",
        "email": "gavinmak@google.com",
        "time": "Fri May 08 19:39:58 2026 +0000"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri May 08 17:41:44 2026 -0700"
      },
      "message": "completion: document installation and usage in README\n\nAdd a \"Shell Completion\" section to README.md to document how to install\nand use `completion.bash` and `completion.zsh`.\n\nChange-Id: Ibf6c81043af6c24d45ea2dc6a6caa26d98ab7374\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/581261\nTested-by: Gavin Mak \u003cgavinmak@google.com\u003e\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\nCommit-Queue: Gavin Mak \u003cgavinmak@google.com\u003e\n"
    },
    {
      "commit": "5d8585012f384d1e2566f9c0b7ad7c0efcc5edd2",
      "tree": "8d296b545532a89b209824e08cfa4157e7eaac9c",
      "parents": [
        "e8deeabf2a4bacf6530aa4dc23478e4dd2fb0942"
      ],
      "author": {
        "name": "Gavin Mak",
        "email": "gavinmak@google.com",
        "time": "Thu May 07 23:30:54 2026 +0000"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri May 08 14:12:22 2026 -0700"
      },
      "message": "sync: Suggest \"git repack -a -d\" in bloat warning\n\nThe warning suggests running \"repo sync --auto-gc\" which runs \"git gc\n--auto\". Git may decide not to repack if its internal thresholds are not\nmet, leaving the warning active even after running the suggested\ncommand.\n\n\"git repack -a -d\" forces all reachable objects into a single pack and\ndeletes redundant packs, reducing the pack count to 1. This guarantees\nthat the warning (which triggers when pack count exceeds 10) goes away.\n\nBug: 505755299\nChange-Id: I10163ef8efb7f3b7c5055378ad95051974d11b88\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/580821\nReviewed-by: Becky Siegel \u003cbeckysiegel@google.com\u003e\nCommit-Queue: Gavin Mak \u003cgavinmak@google.com\u003e\nTested-by: Gavin Mak \u003cgavinmak@google.com\u003e\n"
    },
    {
      "commit": "e8deeabf2a4bacf6530aa4dc23478e4dd2fb0942",
      "tree": "e1c83824519add4cc68212e2097dd62129a8085b",
      "parents": [
        "11428ae984a141e3671f3d9f4df9e2b16314ff54"
      ],
      "author": {
        "name": "Kamal Sacranie",
        "email": "sacranie@google.com",
        "time": "Tue May 05 12:35:26 2026 +0000"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri May 08 07:46:00 2026 -0700"
      },
      "message": "Add zsh completion\n\nThis PR adds `completion.zsh` to allow for relatively intelligent\ncompletion of `repo` command-line arguments for all commands of the\n`repo` CLI.\n\nThe `completion.zsh` can be added to your zsh completions by copying\n(and renaming) the completion script to a directory that you have added\nto your zsh completion path.\n\n```\ncp completion.zsh $ZSH_COMPLETION_DIRECTORY/_repo\n```\n\nYou must name the file `_repo` for it to register as completion for\n`repo`.\n\nYou can add a directory to your zsh completion by updating your `fpath`\nvariable before calling `compinit` as follows:\n\n```\nfpath\u003d( /path/to/zsh-completions/dir $fpath )\n```\n\nFuture work: Generate this file using the subcommand classes and python\nreflection.\n\nChange-Id: I6a4e785c1efcf9076bd693976ac03578836b691b\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/579561\nCommit-Queue: Mike Frysinger \u003cvapier@google.com\u003e\nReviewed-by: Gavin Mak \u003cgavinmak@google.com\u003e\nTested-by: Kamal Sacranie \u003csacranie@google.com\u003e\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\n"
    },
    {
      "commit": "11428ae984a141e3671f3d9f4df9e2b16314ff54",
      "tree": "f98a2b290547b75d0f7a58d32691a2b9cc11bd9f",
      "parents": [
        "27d2232eb3cc4ec91fe6143b5d5c0d6f72861248"
      ],
      "author": {
        "name": "Gavin Mak",
        "email": "gavinmak@google.com",
        "time": "Thu May 07 22:30:36 2026 +0000"
      },
      "committer": {
        "name": "Gavin Mak",
        "email": "gavinmak@google.com",
        "time": "Thu May 07 20:27:08 2026 -0700"
      },
      "message": "forall: Document REPO_UPSTREAM and REPO_DEST_BRANCH envvars\n\nChange-Id: I74365295152f8828587c6b4ed93029efc6000881\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/580761\nTested-by: Gavin Mak \u003cgavinmak@google.com\u003e\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\n"
    },
    {
      "commit": "27d2232eb3cc4ec91fe6143b5d5c0d6f72861248",
      "tree": "d47c012acef02f7e4b38e9d92cb954107d32af73",
      "parents": [
        "e3eadd37289f3c8bf0b71aeab50b86e130ead539"
      ],
      "author": {
        "name": "Carlos Fernandez",
        "email": "carlosfsanz@meta.com",
        "time": "Fri Apr 03 08:00:35 2026 -0700"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu May 07 19:23:24 2026 -0700"
      },
      "message": "info: add --format and --include-summary/--include-projects options\n\nAdd --format\u003d{text,json} to produce machine-readable output, and\nboolean options to control which sections are displayed:\n  --include-summary / --no-include-summary (default: on)\n  --include-projects / --no-include-projects (default: on)\n\nThe JSON output respects the include flags, so callers can request\nonly the fields they need (e.g. `repo info --format\u003djson\n--no-include-projects` for manifest metadata only).\n\nChange-Id: I9641bc4023b630d9c61c5170eb86e5f3b787236f\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/569203\nCommit-Queue: Carlos Fernandez \u003ccarlosfsanz@meta.com\u003e\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\nReviewed-by: Gavin Mak \u003cgavinmak@google.com\u003e\nReviewed-by: Carlos Fernandez \u003ccarlosfsanz@meta.com\u003e\nTested-by: Carlos Fernandez \u003ccarlosfsanz@meta.com\u003e\n"
    },
    {
      "commit": "e3eadd37289f3c8bf0b71aeab50b86e130ead539",
      "tree": "efe01f580e947d0c1d96c7b292b09cd96c340bbb",
      "parents": [
        "12cfc6036a590fa8b573e9ebec0a2873956668b2"
      ],
      "author": {
        "name": "Josef Malmström",
        "email": "josef.malmstrom@arm.com",
        "time": "Mon May 04 14:01:36 2026 +0200"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed May 06 08:53:27 2026 -0700"
      },
      "message": "sync: Fix force_checkout propagation\n\nThe force_checkout parameter was not propagated in all calls to\nCheckout in Sync_LocalHalf.\n\nWithout this, repo sync --force-checkout can still fail for projects\ncurrently on a local branch with no upstream/tracking configuration,\nbecause the detach-to-manifest checkout was executed without -f,\nleaving local modifications or untracked files able to block sync.\n\nChange-Id: I58551388e2f906c4db96e220707a369057a71c24\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/579181\nReviewed-by: Gavin Mak \u003cgavinmak@google.com\u003e\nCommit-Queue: Josef Malmstrom \u003cJosef.Malmstrom@arm.com\u003e\nTested-by: Josef Malmstrom \u003cJosef.Malmstrom@arm.com\u003e\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\n"
    },
    {
      "commit": "12cfc6036a590fa8b573e9ebec0a2873956668b2",
      "tree": "ab0786a4b7bf61f90dd0dbf078c12c8cf0aeb859",
      "parents": [
        "134eeb024bb172f425ef0823485b5cb537112f6c"
      ],
      "author": {
        "name": "Gavin Mak",
        "email": "gavinmak@google.com",
        "time": "Fri Apr 24 23:12:41 2026 +0000"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Apr 28 10:49:54 2026 -0700"
      },
      "message": "git_superproject: Remove redundant _branch variable\n\nBoth variables were initialized to the same value and never modified.\n\nBug: 416589884\nChange-Id: Iaa1ffffb4543d4cd9391ac679d9234fe01678861\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/576921\nTested-by: Gavin Mak \u003cgavinmak@google.com\u003e\nCommit-Queue: Gavin Mak \u003cgavinmak@google.com\u003e\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\n"
    },
    {
      "commit": "134eeb024bb172f425ef0823485b5cb537112f6c",
      "tree": "037b748e817368aed38a1840a4df5620e63b86c0",
      "parents": [
        "03fb18109fb0db2522f36309242d16d0f83f17d2"
      ],
      "author": {
        "name": "Nasser Grainawi",
        "email": "nasser.grainawi@oss.qualcomm.com",
        "time": "Thu Mar 05 10:44:21 2026 -0800"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Apr 23 17:52:09 2026 -0700"
      },
      "message": "tests: Add tests for repo status output\n\nBuild out status subcommand unit coverage using a minimal fake repo\ncheckout wired through XmlManifest.\n\nThe new tests verify:\n- clean status output prints the expected project header\n- modified tracked files appear with the expected status marker\n- `-o` output includes the orphan section and orphan entries\n- branch names shown in status reflect a started non-default branch\n\nChange-Id: Ia7c22593d0bbdc4aed81faeb168b846f3e4016ab\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/558501\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\nTested-by: Nasser Grainawi \u003cnasser.grainawi@oss.qualcomm.com\u003e\nCommit-Queue: Nasser Grainawi \u003cnasser.grainawi@oss.qualcomm.com\u003e\nReviewed-by: Gavin Mak \u003cgavinmak@google.com\u003e\n"
    },
    {
      "commit": "03fb18109fb0db2522f36309242d16d0f83f17d2",
      "tree": "c2ee646907f144db82acc8ba8f05f396725c5ac4",
      "parents": [
        "5af71ce907848a546199f0d64a5dfba1db8adca0"
      ],
      "author": {
        "name": "Nasser Grainawi",
        "email": "nasser.grainawi@oss.qualcomm.com",
        "time": "Wed Apr 15 10:50:05 2026 -0700"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Apr 22 17:05:55 2026 -0700"
      },
      "message": "color: type SetDefaultColoring and drop bool states\n\nAlso add a test fixture to always disable coloring so that we get\nreproducible test behavior. The few tests that want to check color\nbehavior (e.g. test_color.py) can still reset/change color values as\nneeded.\n\nChange-Id: I1808139a63e0862c29bf81d7097e885ca8561040\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/573621\nReviewed-by: Gavin Mak \u003cgavinmak@google.com\u003e\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\nCommit-Queue: Nasser Grainawi \u003cnasser.grainawi@oss.qualcomm.com\u003e\nTested-by: Nasser Grainawi \u003cnasser.grainawi@oss.qualcomm.com\u003e\n"
    },
    {
      "commit": "5af71ce907848a546199f0d64a5dfba1db8adca0",
      "tree": "511327039aeb7db3d08a1fdc6bdb7b537116d63d",
      "parents": [
        "baa281d99e59dbf1447524e6fd95b384cadbc06e"
      ],
      "author": {
        "name": "Ram Peri",
        "email": "ramperi@google.com",
        "time": "Tue Apr 21 00:02:47 2026 +0000"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Apr 21 17:10:07 2026 -0700"
      },
      "message": "Add timing keyword argument for hooks\n\nMeasure the duration of the sync operation in the Execute method of the\nSync command and pass it to post-sync hooks as a standard keyword\nargument (`sync_duration_seconds`).\n\nUpdates based on code review:\n- Update _API_ARGS in hooks.py to allow sync_duration_seconds for post-sync hooks.\n- Do not cast sync_duration_seconds to int for better granularity.\n- Update docs/repo-hooks.md to document sync_duration_seconds.\n- Add unit test for argument validation in test_hooks.py.\n\nTest: Ran run_tests using venv python, all 554 tests passed.\nBug: TBD\nChange-Id: Ie29e002a5d283460d993ad96c224dbf4b6d7985c\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/575021\nTested-by: Arif Kasim \u003carifkasim@google.com\u003e\nCommit-Queue: Ram Peri \u003cramperi@google.com\u003e\nReviewed-by: Arif Kasim \u003carifkasim@google.com\u003e\nReviewed-by: Gavin Mak \u003cgavinmak@google.com\u003e\n"
    },
    {
      "commit": "baa281d99e59dbf1447524e6fd95b384cadbc06e",
      "tree": "412dab50845510a6b4a802638c7d055955e37505",
      "parents": [
        "7e9079b7cf79988dd978d04bfb79250564829cc3"
      ],
      "author": {
        "name": "Gavin Mak",
        "email": "gavinmak@google.com",
        "time": "Mon Apr 20 17:57:20 2026 +0000"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Apr 20 15:34:07 2026 -0700"
      },
      "message": "sync: Refactor to use _RunOneGC and fix config leakage\n\nExtract _RunOneGC to handle GC on a single project. This refactoring\nmakes it easier to invoke GC from parallel worker tasks.\n\nAlso, avoid modifying the passed-in config dictionary in _RunOneGC by\ncreating a local copy, preventing unintended side effects on other\ncommands sharing the same config.\n\nBug: 498290329\nChange-Id: I7b77ed6629b14b5ee3322870b9c6c8ce2bfd6ea2\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/574923\nReviewed-by: Becky Siegel \u003cbeckysiegel@google.com\u003e\nTested-by: Gavin Mak \u003cgavinmak@google.com\u003e\nCommit-Queue: Gavin Mak \u003cgavinmak@google.com\u003e\n"
    },
    {
      "commit": "7e9079b7cf79988dd978d04bfb79250564829cc3",
      "tree": "1c5cefeb08c2292804d3a8cc266eeab81b0cdca4",
      "parents": [
        "61bd6b3ccb26bc695ea85ae3004c50e7434e20cf"
      ],
      "author": {
        "name": "Gavin Mak",
        "email": "gavinmak@google.com",
        "time": "Mon Apr 20 17:56:56 2026 +0000"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Apr 20 14:07:14 2026 -0700"
      },
      "message": "sync: Switch to using self._bloated_projects\n\nStore bloated projects in self._bloated_projects and print warnings at\nthe end of execution. This sets up for moving the check to workers.\n\nBug: 498290329\nChange-Id: I993f1fd741db2994d480994861588eb18f6c5503\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/574922\nReviewed-by: Becky Siegel \u003cbeckysiegel@google.com\u003e\nTested-by: Gavin Mak \u003cgavinmak@google.com\u003e\nCommit-Queue: Gavin Mak \u003cgavinmak@google.com\u003e\n"
    },
    {
      "commit": "61bd6b3ccb26bc695ea85ae3004c50e7434e20cf",
      "tree": "c2d60179d4b0432e821cfbee4e21e70229a5b8f5",
      "parents": [
        "32e7327ca6c420c5117e8b0eaa0219eb8f062d37"
      ],
      "author": {
        "name": "Gavin Mak",
        "email": "gavinmak@google.com",
        "time": "Mon Apr 20 20:11:43 2026 +0000"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Apr 20 13:31:41 2026 -0700"
      },
      "message": "tests: Add tests for _CheckForBloatedProjects and _GCProjects\n\nChange-Id: I6790a13929b8fc06a3197ca405dedf08d39d54c9\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/574926\nTested-by: Gavin Mak \u003cgavinmak@google.com\u003e\nReviewed-by: Becky Siegel \u003cbeckysiegel@google.com\u003e\nCommit-Queue: Gavin Mak \u003cgavinmak@google.com\u003e\n"
    },
    {
      "commit": "32e7327ca6c420c5117e8b0eaa0219eb8f062d37",
      "tree": "aa6bdd7958e45903d39fc2057362e3638f169ff3",
      "parents": [
        "4f707ff91e16af5b19565504df67351c4d28370e"
      ],
      "author": {
        "name": "Marty Heavey",
        "email": "mheavey@google.com",
        "time": "Fri Apr 17 11:14:09 2026 +0000"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Apr 20 01:52:25 2026 -0700"
      },
      "message": "upload: Clarify partial sync message on hook failure\n\nDemote the partial sync warning from error to info and rephrase it to\nbe a tip rather than an error. This prevents users from thinking that\na partial sync is the cause of their hook failures when it is often a linting failure.\n\nThe message now suggests that a full sync might help if there are\ncross-project dependencies, instead of implying it will fix any issue.\n\nChange-Id: I5d8c52b53ac315aa9f145ed069798bf201fa0815\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/574262\nTested-by: Marty Heavey \u003cmheavey@google.com\u003e\nCommit-Queue: Marty Heavey \u003cmheavey@google.com\u003e\nReviewed-by: Gavin Mak \u003cgavinmak@google.com\u003e\n"
    },
    {
      "commit": "4f707ff91e16af5b19565504df67351c4d28370e",
      "tree": "0337a4e167eaeda128e9f12bf5e0a39abc7e15b9",
      "parents": [
        "e2671c184e41ac77544809486e994095e3574138"
      ],
      "author": {
        "name": "Gavin Mak",
        "email": "gavinmak@google.com",
        "time": "Fri Apr 17 20:31:41 2026 +0000"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Apr 17 15:47:15 2026 -0700"
      },
      "message": "sync: Provide feedback during post-sync operations\n\nAfter the main sync progress bar finishes, there\u0027s a pause while some\npost-sync operations run. Print something to provide feedback so the\nuser doesn\u0027t think repo has hung.\n\nBug: 503869525\nChange-Id: I695fd560e60dcb394e6844a56c8a336ca1f71c74\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/574425\nCommit-Queue: Gavin Mak \u003cgavinmak@google.com\u003e\nReviewed-by: Becky Siegel \u003cbeckysiegel@google.com\u003e\nTested-by: Gavin Mak \u003cgavinmak@google.com\u003e\n"
    },
    {
      "commit": "e2671c184e41ac77544809486e994095e3574138",
      "tree": "78a4cf8253241910038b2f41509ab0535916be1d",
      "parents": [
        "b43a20b859fa6d1e0b5e5dfc35a268d2098ac95b"
      ],
      "author": {
        "name": "Gavin Mak",
        "email": "gavinmak@google.com",
        "time": "Fri Apr 17 20:31:33 2026 +0000"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Apr 17 15:43:14 2026 -0700"
      },
      "message": "progress: Ignore updates after progress ends\n\nThis addresses the occasional \"..working..\" message at the end of sync.\n\nBug: 503869525\nChange-Id: I489d29fa8ae588d77abb7fee5f157800d4abb368\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/574482\nCommit-Queue: Gavin Mak \u003cgavinmak@google.com\u003e\nTested-by: Gavin Mak \u003cgavinmak@google.com\u003e\nReviewed-by: Becky Siegel \u003cbeckysiegel@google.com\u003e\n"
    },
    {
      "commit": "b43a20b859fa6d1e0b5e5dfc35a268d2098ac95b",
      "tree": "086eb8aa6623081fc813c6a599ffbf818de1fbc7",
      "parents": [
        "8869a30283d3f175053db780e58846b650de7d9b"
      ],
      "author": {
        "name": "Becky Siegel",
        "email": "beckysiegel@google.com",
        "time": "Wed Apr 15 20:16:52 2026 -0700"
      },
      "committer": {
        "name": "Becky Siegel",
        "email": "beckysiegel@google.com",
        "time": "Fri Apr 17 09:16:36 2026 -0700"
      },
      "message": "project: Avoid skipping fetches for shallow clones without .git/shallow\n\nWhen optimizing fetches for projects with immutable revisions, the fetch\nshould not be skipped if the project is configured for a shallow clone\n(depth \u003e 0) but the .git/shallow file is missing. The absence of the\n.git/shallow file means the repository is not a shallow clone, or the\nshallow clone is incomplete, so a fetch is necessary to ensure the\nrevision is present.\n\nBug: 503081454\nChange-Id: Ic3549612bcd69050a926652ee4e522c79ad8124c\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/573821\nTested-by: Becky Siegel \u003cbeckysiegel@google.com\u003e\nReviewed-by: Gavin Mak \u003cgavinmak@google.com\u003e\nCommit-Queue: Becky Siegel \u003cbeckysiegel@google.com\u003e\n"
    },
    {
      "commit": "8869a30283d3f175053db780e58846b650de7d9b",
      "tree": "773d42ff50d5a857380dd26eba65a4908d9c1d21",
      "parents": [
        "3b0eebeccfd4447e4a50ae143f37d0f7817723be"
      ],
      "author": {
        "name": "Miyako.Enei",
        "email": "miyako.enei@alpsalpine.com",
        "time": "Thu Apr 09 21:29:04 2026 +0900"
      },
      "committer": {
        "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Sun Apr 12 16:39:28 2026 -0700"
      },
      "message": "project: Drop --no-deref from update-ref --stdin\n\nrepo calls `git update-ref --stdin` when updating multiple refs during\nrepo init and repo sync. Historically, `--no-deref` was also passed.\n\nOlder Git 2.17 which we still support rejects the combination of\n`--stdin` and `--no-deref`, emitting a usage error even when the stdin\ninput is valid.\n\nThe `--no-deref` option is only meaningful when updating symbolic refs\nsuch as HEAD. The stdin-based update-ref path only operates on explicit\nrefs (tags, remote refs, alternates) and never symbolic refs.\n\nRemove the unnecessary option to restore compatibility with Git 2.17\nwhile preserving identical behavior on newer Git versions.\n\nTested with:\n  - Git 2.17.1\n  - Git 2.34.1\n\nChange-Id: I22001de03800f5699b26a40bc1fb1fec002ed048\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/571721\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\nReviewed-by: Gavin Mak \u003cgavinmak@google.com\u003e\nCommit-Queue: Enei \u003cmiyako.enei@alpsalpine.com\u003e\nTested-by: Enei \u003cmiyako.enei@alpsalpine.com\u003e\n"
    },
    {
      "commit": "3b0eebeccfd4447e4a50ae143f37d0f7817723be",
      "tree": "5bffc4647d4f883eac0a514ef304b8f2fd75c32c",
      "parents": [
        "00991bfb42c4f3b0b7a50aa8f475ac1c8369924b"
      ],
      "author": {
        "name": "Gavin Mak",
        "email": "gavinmak@google.com",
        "time": "Wed Apr 01 23:03:09 2026 +0000"
      },
      "committer": {
        "name": "LUCI",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Apr 09 12:09:40 2026 -0700"
      },
      "message": "project: implement stateless sync pruning logic\n\nImplement in-situ shallow re-fetching and garbage collection logic.\nEnables repositories with sync-strategy\u003d\"stateless\" to reclaim disk\nspace by running reflog expire and git gc --prune\u003dnow if the working\ntree is clean and has no local commits.\n\nBug: 498730431\nChange-Id: I940bdc9b74da29d3f7b13566667dcddea769ebd3\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/568463\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\nTested-by: Gavin Mak \u003cgavinmak@google.com\u003e\nCommit-Queue: Gavin Mak \u003cgavinmak@google.com\u003e\n"
    },
    {
      "commit": "00991bfb42c4f3b0b7a50aa8f475ac1c8369924b",
      "tree": "734323ebfa72006189e2758b403c9730f8ac0ddc",
      "parents": [
        "e8338b54bd3b4ff525a51e3028c9aebc163936a0"
      ],
      "author": {
        "name": "Gavin Mak",
        "email": "gavinmak@google.com",
        "time": "Wed Apr 01 23:03:03 2026 +0000"
      },
      "committer": {
        "name": "LUCI",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Apr 09 12:09:28 2026 -0700"
      },
      "message": "manifest: Add `sync-strategy` attribute to project elements\n\nThe only supported sync-strategy is \"stateless\". The intent is to keep\nthe local workspace as small as possible by not keeping history during\nsyncs. This prevents disk space waste for projects with large binaries\nwhere we only care about the current version.\n\nA follow up change will implement the logic.\n\nBug: 498730431\nChange-Id: I84a436a9ca2492893163c6cfda6c28dc62a568f0\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/568462\nTested-by: Gavin Mak \u003cgavinmak@google.com\u003e\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\nCommit-Queue: Gavin Mak \u003cgavinmak@google.com\u003e\n"
    },
    {
      "commit": "e8338b54bd3b4ff525a51e3028c9aebc163936a0",
      "tree": "2136dd94a98f0f5fd523903fdb9eb9779885a45e",
      "parents": [
        "951666fb23cc551df906c5031c92232cccc7e26d"
      ],
      "author": {
        "name": "Nasser Grainawi",
        "email": "nasser.grainawi@oss.qualcomm.com",
        "time": "Mon Apr 06 12:51:17 2026 -0700"
      },
      "committer": {
        "name": "LUCI",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Apr 09 11:51:47 2026 -0700"
      },
      "message": "tests: Convert forall subcmd test to pytest\n\nRewrite tests/test_subcmds_forall.py from unittest.TestCase to pytest\nfunction-style tests to match the surrounding test suite conventions.\n\nReplace setUp/tearDown and class-based helpers with tmp_path-based\nsetup, switch stdout capture to contextlib.redirect_stdout, and keep the\nexisting behavior checks intact (all eight projects are invoked exactly\nonce).\n\nChange-Id: I9243f3461aa6850f867bdb864f4a34c442f817f6\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/569821\nReviewed-by: Gavin Mak \u003cgavinmak@google.com\u003e\nCommit-Queue: Nasser Grainawi \u003cnasser.grainawi@oss.qualcomm.com\u003e\nTested-by: Nasser Grainawi \u003cnasser.grainawi@oss.qualcomm.com\u003e\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\n"
    },
    {
      "commit": "951666fb23cc551df906c5031c92232cccc7e26d",
      "tree": "3204d017822cb90935244e111a75d800b085c2a7",
      "parents": [
        "854b330967a296e03d49d492c2a3a13a71f14026"
      ],
      "author": {
        "name": "Gavin Mak",
        "email": "gavinmak@google.com",
        "time": "Tue Apr 07 20:45:18 2026 +0000"
      },
      "committer": {
        "name": "LUCI",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Apr 08 12:54:39 2026 -0700"
      },
      "message": "gc: Fix hang during repack in partial clones\n\nAdd `--missing\u003dallow-promisor` to `git rev-list` calls in\n`repack_projects`. This prevents Git from auto-fetching missing objects\nfrom the promisor remote, which can cause stalls due to sequential\nnetwork requests.\n\nAlso add a Git version check to ensure Git is at least 2.17.0 before\nrunning `--repack`, as `--missing\u003dallow-promisor` was introduced in that\nversion.\n\nBug: 500133631\nChange-Id: I2dcf9b46fac4c6a53a3c2a46f06f61d6aec40f2f\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/570361\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\nTested-by: Gavin Mak \u003cgavinmak@google.com\u003e\nCommit-Queue: Gavin Mak \u003cgavinmak@google.com\u003e\nReviewed-by: Sam Saccone \u003csamccone@google.com\u003e\n"
    },
    {
      "commit": "854b330967a296e03d49d492c2a3a13a71f14026",
      "tree": "2239382de481789ed84624fd405d6ff4b7dce0ce",
      "parents": [
        "654690e1b8695d72885533016482306e32528f48"
      ],
      "author": {
        "name": "Carlos Fernandez",
        "email": "carlosfsanz@meta.com",
        "time": "Fri Apr 03 11:25:54 2026 -0700"
      },
      "committer": {
        "name": "LUCI",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Apr 06 14:16:04 2026 -0700"
      },
      "message": "test_wrapper: add test for repo script executable permission\n\nAdd a test to verify that the repo launcher script has the\nexecutable bit set, guarding against accidental permission changes.\n\nChange-Id: I314658b57ed174673188fbbc5962d9fdeefac97d\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/569242\nReviewed-by: Gavin Mak \u003cgavinmak@google.com\u003e\nCommit-Queue: Carlos Fernandez \u003ccarlosfsanz@meta.com\u003e\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\nTested-by: Carlos Fernandez \u003ccarlosfsanz@meta.com\u003e\n"
    },
    {
      "commit": "654690e1b8695d72885533016482306e32528f48",
      "tree": "f5c0a5a0be5329d4eb16aa30fd5e58df35d38065",
      "parents": [
        "ac2be4c089fda58b9ba2f7b2bdb1416f8d3a74b2"
      ],
      "author": {
        "name": "Mike Frysinger",
        "email": "vapier@google.com",
        "time": "Thu Mar 26 01:54:14 2026 -0400"
      },
      "committer": {
        "name": "LUCI",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Apr 06 11:36:39 2026 -0700"
      },
      "message": "tests: convert more tests to pytest\n\nChange-Id: Id4d48b61dc435564c336385bbc4944eb475d1942\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/569443\nTested-by: Mike Frysinger \u003cvapier@google.com\u003e\nCommit-Queue: Mike Frysinger \u003cvapier@google.com\u003e\nReviewed-by: Gavin Mak \u003cgavinmak@google.com\u003e\n"
    },
    {
      "commit": "ac2be4c089fda58b9ba2f7b2bdb1416f8d3a74b2",
      "tree": "fee7bc82e981ba72337deb32b08d48b1be643fd8",
      "parents": [
        "3d819e8e3ec49a2f44274aed8aa7eb4736df9b5f"
      ],
      "author": {
        "name": "Mike Frysinger",
        "email": "vapier@google.com",
        "time": "Fri Apr 03 22:47:28 2026 -0400"
      },
      "committer": {
        "name": "LUCI",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Apr 06 11:15:58 2026 -0700"
      },
      "message": "tests: convert __file__ usage to pathlib\n\nChange-Id: I2408b0ac97629f0d5fc92779b78bf1ff159a6f83\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/569442\nReviewed-by: Gavin Mak \u003cgavinmak@google.com\u003e\nTested-by: Mike Frysinger \u003cvapier@google.com\u003e\nCommit-Queue: Mike Frysinger \u003cvapier@google.com\u003e\n"
    },
    {
      "commit": "3d819e8e3ec49a2f44274aed8aa7eb4736df9b5f",
      "tree": "50b72f8bb0025be7cadde88e5ebab6a20acf698f",
      "parents": [
        "573983948ae0550b0f655ea81431bb08ce0bd540"
      ],
      "author": {
        "name": "Mike Frysinger",
        "email": "vapier@google.com",
        "time": "Fri Apr 03 22:33:52 2026 -0400"
      },
      "committer": {
        "name": "LUCI",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Apr 06 11:15:14 2026 -0700"
      },
      "message": "tests: unify fixture() helper with Path constant\n\nChange-Id: I63751042391f5cc3e06af7067bc83d67bd0716dc\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/569441\nTested-by: Mike Frysinger \u003cvapier@google.com\u003e\nCommit-Queue: Mike Frysinger \u003cvapier@google.com\u003e\nReviewed-by: Gavin Mak \u003cgavinmak@google.com\u003e\n"
    },
    {
      "commit": "573983948ae0550b0f655ea81431bb08ce0bd540",
      "tree": "1065ee4ce7373f8bb164b5c66b824e141a74082c",
      "parents": [
        "3f3c681a02ed27663e06c35328b494b9245881b5"
      ],
      "author": {
        "name": "Carlos Fernandez",
        "email": "carlosfsanz@meta.com",
        "time": "Thu Mar 26 13:46:38 2026 -0700"
      },
      "committer": {
        "name": "LUCI",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Apr 03 07:50:52 2026 -0700"
      },
      "message": "Fix all flake8 warnings from newer flake8-bugbear and flake8-comprehensions\n\nAddress warnings introduced by flake8-bugbear 24.12.12 and\nflake8-comprehensions 3.16.0:\n\n- C408: Replace dict()/list() calls with literal {} and []\n- C413: Remove unnecessary list() around sorted()\n- C414: Remove unnecessary list() inside sorted()\n- C419: Suppress intentional list comprehension in all() (noqa)\n- B001: Replace bare except with except Exception\n- B006: Replace mutable default arguments with None\n- B010: Replace setattr() with direct attribute assignment\n- B017: Use RuntimeError instead of Exception in tests\n- B019: Suppress lru_cache on methods for long-lived objects (noqa)\n- B033: Remove duplicate item in set literal\n\nChange-Id: If4693d3e946200bbc22f689f7b94da604addcb80\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/566321\nTested-by: Carlos Fernandez \u003ccarlosfsanz@meta.com\u003e\nCommit-Queue: Carlos Fernandez \u003ccarlosfsanz@meta.com\u003e\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\nReviewed-by: Gavin Mak \u003cgavinmak@google.com\u003e\n"
    },
    {
      "commit": "3f3c681a02ed27663e06c35328b494b9245881b5",
      "tree": "5bea9eb94219f631122d85000d2f8a4720d55be9",
      "parents": [
        "242e97d9ddf1a62fa3d9e92e21bd8b98b00e4455"
      ],
      "author": {
        "name": "Gavin Mak",
        "email": "gavinmak@google.com",
        "time": "Wed Mar 18 21:15:16 2026 +0000"
      },
      "committer": {
        "name": "LUCI",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Apr 02 13:57:05 2026 -0700"
      },
      "message": "project: Refactor GetHead to use symbolic-ref first\n\nSimplify branch resolution and optimize unborn branch detection by\nprioritizing symbolic-ref over rev-parse.\n\nChange-Id: Ic62dcb87cd051dafb00d520b1157be2e32abc2ab\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/563222\nReviewed-by: Nasser Grainawi \u003cnasser.grainawi@oss.qualcomm.com\u003e\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\nTested-by: Gavin Mak \u003cgavinmak@google.com\u003e\nCommit-Queue: Gavin Mak \u003cgavinmak@google.com\u003e\n"
    },
    {
      "commit": "242e97d9ddf1a62fa3d9e92e21bd8b98b00e4455",
      "tree": "8be25756b4d936ba069f50738156ea7497aeb857",
      "parents": [
        "ade45de7707e25d8a11b3beedf754caa44aba34d"
      ],
      "author": {
        "name": "Sam Saccone",
        "email": "samccone@google.com",
        "time": "Tue Mar 10 17:26:20 2026 +0000"
      },
      "committer": {
        "name": "LUCI",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Mar 24 15:47:37 2026 -0700"
      },
      "message": "Implement command forgiveness with autocorrect\n\nSimilar to `git`, when a user types an unknown command like `repo tart`,\nwe now use `difflib.get_close_matches` to suggest similar commands.\n\nIf `help.autocorrect` is set in the git config, it will optionally\nprompt the user to automatically run the assumed command, or wait\nfor a configured delay before executing it.\n\nVerification Steps:\n1. Created a dummy repo project locally.\n2. Verified `help.autocorrect\u003d0|false|off|no|show` suggests\n   command and exits.\n3. Verified `help.autocorrect\u003d1|true|on|yes|immediate`\n   automatically runs suggestion.\n4. Verified `help.autocorrect\u003d\u003cnumber\u003e` runs after\n   `\u003cnumber\u003e*0.1` seconds.\n5. Verified `help.autocorrect\u003dnever` exits immediately without\n   suggestions.\n6. Verified `help.autocorrect\u003dprompt` asks user to accept [y/n]\n   and handles correctly.\n\nBUG: b/489753302\n\nChange-Id: I6dcd63229cbd7badf5404459b48690c68f5b4857\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/558021\nTested-by: Sam Saccone \u003csamccone@google.com\u003e\nCommit-Queue: Sam Saccone \u003csamccone@google.com\u003e\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\n"
    },
    {
      "commit": "ade45de7707e25d8a11b3beedf754caa44aba34d",
      "tree": "bb3a1eb88b2e5b27108d4b521933de7bc83944b2",
      "parents": [
        "0251fb33c485c3664df634517190b9c510ce7578"
      ],
      "author": {
        "name": "Mike Frysinger",
        "email": "vapier@google.com",
        "time": "Thu Mar 19 14:44:14 2026 -0400"
      },
      "committer": {
        "name": "LUCI",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Mar 20 14:07:06 2026 -0700"
      },
      "message": "docs: windows: mention Developer Mode for symlinks\n\nThis is probably better than recommending Administrator access.\n\nChange-Id: Ic916f15fe03f7fa1e03c685265b4774bfc1279c2\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/563581\nTested-by: Mike Frysinger \u003cvapier@google.com\u003e\nReviewed-by: Gavin Mak \u003cgavinmak@google.com\u003e\nCommit-Queue: Mike Frysinger \u003cvapier@google.com\u003e\n"
    },
    {
      "commit": "0251fb33c485c3664df634517190b9c510ce7578",
      "tree": "1eb7ca19dc8184f80770b49e45672c591c01386a",
      "parents": [
        "0176586544d36d2902d6b8442ea4dc78e7921b8e"
      ],
      "author": {
        "name": "Lucas Tanure",
        "email": "ltanure@gmail.com",
        "time": "Sat Mar 07 09:15:45 2026 +0000"
      },
      "committer": {
        "name": "LUCI",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Mar 20 10:08:40 2026 -0700"
      },
      "message": "project: don\u0027t re-shallow manually unshallowed repos during sync\n\nIf a user has manually unshallowed a repo (e.g. via\n`git fetch --unshallow`), the absence of the `shallow` file in the\ngitdir indicates a full clone. Re-applying depth during a subsequent\nsync would undo the user\u0027s intent. Skip re-shallowing in this case\nby clearing depth when the project is not new and no shallow file\nis present.\n\nChange-Id: I4ee0e78018de9078fe1bd77a9615613ef0c40d33\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/558743\nReviewed-by: Gavin Mak \u003cgavinmak@google.com\u003e\nReviewed-by: Carlos Fernandez \u003ccarlosfsanz@meta.com\u003e\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\nCommit-Queue: Lucas Alves \u003cltanure@gmail.com\u003e\nTested-by: Lucas Alves \u003cltanure@gmail.com\u003e\nReviewed-by: Lucas Alves \u003cltanure@gmail.com\u003e\n"
    },
    {
      "commit": "0176586544d36d2902d6b8442ea4dc78e7921b8e",
      "tree": "e3e5c36e9c36bf8849936a45858d02f098f872ea",
      "parents": [
        "582804a59ef11a8e545ace2efb774df5dcbe93ee"
      ],
      "author": {
        "name": "Jacky Liu",
        "email": "qsliu@google.com",
        "time": "Mon Mar 16 13:07:39 2026 +0800"
      },
      "committer": {
        "name": "LUCI",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Mar 18 21:03:07 2026 -0700"
      },
      "message": "Use git_superproject.UseSuperproject() everywhere\n\nCurrently somewhere use git_superproject.UseSuperproject(), which checks\nboth the manifest config and user\u0027s config, and otherwhere use\nmanifest.manifestProject.use_superproject, which only checks the\nmanifest config. This causes Inconsistent behaviors for users who do not\nset --use-superproject when doing repo init but have\nrepo.superprojectChoice in their git config.\n\nReplace where using manifest.manifestProject.use_superproject with\ngit_superproject.UseSuperproject() to respect user\u0027s config and avoid\ninconsistency.\n\nBug: 454514213\nChange-Id: I1f734235cdd67b8a6915f1d05967d1aaa4d03f2a\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/561801\nCommit-Queue: Jacky Liu \u003cqsliu@google.com\u003e\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\nTested-by: Jacky Liu \u003cqsliu@google.com\u003e\n"
    },
    {
      "commit": "582804a59ef11a8e545ace2efb774df5dcbe93ee",
      "tree": "acb8193106199a72df2ccb1c61587890581069af",
      "parents": [
        "afc3d55d390e6c2c3955b021be89d3fdf815a8aa"
      ],
      "author": {
        "name": "Mike Frysinger",
        "email": "vapier@google.com",
        "time": "Wed Mar 18 14:54:25 2026 -0400"
      },
      "committer": {
        "name": "LUCI",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Mar 18 12:01:37 2026 -0700"
      },
      "message": "pydev: drop Python 2 reference\n\nNot sure who uses this anymore, but might as well delete obviously\nwrong content.\n\nChange-Id: I5cdf1cf699c81b7db32b400f371134d21f474743\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/563161\nCommit-Queue: Mike Frysinger \u003cvapier@google.com\u003e\nReviewed-by: Gavin Mak \u003cgavinmak@google.com\u003e\nTested-by: Mike Frysinger \u003cvapier@google.com\u003e\n"
    },
    {
      "commit": "afc3d55d390e6c2c3955b021be89d3fdf815a8aa",
      "tree": "2bd1b93f2f797fb7b9a31eb4c98cfce758b81e06",
      "parents": [
        "f24bc7aed59a8fb4b89afa06b82eae1aad067983"
      ],
      "author": {
        "name": "Mike Frysinger",
        "email": "vapier@google.com",
        "time": "Wed Mar 18 14:48:17 2026 -0400"
      },
      "committer": {
        "name": "LUCI",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Mar 18 12:01:25 2026 -0700"
      },
      "message": "isort: merge config into pyproject.toml\n\nChange-Id: I3a50de04897789c7b2f291882faf1c862645b054\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/563141\nTested-by: Mike Frysinger \u003cvapier@google.com\u003e\nReviewed-by: Gavin Mak \u003cgavinmak@google.com\u003e\nCommit-Queue: Mike Frysinger \u003cvapier@google.com\u003e\n"
    },
    {
      "commit": "f24bc7aed59a8fb4b89afa06b82eae1aad067983",
      "tree": "8d9c02a8296910ea4126574112c667cdeb2bc6af",
      "parents": [
        "83b8ebdbbed5ec894a2f89eb5e4bcf5d0bb14300"
      ],
      "author": {
        "name": "Mike Frysinger",
        "email": "vapier@google.com",
        "time": "Wed Mar 18 11:17:12 2026 -0400"
      },
      "committer": {
        "name": "LUCI",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Mar 18 11:13:26 2026 -0700"
      },
      "message": "tests: switch some test modules to pytest\n\nChange-Id: I524b5ff2d77f8232f94e21921b00ba4027d2ac4f\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/563081\nTested-by: Mike Frysinger \u003cvapier@google.com\u003e\nReviewed-by: Gavin Mak \u003cgavinmak@google.com\u003e\nCommit-Queue: Mike Frysinger \u003cvapier@google.com\u003e\n"
    },
    {
      "commit": "83b8ebdbbed5ec894a2f89eb5e4bcf5d0bb14300",
      "tree": "bd84dbdba2f3a8935a4e92704bc2bfee4318be7a",
      "parents": [
        "a0abfd7339536cfba02c112e7ac804bc6252ebdb"
      ],
      "author": {
        "name": "Gavin Mak",
        "email": "gavinmak@google.com",
        "time": "Sat Feb 07 00:53:31 2026 +0000"
      },
      "committer": {
        "name": "LUCI",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Mar 17 14:30:35 2026 -0700"
      },
      "message": "git_superproject: avoid re-initing bare repo\n\nRunning sync with reftable on a files-backed workspace fails to re-init\nthe superproject dir with:\n```\nfatal: could not open\n\u0027.../.repo/exp-superproject/\u003chash\u003e-superproject.git/refs/heads\u0027 for writing:\nIs a directory\n```\n\nBug: 476209856\nChange-Id: Ie8473d66069aafefa5661bd3ea8e73b2b27c6a38\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/550981\nCommit-Queue: Gavin Mak \u003cgavinmak@google.com\u003e\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\nTested-by: Gavin Mak \u003cgavinmak@google.com\u003e\n"
    },
    {
      "commit": "a0abfd7339536cfba02c112e7ac804bc6252ebdb",
      "tree": "0107ca0ca0be1d68f008dce610b6b97a187155e2",
      "parents": [
        "403fedfeb555d4e6c3144f36777e88ec41535d9d"
      ],
      "author": {
        "name": "Gavin Mak",
        "email": "gavinmak@google.com",
        "time": "Fri Feb 06 14:19:00 2026 -0800"
      },
      "committer": {
        "name": "LUCI",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Mar 17 14:30:20 2026 -0700"
      },
      "message": "project: resolve unborn HEAD robustly in reftable repos\n\nUse `git symbolic-ref` to resolve HEAD before trying to parse .git/HEAD\ndirectly which is unreliable for reftable repos.\n\nBug: 476209856\nChange-Id: I60185d945c5b43c871945c0126cfdf52194e745d\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/550762\nCommit-Queue: Gavin Mak \u003cgavinmak@google.com\u003e\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\nTested-by: Gavin Mak \u003cgavinmak@google.com\u003e\n"
    },
    {
      "commit": "403fedfeb555d4e6c3144f36777e88ec41535d9d",
      "tree": "9159a0b3d27719b0a2e5483155522106e569be9c",
      "parents": [
        "f14c577fce155bc4955e83b1d9444dc67f1511aa"
      ],
      "author": {
        "name": "Gavin Mak",
        "email": "gavinmak@google.com",
        "time": "Fri Feb 06 14:18:28 2026 -0800"
      },
      "committer": {
        "name": "LUCI",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Mar 17 14:30:01 2026 -0700"
      },
      "message": "project: support reftable anchors in worktree .git migration\n\nThe reftable backend creates real refs/ and reftable/ dirs. Update\n_MigrateOldWorkTreeGitDir to expect these dirs and remove them.\n\nBug: 476209856\nChange-Id: I4700da70cb466e25ecbc51ba4de9a906b8716bd8\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/550761\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\nTested-by: Gavin Mak \u003cgavinmak@google.com\u003e\nCommit-Queue: Gavin Mak \u003cgavinmak@google.com\u003e\n"
    },
    {
      "commit": "f14c577fce155bc4955e83b1d9444dc67f1511aa",
      "tree": "9ddceaa0b2e7d1062b65404249c8c6ac3534ff4f",
      "parents": [
        "67881c0c3b27d850c57070919f4476b370de7768"
      ],
      "author": {
        "name": "Gavin Mak",
        "email": "gavinmak@google.com",
        "time": "Fri Feb 06 14:18:00 2026 -0800"
      },
      "committer": {
        "name": "LUCI",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Mar 17 14:29:38 2026 -0700"
      },
      "message": "project: avoid direct packed-refs writes during fetch\n\nReplace raw file manipulation with native `git update-ref` commands\ninside a try/finally block to ensure temp refs are created/cleaned up\nregardless of storage format.\n\nBug: 476209856\nChange-Id: I228e81d3d3b323328260f6672075193421c8dc47\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/550421\nTested-by: Gavin Mak \u003cgavinmak@google.com\u003e\nCommit-Queue: Gavin Mak \u003cgavinmak@google.com\u003e\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\n"
    },
    {
      "commit": "67881c0c3b27d850c57070919f4476b370de7768",
      "tree": "677767437a0246e0ae6a7d6e3ca84adfc4cf72c6",
      "parents": [
        "551087cd980976775470cde5f7ede264a90b5349"
      ],
      "author": {
        "name": "Gavin Mak",
        "email": "gavinmak@google.com",
        "time": "Fri Feb 06 14:55:34 2026 -0800"
      },
      "committer": {
        "name": "LUCI",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Mar 17 14:28:39 2026 -0700"
      },
      "message": "git_refs: read refs via git plumbing for files/reftable\n\nReplace direct `packed-refs` file parsing with `git for-each-ref`\nplumbing to support both `files` and `reftable` backends.\n\nBug: 476209856\nChange-Id: I2ad8ff8f3382426600f15370c997f9bc17165485\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/550401\nCommit-Queue: Gavin Mak \u003cgavinmak@google.com\u003e\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\nTested-by: Gavin Mak \u003cgavinmak@google.com\u003e\n"
    },
    {
      "commit": "551087cd980976775470cde5f7ede264a90b5349",
      "tree": "1d8470bd651a65e798af5454ac9cf05d9f3e917e",
      "parents": [
        "8da56a0cc5e936646b82ebf0e9fa6d61b4ba19c7"
      ],
      "author": {
        "name": "Mike Frysinger",
        "email": "vapier@google.com",
        "time": "Fri Mar 06 17:31:33 2026 -0500"
      },
      "committer": {
        "name": "LUCI",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Mar 12 20:09:19 2026 -0700"
      },
      "message": "tests: add a util module for sharing code\n\nWe\u0027ve started duplicating code among test modules.  Start a common\nutils module to hold that, and migrate over TempGitTree to start.\n\nChange-Id: I10b2abd133535c90fbda4d6686602d7e5861d875\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/559041\nTested-by: Mike Frysinger \u003cvapier@google.com\u003e\nCommit-Queue: Mike Frysinger \u003cvapier@google.com\u003e\nReviewed-by: Gavin Mak \u003cgavinmak@google.com\u003e\n"
    },
    {
      "commit": "8da56a0cc5e936646b82ebf0e9fa6d61b4ba19c7",
      "tree": "b8fa23af3a6a34f69fb7837e1c21f79bf23a656a",
      "parents": [
        "0f01cd24e9a39524decd43532acd5040ca1686c1"
      ],
      "author": {
        "name": "Mike Frysinger",
        "email": "vapier@google.com",
        "time": "Tue Mar 10 00:07:56 2026 -0400"
      },
      "committer": {
        "name": "LUCI",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Mar 10 07:35:40 2026 -0700"
      },
      "message": "man: refresh after recent changes\n\nChange-Id: Ibd60f89406e89255b3284413442b1d9c0ccbfb6d\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/559601\nCommit-Queue: Mike Frysinger \u003cvapier@google.com\u003e\nTested-by: Mike Frysinger \u003cvapier@google.com\u003e\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\nReviewed-by: Jeffery Miller \u003cjefferymiller@google.com\u003e\n"
    },
    {
      "commit": "0f01cd24e9a39524decd43532acd5040ca1686c1",
      "tree": "110e3d848924085322cbd0fd29e2e4875aaea50f",
      "parents": [
        "1ee98667cc9d8f31229438309dc91881a5ebb67f"
      ],
      "author": {
        "name": "Jeffery Miller",
        "email": "jefferymiller@google.com",
        "time": "Wed Feb 18 14:50:46 2026 -0800"
      },
      "committer": {
        "name": "LUCI",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Feb 19 08:38:56 2026 -0800"
      },
      "message": "docs: Document support for child elements in extend-project\n\nClarify the existence and behavior of child elements when added to\nextend-project.\n\nChange-Id: Id9f270166c8498d4051495b9a1f68360f66e9143\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/553742\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\nTested-by: Jeffery Miller \u003cjefferymiller@google.com\u003e\nCommit-Queue: Jeffery Miller \u003cjefferymiller@google.com\u003e\n"
    },
    {
      "commit": "1ee98667cc9d8f31229438309dc91881a5ebb67f",
      "tree": "94cae9908fae8f68b7242f218f900ae4b1bba6cf",
      "parents": [
        "6f9622fe1c5a81adc03e48f5d05edd64f19b5e6e"
      ],
      "author": {
        "name": "Jeffery Miller",
        "email": "jefferymiller@google.com",
        "time": "Wed Feb 18 18:28:51 2026 -0600"
      },
      "committer": {
        "name": "LUCI",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Feb 19 08:35:03 2026 -0800"
      },
      "message": "tests: Add extend-project test for additional annotations\n\nMultiple annotations can exist for the same name when\nextending projects. Add a test case to show this behavior.\n\nChange-Id: I12bbd25e642c7e615e32f66a1c364a39ac81902c\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/553906\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\nCommit-Queue: Jeffery Miller \u003cjefferymiller@google.com\u003e\nTested-by: Jeffery Miller \u003cjefferymiller@google.com\u003e\n"
    },
    {
      "commit": "6f9622fe1c5a81adc03e48f5d05edd64f19b5e6e",
      "tree": "668359eda7c39dca4b874358d1fe9c166abc8c79",
      "parents": [
        "5cb0251248111129d1bd7f5ad396ba65c7695768"
      ],
      "author": {
        "name": "Jordan Esh",
        "email": "esh.jordan@gmail.com",
        "time": "Thu Dec 11 14:51:51 2025 +1100"
      },
      "committer": {
        "name": "LUCI",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Feb 11 17:00:07 2026 -0800"
      },
      "message": "sync: Remove dependency on ssh if not needed\n\nWhen running on a machine without the `ssh` command, repo sync would fail even if no ssh or ssh proxy was required. Use exception handling inside ssh.ProxyManager to more gracefully handle the case where ssh is not installed.\n\nBug: 467714011\nChange-Id: I602a0819638ead4d02de88b750839bc3d70549ce\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/535141\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\nReviewed-by: Gavin Mak \u003cgavinmak@google.com\u003e\nTested-by: Jordan Esh \u003cesh.jordan@gmail.com\u003e\nCommit-Queue: Jordan Esh \u003cesh.jordan@gmail.com\u003e\n"
    },
    {
      "commit": "5cb0251248111129d1bd7f5ad396ba65c7695768",
      "tree": "6504be1f938bc912bc4a44bd7c68d2ef498de23e",
      "parents": [
        "a214fd31bd477dda2708ab9f3bc675081ceff696"
      ],
      "author": {
        "name": "Gavin Mak",
        "email": "gavinmak@google.com",
        "time": "Fri Feb 06 20:54:20 2026 +0000"
      },
      "committer": {
        "name": "LUCI",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Feb 09 08:34:42 2026 -0800"
      },
      "message": "gc: fix untargeted projects being deleted\n\n`delete_unused_projects` needs a full list of active projects to figure\nout which orphaned .git dirs need to be deleted. Otherwise it thinks\nthat only the projects specified in args are active.\n\nBug: 447626164\nChange-Id: I02beebf6a01c77742a8db78221452d71cd78ea73\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/550061\nTested-by: Gavin Mak \u003cgavinmak@google.com\u003e\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\nCommit-Queue: Gavin Mak \u003cgavinmak@google.com\u003e\n"
    },
    {
      "commit": "a214fd31bd477dda2708ab9f3bc675081ceff696",
      "tree": "d751a4004ad76d04cdbc2035867e27fe8b4ea85d",
      "parents": [
        "62cd0de6cfbe7d2b7e966396d24bc337a962bdd7"
      ],
      "author": {
        "name": "Gavin Mak",
        "email": "gavinmak@google.com",
        "time": "Tue Feb 03 20:59:23 2026 +0000"
      },
      "committer": {
        "name": "LUCI",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Feb 06 13:32:28 2026 -0800"
      },
      "message": "manifest: Introduce `sync-j-max` attribute to cap sync jobs\n\nAdd a way for manifest owners to limit how many sync jobs run in\nparallel.\n\nBug: 481100878\nChange-Id: Ia6cbe02cbc83c9e414b53b8d14fe5e7e1b802505\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/548963\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\nTested-by: Gavin Mak \u003cgavinmak@google.com\u003e\nCommit-Queue: Gavin Mak \u003cgavinmak@google.com\u003e\n"
    },
    {
      "commit": "62cd0de6cfbe7d2b7e966396d24bc337a962bdd7",
      "tree": "8326e793118f5478d130d134dc502f9bf99e35be",
      "parents": [
        "b60512a75ad878c51cd01093ddfb75252893f3a5"
      ],
      "author": {
        "name": "Sam Saccone",
        "email": "samccone@google.com",
        "time": "Thu Jan 29 13:41:41 2026 -0800"
      },
      "committer": {
        "name": "Sam Saccone",
        "email": "samccone@google.com",
        "time": "Tue Feb 03 11:53:48 2026 -0800"
      },
      "message": "Make git trace2 logging errors conditional on verbose mode.\n\nAdd a verbose attribute to the EventLog class, defaulting to False.\nError messages printed to sys.stderr within the EventLog.Write method\nare now guarded by this verbose flag. In main.py, set EventLog.verbose\nto True if the command-line --verbose option is used. This prevents\ntrace2 logging failures from being printed to stderr unless verbose\noutput is explicitly requested.\n\nPROMPT\u003dconvert all git trace2 logging print messages to verbose only\nlogging\n\nBUG: b/479811034\nChange-Id: I8757ee52117d766f2f3ec47856db64cc4f51143c\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/547542\nTested-by: Sam Saccone \u003csamccone@google.com\u003e\nReviewed-by: Julia Tuttle \u003cjuliatuttle@google.com\u003e\nReviewed-by: Gavin Mak \u003cgavinmak@google.com\u003e\n"
    },
    {
      "commit": "b60512a75ad878c51cd01093ddfb75252893f3a5",
      "tree": "5c99c60826552024a115a691ddb293aa805b7421",
      "parents": [
        "5d88972390295e229ee940992cb33ce8cfd39cd5"
      ],
      "author": {
        "name": "Mike Frysinger",
        "email": "vapier@google.com",
        "time": "Thu Jan 29 14:30:47 2026 -0500"
      },
      "committer": {
        "name": "LUCI",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Jan 29 12:32:46 2026 -0800"
      },
      "message": "run_tests: log tool versions\n\nChange-Id: I4eee58786bae6d442773c63fa937fb11eda1e2f0\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/547863\nCommit-Queue: Mike Frysinger \u003cvapier@google.com\u003e\nReviewed-by: Gavin Mak \u003cgavinmak@google.com\u003e\nTested-by: Mike Frysinger \u003cvapier@google.com\u003e\n"
    },
    {
      "commit": "5d88972390295e229ee940992cb33ce8cfd39cd5",
      "tree": "93a3b898c10a1682136a890c3dde1ada50fced89",
      "parents": [
        "3c0e67bbc5f7c3849919735db4bfd7e66190f80c"
      ],
      "author": {
        "name": "Mike Frysinger",
        "email": "vapier@google.com",
        "time": "Wed Jan 21 09:15:11 2026 -0500"
      },
      "committer": {
        "name": "LUCI",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Jan 21 12:32:59 2026 -0800"
      },
      "message": "Revert \"init: change --manifest-depth default to 1\"\n\nThis reverts commit 622a5bf9c2937fbfc631ccc30d5debf74010361d.\n\nCrOS infra is failing to sync code now for some reason.\nUntil we can investigate further, pull this back out.\n\nBug: 475668525\nBug: 468033850\nChange-Id: I35a8623a95336df1be27ea870afbfc8065609f01\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/545141\nReviewed-by: Gavin Mak \u003cgavinmak@google.com\u003e\nTested-by: Mike Frysinger \u003cvapier@google.com\u003e\nCommit-Queue: Mike Frysinger \u003cvapier@google.com\u003e\n"
    },
    {
      "commit": "3c0e67bbc5f7c3849919735db4bfd7e66190f80c",
      "tree": "70298691b368bfe0b6fffbb03e76e425440cbbb3",
      "parents": [
        "3b7b20ac1d3abe7d2ac37e2040326aa1051b1336"
      ],
      "author": {
        "name": "Gavin Mak",
        "email": "gavinmak@google.com",
        "time": "Wed Jan 14 22:14:28 2026 +0000"
      },
      "committer": {
        "name": "LUCI",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Jan 15 10:27:32 2026 -0800"
      },
      "message": "manifest_xml: prevent extend-project from inheriting local groups\n\nWhen extending a project in a local manifest, the project inherits the\n`local:` group. This causes the superproject override logic (which omits\nprojects with `local:` groups) to incorrectly exclude the project from\nthe override manifest. This leads to \"extend-project element specifies\nnon-existent project\" errors during sync reload.\n\nFix this by stripping `local:` groups from extended projects, ensuring\nthey remain visible to superproject overrides while still allowing other\ninherited groups to persist.\n\nBug: 470374343\nChange-Id: I1a057ebffebc11a19dc14dde7cc13b9f18cdd0a3\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/543222\nReviewed-by: Peter Kjellerstedt \u003cpeter.kjellerstedt@axis.com\u003e\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\nTested-by: Gavin Mak \u003cgavinmak@google.com\u003e\nCommit-Queue: Gavin Mak \u003cgavinmak@google.com\u003e\n"
    },
    {
      "commit": "3b7b20ac1d3abe7d2ac37e2040326aa1051b1336",
      "tree": "e1f00e809215e5a8b09a2dcc539570807d00091f",
      "parents": [
        "e71a8c6dd85026c8861e675ed7ff468fc611df44"
      ],
      "author": {
        "name": "Nico Wald",
        "email": "nicowald@mac.com",
        "time": "Mon Jan 05 20:43:55 2026 +0100"
      },
      "committer": {
        "name": "LUCI",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Jan 12 09:48:47 2026 -0800"
      },
      "message": "CONTRIBUTING: fix HTTP password URL\n\nChange-Id: I7ae085896fe951c2b1c662689fa111a0661f988d\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/539762\nTested-by: Nico Wald \u003cnicowald@mac.com\u003e\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\nReviewed-by: Gavin Mak \u003cgavinmak@google.com\u003e\nCommit-Queue: Nico Wald \u003cnicowald@mac.com\u003e\n"
    },
    {
      "commit": "e71a8c6dd85026c8861e675ed7ff468fc611df44",
      "tree": "0bc1ce1dddc3bd2777433aed3db28bcd9d7035e8",
      "parents": [
        "c687b5df9e049f928c295e771fdebf593cffaed7"
      ],
      "author": {
        "name": "Gavin Mak",
        "email": "gavinmak@google.com",
        "time": "Wed Jan 07 20:27:41 2026 +0000"
      },
      "committer": {
        "name": "LUCI",
        "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Jan 08 11:33:40 2026 -0800"
      },
      "message": "project: disable auto-gc for depth\u003d1 in git config\n\nDuring sync, `git checkout` can trigger fetch for missing objects in\npartial clones. This internal fetch can trigger `git maintenance` or\n`git gc` and cause delays during the local checkout phase. Set\nmaintenance.auto to false and gc.auto to 0 in during `_InitRemote` if\n`depth\u003d1` to ensure that implicit fetches spawned by git skip GC.\n\nBug: 379111283\nChange-Id: I6b22a4867f29b6e9598746cb752820a84dc2aeb6\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/540681\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\nTested-by: Gavin Mak \u003cgavinmak@google.com\u003e\nCommit-Queue: Gavin Mak \u003cgavinmak@google.com\u003e\n"
    }
  ],
  "next": "c687b5df9e049f928c295e771fdebf593cffaed7"
}
