)]}'
{
  "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",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "06cfae363c34cc813ac8059c70486d7bc8ff1316",
      "old_mode": 33188,
      "old_path": "man/repo-status.1",
      "new_id": "617548a77a33fada5b5aed2f13eaeab7541677fd",
      "new_mode": 33188,
      "new_path": "man/repo-status.1"
    },
    {
      "type": "modify",
      "old_id": "06719401b5f3dfed5703bae770493442a61d447b",
      "old_mode": 33188,
      "old_path": "project.py",
      "new_id": "ec645bbfa2519e91703eaa71133c46f9afd79486",
      "new_mode": 33188,
      "new_path": "project.py"
    },
    {
      "type": "modify",
      "old_id": "a9852b3c0d2928097c1b602ab270dab8ea1ad08b",
      "old_mode": 33188,
      "old_path": "subcmds/status.py",
      "new_id": "1434eeafa8c36772262676f50a841abe0b4b4515",
      "new_mode": 33188,
      "new_path": "subcmds/status.py"
    },
    {
      "type": "modify",
      "old_id": "6007878b27ae79e47a55375497ca932a2e067362",
      "old_mode": 33188,
      "old_path": "tests/test_subcmds_status.py",
      "new_id": "1501b345c48852689459f1687c7930102d305730",
      "new_mode": 33188,
      "new_path": "tests/test_subcmds_status.py"
    }
  ]
}
