)]}'
{
  "commit": "b09436613925b2eb334c10f219b743868e4b3fe5",
  "tree": "0a096012dca203b727b09f174fb2e36cb85e0647",
  "parents": [
    "421c4a23dc5e60db9596b79ea87cdc19cc463e9b"
  ],
  "author": {
    "name": "Adam Israel",
    "email": "adam.israel@canonical.com",
    "time": "Thu Aug 02 15:32:00 2018 -0400"
  },
  "committer": {
    "name": "Adam Israel",
    "email": "adam.israel@canonical.com",
    "time": "Thu Aug 02 15:34:51 2018 -0400"
  },
  "message": "Improved Primitive support and better testing\n\nThis changeset addresses several issues.\n\n- Improve primitive support so the status and output of an executed\nprimitive can be retrieved\n- Merge latest upstream libjuju (required for new primive features)\n- New testing framework\n    This is the start of a new testing framework with the ability to\ncreate and configure LXD containers with SSH, to use while testing proxy\ncharms.\n- Add support for using ssh keys with proxy charms\n    See Feature 1429. This uses the per-proxy charm/unit ssh keypair\n\nSigned-off-by: Adam Israel \u003cadam.israel@canonical.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "7f6558422c478786b40b8c60bcfaa3eb7c98a4a9",
      "old_mode": 33188,
      "old_path": "README.md",
      "new_id": "bed6c90f44b3beea4d618ac2230bdba04a13a992",
      "new_mode": 33188,
      "new_path": "README.md"
    },
    {
      "type": "modify",
      "old_id": "866a7851f2a46c0b305493a063022b1acc7e3f31",
      "old_mode": 33188,
      "old_path": "modules/libjuju/.gitignore",
      "new_id": "7614b472795c010651ff9991a6e32360ae4efac7",
      "new_mode": 33188,
      "new_path": "modules/libjuju/.gitignore"
    },
    {
      "type": "modify",
      "old_id": "0e907f0d11159c1111a138717f7ea449200cc131",
      "old_mode": 33188,
      "old_path": "modules/libjuju/.travis.yml",
      "new_id": "4389c8e4b8b494cbb4b89ded0c46f8701e2297d3",
      "new_mode": 33188,
      "new_path": "modules/libjuju/.travis.yml"
    },
    {
      "type": "modify",
      "old_id": "f38fc5393ff66e64aaa5d8733ea9b44d31927dce",
      "old_mode": 33188,
      "old_path": "modules/libjuju/VERSION",
      "new_id": "2cc4a7a752857284202bde2f4fb0d961e552420b",
      "new_mode": 33188,
      "new_path": "modules/libjuju/VERSION"
    },
    {
      "type": "modify",
      "old_id": "caf778eaa5cb23feacae031d196bdf819500ac23",
      "old_mode": 33188,
      "old_path": "modules/libjuju/docs/changelog.rst",
      "new_id": "a4a42225073ee8606cb07d8c37f0ca10324771b8",
      "new_mode": 33188,
      "new_path": "modules/libjuju/docs/changelog.rst"
    },
    {
      "type": "modify",
      "old_id": "2da0e7b68ea9e1728998945f83382dcf65b27461",
      "old_mode": 33188,
      "old_path": "modules/libjuju/docs/narrative/controller.rst",
      "new_id": "1d8632159caf30a9dddedb94c606cef3146b23f6",
      "new_mode": 33188,
      "new_path": "modules/libjuju/docs/narrative/controller.rst"
    },
    {
      "type": "modify",
      "old_id": "57dbc810f07aab33b339f418b05d6b2a57ea4b80",
      "old_mode": 33188,
      "old_path": "modules/libjuju/docs/narrative/model.rst",
      "new_id": "42633a1cb000b97d70656d875b5b43dd2145f14d",
      "new_mode": 33188,
      "new_path": "modules/libjuju/docs/narrative/model.rst"
    },
    {
      "type": "modify",
      "old_id": "886550d0c151f51f5bed30eb64b84a0d5c68eaff",
      "old_mode": 33188,
      "old_path": "modules/libjuju/docs/readme.rst",
      "new_id": "87666d0ba3c9781881f2448ba075911b3bc74e6f",
      "new_mode": 33188,
      "new_path": "modules/libjuju/docs/readme.rst"
    },
    {
      "type": "modify",
      "old_id": "7082a6e9a7b10980bb20eebdc08d702c5e8d6800",
      "old_mode": 33188,
      "old_path": "modules/libjuju/docs/upstream-updates/index.rst",
      "new_id": "41f448adf349374d27d80a9f1d259549c2f0446b",
      "new_mode": 33188,
      "new_path": "modules/libjuju/docs/upstream-updates/index.rst"
    },
    {
      "type": "modify",
      "old_id": "4a3cc6df45676d9be1368d4319d3e62feb733fb7",
      "old_mode": 33188,
      "old_path": "modules/libjuju/examples/action.py",
      "new_id": "f839f1122dc1a597a3df1e6e4fec14b63c75a63f",
      "new_mode": 33188,
      "new_path": "modules/libjuju/examples/action.py"
    },
    {
      "type": "modify",
      "old_id": "0e96fa1de5f85c7584a44f6ddb9761462230b767",
      "old_mode": 33188,
      "old_path": "modules/libjuju/examples/add_model.py",
      "new_id": "88766f15b08e346515f040a024b3fd56a037ca0c",
      "new_mode": 33188,
      "new_path": "modules/libjuju/examples/add_model.py"
    },
    {
      "type": "modify",
      "old_id": "bad5b6d8c4494fb47bb14e743f643a93be9f05da",
      "old_mode": 33188,
      "old_path": "modules/libjuju/examples/config.py",
      "new_id": "c7580f6300f53e5c6f1f3f88465800637bacb20f",
      "new_mode": 33188,
      "new_path": "modules/libjuju/examples/config.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "b46a09c6150b6a45ac01fd7c5115099c6735d664",
      "new_mode": 33188,
      "new_path": "modules/libjuju/examples/connect_current_model.py"
    },
    {
      "type": "modify",
      "old_id": "3f029ab4d21ac9851aa8fb582eb7871727c1eedc",
      "old_mode": 33188,
      "old_path": "modules/libjuju/examples/controller.py",
      "new_id": "b61a6f6d19d6a49df8a0c1886c38bf8d22d7b83a",
      "new_mode": 33188,
      "new_path": "modules/libjuju/examples/controller.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e653536bc2f18aa6c738bebbbca30c6f4a32413f",
      "new_mode": 33188,
      "new_path": "modules/libjuju/examples/credential.py"
    },
    {
      "type": "modify",
      "old_id": "b14e4ca896d877114cad894f955e482cf7cdca78",
      "old_mode": 33188,
      "old_path": "modules/libjuju/examples/deploy.py",
      "new_id": "43764d7f690db735c9a09c35237bd14ce5037f8a",
      "new_mode": 33188,
      "new_path": "modules/libjuju/examples/deploy.py"
    },
    {
      "type": "modify",
      "old_id": "c93981a58d9f56a843029d52c82e7e47a12bd88d",
      "old_mode": 33188,
      "old_path": "modules/libjuju/examples/future.py",
      "new_id": "5e974cfc95ef15c60d50e86a05b7f217d757884b",
      "new_mode": 33188,
      "new_path": "modules/libjuju/examples/future.py"
    },
    {
      "type": "modify",
      "old_id": "a15e9f7701f9ba7234784608ea09ebf2f3038f87",
      "old_mode": 33188,
      "old_path": "modules/libjuju/examples/livemodel.py",
      "new_id": "1b10ac92352542c3eb5444c1c1a6631fc824c377",
      "new_mode": 33188,
      "new_path": "modules/libjuju/examples/livemodel.py"
    },
    {
      "type": "modify",
      "old_id": "c0ce4c6f43176541972b1b838d2cc0bfeafbff4a",
      "old_mode": 33188,
      "old_path": "modules/libjuju/examples/relate.py",
      "new_id": "347e021dbc3a5cd64148a4e2bdd1cc9ad029770d",
      "new_mode": 33188,
      "new_path": "modules/libjuju/examples/relate.py"
    },
    {
      "type": "modify",
      "old_id": "b6e2240ab74bf9b15951d1e18502b4fb061b0507",
      "old_mode": 33188,
      "old_path": "modules/libjuju/examples/unitrun.py",
      "new_id": "805f0ae0d3dc9144eb3f115c230fee813506f449",
      "new_mode": 33188,
      "new_path": "modules/libjuju/examples/unitrun.py"
    },
    {
      "type": "modify",
      "old_id": "555bb3d0b4878049b080d5f9af2aadc9784a66cb",
      "old_mode": 33188,
      "old_path": "modules/libjuju/juju/application.py",
      "new_id": "84afebee4eff4faab86f82caf5968b4cf5678a84",
      "new_mode": 33188,
      "new_path": "modules/libjuju/juju/application.py"
    },
    {
      "type": "modify",
      "old_id": "bdd1c3f3e2a6a92287a546f3cd8075652f2e3b15",
      "old_mode": 33188,
      "old_path": "modules/libjuju/juju/client/connection.py",
      "new_id": "13770a5343d841bbb8369034c03499eaf7d8bc5e",
      "new_mode": 33188,
      "new_path": "modules/libjuju/juju/client/connection.py"
    },
    {
      "type": "modify",
      "old_id": "64fbe4438692b8959117d4ee6f675efa697234b7",
      "old_mode": 33188,
      "old_path": "modules/libjuju/juju/client/connector.py",
      "new_id": "a30adbffa7811503421fff1ff81c4cf4b4b284fa",
      "new_mode": 33188,
      "new_path": "modules/libjuju/juju/client/connector.py"
    },
    {
      "type": "modify",
      "old_id": "1c7baa0ab7b07c1c8040a90b193b176f54fa78d4",
      "old_mode": 33188,
      "old_path": "modules/libjuju/juju/client/facade.py",
      "new_id": "9e2aabf62c31437fe86e70abe2034a36334468ce",
      "new_mode": 33188,
      "new_path": "modules/libjuju/juju/client/facade.py"
    },
    {
      "type": "modify",
      "old_id": "a8a0df8ab56eb74d24b8be7e565cd84215583dd1",
      "old_mode": 33188,
      "old_path": "modules/libjuju/juju/client/gocookies.py",
      "new_id": "3e48b8d2abd28968ffb6639a4f154c3b2ad1b0c8",
      "new_mode": 33188,
      "new_path": "modules/libjuju/juju/client/gocookies.py"
    },
    {
      "type": "modify",
      "old_id": "8b29de7534c8bd39ed5edc43f5faf2dfaa586d9f",
      "old_mode": 33188,
      "old_path": "modules/libjuju/juju/client/overrides.py",
      "new_id": "49ab931b1a19ad30ab512ccd80b713182fa840db",
      "new_mode": 33188,
      "new_path": "modules/libjuju/juju/client/overrides.py"
    },
    {
      "type": "modify",
      "old_id": "998862d02508499dd28d0f20983e1f5858498213",
      "old_mode": 33188,
      "old_path": "modules/libjuju/juju/constraints.py",
      "new_id": "00506735a8df141431378ccc7e69c2c1828bd20e",
      "new_mode": 33188,
      "new_path": "modules/libjuju/juju/constraints.py"
    },
    {
      "type": "modify",
      "old_id": "957ab85da834ff43e60e2993e614303ba784eca2",
      "old_mode": 33188,
      "old_path": "modules/libjuju/juju/controller.py",
      "new_id": "b4c544edab5633350e1dcec82bd92da9084f4070",
      "new_mode": 33188,
      "new_path": "modules/libjuju/juju/controller.py"
    },
    {
      "type": "modify",
      "old_id": "bd3d030e92414e896e72837a8f67eef9b963e2cc",
      "old_mode": 33188,
      "old_path": "modules/libjuju/juju/machine.py",
      "new_id": "a46135cdf2f5df403e3a607f40b0da0c72759084",
      "new_mode": 33188,
      "new_path": "modules/libjuju/juju/machine.py"
    },
    {
      "type": "modify",
      "old_id": "ac225992fc8fd82209271d07d837e683e93aedf5",
      "old_mode": 33188,
      "old_path": "modules/libjuju/juju/model.py",
      "new_id": "37e8cd6a1258063a68ccaf9e0c144753ccbcf3bc",
      "new_mode": 33188,
      "new_path": "modules/libjuju/juju/model.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "91747a453d01bd34058407b5a570207dc4d009e5",
      "new_mode": 33188,
      "new_path": "modules/libjuju/juju/provisioner.py"
    },
    {
      "type": "modify",
      "old_id": "319e8f8bc2ceb56843871182ccb1b27a911dc4cf",
      "old_mode": 33188,
      "old_path": "modules/libjuju/juju/tag.py",
      "new_id": "282e0a6edb2f5da1bb187b6c25bf31a3b725e364",
      "new_mode": 33188,
      "new_path": "modules/libjuju/juju/tag.py"
    },
    {
      "type": "modify",
      "old_id": "ce33b083e51c3e8ae1efb753894c5b6adf0d626b",
      "old_mode": 33188,
      "old_path": "modules/libjuju/juju/unit.py",
      "new_id": "3be27f2e91ba61978d3106929b9ac04ff9c1dc44",
      "new_mode": 33188,
      "new_path": "modules/libjuju/juju/unit.py"
    },
    {
      "type": "modify",
      "old_id": "ff8e40358d1b752084e185f24d06da5afa1f3561",
      "old_mode": 33188,
      "old_path": "modules/libjuju/setup.py",
      "new_id": "67e3707d27e79134513354b981d25720b0e28ce7",
      "new_mode": 33188,
      "new_path": "modules/libjuju/setup.py"
    },
    {
      "type": "modify",
      "old_id": "bae4b80730816f3994b5294f53d4ee4f9492e160",
      "old_mode": 33188,
      "old_path": "modules/libjuju/tests/base.py",
      "new_id": "97eea530955ea07ec39f4e64a3b55a0a54e6521d",
      "new_mode": 33188,
      "new_path": "modules/libjuju/tests/base.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "2e51c1e16b66d73bd05c54c5d6f98b84a4ec11d7",
      "new_mode": 33188,
      "new_path": "modules/libjuju/tests/bundle/invalid.yaml"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e351a127df81f3a4c38ea28e9dbf7b48ee4a2fa4",
      "new_mode": 33188,
      "new_path": "modules/libjuju/tests/bundle/mini-bundle.yaml"
    },
    {
      "type": "modify",
      "old_id": "7b780da91b4dfbfb0ae0c1e27a6b5b80f1ccb299",
      "old_mode": 33188,
      "old_path": "modules/libjuju/tests/integration/test_application.py",
      "new_id": "b7058322894c14e4e6b92d74f8e874a1f922919d",
      "new_mode": 33188,
      "new_path": "modules/libjuju/tests/integration/test_application.py"
    },
    {
      "type": "modify",
      "old_id": "9c6f7ac45eb939e735b990e29c800ef4b3697d79",
      "old_mode": 33188,
      "old_path": "modules/libjuju/tests/integration/test_controller.py",
      "new_id": "93e2883b42e4e7e8a16b447a1f841ad2cf64a62f",
      "new_mode": 33188,
      "new_path": "modules/libjuju/tests/integration/test_controller.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "9911c41f020bdcac6939ed3a8d8a896c4a2161a9",
      "new_mode": 33188,
      "new_path": "modules/libjuju/tests/integration/test_macaroon_auth.py"
    },
    {
      "type": "modify",
      "old_id": "8957ae16b6330847b31624d9eb4cba19d6eae562",
      "old_mode": 33188,
      "old_path": "modules/libjuju/tests/integration/test_machine.py",
      "new_id": "9a5f075833d9c9a893dbc92d0f7857193fee0fcc",
      "new_mode": 33188,
      "new_path": "modules/libjuju/tests/integration/test_machine.py"
    },
    {
      "type": "modify",
      "old_id": "ba2da92a48c5162c29864808fedad77cfe30ae4d",
      "old_mode": 33188,
      "old_path": "modules/libjuju/tests/integration/test_model.py",
      "new_id": "1cba79a2020b8e8b8fc79f5545f4c59afe87524c",
      "new_mode": 33188,
      "new_path": "modules/libjuju/tests/integration/test_model.py"
    },
    {
      "type": "modify",
      "old_id": "8b2251ccea8f707f87f00d04ba7095c16d93c834",
      "old_mode": 33188,
      "old_path": "modules/libjuju/tests/integration/test_unit.py",
      "new_id": "bb349699faa796a51e5cd81b1d2d0491bd491aed",
      "new_mode": 33188,
      "new_path": "modules/libjuju/tests/integration/test_unit.py"
    },
    {
      "type": "modify",
      "old_id": "42134df7047c0a9cf37940cf8a999390ad93b011",
      "old_mode": 33188,
      "old_path": "modules/libjuju/tests/unit/test_client.py",
      "new_id": "1d18bf92824381fa34eb12084d651aba266cf93a",
      "new_mode": 33188,
      "new_path": "modules/libjuju/tests/unit/test_client.py"
    },
    {
      "type": "modify",
      "old_id": "00b9156f8f03590b4155e51e7155558585d8a33c",
      "old_mode": 33188,
      "old_path": "modules/libjuju/tests/unit/test_constraints.py",
      "new_id": "3c520909a862978a1d699b29b01773e32fcbc924",
      "new_mode": 33188,
      "new_path": "modules/libjuju/tests/unit/test_constraints.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "44f488fbfbd8d5d08663278cd5bf0bf1b05259da",
      "new_mode": 33188,
      "new_path": "modules/libjuju/tests/unit/test_controller.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "033a0e9ae5df006641353981778e6850bb5ffec0",
      "new_mode": 33188,
      "new_path": "modules/libjuju/tests/unit/test_gocookies.py"
    },
    {
      "type": "modify",
      "old_id": "2e33236f0078a7338e2c9a766c32fd166dacce03",
      "old_mode": 33188,
      "old_path": "modules/libjuju/tests/unit/test_model.py",
      "new_id": "2753d853be5a672241d974c876d8e3630045b641",
      "new_mode": 33188,
      "new_path": "modules/libjuju/tests/unit/test_model.py"
    },
    {
      "type": "modify",
      "old_id": "ce421d6d3696ed55085b23747fdf9a81ac7e4f00",
      "old_mode": 33188,
      "old_path": "modules/libjuju/tox.ini",
      "new_id": "e0d6a31c779d480a4b9a2387cbf2329f9afc2ddb",
      "new_mode": 33188,
      "new_path": "modules/libjuju/tox.ini"
    },
    {
      "type": "modify",
      "old_id": "1b9efa8447316b094717084eb6e3612fb2d20cf7",
      "old_mode": 33188,
      "old_path": "n2vc/vnf.py",
      "new_id": "7c39fa11f37eb8063f7bd1efac5ef5b9a15f9f11",
      "new_mode": 33188,
      "new_path": "n2vc/vnf.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
      "new_mode": 33188,
      "new_path": "tests/__init__.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "a971872d26bc08199dcd42a26e4796e31a786c24",
      "new_mode": 33188,
      "new_path": "tests/test_single_vdu_proxy_charm.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "9f9000efab1a315e619bca14de515b23caaea46c",
      "new_mode": 33188,
      "new_path": "tests/utils.py"
    }
  ]
}
