)]}'
{
  "commit": "195e49351b386ffc23020d406883eaa6511e29b3",
  "tree": "b5b2268d65076a099f8f816b784b6f32d8f9e53a",
  "parents": [
    "74762b60332d4a1c08ec5aef75ec718da9d305a2"
  ],
  "author": {
    "name": "Alex Stewart",
    "email": "alexs.mac@gmail.com",
    "time": "Wed Mar 26 11:36:11 2014 +0000"
  },
  "committer": {
    "name": "Alex Stewart",
    "email": "alexs.mac@gmail.com",
    "time": "Wed Mar 26 17:49:36 2014 +0000"
  },
  "message": "Check validity of residual block before removal in RemoveResidualBlock.\n\n- Breaking change: Problem::Options::enable_fast_parameter_block_removal\n  is now Problem::Options::enable_fast_removal, as it now controls\n  the behaviour for both parameter and residual blocks.\n\n- Previously we did not check that the specified residual block to\n  remove in RemoveResidualBlock actually represented a valid residual\n  for the problem.\n- This meant that Ceres would die unexpectedly if the user passed an\n  uninitialised residual_block, or more likely attempted to remove a\n  residual block that had already been removed automatically after\n  the user removed a parameter block upon on which it was dependent.\n- RemoveResidualBlock now verifies the validity of the given\n  residual_block to remove.  Either by checking against a hash set of\n  all residuals maintained in ProblemImpl iff enable_fast_removal\n  is enabled.  Or by a full scan of the residual blocks if not.\n\nChange-Id: I9ab178e2f68a74135f0a8e20905b16405c77a62b\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "33a40980b81363b510920898bef063044fed1b1e",
      "old_mode": 33188,
      "old_path": "docs/source/modeling.rst",
      "new_id": "f06ef0daece1970dfa151a3c996115e3ee2d53e6",
      "new_mode": 33188,
      "new_path": "docs/source/modeling.rst"
    },
    {
      "type": "modify",
      "old_id": "a7d78158d3c47b7e7bae7b8e8bc6d2ea0f12d30c",
      "old_mode": 33188,
      "old_path": "include/ceres/problem.h",
      "new_id": "bed792a2613ce0777d260f5874959f2a395ea60c",
      "new_mode": 33188,
      "new_path": "include/ceres/problem.h"
    },
    {
      "type": "modify",
      "old_id": "99f3f8959fb122d0cf692da23fecfcb24b93f34f",
      "old_mode": 33188,
      "old_path": "internal/ceres/problem_impl.cc",
      "new_id": "d9fb2af0ceed2a111212a8643bcd3fe0d8df4d71",
      "new_mode": 33188,
      "new_path": "internal/ceres/problem_impl.cc"
    },
    {
      "type": "modify",
      "old_id": "75bdc2ba729e49366d90cadfea290125b078a902",
      "old_mode": 33188,
      "old_path": "internal/ceres/problem_impl.h",
      "new_id": "e846c03801db9090942afe29b459bde6d0af112c",
      "new_mode": 33188,
      "new_path": "internal/ceres/problem_impl.h"
    },
    {
      "type": "modify",
      "old_id": "4507dfa442563bf4d6d855cde65c624642beaf7d",
      "old_mode": 33188,
      "old_path": "internal/ceres/problem_test.cc",
      "new_id": "eb75e3af5bc4a07241e27bb4151314347f5c8a9b",
      "new_mode": 33188,
      "new_path": "internal/ceres/problem_test.cc"
    }
  ]
}
