)]}'
{
  "commit": "8c316d7c980d7785578ed98e871dba3d7093b481",
  "tree": "8a0377e70d393cb86fa1d28e633c159a8ab7457a",
  "parents": [
    "e3e8e8a3b0509db51ef42c46412af2c59b17db95"
  ],
  "author": {
    "name": "Gavin Mak",
    "email": "gavinmak@google.com",
    "time": "Mon Oct 26 20:07:24 2026 +0000"
  },
  "committer": {
    "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "time": "Mon Oct 26 14:51:52 2026 -0700"
  },
  "message": "upload: suppress git push progress when quiet or non-TTY\n\n`Project.UploadForReview()` unconditionally passed `--progress` to\n`git push`, forcing client and remote progress meters (`Counting\nobjects`, `remote: Resolving deltas: 3%..100%`) even on non-TTY\nstderr or when `-q`/`--quiet` was passed. Meanwhile, `repo upload`\nignored `opt.quiet` completely.\n\nMove `--progress` injection for `push` into `GitCommand` alongside\n`fetch` and `clone`, enabling it only when `sys.stderr.isatty()` and\nnone of `--progress`, `--no-progress`, `--quiet`, or `-q` are set.\n\nForward `opt.quiet` from `repo upload` to `Project.UploadForReview()`\nand pass `--no-progress` to `git push` rather than `--quiet` so\nGerrit `remote: https://...` review URLs are still emitted and parsed\nby `_FindGerritUrls()`. Also suppress the non-error `[OK]` summary\nbanner when `-q`/`--quiet` is set.\n\nBug: 578114287\nChange-Id: I88b7b055dcca0db80dae6962886a693fe717c741\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/649663\nTested-by: Gavin Mak \u003cgavinmak@google.com\u003e\nCommit-Queue: Gavin Mak \u003cgavinmak@google.com\u003e\nReviewed-by: Brian Gan \u003cbrgan@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "516a632dcc9c39643bfc2ca9f118918e92e882d8",
      "old_mode": 33188,
      "old_path": "git_command.py",
      "new_id": "5830a10cc7e735ef7ae24f2b1fe031dec4a19577",
      "new_mode": 33188,
      "new_path": "git_command.py"
    },
    {
      "type": "modify",
      "old_id": "6cdfb5bcb1bbec059f6594fb9be3b7c92d2723ec",
      "old_mode": 33188,
      "old_path": "project.py",
      "new_id": "2bde23f3fee8f28c6e1006c73c1b99d7f112b9c9",
      "new_mode": 33188,
      "new_path": "project.py"
    },
    {
      "type": "modify",
      "old_id": "1a9ab0eff32bb2b1074c4a62e56836a074101d9a",
      "old_mode": 33188,
      "old_path": "subcmds/upload.py",
      "new_id": "67eea2e66d1570023acab544adb18ffe563f4b1a",
      "new_mode": 33188,
      "new_path": "subcmds/upload.py"
    },
    {
      "type": "modify",
      "old_id": "3708d116ef23db7427b72bf6d3dbdfa6ae3687a3",
      "old_mode": 33188,
      "old_path": "tests/test_git_command.py",
      "new_id": "21caa7f421c8670e5b1cefa5ca56cf6bcb918699",
      "new_mode": 33188,
      "new_path": "tests/test_git_command.py"
    },
    {
      "type": "modify",
      "old_id": "648ddcdc511c8e5b31754a568fb70225c0d7ba60",
      "old_mode": 33188,
      "old_path": "tests/test_project.py",
      "new_id": "9b4bae660e6988d5eda2773234e56b867bd7e9bf",
      "new_mode": 33188,
      "new_path": "tests/test_project.py"
    },
    {
      "type": "modify",
      "old_id": "187194933a2606f9fd9bc3c523ae374f42761216",
      "old_mode": 33188,
      "old_path": "tests/test_subcmds_upload.py",
      "new_id": "4c9008f55e474ed4fb39ee940e5cfd36b46440e8",
      "new_mode": 33188,
      "new_path": "tests/test_subcmds_upload.py"
    }
  ]
}
