)]}'
{
  "commit": "c638b54e19f4765904613f729b2c9059fc4799d2",
  "tree": "6f702cd0b4db264a8c1042d6a4e8d14f7a55f18e",
  "parents": [
    "fb4a91060ea34a939bb5ab6ffc494d1aa25e1979"
  ],
  "author": {
    "name": "Victor Pushkarev",
    "email": "corvinus.v@gmail.com",
    "time": "Tue Sep 15 16:07:01 2026 +0300"
  },
  "committer": {
    "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "time": "Wed Sep 16 04:54:02 2026 -0700"
  },
  "message": "command: preserve project filters in regex selection\n\n`FindProjects` gets its candidate projects from `GetProjects` and then\napplies regex matching. However, it only forwards `all_manifests`, so\nother project filters are lost on regex paths.\n\nAs a result, `repo forall -r/-i --groups` falls back to the configured\ngroup selection instead of using the requested groups.\nSimilarly, `repo list -r --groups` ignores the requested groups, and\n`repo list -r --all` still excludes projects without a checkout.\n\nPass `groups` and `missing_ok` through `FindProjects`, and forward the\nexisting options from `forall` and `list`. When no group override is\ngiven, keep using each manifest\u0027s effective groups.\n\nAdd regression tests for `FindProjects` and both command paths.\n\nChange-Id: I5dfc22172fdd81de5312a84433867300a1342aec\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/631281\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\nReviewed-by: Gavin Mak \u003cgavinmak@google.com\u003e\nCommit-Queue: Victor Pushkarev \u003ccorvinus.v@gmail.com\u003e\nTested-by: Victor Pushkarev \u003ccorvinus.v@gmail.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "6aa0ca86b93920986bee4eaa77500517f47b30d5",
      "old_mode": 33188,
      "old_path": "command.py",
      "new_id": "7f60834ad57735588f1a5cb4e13214acc10f0751",
      "new_mode": 33188,
      "new_path": "command.py"
    },
    {
      "type": "modify",
      "old_id": "982b1ba5aa723b75eaf703fb471004fb02fa61c1",
      "old_mode": 33188,
      "old_path": "subcmds/forall.py",
      "new_id": "598ab4988017dd6211e2145693881553e633b48e",
      "new_mode": 33188,
      "new_path": "subcmds/forall.py"
    },
    {
      "type": "modify",
      "old_id": "df9ce5f6da70b3043308d54761878ffdc7f8f488",
      "old_mode": 33188,
      "old_path": "subcmds/list.py",
      "new_id": "3210ccdeda9a1aa72ab5220bb3657d06bf7c4a22",
      "new_mode": 33188,
      "new_path": "subcmds/list.py"
    },
    {
      "type": "modify",
      "old_id": "ef6f7a031cc046dc1870ad9450ffaa5fd0099cc1",
      "old_mode": 33188,
      "old_path": "tests/test_command.py",
      "new_id": "45bb09f2c8fa731711f88651e45b2468b744ef49",
      "new_mode": 33188,
      "new_path": "tests/test_command.py"
    },
    {
      "type": "modify",
      "old_id": "67ec43cfd1885c2055e7038b956caa23e912f9e7",
      "old_mode": 33188,
      "old_path": "tests/test_subcmds_forall.py",
      "new_id": "855185c539b8c262ffc1c8bfbd54a03cd181ef10",
      "new_mode": 33188,
      "new_path": "tests/test_subcmds_forall.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "29a7032f31f99788f26dd72da3b21b28473cbc9d",
      "new_mode": 33188,
      "new_path": "tests/test_subcmds_list.py"
    }
  ]
}
