)]}'
{
  "commit": "41fef642de70ecdcaaa26be96d56a0398f95abd4",
  "tree": "699aff887b81917140ebfead9e35ea9c861a347e",
  "parents": [
    "77014c1590164715fff8f3f3d3c77e9ff01b4d70"
  ],
  "author": {
    "name": "David \u0027Digit\u0027 Turner",
    "email": "digit@google.com",
    "time": "Fri Mar 17 13:28:04 2023 +0100"
  },
  "committer": {
    "name": "GN LUCI",
    "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "time": "Sat Mar 18 18:20:13 2023 +0000"
  },
  "message": "Make `gn args --list` deterministic\n\nThis fixes Args::GetAllArguments() to return deterministic results,\neven when declare_args() are used in args.gn or some of its\nimported files.\n\nWhile this is ugly, this is used by the Fuchsia build in order to\noverride variables in third-party .gni files. This also creates\ntwo Settings instance that return `is_default() \u003d\u003d true`:\n\n- The first is just the regular default toolchain.\n- The second one has an empty label, and is used by the scope\n  created when parsing the args.gn file.\n\nThe std::sort() comparator assumed there was only one default\ntoolchain, this resulted in practice in non-deterministic\noutputs for the list of arguments.\n\nThis CL fixes the issue by ensuring the comparator places\nthe empty toolchain first, then the default one second,\nfollowed by all others sorted by their label.\n\nBug: 327\n\nChange-Id: I342d285a15339572adf72c2ddb29bbd81b814d10\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/15160\nCommit-Queue: David Turner \u003cdigit@google.com\u003e\nReviewed-by: Brett Wilson \u003cbrettw@chromium.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "fbc0ee4a44b04a7abc784ec94b6759a31f880fc3",
      "old_mode": 33188,
      "old_path": "src/gn/args.cc",
      "new_id": "3b765f8f4f5a87fdc2604e74532778384667f7b9",
      "new_mode": 33188,
      "new_path": "src/gn/args.cc"
    }
  ]
}
