)]}'
{
  "commit": "53e902a19b0b80e07ac55966d13c5c84c5b0e8ce",
  "tree": "e804b3826be8d5bb6153f2f9f4e482191e8b8642",
  "parents": [
    "093fdb6587bba081c4d34eb9ea500149b1090280"
  ],
  "author": {
    "name": "Dan Sandler",
    "email": "dsandler@android.com",
    "time": "Sun Mar 09 13:20:02 2014 -0400"
  },
  "committer": {
    "name": "David Pursehouse",
    "email": "david.pursehouse@sonymobile.com",
    "time": "Tue Mar 11 05:33:43 2014 +0000"
  },
  "message": "More verbose errors for NoManifestExceptions.\n\nThe old \"manifest required for this command -- please run\ninit\" is replaced by a more helpful message that lists the\ncommand repo was trying to execute (with arguments) as well\nas the str() of the NoManifestException. For example:\n\n\u003e error: in `sync`: [Errno 2] No such file or directory:\n\u003e \t\u0027path/to/.repo/manifests/.git/HEAD\u0027\n\u003e error: manifest missing or unreadable -- please run init\n\nOther failure points in basic command parsing and dispatch\nare more clearly explained in the same fashion.\n\nChange-Id: I6212e5c648bc5d57e27145d55a5391ca565e4149\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "7e52b0166238944ab3701df0c4cf70e786db816b",
      "old_mode": 33188,
      "old_path": "error.py",
      "new_id": "ff948f9cbc9f51471917516ba4a9ac89326628a8",
      "new_mode": 33188,
      "new_path": "error.py"
    },
    {
      "type": "modify",
      "old_id": "36617762266c53501c0745d6c484e7f9bca2dd5d",
      "old_mode": 33261,
      "old_path": "main.py",
      "new_id": "72fb39b027cfd9c44c7cec891346248147d005d8",
      "new_mode": 33261,
      "new_path": "main.py"
    },
    {
      "type": "modify",
      "old_id": "d07b52168b3a4cb84974f397eb25d951649ea5d8",
      "old_mode": 33188,
      "old_path": "project.py",
      "new_id": "023cf732ef5b796620bb18eb4ad08310fe3336a6",
      "new_mode": 33188,
      "new_path": "project.py"
    }
  ]
}
