)]}'
{
  "commit": "27bb4a8589c47a65b5ea2c01872a903043d0ef74",
  "tree": "7d12e48bfd38d4a4b4449c7e952ff35f1bcdd422",
  "parents": [
    "dcee120bac04911bf01d8365bddca87c74ce2af9"
  ],
  "author": {
    "name": "Sameer Agarwal",
    "email": "sameeragarwal@google.com",
    "time": "Wed Dec 18 13:06:58 2013 -0800"
  },
  "committer": {
    "name": "Sameer Agarwal",
    "email": "sameeragarwal@google.com",
    "time": "Wed Dec 18 13:10:12 2013 -0800"
  },
  "message": "Handle empty problems consistently.\n\nUntil now Ceres was inconsistent in the way it handled a solve\ncall on an \"empty\" Problem. If the problem did not contain\nany residual or parameter blocks, it failed. However, if after\nconstructing the reduced program, the problem was found to not\ncontain any modifiable parameter blocks, it was considered a valid\nproblem which had a constant objective function value.\n\nWhen creating problems automatically, it is often the case that\nan empty problem is a corner case. This change makes handling this\ncorner case consistent with the rest of Ceres logic.\n\nChange-Id: Ia9da09fbf5d5cd7eae6b39a92c1976b8645db9fe\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "f48ad3be08b4233fd42eb4b8f0d8872219803c52",
      "old_mode": 33188,
      "old_path": "internal/ceres/solver_impl.cc",
      "new_id": "6c579a6098d32527df440438280d3ea92d14d216",
      "new_mode": 33188,
      "new_path": "internal/ceres/solver_impl.cc"
    },
    {
      "type": "modify",
      "old_id": "43a3b9741a5fc8281d2bd08539d30e892ad5f17b",
      "old_mode": 33188,
      "old_path": "internal/ceres/solver_impl_test.cc",
      "new_id": "d6faaff800482fe059e71e095c39bda7bce36efd",
      "new_mode": 33188,
      "new_path": "internal/ceres/solver_impl_test.cc"
    }
  ]
}
