)]}'
{
  "log": [
    {
      "commit": "7ae97298c55d9ba21d2dc037cc7d9fae54afa183",
      "tree": "f6dfe9c2e05a9f2b3bb9f8b3613ed91341f0bc2f",
      "parents": [
        "f130b283d9603477c0ffa7705eec39d73798b4d2"
      ],
      "author": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Tue Feb 16 14:50:53 2016 +1100"
      },
      "committer": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Tue Feb 16 14:50:53 2016 +1100"
      },
      "message": "Minor fixes for bashate trunk\n\nWe don\u0027t have a new bashate release yet, but this fixes some minor\nissues when used with bashate trunk.\n\nThe only two things triggered are stricter checking of assignment in\nlocal declartions (catches quotes) and one instance of evaluating\narithmetic result in tools/xen/functions.\n\nTherefore, hopefully, this change has no effect!\n\nChange-Id: I3fd5d55236e90c2f2c25243af87adaf0c1b763e2\n"
    },
    {
      "commit": "b6156915768b65fbc588c7601fc5a6a1e89d186c",
      "tree": "163aba711a605e4fb88e2aec73a27cb4e1482c4f",
      "parents": [
        "ddeaaf20447f04fb46fe3c423d657e3e6f7346e8",
        "cc6af3fc94ea56b0f081eabcb65404b0fa3716fe"
      ],
      "author": {
        "name": "Jenkins",
        "email": "jenkins@review.openstack.org",
        "time": "Thu Jan 07 04:51:19 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "review@openstack.org",
        "time": "Thu Jan 07 04:51:19 2016 +0000"
      },
      "message": "Merge \"XenAPI: add support to use local.conf\""
    },
    {
      "commit": "c615993fe16902bfc1ac91cad7da34084c77ed99",
      "tree": "6e9a5a65c0561d95b42d8586f3dd1a1b00090453",
      "parents": [
        "535fcd008eee7ec5d11f8d788f7d48514db56bfb",
        "0842b8147f098106b679cf652edbcb5ea4330f04"
      ],
      "author": {
        "name": "Jenkins",
        "email": "jenkins@review.openstack.org",
        "time": "Wed Jan 06 20:17:12 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "review@openstack.org",
        "time": "Wed Jan 06 20:17:12 2016 +0000"
      },
      "message": "Merge \"Support extra dependencies when setup_develop\""
    },
    {
      "commit": "8ba3cf0132f1d97ccf5e55aa82f67efbd601da6a",
      "tree": "cc12c8d40544abfd824b91d183700201c28ac165",
      "parents": [
        "119e36c9219334c76ec16f69a0e6e83554dc732b",
        "e208d060e17e2ad622c7b06cd90baed0eeed89f8"
      ],
      "author": {
        "name": "Jenkins",
        "email": "jenkins@review.openstack.org",
        "time": "Tue Jan 05 18:56:26 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "review@openstack.org",
        "time": "Tue Jan 05 18:56:27 2016 +0000"
      },
      "message": "Merge \"Preserve result returned by apt-get and pip\""
    },
    {
      "commit": "0842b8147f098106b679cf652edbcb5ea4330f04",
      "tree": "c1a9d4baee12f1d51b8a07a4c111c1bab492f8b5",
      "parents": [
        "e60d52c392098192b6c666cb345c50a9a4842d1b"
      ],
      "author": {
        "name": "Brant Knudson",
        "email": "bknudson@us.ibm.com",
        "time": "Mon Aug 03 13:31:25 2015 -0500"
      },
      "committer": {
        "name": "Sean Dague",
        "email": "sean@dague.net",
        "time": "Tue Jan 05 07:41:19 2016 -0500"
      },
      "message": "Support extra dependencies when setup_develop\n\nRecent pip supports using [extras] to install extra dependencies\nfrom the project setup.cfg. Add support so that projects can take\nadvantage of it.\n\nFor example, if devstack is configured to use ldap, install the\nextra ldap dependencies using:\n\n setup_develop $KEYSTONE_DIR ldap\n\nPartial-Bug: 1479962\nChange-Id: Ic13d95b99aaa4d3854b2723343e90f5de6b98aa2\n"
    },
    {
      "commit": "e208d060e17e2ad622c7b06cd90baed0eeed89f8",
      "tree": "da018a768b076a2d5938af9c36ae1748c6a713b3",
      "parents": [
        "7bd9ca8a3be6aeb50bffdce48b220615b1297f79"
      ],
      "author": {
        "name": "Federico Ressi",
        "email": "federico.ressi@intel.com",
        "time": "Sat Nov 21 11:15:39 2015 +0000"
      },
      "committer": {
        "name": "Federico Ressi",
        "email": "federico.ressi@intel.com",
        "time": "Tue Jan 05 08:21:05 2016 +0000"
      },
      "message": "Preserve result returned by apt-get and pip\n\nChange I855ffe9c7a75e9943106af0f70cf715c34ae25c5 and\nI368fec44858bd97fc6a314fb20eed2b10932cbb1 added timing\ninfrastructure which hides the return value of\nthe main commands.  Restore the prior behaviour.\n\nChange-Id: I4a536abefa7824ac6d42e7bbbf1079d9cc055984\nCloses-Bug: #1518545\n"
    },
    {
      "commit": "135bd484a9f83099e33e18dd97274ad550a392bb",
      "tree": "2a6a731f79456ac7a1db6778baf973d061ec2b7d",
      "parents": [
        "1195a5b7394fc5b7a1cb1415978e9997701f5af1"
      ],
      "author": {
        "name": "vsaienko",
        "email": "vsaienko@mirantis.com",
        "time": "Fri Dec 11 11:03:52 2015 +0200"
      },
      "committer": {
        "name": "Vasyl Saienko",
        "email": "vsaienko@mirantis.com",
        "time": "Tue Dec 29 09:42:35 2015 +0000"
      },
      "message": "Introduce iniget_sections function\n\nThis function returns list of sections from specified INI file.\nIt is needed for I7938f26015d953efdf720774b5ad2cee4068ac90.\n\u0027iniget_sections\u0027 is needed for automatic node enrollment to\nIronic from INI syntax file.\n\nChange-Id: I52a69ad3bc8fc528e7f20e6b03a98f327acaaa74\nImplements: blueprint ironic-ml2-integration\n"
    },
    {
      "commit": "cc6af3fc94ea56b0f081eabcb65404b0fa3716fe",
      "tree": "f9965869dc77ba9315d349ed6191ab3cd7b848b6",
      "parents": [
        "147c442547f4736ec7ba3698aabc25510d14f0f8"
      ],
      "author": {
        "name": "Huan Xie",
        "email": "huan.xie@citrix.com",
        "time": "Wed Dec 23 02:17:01 2015 +0000"
      },
      "committer": {
        "name": "Huan Xie",
        "email": "huan.xie@citrix.com",
        "time": "Mon Dec 28 08:56:14 2015 +0000"
      },
      "message": "XenAPI: add support to use local.conf\n\nXenServer install with devstack doesn\u0027t support local.conf, this fix\nis to add support for using local.conf and backward-compatibility of\nlocalrc\n\nChange-Id: Ie494e01f8f1ecb8720e14392ef3f12d5a5a01dcd\nCloses-Bug: #1528520\n"
    },
    {
      "commit": "1f7631dce6252f32c182176b5e11b1f8eaa8b399",
      "tree": "358a68e239b97a5f925e60a9d0e0053c34f1e781",
      "parents": [
        "7b7101f1c5ccd4d0722245613df8c8f7a67e79b9",
        "ddc3839bdc7ff73f6224273605db10fd88cd60df"
      ],
      "author": {
        "name": "Jenkins",
        "email": "jenkins@review.openstack.org",
        "time": "Wed Dec 09 18:03:58 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "review@openstack.org",
        "time": "Wed Dec 09 18:03:58 2015 +0000"
      },
      "message": "Merge \"Enable optional Python 3 support\""
    },
    {
      "commit": "563c68f3cd26bb0ed440c76f4d922590e6e4e181",
      "tree": "b8e99a611a9cf0a51a974af4eead05dbb6ad450c",
      "parents": [
        "366382fa6e435d6ea38dea8784d1c1e9d108a76d",
        "e0ac37c257bf08db8d220d13773859d9202305d2"
      ],
      "author": {
        "name": "Jenkins",
        "email": "jenkins@review.openstack.org",
        "time": "Sun Dec 06 13:34:19 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "review@openstack.org",
        "time": "Sun Dec 06 13:34:19 2015 +0000"
      },
      "message": "Merge \"Fix path setup in add_sudo_secure_path\""
    },
    {
      "commit": "ddc3839bdc7ff73f6224273605db10fd88cd60df",
      "tree": "0d00622ab7f5b0e4ae8e2832a208237b19e1d318",
      "parents": [
        "b889294af7aa1ccf613da28fb08f547306e0f581"
      ],
      "author": {
        "name": "Doug Hellmann",
        "email": "doug@doughellmann.com",
        "time": "Thu May 07 21:06:24 2015 +0000"
      },
      "committer": {
        "name": "Davanum Srinivas",
        "email": "davanum@gmail.com",
        "time": "Tue Dec 01 14:52:35 2015 -0500"
      },
      "message": "Enable optional Python 3 support\n\nAdd USE_PYTHON3 and PYTHON3_VERSION variables to allow services to use\npython 3 if they indicate support in their python package metadata.\n\nTested in Heat here -\u003e I837c2fba682ab430d50e9f43913f2fed20325a7a.\nProject config change to add a dedicated job to Heat is here -\u003e I0837e62d6ccc66397a5e409f0961edd4be31f467\n\nChange-Id: I079e18b58b214bf8362945c253d6d894ca8b1a6b\n"
    },
    {
      "commit": "e0ac37c257bf08db8d220d13773859d9202305d2",
      "tree": "e70f7d871b5f19cce98fcc2b1a9bdb8909e8ac47",
      "parents": [
        "bf81732b129675d667d2285859f32db16ef5e2f5"
      ],
      "author": {
        "name": "Dmitry Guryanov",
        "email": "dguryanov@parallels.com",
        "time": "Mon Nov 30 18:48:23 2015 +0300"
      },
      "committer": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Tue Dec 01 13:43:01 2015 +1100"
      },
      "message": "Fix path setup in add_sudo_secure_path\n\nThere are two bugs in add_sudo_secure_path.\n\nFirstly we don\u0027t properly check if the file exists, so always append\nthe new line.  This will overwrite any existing changes.\n\nSecondly the logic for checking if the path exists is inverted, so we\nmiss adding paths when we should.  This particularly causes failures\nwhen installing with virtualenv\u0027s since the paths are inside the\nvirtualenv, rather than the standard system locations.\n\nChange-Id: I646fe0c68958470d464fe4f3d81d5c17dd6f2ab6\nCloses-bug: #1521241\n"
    },
    {
      "commit": "5509ed579773bf1a69bc5fb406a206a6da010c56",
      "tree": "d06172fadcae6f52ec4316b8ec578e0ee5c48093",
      "parents": [
        "bf81732b129675d667d2285859f32db16ef5e2f5"
      ],
      "author": {
        "name": "Atsushi SAKAI",
        "email": "sakaia@jp.fujitsu.com",
        "time": "Mon Nov 30 20:20:21 2015 +0900"
      },
      "committer": {
        "name": "Atsushi SAKAI",
        "email": "sakaia@jp.fujitsu.com",
        "time": "Mon Nov 30 20:25:17 2015 +0900"
      },
      "message": "Fix comment typos in inc/ and tests/ directories\n\nvalu3 \u003d\u003e value3\nenviromnet \u003d\u003e environment\ndirecotry \u003d\u003e directory\nvirualenv \u003d\u003e virtualenv\neditiable \u003d\u003e editable\nenvirnment \u003d\u003e environment\n\nChange-Id: I97fb2d44a37b16d02d4fbdb08bfa33414349f651\n"
    },
    {
      "commit": "523f48803609b35350b624244fa73b1030c1d5fa",
      "tree": "17f99ab223f42eec58523fa89a49f243efba754b",
      "parents": [
        "307730acd9d271bc4c3d44f2dfed0eab67e1657d"
      ],
      "author": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Tue Oct 13 11:03:03 2015 +1100"
      },
      "committer": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Fri Nov 27 15:36:04 2015 +1100"
      },
      "message": "Namespace XTRACE commands\n\nI noticed this when debugging some grenade issues failures.\n\nAn include of grenade/functions stores the current value of XTRACE\n(on) and disables xtrace for the rest of the import.\n\nWe then include devstack\u0027s \"functions\" library, which now overwrites\nthe stored value of XTRACE the current state; i.e. disabled.\n\nWhen it finishes it restores the prior state (disabled), and then\ngrenade restores the same value of XTRACE (disabled).\n\nThe result is that xtrace is incorrectly disabled until the next time\nit just happens to be turned on.\n\nThe solution is to name-space the store of the current-value of xtrace\nso when we finish sourcing a file, we always restore the tracing value\nto what it was when we entered.\n\nSome files had already discovered this.  In general there is\ninconsistency around the setting of the variable, and a lot of obvious\ncopy-paste.  This brings consistency across all files by using\n_XTRACE_* prefixes for the sotre/restore of tracing values.\n\nChange-Id: Iba7739eada5711d9c269cb4127fa712e9f961695\n"
    },
    {
      "commit": "73de4a42d96780b0a14f36e43dd6cb7934101209",
      "tree": "f99e562aa7e546a65c02b89b44ce2a21f55baec8",
      "parents": [
        "c9f6f1126599c49c6cd838bdaa2a93ffb400e87c",
        "85f42f698c7bd74d53309da486fbf44ed860c348"
      ],
      "author": {
        "name": "Jenkins",
        "email": "jenkins@review.openstack.org",
        "time": "Wed Nov 04 15:39:03 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "review@openstack.org",
        "time": "Wed Nov 04 15:39:03 2015 +0000"
      },
      "message": "Merge \"Provide an error message on bogus config file spec\""
    },
    {
      "commit": "85f42f698c7bd74d53309da486fbf44ed860c348",
      "tree": "8d8a7ab9738ebbd422b6617b780e2a8b56931570",
      "parents": [
        "f86d2e1a05dbcb144bb7614932adcd56514360fd"
      ],
      "author": {
        "name": "Thomas Morin",
        "email": "thomas.morin@orange.com",
        "time": "Tue Sep 01 10:33:10 2015 +0200"
      },
      "committer": {
        "name": "Thomas Morin",
        "email": "thomas.morin@orange.com",
        "time": "Mon Nov 02 15:35:01 2015 +0100"
      },
      "message": "Provide an error message on bogus config file spec\n\nIf local.conf specifies a config file addition in the following way...\n\n[[post-config|$MY_CONF_FILE]]\n[xyz]\nfoo\u003dbar\n\n...and $MY_CONF_FILE points to a file whose directory is not writable by\nthe user running the script, then stack.sh aborts with the following\nobscure message:\n\n  2015-09-01 08:20:08.113 | touch: setting times of \u0027/\u0027: Permission denied\n\nThis patch modifies inc/meta-config to provide a useful error message,\nsuch as:\n\n  2015-09-01 08:20:08.114 | could not create config file / ($MY_CONF_FILE)\n\nThis patch also modifies inc/meta-config so that it provides an error\nmessage if $MY_CONF_FILE is empty (instead of silently ignoring this local.conf\nstatement):\n\n  2015-09-01 09:38:53.406 | bogus config file specification: $MY_CONF_FILE\n  is undefined\n\nChange-Id: I9b78407420318548561012a8672762bc7fdd6db6\nCloses-Bug: 1490881\n"
    },
    {
      "commit": "d111182f218094dfdd88bda63af024c0c6e5d8cd",
      "tree": "6efbaec54afc4965767c187b5743c25b8346f438",
      "parents": [
        "5a98d4f7d0a1cf00f2aca9e0f3f6cdc285c1ee79",
        "ada886dd43ccc07f48d3a82d8d3d840fe5096c03"
      ],
      "author": {
        "name": "Jenkins",
        "email": "jenkins@review.openstack.org",
        "time": "Wed Oct 14 02:43:52 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "review@openstack.org",
        "time": "Wed Oct 14 02:43:52 2015 +0000"
      },
      "message": "Merge \"Don\u0027t mix declaration and set of locals\""
    },
    {
      "commit": "cb658fab15dbf8074038bc76fc54ec4afccf5716",
      "tree": "f84e5354076c802cfe5801a5600529e5d03e3fa5",
      "parents": [
        "95c33d532f5d69516c0fbe123595f00f00792995"
      ],
      "author": {
        "name": "Sean Dague",
        "email": "sean@dague.net",
        "time": "Thu Oct 08 17:12:03 2015 -0400"
      },
      "committer": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Mon Oct 12 23:10:09 2015 +0000"
      },
      "message": "add pip install timing\n\nChange-Id: I368fec44858bd97fc6a314fb20eed2b10932cbb1\n"
    },
    {
      "commit": "ada886dd43ccc07f48d3a82d8d3d840fe5096c03",
      "tree": "93d62f1c82edc08d813b7f9f7eb9270e7024e055",
      "parents": [
        "433a9b10ddd6fa67d7459c4943a92ce4f488cebc"
      ],
      "author": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Wed Oct 07 14:06:26 2015 +1100"
      },
      "committer": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Wed Oct 07 17:03:32 2015 +1100"
      },
      "message": "Don\u0027t mix declaration and set of locals\n\nIa0957b47187c3dcadd46154b17022c4213781112 proposes to have bashate\nfind instances of setting a local value.  The issue is that \"local\"\nalways returns 0, thus hiding any failure in the commands running to\nset the variable.\n\nThis is an automated replacement of such instances\n\nDepends-On: I676c805e8f0401f75cc5367eee83b3d880cdef81\nChange-Id: I9c8912a8fd596535589b207d7fc553b9d951d3fe\n"
    },
    {
      "commit": "433a9b10ddd6fa67d7459c4943a92ce4f488cebc",
      "tree": "4db530838dadc2fc4e1e4ae4d37c6213f747919c",
      "parents": [
        "561137e88a513f1c1e1cc9f08b7d3bd909702282"
      ],
      "author": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Wed Oct 07 13:29:31 2015 +1100"
      },
      "committer": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Wed Oct 07 16:54:29 2015 +1100"
      },
      "message": "Don\u0027t set xtrace directly in local call\n\nIa0957b47187c3dcadd46154b17022c4213781112 detects setting local\nvariables with subshell commands.\n\nAlthough this is a particuarly benign case, it trips the test.  Rather\nthan putting in an ignore for this, we can easily change it to make\nthe test pass.  This seems better than putting in special work-arounds\nto bashate, etc.\n\nChange-Id: I37c3967c0f2d780a636a7d26cda83755085c5c69\n"
    },
    {
      "commit": "713fd2f6c644e13ed8ad7e8d819f6a3d44ff5370",
      "tree": "075349bcd6fad0d3b704d0b408cc992b313c7ea1",
      "parents": [
        "767c7298332d1275110ea983c2b9d4b228cbd2c9"
      ],
      "author": {
        "name": "Sirushti Murugesan",
        "email": "sirushti.murugesan@hp.com",
        "time": "Wed Sep 30 15:12:50 2015 +0530"
      },
      "committer": {
        "name": "Sirushti Murugesan",
        "email": "sirushti.murugesan@hp.com",
        "time": "Wed Sep 30 15:24:59 2015 +0530"
      },
      "message": "Additionally install test-requirements with pip_install\n\nWhen moving to Python 3, we also need to install test-requriements\nto allow projects to install any python 3 test dependencies they\nmight be missing otherwise.\n\nChange-Id: I2d19aa2f7ec8de869a82aa7764ab72cc8693101f\n"
    },
    {
      "commit": "c71973eb04d05c2497eb930c4e1b59dcaf983085",
      "tree": "b746858c67421e46d4b393558e6cd3fb052b7e81",
      "parents": [
        "2105b9f9ce325394d205d9c5f7a7427141bc4ebd"
      ],
      "author": {
        "name": "Sean Dague",
        "email": "sean@dague.net",
        "time": "Tue Sep 08 07:12:48 2015 -0400"
      },
      "committer": {
        "name": "Sean Dague",
        "email": "sean@dague.net",
        "time": "Fri Sep 11 07:01:02 2015 -0400"
      },
      "message": "check LIBS_FROM_GIT\n\nafter the glance_store vs. upper-constraints bug, it\u0027s probably worth\nactually enforcing and sanity checking that devstack is doing what\nit\u0027s being asked of with LIBS_FROM_GIT. This will hopefully reduce\nuser generated error.\n\nThis *might* not work with the current oslo naming, we\u0027ll have to test\nand normalize that.\n\nChange-Id: Iffef2007f99a0e932b68c4c897ebbfb748cac2b4\n"
    },
    {
      "commit": "9f52d648fbffe342b9c822f6519a7992c914f50f",
      "tree": "cf3c521444aa1cf691ffbb5115b175cd146e25ea",
      "parents": [
        "6059752fc0e86145a425288d7de9c9fa5aba6846",
        "cede78748291a8b5ae0dd0dc34c95da4a72fb3ea"
      ],
      "author": {
        "name": "Jenkins",
        "email": "jenkins@review.openstack.org",
        "time": "Sat Aug 29 00:38:16 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "review@openstack.org",
        "time": "Sat Aug 29 00:38:16 2015 +0000"
      },
      "message": "Merge \"Add file creation test\""
    },
    {
      "commit": "a30a98099baa00b29c5e073c5a85b8a647aca954",
      "tree": "b7657bc7a5ebc9373a98b8a533e7403842e522de",
      "parents": [
        "897d116a7c9c09385e7e87e1202d7fa612802c49",
        "f44a024f022d843fd204da6e23b4a98a142c07f3"
      ],
      "author": {
        "name": "Jenkins",
        "email": "jenkins@review.openstack.org",
        "time": "Thu Aug 27 22:15:30 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "review@openstack.org",
        "time": "Thu Aug 27 22:15:30 2015 +0000"
      },
      "message": "Merge \"Add -sudo option to ini setting options\""
    },
    {
      "commit": "05aa3846a0402edc9cc49f4ba36f09592004b273",
      "tree": "2ec4bb8ed899b1a9a89736d79b057a0bad9cb2e4",
      "parents": [
        "57aafb5a9ad20e19e2c248a8e853a32d5b719c03"
      ],
      "author": {
        "name": "Clark Boylan",
        "email": "clark.boylan@gmail.com",
        "time": "Mon Aug 03 11:14:13 2015 -0700"
      },
      "committer": {
        "name": "Sean Dague",
        "email": "sean@dague.net",
        "time": "Tue Aug 18 09:39:04 2015 -0700"
      },
      "message": "Just use constraints everywhere\n\nHaving behavior on your laptop diverge from behavior in the gate is\nconfusing. Just use constraints on every devstack run to be consistent.\nUsers of devstack can edit the requirements repo in order to change\nthese constraints locally if necessary.\n\nChange-Id: I843208e2e982eb04931b76f5cb4bd219fbcd70de\n"
    },
    {
      "commit": "cede78748291a8b5ae0dd0dc34c95da4a72fb3ea",
      "tree": "edb95ec50f80d2d72499acfac0438984dce5df39",
      "parents": [
        "f44a024f022d843fd204da6e23b4a98a142c07f3"
      ],
      "author": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Wed Jul 22 13:36:12 2015 +1000"
      },
      "committer": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Thu Jul 23 06:46:24 2015 +1000"
      },
      "message": "Add file creation test\n\nEnsure that iniadd is creating files that don\u0027t exist, as it has\nhistorically done.\n\nChange-Id: I2798996f3d46ff1dce410b815a87395f1bf729f9\n"
    },
    {
      "commit": "f44a024f022d843fd204da6e23b4a98a142c07f3",
      "tree": "16578c1561a9793e8cf1be28fe36dd41ad84c325",
      "parents": [
        "b997db602e15b60c68c0f7a99db74b5d2419a85c"
      ],
      "author": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Wed Jul 22 10:34:47 2015 +1000"
      },
      "committer": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Thu Jul 23 06:46:24 2015 +1000"
      },
      "message": "Add -sudo option to ini setting options\n\nAdd a -sudo option to allow these functions to operate on root-owned\nfiles.  Test-case is updated, but not enabled by default as we can\u0027t\nexpect test-runner to have sudo access.\n\nChange-Id: I134c3397314c7d9395996eb6c825ecb7e7fdfc69\n"
    },
    {
      "commit": "92884ede5d20a399186c61cf5e003da61838eec4",
      "tree": "ac415994aacf6491373569fce821fae8f2e1ca30",
      "parents": [
        "b5c37243886a2289b0a98a3ec0d2344eb326b59e"
      ],
      "author": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Wed Jul 22 12:16:45 2015 +1000"
      },
      "committer": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Thu Jul 23 06:46:24 2015 +1000"
      },
      "message": "ini-config : always reenable xtrace on return\n\nThese return paths doesn\u0027t renable xtrace, so output mysteriously goes\nmissing until the next time it is enabled.\n\nChange-Id: I3a8018dfa9397c07534970c39fba8dc10afcbe41\n"
    },
    {
      "commit": "2d25c9290d163d682ae3958f0e09fede937c0f0f",
      "tree": "5435b2da61aa43cd2772536aa2814fb96beaba87",
      "parents": [
        "05e32fb51ef2c493dd44a40bd9f0ae01822b2874",
        "2ba4a7214c96542987e1c379a28765a242136b12"
      ],
      "author": {
        "name": "Jenkins",
        "email": "jenkins@review.openstack.org",
        "time": "Mon Jul 06 18:22:33 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "review@openstack.org",
        "time": "Mon Jul 06 18:22:33 2015 +0000"
      },
      "message": "Merge \"Fixed detection of a project in projects.txt\""
    },
    {
      "commit": "7c838616c98212c808d12c3789cc17ec76cbd878",
      "tree": "70405e7c3651870e51020bf4438770040ce41cd2",
      "parents": [
        "018c50c2e279e73920d71c317fbabfe3a32c9943"
      ],
      "author": {
        "name": "Robert Collins",
        "email": "rbtcollins@hp.com",
        "time": "Fri Jul 03 13:28:09 2015 +1200"
      },
      "committer": {
        "name": "Robert Collins",
        "email": "rbtcollins@hp.com",
        "time": "Sat Jul 04 09:55:56 2015 +1200"
      },
      "message": "Fix library runs.\n\nLibraries were resulting in two edit-constraints runs:\n - one for the library, which adds a non-editable file path\n - then one for the editable servers, but that fails becuse\n   pkg-resources couldn\u0027t parse the prior entry.\n\nThis is fixed in two parts: the dependent patch which supports parsing\nfile urls that have egg names, and this patch which changes from a\nfile path to a file url with an egg name.\n\nChange-Id: I0f07858e96ea3baf46f8a453e253b9ed29c7f7e2\n"
    },
    {
      "commit": "635a5ba9929e1594aacfc0229663f43898479e2a",
      "tree": "63f67288f2089ff4e5fda36de1d7dc8e3ede0845",
      "parents": [
        "432268b17bff090a8ea8cbbd46c430ddd5be98a1"
      ],
      "author": {
        "name": "Robert Collins",
        "email": "rbtcollins@hp.com",
        "time": "Wed Jun 10 08:48:06 2015 +1200"
      },
      "committer": {
        "name": "Robert Collins",
        "email": "rbtcollins@hp.com",
        "time": "Thu Jul 02 11:37:22 2015 +1200"
      },
      "message": "constraints file support for devstack.\n\nConstraints files allow a global view of dependencies for devstack\nwithout the side effect that requirements files have of installing\neverything everytime. This is part of the cross project\nrequirements-management spec.\n\nChange-Id: If089d30146629e6cf817edd634e5c2b80f1366dd\n"
    },
    {
      "commit": "2ba4a7214c96542987e1c379a28765a242136b12",
      "tree": "5ee67adf79f53b52bd99e6a96c0c16c6935e88f3",
      "parents": [
        "c782781a4ca5fc2671a6e5d188f68e99e7a656f4"
      ],
      "author": {
        "name": "Ihar Hrachyshka",
        "email": "ihrachys@redhat.com",
        "time": "Fri Jun 26 10:45:44 2015 +0200"
      },
      "committer": {
        "name": "Jeremy Stanley",
        "email": "fungi@yuggoth.org",
        "time": "Wed Jul 01 13:42:14 2015 +0000"
      },
      "message": "Fixed detection of a project in projects.txt\n\nBefore the fix, requirements soft-update was used for projects that are\nin the file.\n\nChange-Id: I095d42521f54b45a6b13837e2f8375fa04532faa\nCloses-Bug: #1469067\n"
    },
    {
      "commit": "7af8a1b9b3180da54e2c9505228ad722db44ca27",
      "tree": "9fce8a371897a33f33e840061773853ef23902ca",
      "parents": [
        "c4067a3cc033eec0d6fa589718e35257c6bcae97"
      ],
      "author": {
        "name": "Sean Dague",
        "email": "sean@dague.net",
        "time": "Wed Jun 24 05:51:54 2015 -0400"
      },
      "committer": {
        "name": "Sean Dague",
        "email": "sean@dague.net",
        "time": "Wed Jun 24 05:55:02 2015 -0400"
      },
      "message": "only soft enforce requirements not in projects.txt\n\nWe\u0027re adding the ability to have devstack plugins, which should be\nmuch more free to require new things not in global requirements. Our\nold thinking of locking down all the requirements doesn\u0027t really work\nin a plugin model.\n\nInstead, if the project is in projects.txt, continue with the old\nbehavior. If it is not, do a soft update (update all the requirements\nwe know about, leave the ones we don\u0027t). This was previously the SOFT\nrequirements update mode, but now it will just be the default.\n\nChange-Id: Ic0c6e01a6d7613d712ac9e7e4a378cc3a8ce75e6\n"
    },
    {
      "commit": "40f3e33f734330c32f27882898ab1bb4ab8f3217",
      "tree": "dda0dcc7b877329284f44156b6910d3be78f22b1",
      "parents": [
        "810dc1d6f4b22eee04303e01968c1762a16986e0"
      ],
      "author": {
        "name": "Robert Collins",
        "email": "rbtcollins@hp.com",
        "time": "Fri Jun 19 08:04:00 2015 +1200"
      },
      "committer": {
        "name": "Robert Collins",
        "email": "rbtcollins@hp.com",
        "time": "Fri Jun 19 08:04:00 2015 +1200"
      },
      "message": "Put requirements repo in a venv.\n\nThis is to prevent any possible contamination of test results from its\npresence.\n\nChange-Id: I5a929854745650cc6a182ffc4d15c50caabdd727\n"
    },
    {
      "commit": "8afbaa1c80d54d7f6591f8f2c1a26c34f60c77e1",
      "tree": "7840d089d0751cff7da5b07439e3f5bcf4818869",
      "parents": [
        "c6782413081cbdc72c7b24e34acec383a1cf2f46"
      ],
      "author": {
        "name": "Davanum Srinivas",
        "email": "davanum@gmail.com",
        "time": "Wed May 13 20:53:08 2015 -0400"
      },
      "committer": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Fri May 15 04:26:04 2015 +0000"
      },
      "message": "Support for running Nova with oslo.rootwrap daemon\n\nNova is being enhanced to use rootwrap as a daemon. For this effort,\nwe need an additional entry for nova-rootwrap-daemon in the\nsudoers.d/ directory.\n\nNeeded by:\nI57dc2efa39b86fa1fa20730ad70d056e87617c96\n\nChange-Id: I80c7b9dd8e9e0f940aa4e54a95b241dfc40d3574\n"
    },
    {
      "commit": "c6782413081cbdc72c7b24e34acec383a1cf2f46",
      "tree": "029dc47772a5814541fed23f66555b6ec5c41d03",
      "parents": [
        "a79de45497dc4c9d388b698b939002d2857f0cc7"
      ],
      "author": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Thu May 14 10:01:53 2015 +1000"
      },
      "committer": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Fri May 15 14:01:20 2015 +1000"
      },
      "message": "Infer rootwrap arguments from project\n\nWe can infer the binary and configuration paths just from the project\nname and expanding this to the known *_DIR \u0026 *_BIN_DIR variables.  A\nsimilar thing is done for policyd settings\n\nChange-Id: I7c6a9fa106948ae5cbcf52555ade6154623798f1\n"
    },
    {
      "commit": "fa3e8412864a92715c296c6ed5e3828dd4bb2205",
      "tree": "5c7c78afbd70df860a8fd6d8b07b62e7e2ba8846",
      "parents": [
        "9b64bbf06eab19534e58a1b7af1757e427e6b3b6"
      ],
      "author": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Fri Apr 17 11:53:40 2015 +1000"
      },
      "committer": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Fri Apr 17 13:23:25 2015 +1000"
      },
      "message": "Create config file in merge_config_file\n\nChange If132a94e53545d9134859aa508da7b9819ede2f8 introduced a small\nregression; it added an \"inidelete\" which looks in the config file to\ndelete rows.\n\nHowever, at least for the test-case, the config file isn\u0027t created\nyet.  The end result is that the test fails but we don\u0027t notice.\n\n 2015-04-17 00:55:03.169 | merge_config_file test-multiline: sed: can\u0027t read test-multiline.conf: No such file or directory\n 2015-04-17 00:55:03.195 | OK\n\nSo fix this up by creating the config-file if it isn\u0027t there.\n\nAlso, add \"-e\" to the test file so we catch things like this in the\nfuture.\n\nChange-Id: I43a4ecc247f19cccf51d5931dfb687adbd23d6b1\n"
    },
    {
      "commit": "9860876f5dbb07826b680143a4e111ad580053fe",
      "tree": "77f0ba9a7222d399565cca1a3db3a071ca9f7979",
      "parents": [
        "60996b1b60c3efb1376b9f0d659acebd05c47f09"
      ],
      "author": {
        "name": "Amrith Kumar",
        "email": "amrith@tesora.com",
        "time": "Wed Apr 08 15:37:58 2015 -0400"
      },
      "committer": {
        "name": "Amrith Kumar",
        "email": "amrith@tesora.com",
        "time": "Wed Apr 08 16:28:34 2015 -0400"
      },
      "message": "perform install_infra sooner in stack.sh\n\nThe install_infra() call needs to be done earlier since\npip_install_gr() depends on it. Also the fact that python module names\nare supposed to be lower case but some use camel case is a problem\n(for example with XenAPI).\n\nChange-Id: I7012d77134fa0d9c746d87e837934e7dcb337e5c\nCloses-Bug: #1441820\n"
    },
    {
      "commit": "60996b1b60c3efb1376b9f0d659acebd05c47f09",
      "tree": "82a570b328fa22b437aa27a10716ae9b5c3da4ff",
      "parents": [
        "d1549d624dea9b00d7aa0f935759c69290e9ea17"
      ],
      "author": {
        "name": "Sean Dague",
        "email": "sean@dague.net",
        "time": "Wed Apr 08 09:06:49 2015 -0400"
      },
      "committer": {
        "name": "Sean Dague",
        "email": "sean@dague.net",
        "time": "Wed Apr 08 10:28:17 2015 -0400"
      },
      "message": "introduce pip_install_gr\n\nThis creates a new pip_install_gr that installs from global\nrequirements allowed versions. Now that stable branches are getting\ncapped all of devstack needs to be fixed to do things like this.\n\nChange-Id: I8fd0ef2bfc544ca2576fab09d3018f760b8848fe\n"
    },
    {
      "commit": "9e63b59a8ed1069b1494615619441fa9a7774baf",
      "tree": "cc2950a745bbb1817ec954c6f9be81c49d6c45d9",
      "parents": [
        "67ca2d5004f08a3a461510be7db93f4383b5cd12",
        "32d6bc6ad1f5d857c8e34e15001f8eb8666c601c"
      ],
      "author": {
        "name": "Jenkins",
        "email": "jenkins@review.openstack.org",
        "time": "Fri Apr 03 16:25:00 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "review@openstack.org",
        "time": "Fri Apr 03 16:25:00 2015 +0000"
      },
      "message": "Merge \"Add inc/rootwrap\""
    },
    {
      "commit": "d7c874bca6825441f3990733e7676201e7bc31e8",
      "tree": "d5f9b44fe80f3d07e69f16040052b69d2a1aa5c3",
      "parents": [
        "43479db9105db75d7762e9cfbc950841725fa644",
        "1bd79596c3c5f62cbbef92558156401447a9b5d3"
      ],
      "author": {
        "name": "Jenkins",
        "email": "jenkins@review.openstack.org",
        "time": "Mon Mar 30 15:05:59 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "review@openstack.org",
        "time": "Mon Mar 30 15:05:59 2015 +0000"
      },
      "message": "Merge \"Move back isset to the functions-common\""
    },
    {
      "commit": "32d6bc6ad1f5d857c8e34e15001f8eb8666c601c",
      "tree": "ade89fecd1c5db1a4090df0c6b1cb1eda6d96c69",
      "parents": [
        "43479db9105db75d7762e9cfbc950841725fa644"
      ],
      "author": {
        "name": "Dean Troyer",
        "email": "dtroyer@gmail.com",
        "time": "Sun Mar 29 14:16:44 2015 -0500"
      },
      "committer": {
        "name": "Dean Troyer",
        "email": "dtroyer@gmail.com",
        "time": "Sun Mar 29 22:29:28 2015 -0500"
      },
      "message": "Add inc/rootwrap\n\nRootwrap shouldn\u0027t be a unique snowflake.  Plus the binaries tend\nto be called assuming PATH will find them.  Not so with venvs\nso we need to work around that brokenness.\n\nConfigure Cinder and Nova to use configure_rootwrap().\n\nChange-Id: I8ee1f66014875caf20a2d14ff6ef3672673ba85a\n"
    },
    {
      "commit": "41d6f858be8431975762e65db470929c72b8f2a8",
      "tree": "611ecdd011df3c3ab60bfcc71281656f48767d00",
      "parents": [
        "c392fd3b5fd5464d87e514c173e4a5091d412caf"
      ],
      "author": {
        "name": "Dean Troyer",
        "email": "dtroyer@gmail.com",
        "time": "Wed Mar 25 22:42:46 2015 -0500"
      },
      "committer": {
        "name": "Dean Troyer",
        "email": "dtroyer@gmail.com",
        "time": "Thu Mar 26 15:36:23 2015 -0500"
      },
      "message": "Clean up additional INSTALL_TESTONLY_PACKAGES bits\n\nThe original removal is in https://review.openstack.org/#/c/167669/\n\nChange-Id: I3c59f040523d2cd1453465e80280955218880634\n"
    },
    {
      "commit": "ebdd9ac5b41da372c0276a507451ea9878be7dda",
      "tree": "4d933b332ade8428672ce8b28673691c4ef8d6d7",
      "parents": [
        "4cc060e77c58882f9728c2515e65d205d0e969dd"
      ],
      "author": {
        "name": "Chris Dent",
        "email": "chdent@redhat.com",
        "time": "Wed Mar 04 12:35:14 2015 +0000"
      },
      "committer": {
        "name": "Chris Dent",
        "email": "chdent@redhat.com",
        "time": "Thu Mar 26 14:27:54 2015 +0000"
      },
      "message": "Provide an option to force pip --upgrade\n\nMake it possible for someone to config\n\n  PIP_UPGRADE\u003dTrue\n\nin local.conf and thus force pip_install calls to upgrade. In\nautomated testing this is probably a bad idea, but in manual testing\nor situations where devstack is being used to spin up proof of\nconcepts having the option to use the latest and greatest Python\nmodules is a useful way of exploring the health of the ecosystem.\n\nTo help with visibility of the setting, and section has been added\nin configuration.rst near other similar settings.\n\nChange-Id: I484c954f1e1f05ed02c0b08e8e4a9c18558c05ef\n"
    },
    {
      "commit": "1bd79596c3c5f62cbbef92558156401447a9b5d3",
      "tree": "3498da8181326cc9421975135d9123268339f974",
      "parents": [
        "4cc060e77c58882f9728c2515e65d205d0e969dd"
      ],
      "author": {
        "name": "Attila Fazekas",
        "email": "afazekas@redhat.com",
        "time": "Tue Feb 24 14:06:56 2015 +0100"
      },
      "committer": {
        "name": "Attila Fazekas",
        "email": "afazekas@redhat.com",
        "time": "Thu Mar 26 14:00:02 2015 +0100"
      },
      "message": "Move back isset to the functions-common\n\nisset function was moved to config file related functions by accident,\nthis change also simplfies the isset in a bash \u003e\u003d4.2 way.\n\nAll supported distro has at least bash 4.2. (RHEL6 used 4.1)\n\nChange-Id: Id644b46ff9cdbe18cde46e96aa72764e1c8653ac\n"
    },
    {
      "commit": "eeb7bda510ad29dce7bfc5eb8aed9b6fe25efea1",
      "tree": "550e2caaef10ce56f5bf96277c3293c05e969ea7",
      "parents": [
        "b23054c4b42b1c4ef8b0cdb642e63eac2a91a3f5"
      ],
      "author": {
        "name": "Sean Dague",
        "email": "sean@dague.net",
        "time": "Wed Mar 25 11:55:32 2015 -0400"
      },
      "committer": {
        "name": "Sean Dague",
        "email": "sean@dague.net",
        "time": "Wed Mar 25 11:55:32 2015 -0400"
      },
      "message": "eliminate TEST_ONLY differentiation\n\ndevstack is a development and test environment, but by default we were\nonly installing the runtime dependencies. We should install all the\ntesting required packages as well.\n\nChange-Id: I7c95927b9daad15766aac9d1276b10ca62efb24c\n"
    },
    {
      "commit": "6a83c423fc1d788d9e81b58a8659eca1cb84095d",
      "tree": "60bed3e68a2d7737b50ec20ae711a96459b58695",
      "parents": [
        "1331a828dab91f2e053cb1a4b78b872af00410c1"
      ],
      "author": {
        "name": "Eli Qiao",
        "email": "liyong.qiao@intel.com",
        "time": "Tue Mar 17 16:54:16 2015 +0800"
      },
      "committer": {
        "name": "Eli Qiao",
        "email": "liyong.qiao@intel.com",
        "time": "Tue Mar 17 17:03:29 2015 +0800"
      },
      "message": "Fix pip install error\n\nIf we set mutiple proxy (ip or url), pip install will\ntreat the second proxy as a command.\nAdd quotation marks around proxy.\nexpecially for no_proxy\n\nChange-Id: I38ad3f083ba5155cda0e5e2b8f5df64492b7fecd\n"
    },
    {
      "commit": "bf2ad7015d068f9a85c01813cea0aa79143b1d0f",
      "tree": "ab1a91e8e13a882ee4dab1a70141c31133a5815b",
      "parents": [
        "924079b8905669a646cfa328d6bf52e56b79acdc"
      ],
      "author": {
        "name": "Dean Troyer",
        "email": "dtroyer@gmail.com",
        "time": "Mon Mar 09 15:16:10 2015 -0500"
      },
      "committer": {
        "name": "Dean Troyer",
        "email": "dtroyer@gmail.com",
        "time": "Mon Mar 09 22:52:19 2015 -0500"
      },
      "message": "Move configuration functions into inc/*\n\n* config/INI functions from functions-common to to inc/ini-config\n* local.conf meta-config functions from lib/config to inc/meta-config\n\nChange-Id: I00fab724075a693529273878875cfd292d00b18a\n"
    },
    {
      "commit": "cd8824ac04989e625d7f1ae442498383250932a9",
      "tree": "bb31db5fa112b5840df93eb22abf220d1cab8510",
      "parents": [
        "7a678bfcb2726506a6daff3893c962ade4abb96c"
      ],
      "author": {
        "name": "Joe Gordon",
        "email": "joe.gordon0@gmail.com",
        "time": "Wed Mar 04 16:40:19 2015 -0800"
      },
      "committer": {
        "name": "Joe Gordon",
        "email": "joe.gordon0@gmail.com",
        "time": "Fri Mar 06 01:33:31 2015 +0000"
      },
      "message": "Pass PIP_FIND_LINKS through sudo to pip\n\nWe weren\u0027t actually using the wheels since PIP_FIND_LINKS environmental\nvariable was getting lost during the sudo\n\nChange-Id: I4a89a70df63772a16ee5a8c3f1cd86e9c7bb5242\n"
    },
    {
      "commit": "8c2ce6ea724c9123b8cc5660c6ad52aa8ebf9865",
      "tree": "a1cb60d0152a36c76125f04d4565c11d7473d714",
      "parents": [
        "b1d8e8e274f0c220ae19ee3ea1a3b9a533459297"
      ],
      "author": {
        "name": "Dean Troyer",
        "email": "dtroyer@gmail.com",
        "time": "Wed Feb 18 14:47:54 2015 -0600"
      },
      "committer": {
        "name": "Dean Troyer",
        "email": "dtroyer@gmail.com",
        "time": "Wed Feb 18 20:19:38 2015 -0600"
      },
      "message": "Virtual environment groundwork\n\nIntroduce the tooling to build virtual environments.\n\n* tools/build_venv.sh: build a venv\n* introduce lib/stack to house functionality extracted from stack.sh that\n  is needed in other places, such as Grenade; start with stack_install_service\n  to wrap the venv install mechanics\n* declare PROJECT_VENV array to track where project venvs should be installed\n* create a venv for each project defined in PROJECT_VENV in stack_install_service()\n\nChange-Id: I508588c0e2541b976dd94569d44b61dd2c35c01c\n"
    },
    {
      "commit": "a6de7e962c3293d3a5e5e6ef1ead97c0ea0067f0",
      "tree": "a7d111dfc7fac8a937119e983bbbe2f64d3e6115",
      "parents": [
        "2e9d32baf274fc0bd7edc5fd3b9df3f3fa01e2bd",
        "2b564763aafe6466f42bc5cf2ccc47ddf4169986"
      ],
      "author": {
        "name": "Jenkins",
        "email": "jenkins@review.openstack.org",
        "time": "Wed Feb 18 20:59:20 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "review@openstack.org",
        "time": "Wed Feb 18 20:59:20 2015 +0000"
      },
      "message": "Merge \"Teach pip_install() about virtual envs\""
    },
    {
      "commit": "d5ac7852473a8a34ae097c33ed173d640db80379",
      "tree": "a149e49e3aa77709ba7dfbb0fa9a67e960b224c5",
      "parents": [
        "d26da45b98a75b9d61d0a33d216ca15543a7faf2"
      ],
      "author": {
        "name": "Joe Gordon",
        "email": "joe.gordon0@gmail.com",
        "time": "Fri Feb 06 19:29:23 2015 -0800"
      },
      "committer": {
        "name": "Joe Gordon",
        "email": "joe.gordon0@gmail.com",
        "time": "Tue Feb 17 11:48:06 2015 -0800"
      },
      "message": "Add new function get_from_global_requirements\n\nInstead of specifying the version of a library in devstack, use the version from\nglobal-requirements\n\nAdd new function get_from_global_requirements and use it\nwhere it makes sense.\n\nChange-Id: I6b2f062761ac05ef72fc6cc9993bc204faf06fa5\n"
    },
    {
      "commit": "2b564763aafe6466f42bc5cf2ccc47ddf4169986",
      "tree": "134ea203d74a8de02afa9bb7957685df54b24a42",
      "parents": [
        "2a811912c6e8a2f85d4a9ef03694cd29cb5fd1cd"
      ],
      "author": {
        "name": "Dean Troyer",
        "email": "dtroyer@gmail.com",
        "time": "Wed Feb 11 17:01:02 2015 -0600"
      },
      "committer": {
        "name": "Dean Troyer",
        "email": "dtroyer@gmail.com",
        "time": "Thu Feb 12 12:19:20 2015 -0600"
      },
      "message": "Teach pip_install() about virtual envs\n\nSet PIP_VIRTUAL_ENV to install the package(s) into an existing virtual\nenvironment.  This works by simply using the pip command already\nin the venv, and not using sudo.\n\nChange-Id: I910e1752e58a666174f83b4f97e547851e66e655\n"
    },
    {
      "commit": "490430dbe3b7d9979b4623f2c327bb0a74436401",
      "tree": "527289f426c49bb51234a1e0621a0afe1ffac20e",
      "parents": [
        "a1b82cc1b5a7172c3fdf17d2c3f0725660911ad7"
      ],
      "author": {
        "name": "Dean Troyer",
        "email": "dtroyer@gmail.com",
        "time": "Fri Jan 30 14:38:35 2015 -0600"
      },
      "committer": {
        "name": "Dean Troyer",
        "email": "dtroyer@gmail.com",
        "time": "Fri Jan 30 14:59:48 2015 -0600"
      },
      "message": "Split functions-common: python functions\n\nMove Python-related functions into inc/python\n\nShould be transparent to all callers as it is sourced from functions-common\n\nChange-Id: I88043830cef9211b4e0baa91bfcc7a92125afa9f\n"
    }
  ]
}
