)]}'
{
  "log": [
    {
      "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"
    }
  ]
}
