)]}'
{
  "commit": "2e56c317bd8e2bf152cfa2ead6ac5fa476fe28b4",
  "tree": "94f40e79eb8e143589b21d0d87753db3849b1af2",
  "parents": [
    "d417bc7ecb4e20b3b2cccec7c426831a6082f9fb"
  ],
  "author": {
    "name": "David \u0027Digit\u0027 Turner",
    "email": "digit@google.com",
    "time": "Fri Dec 10 11:37:09 2021 +0100"
  },
  "committer": {
    "name": "Commit Bot",
    "email": "commit-bot@chromium.org",
    "time": "Mon Dec 13 16:32:40 2021 +0000"
  },
  "message": "Ensure circular dependency check output is deterministic.\n\nWhen BuilderRecordMap changed from an std::map\u003cLabel, BuilderRecord\u003e\nto an unordered container, the order ot BuilderRecord::GetUnresolvedDeps()\nand a few other functions became non-deterministic.\n\nThis CL fixes that by sorting records based on their label when necessary,\nwhich all happen to be outside of the critical Builder performance loop.\nI.e.:\n\n  Builder::CheckForBadItems()\n    Sorting happens it has been determined that there are bad items,\n    so doesn\u0027t impact the regular case.\n\n  Builder::GetAllRecords()\n  Builder::GetAlResolvedItems()\n  Builder::GetAllResolvedTargets()\n\n+ Add a small unit-test for BuilderRecord::GetSortedUnresolvedDeps().\n\nMeasurements show no impact on performance.\n\nBug: 271\nChange-Id: Iaa054127c140797e178dd1360ff46ed293029e27\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/12620\nReviewed-by: Brett Wilson \u003cbrettw@chromium.org\u003e\nCommit-Queue: David Turner \u003cdigit@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "7e36debed74be2bc0ae290816bf1f466b2552aa6",
      "old_mode": 33188,
      "old_path": "src/gn/builder.cc",
      "new_id": "adb39ab1a8f25637af9c6ea46ce7f4cbe768aab5",
      "new_mode": 33188,
      "new_path": "src/gn/builder.cc"
    },
    {
      "type": "modify",
      "old_id": "4b85824e237b88849cdfaa5e4c64aa9aa34db2fc",
      "old_mode": 33188,
      "old_path": "src/gn/builder.h",
      "new_id": "bebaa8143b88184fc381622e2d7583325b96574a",
      "new_mode": 33188,
      "new_path": "src/gn/builder.h"
    },
    {
      "type": "modify",
      "old_id": "7849d9143ede9d503c7534506567d6584288b0b9",
      "old_mode": 33188,
      "old_path": "src/gn/builder_record.cc",
      "new_id": "d1d0c53cdd89142194edf5aa1fdf3fde4b1f5b68",
      "new_mode": 33188,
      "new_path": "src/gn/builder_record.cc"
    },
    {
      "type": "modify",
      "old_id": "28f75fe3f8afca2de467fcb21e2c34087bea3ee1",
      "old_mode": 33188,
      "old_path": "src/gn/builder_record.h",
      "new_id": "c4dc867ced282e90627294f1919f03567f4d995f",
      "new_mode": 33188,
      "new_path": "src/gn/builder_record.h"
    },
    {
      "type": "modify",
      "old_id": "2a354d5e319ad2659a374b5dc64f873467e14999",
      "old_mode": 33188,
      "old_path": "src/gn/builder_unittest.cc",
      "new_id": "79285ab4b0dae92f895994b373ad7afa0d5d232c",
      "new_mode": 33188,
      "new_path": "src/gn/builder_unittest.cc"
    }
  ]
}
