)]}'
{
  "commit": "123df6704176d1981cf0d8f15a5021f4e2ce01ed",
  "tree": "95d4862128c37a538efc6c9faca6835f87611e56",
  "parents": [
    "3363bb35dc8680708bf82e2d87629d64dabc6c01"
  ],
  "author": {
    "name": "Alex Ford",
    "email": "fordas@uw.edu",
    "time": "Fri Aug 10 21:40:01 2018 -0700"
  },
  "committer": {
    "name": "Hynek Schlawack",
    "email": "hs@ox.cx",
    "time": "Sat Aug 11 06:40:01 2018 +0200"
  },
  "message": "Added support for keyword-only arguments on Python 3+ [rebase] (#411)\n\n* Added support for keyword-only attributes. Closes #106, and closes #38\r\n\r\n(Rebases #281)\r\n\r\nCo-authored-by: Alex Ford \u003cfordas@uw.edu\u003e\r\n\r\n* Add `attr.s`-level `kw_only` flag.\r\n\r\nAdd `kw_only` flag to `attr.s` decorator, indicating that all class\r\nattributes should be keyword-only in __init__.\r\n\r\nMinor updates to internal interface of `Attribute` to support\r\nevolution of attributes to `kw_only` in class factory.\r\n\r\nExpand examples with `attr.s` level kw_only.\r\n\r\n* Add `kw_only` to type stubs.\r\n\r\n* Update changelog for rebased PR.\r\n\r\nHear ye, hear ye. A duplicate PR is born.\r\n\r\n* Tidy docs from review.\r\n\r\n* Tidy code from review.\r\n\r\n* Add explicit tests of PY2 kw_only SyntaxError behavior.\r\n\r\n* Add `PythonToOldError`, raise for kw_only on PY2.\r\n\r\n* `Attribute._evolve` to `Attribute._assoc`.\r\n",
  "tree_diff": [
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e942d18ee7f474a907da635610135ea5e7de7914",
      "new_mode": 33188,
      "new_path": "changelog.d/281.change.rst"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e942d18ee7f474a907da635610135ea5e7de7914",
      "new_mode": 33188,
      "new_path": "changelog.d/411.change.rst"
    },
    {
      "type": "modify",
      "old_id": "665fe9fce542b155e5ab848e5a74b35142a354b0",
      "old_mode": 33188,
      "old_path": "docs/api.rst",
      "new_id": "ba3bc18fc274074e06de600e006e7367ca3bafc4",
      "new_mode": 33188,
      "new_path": "docs/api.rst"
    },
    {
      "type": "modify",
      "old_id": "dfd6bf9c496fd20147d10576a2ed5c916c27f872",
      "old_mode": 33188,
      "old_path": "docs/examples.rst",
      "new_id": "656d969f38153678b6e7a479f2ab1a9edb60baa2",
      "new_mode": 33188,
      "new_path": "docs/examples.rst"
    },
    {
      "type": "modify",
      "old_id": "77f3f64472c9eea81b6a389554f313d013df678a",
      "old_mode": 33188,
      "old_path": "docs/extending.rst",
      "new_id": "11f2a74f4fbc3b82527a23f77b10c9a532281c6f",
      "new_mode": 33188,
      "new_path": "docs/extending.rst"
    },
    {
      "type": "modify",
      "old_id": "c8b4c6585aa4b1d8d71a79c673446c24b6e57ba2",
      "old_mode": 33188,
      "old_path": "src/attr/__init__.pyi",
      "new_id": "34376a2cf0c061e8e429a99035cb1e24c9517793",
      "new_mode": 33188,
      "new_path": "src/attr/__init__.pyi"
    },
    {
      "type": "modify",
      "old_id": "a8d9c70c7cf8bae5082b62c67952e159f008a85c",
      "old_mode": 33188,
      "old_path": "src/attr/_make.py",
      "new_id": "71c0f23b73cda4c7d538162cb1335a05c7fdad1b",
      "new_mode": 33188,
      "new_path": "src/attr/_make.py"
    },
    {
      "type": "modify",
      "old_id": "1a3229f536b45d2817991346387a64d2c522192e",
      "old_mode": 33188,
      "old_path": "src/attr/exceptions.py",
      "new_id": "b12e41e97ae9f5223c18ea0b760654b80f161008",
      "new_mode": 33188,
      "new_path": "src/attr/exceptions.py"
    },
    {
      "type": "modify",
      "old_id": "34807a4b7801dd2ad2034d90b00d82d14ebda721",
      "old_mode": 33188,
      "old_path": "tests/test_annotations.py",
      "new_id": "fee45d180b4d8317cca1596b1d84d07ff2a90446",
      "new_mode": 33188,
      "new_path": "tests/test_annotations.py"
    },
    {
      "type": "modify",
      "old_id": "20d13b6a93d1bcd7b781a5b25ed354965d15ae35",
      "old_mode": 33188,
      "old_path": "tests/test_make.py",
      "new_id": "0302cb5f3aa0abc80b7a295a9889173df9f8ffc6",
      "new_mode": 33188,
      "new_path": "tests/test_make.py"
    },
    {
      "type": "modify",
      "old_id": "baf73313fff4165ee16f91d8d681cf0a8e4b77cb",
      "old_mode": 33188,
      "old_path": "tests/utils.py",
      "new_id": "230726c91707b6efce0c0f5d5dc8fed9f01abc1c",
      "new_mode": 33188,
      "new_path": "tests/utils.py"
    }
  ]
}
