)]}'
{
  "commit": "377789552327f28c8f2d0fa1001da0cdc24460c2",
  "tree": "ba7c951c1178c7c93a42bcafdd494fca5641f579",
  "parents": [
    "5925bd2ce3985b72438a8b4e64d85b1f61294c53"
  ],
  "author": {
    "name": "brettw",
    "email": "brettw@chromium.org",
    "time": "Wed Aug 03 17:00:34 2016 -0700"
  },
  "committer": {
    "name": "Commit bot",
    "email": "commit-bot@chromium.org",
    "time": "Thu Aug 04 00:03:54 2016 +0000"
  },
  "message": "Allow creation and modification of scopes in GN.\n\nPreviously scope variables could only be created by exec_script() and read_file() functions. This patch adds the following syntax:\n  foo \u003d { a \u003d 1 b \u003d 2 }\n  foo.a +\u003d 1\n  foo.c \u003d 3\nThis will be used in a followup for toolchain args for non-default toolchains, which will allow us to generalize the templates as the number of configurations grows over time (currently every variable has be to be forwarded in the root toolchain templates).\n\nIt also allows mutations of list elements which isn\u0027t actually necessary for this but the implementation is the same as for scope mutations:\n  list[0] \u003d \"foo\"\n\nThis does a significant rework of the operator implementation. This was required for the more general \"destination\" for assignments and mutations.\n\nIt also updates the operator functions to use move semantics more. Previously:\n  list3 \u003d list1 + list2\nWould be implemented as:\n  1. Copy list1 into new new variable.\n  2. Copy list2 into a new variable.\n  3. Copy list1\u0027s copy to a new variable.\n  4. Append elements of list2 to list1\u0027s copy by copying.\n  5. Copy that list to list3.\nThat\u0027s a lot of copies! The new implementation does:\n  1. Copy list1 into a new variable.\n  2. Copy list2 into a new variable.\n  3. Append elements of list2\u0027s copy to list1\u0027s copy by moving.\n  4. Move list2 to list3.\nAssuming the lists contain strings, each string should now be copied exactly once rather than three times.\n\nAdded a lot of documentation to the grammar help on how the language works (not strictly grammar but it seems like the best place to put it.\n\nBUG\u003d\n\nReview-Url: https://codereview.chromium.org/2187523003\nCr-Original-Commit-Position: refs/heads/master@{#409672}\nCr-Mirrored-From: https://chromium.googlesource.com/chromium/src\nCr-Mirrored-Commit: 01cdea1ed9ad32a7a595ef1a5adfa384006e3097\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "9bac894f9d6db1f62229e9d4008847be6acd6da2",
      "old_mode": 33188,
      "old_path": "tools/gn/command_help.cc",
      "new_id": "68f0d0455dca94b2b848577cc0f281d936397ce9",
      "new_mode": 33188,
      "new_path": "tools/gn/command_help.cc"
    },
    {
      "type": "modify",
      "old_id": "d8fe87ed8c61be19638b688f137359bbfae5357e",
      "old_mode": 33188,
      "old_path": "tools/gn/function_foreach.cc",
      "new_id": "c264e3c1ea83fdb3b6653b7166d261d7e84c2891",
      "new_mode": 33188,
      "new_path": "tools/gn/function_foreach.cc"
    },
    {
      "type": "modify",
      "old_id": "8f3b90dec716655748087a65a1ccb368275af065",
      "old_mode": 33188,
      "old_path": "tools/gn/function_forward_variables_from.cc",
      "new_id": "8c7a558224e25ea0b21e96b3dff386e37ed8d223",
      "new_mode": 33188,
      "new_path": "tools/gn/function_forward_variables_from.cc"
    },
    {
      "type": "modify",
      "old_id": "dcea722ea0dcdf5675b3d39ac6e4f395f00517ca",
      "old_mode": 33188,
      "old_path": "tools/gn/functions.cc",
      "new_id": "02129a84e3a141b379d271fc269388280e593e4c",
      "new_mode": 33188,
      "new_path": "tools/gn/functions.cc"
    },
    {
      "type": "modify",
      "old_id": "c6cdbdb66b89b0c2f0aa7d6228e1be2f0df7433a",
      "old_mode": 33188,
      "old_path": "tools/gn/loader_unittest.cc",
      "new_id": "20b8609d1aa92b20dac1bf19a7e54ccc8e05b71a",
      "new_mode": 33188,
      "new_path": "tools/gn/loader_unittest.cc"
    },
    {
      "type": "modify",
      "old_id": "6b3f7c716a98c0ca0498c859802b953cab354d3f",
      "old_mode": 33188,
      "old_path": "tools/gn/operators.cc",
      "new_id": "ac6a37fe3bbdc18b445373822f2ff0545d29eb1a",
      "new_mode": 33188,
      "new_path": "tools/gn/operators.cc"
    },
    {
      "type": "modify",
      "old_id": "dd31b8261e2f1c1a0f4c420b68a8f35ec1d6caba",
      "old_mode": 33188,
      "old_path": "tools/gn/operators_unittest.cc",
      "new_id": "e2c396c4b684c23ed0326f749d167b3dc2418dc9",
      "new_mode": 33188,
      "new_path": "tools/gn/operators_unittest.cc"
    },
    {
      "type": "modify",
      "old_id": "dc80514639a883063d284889b2522b10787414d5",
      "old_mode": 33188,
      "old_path": "tools/gn/parse_tree.cc",
      "new_id": "ecc438b245aee02c62551efaee117796786dc02f",
      "new_mode": 33188,
      "new_path": "tools/gn/parse_tree.cc"
    },
    {
      "type": "modify",
      "old_id": "48313bea7f231c8653f1a3b3e6a711a93f910aef",
      "old_mode": 33188,
      "old_path": "tools/gn/parse_tree.h",
      "new_id": "415041eebcada118f092fdcaf237dfdcc86982a3",
      "new_mode": 33188,
      "new_path": "tools/gn/parse_tree.h"
    },
    {
      "type": "modify",
      "old_id": "a6850a74850fe7184a2303366a6d98bcb537747c",
      "old_mode": 33188,
      "old_path": "tools/gn/parse_tree_unittest.cc",
      "new_id": "060921576a225dca05b728f88debb91d70f25113",
      "new_mode": 33188,
      "new_path": "tools/gn/parse_tree_unittest.cc"
    },
    {
      "type": "modify",
      "old_id": "7e5886f8950b3d4b4466aa34e966658ca05779ed",
      "old_mode": 33188,
      "old_path": "tools/gn/parser.cc",
      "new_id": "57a398e0187e50f03a7efa15443009fc9efb41ab",
      "new_mode": 33188,
      "new_path": "tools/gn/parser.cc"
    },
    {
      "type": "modify",
      "old_id": "de828a4ecdffddf78616b4331b489a8a3a648842",
      "old_mode": 33188,
      "old_path": "tools/gn/parser.h",
      "new_id": "29580da2b4a2946341c760ba2b43e01ae7c2f4af",
      "new_mode": 33188,
      "new_path": "tools/gn/parser.h"
    },
    {
      "type": "modify",
      "old_id": "39703737a2a8af393cf6b4a60b7c4d07640616d0",
      "old_mode": 33188,
      "old_path": "tools/gn/parser_unittest.cc",
      "new_id": "6caeeb4079463bbbd162c9ed07c86feb5cb30762",
      "new_mode": 33188,
      "new_path": "tools/gn/parser_unittest.cc"
    },
    {
      "type": "modify",
      "old_id": "8e9230d84111d66ee358a20befabe822f7df2894",
      "old_mode": 33188,
      "old_path": "tools/gn/scope.cc",
      "new_id": "7e7c201bbef918100225206b6ae107a6adc67f36",
      "new_mode": 33188,
      "new_path": "tools/gn/scope.cc"
    },
    {
      "type": "modify",
      "old_id": "685f8404d5fce71682580e713513b0155b651d68",
      "old_mode": 33188,
      "old_path": "tools/gn/scope.h",
      "new_id": "3d3671254beae20ef3387cb3e7b629f95df34f8e",
      "new_mode": 33188,
      "new_path": "tools/gn/scope.h"
    },
    {
      "type": "modify",
      "old_id": "de2005a5144e8e19f903568ed8957807acf1aeda",
      "old_mode": 33188,
      "old_path": "tools/gn/scope_unittest.cc",
      "new_id": "a90d725d8dfb4326a0502f55cb8f5d34e133bfe1",
      "new_mode": 33188,
      "new_path": "tools/gn/scope_unittest.cc"
    },
    {
      "type": "modify",
      "old_id": "e865264174a1740c7fe8a9821dd8d18f5764b84c",
      "old_mode": 33188,
      "old_path": "tools/gn/template.cc",
      "new_id": "66d6745c96c6fe24df033032f77b0c575378fc92",
      "new_mode": 33188,
      "new_path": "tools/gn/template.cc"
    },
    {
      "type": "modify",
      "old_id": "9a52fbaa0576a11b08cbe789bd47c6d811f3ac41",
      "old_mode": 33188,
      "old_path": "tools/gn/value.cc",
      "new_id": "b5e21f090f57c1f4bfe8a4a241020dee19d39c78",
      "new_mode": 33188,
      "new_path": "tools/gn/value.cc"
    },
    {
      "type": "modify",
      "old_id": "a8a83fb7c8c4e1cd828f0c627b7f4205364ccb54",
      "old_mode": 33188,
      "old_path": "tools/gn/value.h",
      "new_id": "0428818e5da0d44b950113d54df77672c4e83ba2",
      "new_mode": 33188,
      "new_path": "tools/gn/value.h"
    },
    {
      "type": "modify",
      "old_id": "e120f74a0404bb9bcf74b05081d6662d005657d1",
      "old_mode": 33188,
      "old_path": "tools/gn/visibility_unittest.cc",
      "new_id": "7d59540b0af23053c537b786fc348127da8bc4bf",
      "new_mode": 33188,
      "new_path": "tools/gn/visibility_unittest.cc"
    }
  ]
}
