)]}'
{
  "commit": "4350791e0d652721015cc94509233c833dad8812",
  "tree": "d28ada6016b8c95898a05bc328267a038566129b",
  "parents": [
    "628456833a9be237c7373254fbe0771b2e802a88"
  ],
  "author": {
    "name": "Dan Willemsen",
    "email": "dwillemsen@google.com",
    "time": "Thu Sep 01 16:26:02 2016 -0700"
  },
  "committer": {
    "name": "Dan Willemsen",
    "email": "dwillemsen@google.com",
    "time": "Tue Sep 20 17:16:12 2016 -0700"
  },
  "message": "On project cleanup, don\u0027t remove nested projects\n\nWhen there are nested projects in a manifest, like on AOSP right now:\n\n\u003cproject path\u003d\"build\" name\u003d\"platform/build\" /\u003e\n\u003cproject path\u003d\"build/blueprint\" name\u003d\"platform/build/blueprint\" /\u003e\n\u003cproject path\u003d\"build/kati\" name\u003d\"platform/build/kati\" /\u003e\n\u003cproject path\u003d\"build/soong\" name\u003d\"platform/build/soong\" /\u003e\n\nAnd the top \"build\" project is removed (or renamed to remove the\nnesting), repo just wipes away everything under build/ and re-creates\nthe projects that are still there. But it only checks to see if the\nbuild/ project is dirty, so if there are dirty files in a nested\nproject, they\u0027ll just be blown away, and a fresh worktree checked out.\n\nInstead, behave similarly to how `git clean -dxf` behaves and preserve\nany subdirectories that have git repositories in them. This isn\u0027t as\nstrict as git -- it does not check to see if the \u0027.git\u0027 entry is a\nreadable gitdir, just whether an entry named \u0027.git\u0027 exists.\n\nIf it encounters any errors removing files, we\u0027ll print them all out to\nstderr and tell the user that we were unable to clean up the obsolete\nproject, that they should clean it up manually, then sync again.\n\nChange-Id: I2f6a7dd205a8e0b7590ca5369e9b0ba21d5a6f77\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "ecf2ffc0e352953e259f423fe09e9cb53acaf345",
      "old_mode": 33188,
      "old_path": "subcmds/sync.py",
      "new_id": "cc0b17e93cacd2e2feec363d51c5f784e3ec0682",
      "new_mode": 33188,
      "new_path": "subcmds/sync.py"
    }
  ]
}
