)]}'
{
  "log": [
    {
      "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": "b889294af7aa1ccf613da28fb08f547306e0f581",
      "tree": "a592990b15a43e838024f0a9613db3044c112779",
      "parents": [
        "4300f83acf06ce1b6b7976a604a756b9f28f57a1",
        "ecf06dbadb7c4cafb7a2fab13e58c1b05dd8a3f2"
      ],
      "author": {
        "name": "Jenkins",
        "email": "jenkins@review.openstack.org",
        "time": "Tue Dec 01 16:01:40 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "review@openstack.org",
        "time": "Tue Dec 01 16:01:40 2015 +0000"
      },
      "message": "Merge \"Add test for package file ordering\""
    },
    {
      "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": "7f0be4fc5f5bd8f45087e53c94fae3b9146f486e",
      "tree": "a77f1372145cff6efe15d7e6fdcc77a9983cca4f",
      "parents": [
        "0b6a40bcabeaffef419a0a35f59cd7329e73c8db"
      ],
      "author": {
        "name": "Swapnil Kulkarni (coolsvap)",
        "email": "me@coolsvap.net",
        "time": "Fri Nov 20 10:52:59 2015 +0530"
      },
      "committer": {
        "name": "Swapnil Kulkarni (coolsvap)",
        "email": "me@coolsvap.net",
        "time": "Fri Nov 20 11:17:19 2015 +0530"
      },
      "message": "Updated Typos in devstack\n\n(1/5) Updated HACKING.rst for typos\n(2/5) Updated typos in lib/dlm\n(3/5) Updated typos in lib/ironic\n(4/5) Updated typos in unittest.sh\n(5/5) Updated typos in test_meta_config.sh\n\nChange-Id: I7aafa3af69df9dc6a5923a8557f380d48b73433a\n"
    },
    {
      "commit": "ecf06dbadb7c4cafb7a2fab13e58c1b05dd8a3f2",
      "tree": "aaedab8c84db6895e66bca0718131d9a17f0e724",
      "parents": [
        "ca7e4f285cfb68bae13e8df770dc2b5856559ecd"
      ],
      "author": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Mon Nov 09 17:42:23 2015 +1100"
      },
      "committer": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Mon Nov 16 15:50:58 2015 +1100"
      },
      "message": "Add test for package file ordering\n\nAdd a simple test to ensure package install files remain sorted\nalphabetically (follow-on from the sorting of the files done in\nI01e42defbf778626afd8dd457f93f0b02dd1a19d)\n\nChange-Id: I75568871e92afcd81dac2c3ce18b84aa34cdd289\n"
    },
    {
      "commit": "ca7e4f285cfb68bae13e8df770dc2b5856559ecd",
      "tree": "e03d3bd038e13059a87a060866174d93ae5f2d31",
      "parents": [
        "d9da93ede2d9214859f5f55f29116c080191cff4"
      ],
      "author": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Fri Nov 13 11:15:15 2015 +1100"
      },
      "committer": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Mon Nov 16 15:47:51 2015 +1100"
      },
      "message": "Fix error detection \u0026 exit in report_results\n\nWe wish to fail if we have \u003e0 zero errors, not \u003e1 errors (i.e. exactly\none error did not trigger a failure!)\n\nThis change also brings consistency to the pass \u0026 failure paths by\nensuring report_results exits in both cases, since report_results is\nsupposed to be the last thing run in a test file.\n\nChange-Id: Id4721dffe13721e6c3cd71bca40c3395627e98bf\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": "c77fc2e196b471fc12d4e99f013d68965b639658",
      "tree": "8c8007f9c99bc0864f65d48ea538c627138e739d",
      "parents": [
        "fd3af1d8e2c57aa9b8c0ebeccd322e2614f95678",
        "7792bc39d4f9f7ec7fd1b81ddbb30c30988f03e6"
      ],
      "author": {
        "name": "Jenkins",
        "email": "jenkins@review.openstack.org",
        "time": "Thu Oct 29 03:00:30 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "review@openstack.org",
        "time": "Thu Oct 29 03:00:30 2015 +0000"
      },
      "message": "Merge \"Add new oslo.privsep library to oslo repos\""
    },
    {
      "commit": "83a2a42ac020d5364fa15a10e856b8125626c660",
      "tree": "7085827c2ac71f7bb952a30e479f4253065123c5",
      "parents": [
        "a692810ef05304856e5fd12ec786f3445ecca576",
        "54dc19ecad2ed06694a4b6269c2833d9533a26f5"
      ],
      "author": {
        "name": "Jenkins",
        "email": "jenkins@review.openstack.org",
        "time": "Thu Oct 29 00:44:54 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "review@openstack.org",
        "time": "Thu Oct 29 00:44:54 2015 +0000"
      },
      "message": "Merge \"Add export_proxy_variables() tests to test_functions.sh\""
    },
    {
      "commit": "7792bc39d4f9f7ec7fd1b81ddbb30c30988f03e6",
      "tree": "47ad5125a35487a0d3e2418e064537f9b5a42ebc",
      "parents": [
        "0afcac2e01580b7aee886272b8ed7eaf9c13132c"
      ],
      "author": {
        "name": "Tony Breeds",
        "email": "tony@bakeyournoodle.com",
        "time": "Fri Oct 23 13:57:14 2015 +1100"
      },
      "committer": {
        "name": "Tony Breeds",
        "email": "tony@bakeyournoodle.com",
        "time": "Sun Oct 25 17:39:37 2015 +1100"
      },
      "message": "Add new oslo.privsep library to oslo repos\n\nA new project olos.privsep has been created but failes sdvm testing as\neven though the library is added ro PROJECTS and LIBS_FROM_GIT it isn\u0027t\ninstalled by devstack.\n\nAdd oslo.privsep to the install_oslo function\n\nChange-Id: Ia4d56747d56dcfe50889ebbdf9d553df13e1b950\n"
    },
    {
      "commit": "6e9bee1ae587cccc278dc24ae0d9820a222409fe",
      "tree": "db87e22509c52e7e92ba0b70160219bb0fd4dea9",
      "parents": [
        "188b38fc808d0713476dec30f15d60618acd692b",
        "e82bac04981c8e41a919907d16621c9c952d9224"
      ],
      "author": {
        "name": "Jenkins",
        "email": "jenkins@review.openstack.org",
        "time": "Thu Oct 15 02:56:19 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "review@openstack.org",
        "time": "Thu Oct 15 02:56:19 2015 +0000"
      },
      "message": "Merge \"Detect blank variable in trueorfalse\""
    },
    {
      "commit": "e82bac04981c8e41a919907d16621c9c952d9224",
      "tree": "d94a1380349e0154da2581b80b281b13dad3aaab",
      "parents": [
        "c1561f84fb421d2ce28d3c2b07fd7b53f57264bf"
      ],
      "author": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Tue Aug 25 14:29:08 2015 +1000"
      },
      "committer": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Fri Oct 09 19:07:50 2015 +1100"
      },
      "message": "Detect blank variable in trueorfalse\n\nAs a follow-on to I8cefb58f49dcd2cb2def8a5071d0892af520e7f7, put in\nsome detection around missing variable-to-test arguments in\ntrueorfalse.\n\nCorrect a couple of places where we were passing in blank strings,\nresulting in the default always being applied.\n\nAdd test-cases and enhance the documentation a little.\n\nDepends-On: I8cefb58f49dcd2cb2def8a5071d0892af520e7f7\nChange-Id: Icc0eb3808a2b6583828d8c47f0af4181e7e2c75a\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": "e9a4750fe1b111eeb457378c26ca9eea1b5e0085",
      "tree": "d7ef7ebdc7c61f9c2e70516858b57be1b8f30828",
      "parents": [
        "633e740dcfb0a8a107880a6fc6b9aeff8ee43b11"
      ],
      "author": {
        "name": "Chris Dent",
        "email": "chdent@redhat.com",
        "time": "Sat Jun 27 11:29:09 2015 +0000"
      },
      "committer": {
        "name": "Chris Dent",
        "email": "chdent@redhat.com",
        "time": "Wed Sep 09 16:44:29 2015 +0000"
      },
      "message": "Remove ceilometer in favor of plugin\n\nThe ceilometer project is moving to using a devstack plugin rather\nthan having ceilometer in the base devstack. This is to allow\ngreater control and flexibility.\n\nChange-Id: I413ab159474b7d7231ad66d3a482201f74efe8a8\n"
    },
    {
      "commit": "3f249b1e21848cbea7798b522a17a279427e55f5",
      "tree": "581bb990d05cf6d592ee9d38811eb356a3e37347",
      "parents": [
        "181441d96d5b7764376eb46a8dbb0d1728ea9a2f",
        "869b72b8512d73d24b42e0fa5c39b8dc0d7b28f7"
      ],
      "author": {
        "name": "Jenkins",
        "email": "jenkins@review.openstack.org",
        "time": "Tue Sep 01 18:21:00 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "review@openstack.org",
        "time": "Tue Sep 01 18:21:00 2015 +0000"
      },
      "message": "Merge \"Support installing ironic-lib\""
    },
    {
      "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": "869b72b8512d73d24b42e0fa5c39b8dc0d7b28f7",
      "tree": "26ef0b5236c826bb28cc52f5938cf2d71cfcc340",
      "parents": [
        "32e0febbc086a1accd90c3d9a9535ebb75495afe"
      ],
      "author": {
        "name": "Dmitry Tantsur",
        "email": "dtantsur@redhat.com",
        "time": "Thu Aug 13 13:36:23 2015 +0200"
      },
      "committer": {
        "name": "Dmitry Tantsur",
        "email": "dtantsur@redhat.com",
        "time": "Wed Aug 26 17:34:46 2015 +0200"
      },
      "message": "Support installing ironic-lib\n\nironic-lib will soon become a dependency of ironic, make sure we can\nwrite dsvm gates against it.\n\nChange-Id: I6e66ae770cf5065980848e7e987bfd75765a5ac6\n"
    },
    {
      "commit": "5cbd85738e04a499cf29de834d978dfe7847feba",
      "tree": "b3d0d96f3e9d406473f640cef848917667d55675",
      "parents": [
        "23e749d9bd82bab9a4ce14b6d976133d9b416b80",
        "b997db602e15b60c68c0f7a99db74b5d2419a85c"
      ],
      "author": {
        "name": "Jenkins",
        "email": "jenkins@review.openstack.org",
        "time": "Mon Jul 27 20:43:50 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "review@openstack.org",
        "time": "Mon Jul 27 20:43:50 2015 +0000"
      },
      "message": "Merge \"Cleanup of ini test-case\""
    },
    {
      "commit": "3805b3770c091840f67949762ed38bb1548704d2",
      "tree": "5f3c33e461f9678d28bf4b959124b6b471dec8ac",
      "parents": [
        "d4da210ffb2a9f1274705ba04ec56337e7e1ea1c",
        "21a9077d7cf32ee1c387171b943125e938eaa1b2"
      ],
      "author": {
        "name": "Jenkins",
        "email": "jenkins@review.openstack.org",
        "time": "Thu Jul 23 14:17:49 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "review@openstack.org",
        "time": "Thu Jul 23 14:17:49 2015 +0000"
      },
      "message": "Merge \"Allow installing keystoneauth from git\""
    },
    {
      "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": "b997db602e15b60c68c0f7a99db74b5d2419a85c",
      "tree": "2ce2d0c7bfad12814839308d7eba650ead71d6cd",
      "parents": [
        "92884ede5d20a399186c61cf5e003da61838eec4"
      ],
      "author": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Wed Jul 22 10:05:32 2015 +1000"
      },
      "committer": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Thu Jul 23 06:46:24 2015 +1000"
      },
      "message": "Cleanup of ini test-case\n\nVarious cleanup to this file.\n\nFirstly create a temporary space to test, rather than working in the\nsource directory.\n\nWe have \"assert_equal\" which simplifies a lot.  Add \"assert_empty\"\nthat is used in a couple of tests too.  Remove a couple of duplicate\ntests.\n\nChange-Id: I7fd476ed63026e67d66a8ac2891b2e4a6687d09c\n"
    },
    {
      "commit": "f0e86a7ac75091c5ceeaeeb4f51869522f23e5f8",
      "tree": "aceb794917cac133a138d31278737721f039000b",
      "parents": [
        "469215d374367ce5b701f0a485be8f5a8f349c96",
        "5c7f39fdcd29a74c402840021ca55f47c359fbf1"
      ],
      "author": {
        "name": "Jenkins",
        "email": "jenkins@review.openstack.org",
        "time": "Thu Jul 16 23:55:34 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "review@openstack.org",
        "time": "Thu Jul 16 23:55:34 2015 +0000"
      },
      "message": "Merge \"Add worlddump unit test\""
    },
    {
      "commit": "54dc19ecad2ed06694a4b6269c2833d9533a26f5",
      "tree": "1e0f088e3f4ea3b927de995f365e705c82665cfe",
      "parents": [
        "47e68afd674fb387b99216f94eac3eb477a6e077"
      ],
      "author": {
        "name": "Mahito OGURA",
        "email": "m.ogura@ntt.com",
        "time": "Tue Jul 14 17:16:42 2015 +0900"
      },
      "committer": {
        "name": "Mahito",
        "email": "m.ogura@ntt.com",
        "time": "Wed Jul 15 23:31:51 2015 +0900"
      },
      "message": "Add export_proxy_variables() tests to test_functions.sh\n\nIn test_functions.sh, There aren\u0027t export_proxy_variables() tests.\nThis patch add test of export_proxy_variables to test_funstions.sh.\n\nChange-Id: I76f2bab84f4019961e612b0bff0ab66646b6e160\n"
    },
    {
      "commit": "21a9077d7cf32ee1c387171b943125e938eaa1b2",
      "tree": "b6dd67eabece8d2ad0f6667744c3cb44091b3e38",
      "parents": [
        "2d25c9290d163d682ae3958f0e09fede937c0f0f"
      ],
      "author": {
        "name": "Jamie Lennox",
        "email": "jamielennox@redhat.com",
        "time": "Fri Jul 03 11:54:38 2015 +1000"
      },
      "committer": {
        "name": "Jamie Lennox",
        "email": "jamielennox@redhat.com",
        "time": "Mon Jul 06 23:17:15 2015 +0000"
      },
      "message": "Allow installing keystoneauth from git\n\nKeystoneauth is not marked as stable yet however to ensure that the\nintegration between it, keystoneclient and other services don\u0027t break\ncompatibility we want to test it with tempest.\n\nUnfortunately you can\u0027t put -e links in requirements.txt files so add\nit to devstack so we can set the test environment. This will also make\nit available when keystoneauth is released.\n\nChange-Id: I43ca1df9c6ae2f0ac1a687c9ce1e2ccb97e81652\n"
    },
    {
      "commit": "fee742ba723bfb843a58881cb415b4e7991981c1",
      "tree": "48c88ef656f97b8770f543b83576d470d6e6f9eb",
      "parents": [
        "17a16f3144f6d3ade315f04526b7ca479148c0b9",
        "3381e09f72e7edbf39080893212b533b8e01a3a9"
      ],
      "author": {
        "name": "Jenkins",
        "email": "jenkins@review.openstack.org",
        "time": "Thu Jul 02 18:39:37 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "review@openstack.org",
        "time": "Thu Jul 02 18:39:38 2015 +0000"
      },
      "message": "Merge \"Move Sahara into in-tree plugin\""
    },
    {
      "commit": "3381e09f72e7edbf39080893212b533b8e01a3a9",
      "tree": "cbf50f839776758eae779780965b960028b96fc4",
      "parents": [
        "85a1c488dfda0094238f899ea0bf693106021ce5"
      ],
      "author": {
        "name": "Sergey Lukjanov",
        "email": "slukjanov@mirantis.com",
        "time": "Wed Jul 01 14:20:23 2015 +0300"
      },
      "committer": {
        "name": "Sergey Lukjanov",
        "email": "slukjanov@mirantis.com",
        "time": "Wed Jul 01 16:09:56 2015 +0000"
      },
      "message": "Move Sahara into in-tree plugin\n\nOnce the Sahara related code moved to Sahara repo and used, we can\nremove Sahara specific code from Devstack.\n\nPartial-Implements: bp sahara-devstack-intree\n\nChange-Id: I34412b5cb2e86944b8555b8fd04b43556eb2bbe6\nDepends-on: I2e00b2ebc59dd3be6a0539dea2985f2e801a1bd7\nDepends-on: I07c3fede473030e8a110cbf5a08309f890905abf"
    },
    {
      "commit": "5c7f39fdcd29a74c402840021ca55f47c359fbf1",
      "tree": "b9ed77dd6dc798958a0b42a825afad226ebd7d7a",
      "parents": [
        "3a9df1dab73e2cb2f27dd014543ab16f22ac3846"
      ],
      "author": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Wed Jul 01 06:29:27 2015 +1000"
      },
      "committer": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Wed Jul 01 06:29:27 2015 +1000"
      },
      "message": "Add worlddump unit test\n\nAdd a worlddump unit test to avoid simple breakages\n\nChange-Id: I6b87d4dbe22da2c1ca5ceb13134e9bb570f5cef2\n"
    },
    {
      "commit": "77a7d11dfa828468f27bce5456d11a9827473b20",
      "tree": "c2b1577e6194a65142c87a3eba86ac496036de8e",
      "parents": [
        "7bc1f3c15fbf92da5fe9e15bf66a2d6b6648e449"
      ],
      "author": {
        "name": "Davanum Srinivas",
        "email": "davanum@gmail.com",
        "time": "Mon Jun 22 16:44:13 2015 -0400"
      },
      "committer": {
        "name": "Davanum Srinivas (dims)",
        "email": "davanum@gmail.com",
        "time": "Tue Jun 30 18:43:56 2015 +0000"
      },
      "message": "Add new oslo libraries\n\nFull list for liberty is as follows:\n* oslo.service\n* oslo.reports\n* automaton\n* futurist\n\noslo.cache was already added in the earlier review\n\nSome of the entries are already there, though automaton was\nmissing in one spot. Made sure all references have all five\nlibraries.\n\nChange-Id: Iffb720d46058424924469695a3ae1e4f20655f99\n"
    },
    {
      "commit": "531017cf3e760dc1e9af25684465681277dec8d4",
      "tree": "5aab47c8ff60a79d5bb95b00f7d5015bc2e4d94c",
      "parents": [
        "e4d57d6bed88ec11ca7fcc8dc286a69d284c70aa"
      ],
      "author": {
        "name": "Steve Martinelli",
        "email": "stevemar@ca.ibm.com",
        "time": "Sat Jun 27 03:37:39 2015 +0000"
      },
      "committer": {
        "name": "Steve Martinelli",
        "email": "stevemar@ca.ibm.com",
        "time": "Sat Jun 27 15:10:51 2015 +0000"
      },
      "message": "Add oslo.cache to devstack\n\nas part of the graduation process, add oslo.cache to lib/oslo\nand stackrc.\n\nChange-Id: I2baf0384dd5d71d234a95b7acd0bfe5534f2732c\n"
    },
    {
      "commit": "18d1cca6cb1e56827e04c2f38c9db745b881f98a",
      "tree": "e93d4e09ecd337cc702309eac3d264b61cf741b0",
      "parents": [
        "810dc1d6f4b22eee04303e01968c1762a16986e0"
      ],
      "author": {
        "name": "Davanum Srinivas",
        "email": "davanum@gmail.com",
        "time": "Thu Jun 18 06:32:00 2015 -0400"
      },
      "committer": {
        "name": "Davanum Srinivas",
        "email": "davanum@gmail.com",
        "time": "Thu Jun 18 06:32:04 2015 -0400"
      },
      "message": "Add oslo.service to devstack\n\nAdd the ability to switch on oslo.service master using\nLIBS_FROM_GIT\n\nChange-Id: I00fe7776aea005b6d4e0a84fce54f33a862b57e3\n"
    },
    {
      "commit": "e3a640d57327955aba491366d6e69349813897a8",
      "tree": "97bc56f99ee863f98f7018b5c83e400db35a946d",
      "parents": [
        "96c6b2deb33e67c1657e37fdcc8c6ec904674ed6"
      ],
      "author": {
        "name": "Joshua Harlow",
        "email": "harlowja@yahoo-inc.com",
        "time": "Mon Jun 08 16:44:21 2015 -0700"
      },
      "committer": {
        "name": "Joshua Harlow",
        "email": "harlowja@yahoo-inc.com",
        "time": "Wed Jun 10 11:57:41 2015 -0700"
      },
      "message": "Add futurist to lib/oslo and stackrc\n\nPart of blueprint adopt-futurist\n\nChange-Id: I17e27a085c7c509bad6018016e90d0114543b073\n"
    },
    {
      "commit": "96c6b2deb33e67c1657e37fdcc8c6ec904674ed6",
      "tree": "a20ed9f2c9f1c86f3648a153d0e244f460e86042",
      "parents": [
        "dd4e468448cf4b30477f2ee4a8e14b97cb4756aa"
      ],
      "author": {
        "name": "Joshua Harlow",
        "email": "harlowja@yahoo-inc.com",
        "time": "Mon Jun 08 16:48:49 2015 -0700"
      },
      "committer": {
        "name": "Joshua Harlow",
        "email": "harlowja@yahoo-inc.com",
        "time": "Wed Jun 10 11:48:50 2015 -0700"
      },
      "message": "Add automaton to lib/oslo and stackrc\n\nPart of blueprint adopt-automaton\n\nChange-Id: I520643b74aced431f7a46b7d7b94616bb2e6bf8e\n"
    },
    {
      "commit": "10e1fd420dbebec2a5e546266edfc748b8684f9b",
      "tree": "b154beff1e426f6b6e53f4e13620b9ae60db3a5a",
      "parents": [
        "21b7e975fa3d1db3710b3d12d965f87828d9be84"
      ],
      "author": {
        "name": "Ramy Asselin",
        "email": "ramy.asselin@hp.com",
        "time": "Thu Jun 04 12:12:15 2015 -0700"
      },
      "committer": {
        "name": "Ramy Asselin",
        "email": "ramy.asselin@hp.com",
        "time": "Mon Jun 08 09:54:16 2015 -0700"
      },
      "message": "Allow override of os-brick library used by cinder\n\nos-brick code was pulled out of cinder and made into its own library\nhttps://review.openstack.org/#/c/155552/\n\nadded to requirements:\nhttps://review.openstack.org/#/c/177372/\n\nIntegration tests were added\nhttps://review.openstack.org/#/c/188156/\n\nBut they still use the version of os-brick from pip.\n\nThis change updates devstack to pull in the changes from\nos-brick patch sets instead, when configured to do so.\n\nNeeded-by: Id2bc10782847861fe4bb5e9e46245654450e38fd\n\nChange-Id: I5359dd37dfe94bd469d5ca35f9fbaeda61b5fac4\n"
    },
    {
      "commit": "dd363a182fb1f8472bc163c82ea5f48e8f8fd29e",
      "tree": "68c68729bd4d1a91dc37a7bb4e3cf8d45c2259a5",
      "parents": [
        "d986c59d6bd64c012cac3893a4b8bf75a84af4c5"
      ],
      "author": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Mon May 25 11:50:32 2015 +1000"
      },
      "committer": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Thu May 28 10:40:55 2015 +1000"
      },
      "message": "Cleanup test_ip.sh to give more consistent output\n\nMinor changes to give more consistent output; no functional changes to\ntests.\n\nChange-Id: I6c4ef74587c59b786761735c7bd528f3d7f94905\n"
    },
    {
      "commit": "cfdb6fa940d947715e4b729b9e1e17ee8c6b14a8",
      "tree": "e45ce955250bcaf26665689d963873830ab7b351",
      "parents": [
        "3fa092bc1c3853905a9b2f99818b403aea59c20d",
        "d82d3f13401320ec47757aff0457a307203b28fe"
      ],
      "author": {
        "name": "Jenkins",
        "email": "jenkins@review.openstack.org",
        "time": "Wed May 27 15:43:26 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "review@openstack.org",
        "time": "Wed May 27 15:43:26 2015 +0000"
      },
      "message": "Merge \"Add test case to \u0027cidr2netmask\u0027\""
    },
    {
      "commit": "3fa092bc1c3853905a9b2f99818b403aea59c20d",
      "tree": "6ee0e8a8b2afc61b133ff566136282c238f14421",
      "parents": [
        "11e17174beb1bc4fbcf3122d33e7dd5a406ee09c",
        "165afa2377ee8eb6bad1b6cfb454a7de525a4498"
      ],
      "author": {
        "name": "Jenkins",
        "email": "jenkins@review.openstack.org",
        "time": "Wed May 27 15:43:21 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "review@openstack.org",
        "time": "Wed May 27 15:43:21 2015 +0000"
      },
      "message": "Merge \"Fix msg argument to assert_equal\""
    },
    {
      "commit": "d82d3f13401320ec47757aff0457a307203b28fe",
      "tree": "742707fa09b316ff3f66a08c8e1f2c5e99210ad1",
      "parents": [
        "165afa2377ee8eb6bad1b6cfb454a7de525a4498"
      ],
      "author": {
        "name": "Mahito",
        "email": "m.ogura@ntt.com",
        "time": "Fri May 22 10:37:23 2015 -0700"
      },
      "committer": {
        "name": "Mahito OGURA",
        "email": "m.ogura@ntt.com",
        "time": "Tue May 26 15:33:32 2015 +0900"
      },
      "message": "Add test case to \u0027cidr2netmask\u0027\n\n\u0027cidr2netmask\u0027 of function doesn\u0027t have enough test case\nand test code isn\u0027t smart.\nThis patch adds test case and refactors test code.\n\nChange-Id: Iab20ef06fe78316a78198ab75c0afe738a577dd6\nCloses-bug: #1457989\n"
    },
    {
      "commit": "8606c98c53722f425525fa06eee554b7d30f62f6",
      "tree": "73964254155c511d023dc7315ca80126fa0d549a",
      "parents": [
        "cf56d4e35ca3f5fd406068e757c9e82a7e2c6d61"
      ],
      "author": {
        "name": "fumihiko kakuma",
        "email": "kakuma@valinux.co.jp",
        "time": "Mon Apr 13 09:55:06 2015 +0900"
      },
      "committer": {
        "name": "fumihiko kakuma",
        "email": "kakuma@valinux.co.jp",
        "time": "Tue May 26 12:38:35 2015 +0900"
      },
      "message": "Fix remove_disabled_extensions to remove an extension at the last position\n\nremove_disabled_extensions do matching by \u0027$ext_to_remove\",\"\u0027. So it doesn\u0027t\nmatch an extension at the last position in extensions_list.\nThis patch fixes that.\n\nCloses-Bug: #1443254\nChange-Id: I194b483de797697ba06b320cf33f1bac67fc0cc7\n"
    },
    {
      "commit": "165afa2377ee8eb6bad1b6cfb454a7de525a4498",
      "tree": "701ada8d5f91abe306a842036ed55117d1da690d",
      "parents": [
        "cf56d4e35ca3f5fd406068e757c9e82a7e2c6d61"
      ],
      "author": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Mon May 25 11:29:48 2015 +1000"
      },
      "committer": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Mon May 25 11:29:48 2015 +1000"
      },
      "message": "Fix msg argument to assert_equal\n\nI noticed this was taking an argument but not dealing with it.  In\ngeneral the functions were undocumented, so I added some terse usage.\n\nAlso, the intent of the test-case was to expand the values before\nusing them as the message; make sure this happens by using a temp\nvariable.\n\nChange-Id: Ib317ad1e9dd2a5d2232b9c64541fe4a601a2b8da\n"
    },
    {
      "commit": "9e220b9b2b560b160c93058b255b3d69e49c0cbc",
      "tree": "c1506e67b15f9cf4a1297c01e36d62704b672725",
      "parents": [
        "bf5de0aee48cd756fcc8e792f2014054c5f5294a"
      ],
      "author": {
        "name": "James E. Blair",
        "email": "jeblair@hp.com",
        "time": "Tue Mar 24 16:32:03 2015 -0700"
      },
      "committer": {
        "name": "James E. Blair",
        "email": "jeblair@hp.com",
        "time": "Thu May 14 07:57:23 2015 -0700"
      },
      "message": "Move trove into in-tree plugin\n\nOnce the trove code is copied into the trove repo and it is used\nas a devstack-plugin, we can remove trove-specific code from\ndevstack.\n\nChange-Id: I8f9f1a015edb7ec1033e2eaf0b29ab15d89384ce\nDepends-On: I3506dec0e6097f9c2e9267110fdfb768faa23c85\n"
    },
    {
      "commit": "98f59aafaf88328f6aee98efa0f563fb8bf91ebd",
      "tree": "26a9c539ec10a34dfc67a1c299c4c8c4f4cf01f5",
      "parents": [
        "e3fcc54b9ba99577d9d74d175b86974aab208514"
      ],
      "author": {
        "name": "Mahito OGURA",
        "email": "earthdragon77@gmail.com",
        "time": "Mon May 11 18:02:34 2015 +0900"
      },
      "committer": {
        "name": "Mahito OGURA",
        "email": "earthdragon77@gmail.com",
        "time": "Mon May 11 18:23:07 2015 +0900"
      },
      "message": "Fix function and test for \u0027trueorfalse\u0027.\n\nThe function\u0027s comment is written as follow, however the function accepts\nother values (ex. \"e\", \"t\", \"T\", \"f\", \"F\", etc...).\n\n---\nAccepts as False: 0 no No NO false False FALSE\nAccepts as True: 1 yes Yes YES true True TRUE\n---\n\nMoreover if testval mach True or False, the function exits without resetting\nxtrace.\n\nThis patch fixes the issue and add test patterns.\n\nChange-Id: Ie48a859476faff22a4dfef466516e2d7d62ef0c0\nCloses-bug: #1453687\n"
    },
    {
      "commit": "641dd9ff23058e511d6bf126b0078448bcb672e5",
      "tree": "d6c40fd4566b9376b11d7bb6bd88c51068776458",
      "parents": [
        "5ed2ba896f81fdf76bad852c083fbd112afc7ee6",
        "2796a82ab48107d4445c03938e037e60dd1bbfa9"
      ],
      "author": {
        "name": "Jenkins",
        "email": "jenkins@review.openstack.org",
        "time": "Thu May 07 02:48:20 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "review@openstack.org",
        "time": "Thu May 07 02:48:20 2015 +0000"
      },
      "message": "Merge \"Fix negated services with common prefix\""
    },
    {
      "commit": "7efba991f78667c19d13431524c95f77660781c5",
      "tree": "6cb32982a60b0502eb891ef579aa8c8408b16649",
      "parents": [
        "c9197f6c72039b6029dbe3858b78373d7f3aa96d"
      ],
      "author": {
        "name": "Sean Dague",
        "email": "sean@dague.net",
        "time": "Tue Apr 28 13:15:22 2015 -0400"
      },
      "committer": {
        "name": "Sean Dague",
        "email": "sean@dague.net",
        "time": "Tue Apr 28 13:15:22 2015 -0400"
      },
      "message": "don\u0027t source openrc\n\nThere is actually no reason why we need openrc for these tests, don\u0027t\nsource it as it prevents some ip math errors from randomly killing\ntests.\n\nChange-Id: Iface7c21898d92e14e840379938b25844cd85565\n"
    },
    {
      "commit": "2796a82ab48107d4445c03938e037e60dd1bbfa9",
      "tree": "532f550099737815e928cfe5e19e04e0ee62c85b",
      "parents": [
        "cd7655cbfcc119e5dafe308ce31e54d3e28b3b63"
      ],
      "author": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Wed Apr 15 08:59:04 2015 +1000"
      },
      "committer": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Thu Apr 23 15:10:25 2015 +1000"
      },
      "message": "Fix negated services with common prefix\n\nThe current sed matching mixes up common-prefix matching;\ne.g. \"-q-lbaas,q-lbaasv2\" is changed into just \"v2\"\n\nThis is more verbose, but I think more reliable.  See also\nIb50f782824f89ae4eb9787f11d42416704babd90.\n\nChange-Id: I3faad0841834e24acc811c05015625cf7f848b19\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": "09f4ad227976eb95d70045b67d0f724294cf7e22",
      "tree": "6291939cda6347ad88bb363679253810616f4214",
      "parents": [
        "9b845da478ae2fb65ac63de95f6005ecacbb52ce"
      ],
      "author": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Fri Apr 17 13:13:04 2015 +1000"
      },
      "committer": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Fri Apr 17 13:23:25 2015 +1000"
      },
      "message": "Convert test_functions.sh to use unittest helpers\n\nThis currently does not exit with any failure code when tests are\nfailing.  Convert it to use the helper functions from unittest.sh so\nit correctly reports failures.\n\nChange-Id: I2062d9c00ebffcc98ba75a12f480e4dd728ee080\n"
    },
    {
      "commit": "9b845da478ae2fb65ac63de95f6005ecacbb52ce",
      "tree": "d7910cf08ed08a08ff7548ea6467ad7a09b09d43",
      "parents": [
        "9b0ebc44f413edac87e52d23e8852ca7c52cb091"
      ],
      "author": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Fri Apr 17 13:10:33 2015 +1000"
      },
      "committer": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Fri Apr 17 13:23:25 2015 +1000"
      },
      "message": "Fix die_if_not_set tests\n\nThe \"die_if_not_set\" test has the LINENO as a positional argument.\nThe existing tests are not passing this in, so they are failing.\n\nAlong with this, remove the \"-x\" from the invocation and hide the\noutput of the tests that are expected to fail to avoid confusion.\n\nChange-Id: Ibf6b9d7bb72b9f92831e1a90292ff8b0bec7faea\n"
    },
    {
      "commit": "9b0ebc44f413edac87e52d23e8852ca7c52cb091",
      "tree": "54e0ddbbebfa125d4397f6923e8e0acc55a3f8bf",
      "parents": [
        "fcdca05de55b9ecec2b66f0cccb88ee01beebbd0"
      ],
      "author": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Fri Apr 17 13:06:47 2015 +1000"
      },
      "committer": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Fri Apr 17 13:23:25 2015 +1000"
      },
      "message": "Move function.sh to test_functions.sh\n\nrun_tests.sh runs tests starting with test_*\n\nThe existing test_functions.sh is really testing true/false.  Move\nthat to test_truefalse.sh\n\nThen move functions.sh to test_functions.sh.  This will ensure it is\nrun during unit testing from run-tests.sh\n\nChange-Id: I959ac38c946da1fb47458b8c4f09157f74f0e644\n"
    },
    {
      "commit": "fcdca05de55b9ecec2b66f0cccb88ee01beebbd0",
      "tree": "c15c2aa2d950b0729127096a891aa986ae850fb6",
      "parents": [
        "f56348bcb2c736b9e66ebfe20c1f118cfc96b9f6"
      ],
      "author": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Fri Apr 17 13:02:49 2015 +1000"
      },
      "committer": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Fri Apr 17 13:23:25 2015 +1000"
      },
      "message": "Fix return of test_ini_config \u0026 test_meta_config\n\nConvert test_ini_config to use the \"passed / failed\" functions in\nunittest.sh.  test_meta_config wraps everything into a function; it\u0027s\nnot work unrolling this so just make sure it exits with non-zero if a\ntest fails.\n\nChange-Id: I9e9883fdad42358255383eede9121b1d361799c8\n"
    },
    {
      "commit": "f56348bcb2c736b9e66ebfe20c1f118cfc96b9f6",
      "tree": "bfe97606b919e4f1c89dbc4c1d4871cfdb031266",
      "parents": [
        "1cb809d8ef81931ea0b1f15619b7e830281f2556"
      ],
      "author": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Fri Apr 17 12:58:56 2015 +1000"
      },
      "committer": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Fri Apr 17 13:23:25 2015 +1000"
      },
      "message": "Use unittest help in test_ip.sh\n\nUse the unittest helper to track test runs and correctly exit with a\nfailure code if there is a problem\n\nChange-Id: Ie62f354a8cd3b8fd5986e6943a073f7955fb55ba\n"
    },
    {
      "commit": "1cb809d8ef81931ea0b1f15619b7e830281f2556",
      "tree": "d962b2f92bbaa538847e3ebde65f7177004612c5",
      "parents": [
        "6f2d9b1f7d08aaa01acbe29fcfa596080470e093"
      ],
      "author": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Fri Apr 17 12:55:38 2015 +1000"
      },
      "committer": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Fri Apr 17 13:23:20 2015 +1000"
      },
      "message": "Add \"passed\" and \"failed\" functions\n\nAdd two generic \"passed\" and \"failed\" functions to the unittest\nhelper.  Also keep a count of passed and failed tests.  Later changes\nwill use these functions to ensure they exit with a correct return\ncode.\n\nChange-Id: I8574dcb1447b04fcda3d72df0bf8605cf7488d3c\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": "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": "aca8a7fd991484a59fc20aadc3cedb339fc55ca5",
      "tree": "d6097ff70df28eb96d5afa2f36f034001d94536c",
      "parents": [
        "aff8fb9be8b48d6f05f4e00561f714346befc846"
      ],
      "author": {
        "name": "Dan Smith",
        "email": "dansmith@redhat.com",
        "time": "Tue Mar 03 08:50:27 2015 -0800"
      },
      "committer": {
        "name": "Dan Smith",
        "email": "dansmith@redhat.com",
        "time": "Tue Mar 03 08:50:27 2015 -0800"
      },
      "message": "Add support for oslo.versionedobjects\n\nChange-Id: I01dba39259a3b264d4ec2b21db8429d340751979\n"
    },
    {
      "commit": "ee9064b76293ec8838f7a3a52ed1de45056f6201",
      "tree": "73aa122948560f99a1f1549a472152dbdb56c43e",
      "parents": [
        "231a3e55876f299252b0bea4bcb6487ba501d09b"
      ],
      "author": {
        "name": "Joshua Harlow",
        "email": "harlowja@yahoo-inc.com",
        "time": "Thu Feb 19 15:06:23 2015 -0800"
      },
      "committer": {
        "name": "Joshua Harlow",
        "email": "harlowja@yahoo-inc.com",
        "time": "Tue Feb 24 12:55:13 2015 -0800"
      },
      "message": "Add debtcollector to lib/oslo and stackrc\n\nEnsure that the debtcollector library is pulled in\nlike the other oslo libraries so that devstack can\nuse it where appropriate.\n\nAlso fixes \u0027test_libs_from_pypi.sh\u0027 to not have a huge\nsingle line of libraries; and splits it into multiple\nlines so the diffs and code can be easily looked at.\n\nChange-Id: I35ab0ed0e20b6092a41ecb3b6f1aaf0a05f5180e\n"
    },
    {
      "commit": "20b027b79cf628a8be974bc5b9aff17b46c773b3",
      "tree": "c9c125f471bbe9519ae3173b828eb8ab974ac6ea",
      "parents": [
        "9f86ec2f4d2fd4eda07d85e70daefcf2384e4d01"
      ],
      "author": {
        "name": "Steve Martinelli",
        "email": "stevemar@ca.ibm.com",
        "time": "Wed Feb 04 02:38:13 2015 -0500"
      },
      "committer": {
        "name": "Steve Martinelli",
        "email": "stevemar@ca.ibm.com",
        "time": "Wed Feb 18 23:21:20 2015 -0500"
      },
      "message": "Add oslo.policy to lib/oslo and stackrc\n\nAs per the graduation work items, any new libraries should be\nadded to lib/oslo and stackrc\n\npartially implements bp graduate-policy\n\nChange-Id: Ief8f28715ecff5a602d6d840d736ea07b5e7ff39\n"
    },
    {
      "commit": "ad61e7f9dd6cd0e19204e0ce5a15c0d7888b752a",
      "tree": "8a3544c1840f48b01826d002575c8c4031f4969f",
      "parents": [
        "314723962b72612b6238e3143feb7ab4f1a3fb60"
      ],
      "author": {
        "name": "gordon chung",
        "email": "gord@live.ca",
        "time": "Thu Feb 12 15:17:25 2015 -0500"
      },
      "committer": {
        "name": "gordon chung",
        "email": "gord@live.ca",
        "time": "Thu Feb 12 18:07:02 2015 -0500"
      },
      "message": "add ceilometermiddleware lib\n\nmiddleware in ceilometer has been broken into it\u0027s own lib. this\nfirst patch adds the package.\n\nChange-Id: I63795787b909effcc4fcdee7f262207bb59fd8c2\n"
    },
    {
      "commit": "365421b99a6e76cd3c2e3dbb02638005e456abf8",
      "tree": "48cbc1b72603ee7de32522140fded56e21ca9559",
      "parents": [
        "e79678af5ed1621cd8740879b496a0d3716ab8b1"
      ],
      "author": {
        "name": "Sean Dague",
        "email": "sean@dague.net",
        "time": "Fri Feb 06 15:27:43 2015 -0500"
      },
      "committer": {
        "name": "Sean Dague",
        "email": "sean@dague.net",
        "time": "Fri Feb 06 15:27:43 2015 -0500"
      },
      "message": "isolate unit tests from stackrc HOST_IP check\n\nThe HOST_IP check in stackrc is useful for real users, but some cloud\nnodes that infra runs don\u0027t detect it correctly, and it\u0027s not actually\nrequired for unit tests to work right.\n\nChange-Id: Id2aaa713aea91825021e9d8d49d19f3e40a8e6c9\n"
    },
    {
      "commit": "537532931da4103e1a873684476dac6d7fe56489",
      "tree": "e35fe8f6032774a831ccfbf2a4d72a68654bbb38",
      "parents": [
        "5f6f43ed9f67a86cad03c1d0c673429814467d6d"
      ],
      "author": {
        "name": "Sean Dague",
        "email": "sean@dague.net",
        "time": "Thu Dec 04 19:38:15 2014 -0500"
      },
      "committer": {
        "name": "Sean Dague",
        "email": "sean@dague.net",
        "time": "Thu Jan 15 13:06:14 2015 -0500"
      },
      "message": "Make changes such that -o nounset runs\n\nThis makes a bunch of variable cleanups that will let -o nounset\nfunction, for the time being we hide nounset behind another setting\nvariable so that it\u0027s not on by default.\n\nBecause this is bash, and things are only executed on demand, this\nprobably only works in the config it was run in. Expect cleaning up\nall the paths to be something that takes quite a while.\n\nThis also includes a new set of unit tests around the trueorfalse\nfunction, because my change in how it worked, didn\u0027t. Tests are good\nm\u0027kay.\n\nChange-Id: I71a896623ea9e1f042a73dc0678ce85acf0dc87d\n"
    },
    {
      "commit": "1f65fd64ce2f4ed32a706f9bcb28c2ee0cf51e5b",
      "tree": "17da92dbb44093a59992333a3351cb5850983386",
      "parents": [
        "bfdddebc28e088ce9449feac8740901b82cc1c9b"
      ],
      "author": {
        "name": "Doug Wiegley",
        "email": "dougw@a10networks.com",
        "time": "Sat Dec 13 11:56:16 2014 -0700"
      },
      "committer": {
        "name": "Doug Wiegley",
        "email": "dougw@a10networks.com",
        "time": "Sun Dec 14 20:50:00 2014 -0700"
      },
      "message": "Clear multi-line sections before adding lines\n\nWith multiline support for local.conf, the first line is created with\niniset, which will set *all* previous lines to the same thing, and then\nsubsequent lines will be added. Modify the multiline support to first\nclear existing lines from the section.\n\nThis causes fatal errors with neutron.conf, which defines drivers with a bunch\nof service_provider\u003d options, and the current code ends up with the first\ndriver defined in local.conf being present twice.\n\nChange-Id: If132a94e53545d9134859aa508da7b9819ede2f8\n"
    },
    {
      "commit": "c187b88e698a203a222b38cbf3a045b520918042",
      "tree": "075bf71137754c344504efc767848ff70cc619f8",
      "parents": [
        "5853160c6e0a0c7601beea122d5f690ca6bba082"
      ],
      "author": {
        "name": "Julien Danjou",
        "email": "julien@danjou.info",
        "time": "Tue Dec 09 15:41:55 2014 +0100"
      },
      "committer": {
        "name": "Julien Danjou",
        "email": "julien@danjou.info",
        "time": "Tue Dec 09 15:41:55 2014 +0100"
      },
      "message": "Add tooz support from Oslo\n\nChange-Id: I4ccf4bf08e10c0ba651f973aa62562af85ea0f19\n"
    },
    {
      "commit": "aecd189f80533b2680184d648f393bd0f5479882",
      "tree": "b4e4194920fc2e89297390bf93d0d84106015d80",
      "parents": [
        "576aaae6f74c55ab65280c287f3b12a274e6e683"
      ],
      "author": {
        "name": "Sean Dague",
        "email": "sean@dague.net",
        "time": "Wed Nov 19 15:19:51 2014 -0500"
      },
      "committer": {
        "name": "Sean Dague",
        "email": "sean@dague.net",
        "time": "Thu Nov 20 08:32:26 2014 -0500"
      },
      "message": "add unit tests for GIT* definitions\n\nThis adds unit tests for all the GIT* definitions, ensuring that for\nlibraries we think should be defined, they are. It exposed a bug in\nglance_store definitions in the process.\n\nThe GITDIR definition for python-openstackclient is moved to stackrc\nfor testability.\n\nChange-Id: Ibd9ab665f0362a84f4f7e80e80da56a4737f584e\n"
    },
    {
      "commit": "9f20ea13826234ac2c508ea1d50a0822b68d42dc",
      "tree": "741cd1b7e72ea2bd15764471278dc58d7827efdf",
      "parents": [
        "9bfdea87a6ceea667a3c674215099ce8a967a3c2"
      ],
      "author": {
        "name": "Sean Dague",
        "email": "sean@dague.net",
        "time": "Mon Nov 17 15:14:49 2014 -0500"
      },
      "committer": {
        "name": "Sean Dague",
        "email": "sean@dague.net",
        "time": "Tue Nov 18 11:33:47 2014 +0000"
      },
      "message": "make run_tests.sh run devstack unit tests\n\nrun_tests.sh was created as an entry point for bashate. We stopped\nusing it now that we know how to run bashate directly in the gate. \nWe lost running an unrelated bashate test when that happened.\n\nDevstack does have unit tests. We don\u0027t run them. We should. \nEspecially when working on things like the LIBS_FROM_GIT which is\nsufficiently tricky that we really need to add unit tests to ensure\nthat we don\u0027t break it.\n\nChange-Id: Ife067855569e2eae4c085471d326e8086de37332"
    },
    {
      "commit": "f3bf8b6cc0dc94684a3bbecc4cc1e2169506f804",
      "tree": "2bbc4cc3bbeef0641dfd7aeaff81e3c770d547e3",
      "parents": [
        "6fe32059de58964c8f089977539262f288df4601"
      ],
      "author": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Wed Oct 29 21:53:56 2014 +1100"
      },
      "committer": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Wed Oct 29 22:12:17 2014 +1100"
      },
      "message": "Revert \"Single quote iniset argument in merge_config_file\"\n\nThis reverts commit e2c9fee8ed846aba124a2fc1bba245790ed7ba90.\n\nWe have decided that we don\u0027t want to support the json-style argument\nas described by bug#1374118 (see thread at [1]).\n\nThis restores the old behavior of sending the argument in\ndouble-quotes so environment variables get expanded.  As a bonus,\ntests for this are added.\n\n[1] http://lists.openstack.org/pipermail/openstack-dev/2014-October/049341.html\n\nChange-Id: I9fc99f3716cc53366907878adb00ae6cf3898f14\nCloses-Bug:#1386413\n"
    },
    {
      "commit": "751ad1aadf8447c2b6945b6ae4ab73bf71a244ca",
      "tree": "dd29652859f3a425f8a7f2853149c157d743f6f4",
      "parents": [
        "ddfbacef9fd0bd64b38674524f7829b42ed08bbd"
      ],
      "author": {
        "name": "Robert Li",
        "email": "baoli@cisco.com",
        "time": "Wed Oct 15 21:40:53 2014 -0400"
      },
      "committer": {
        "name": "Robert Li",
        "email": "baoli@cisco.com",
        "time": "Wed Oct 15 21:44:31 2014 -0400"
      },
      "message": "Allow multi-line config items in meta-section of local.conf\n\nIt would behave such as the contents from each meta-section in\nlocal.conf is copied to the destination files. One exception is the multiline\noptions not grouped together. In that case, the contents will be grouped\ntogether in its destination config file.\n\nCheck tests/test_config.sh for examples.\n\nThis was originally committed in https://review.openstack.org/128805.\nBut the original change used AWK syntax that is not supported in AWK\n3.1.8, and caused syntax error on servers with that AWK version. This\npatch makes the necessary change so that it\u0027s compatible with AWK\n3.1.8.\n\nChange-Id: Id1e1fe01f05bd0f19ea6e89c4f4c0f8be695dfce\nPartial-Bug: #1374118\n"
    },
    {
      "commit": "e0d6a46b8afaeacc070a84f58ecf8e03ffe8275c",
      "tree": "7ad40b60df1239e2ef553031685ef84daa21fd9b",
      "parents": [
        "a7eb07a3e22eb0362b28cec4bd289201a9adf699"
      ],
      "author": {
        "name": "Kevin Benton",
        "email": "blak111@gmail.com",
        "time": "Tue Oct 14 04:54:42 2014 -0700"
      },
      "committer": {
        "name": "Kevin Benton",
        "email": "blak111@gmail.com",
        "time": "Tue Oct 14 04:54:42 2014 -0700"
      },
      "message": "Add test case for colon in value\n\nAdds a test case for a colon in a value\n\nChange-Id: Ica56b8af5fa59a008cfe96424b1d3e17fd6cf7d6\n"
    },
    {
      "commit": "a7eb07a3e22eb0362b28cec4bd289201a9adf699",
      "tree": "f71ea7688ba146a393e4e17acfecf2592a486cef",
      "parents": [
        "e9c70ab4097cd8d1991a893811dbd862ee001f10"
      ],
      "author": {
        "name": "Kevin Benton",
        "email": "blak111@gmail.com",
        "time": "Tue Oct 14 04:35:59 2014 -0700"
      },
      "committer": {
        "name": "Kevin Benton",
        "email": "blak111@gmail.com",
        "time": "Tue Oct 14 04:38:56 2014 -0700"
      },
      "message": "Revert \"Allow multi-line config items in meta-section of local.conf\"\n\nThis reverts commit 6ff21acf4c4d4ef08bbef419ba582cade4da8da7.\n\nThis commit has broken config options with colons in them.\nThe following is a sample configuration that no longer works:\n\n[[post-config|/etc/neutron/plugins/ml2/ml2_conf.ini]]\n[restproxy]\nserver_ssl\u003dFalse\nservers\u003d10.211.1.9:80\nserver_ssl\u003dFalse\n\nWith the above config and the code present that this reverts,\nthe \u0027servers\u0027 option will come out blank.\n\nChange-Id: I328852d2d941605051a1bf5eaf0f7674191f8c48\n"
    },
    {
      "commit": "6ff21acf4c4d4ef08bbef419ba582cade4da8da7",
      "tree": "b5acb9e70c03cb15be733339b742f3bf9d10ae87",
      "parents": [
        "cc87c2871dc436b2134f60e9fa4663723a094ebd"
      ],
      "author": {
        "name": "Robert Li",
        "email": "baoli@cisco.com",
        "time": "Fri Oct 10 12:43:05 2014 -0400"
      },
      "committer": {
        "name": "Robert Li",
        "email": "baoli@cisco.com",
        "time": "Fri Oct 10 12:53:24 2014 -0400"
      },
      "message": "Allow multi-line config items in meta-section of local.conf\n\nIt would behave such as the contents from each meta-section in\nlocal.conf is copied to the destination files. One exception is the multiline\noptions not grouped together. In that case, the contents will be grouped\ntogether in its destination config file.\n\nCheck tests/test_config.sh for examples.\n\nChange-Id: I8c046b558eeb98ed221f6f1a59182d4179956ced\nPartial-Bug: #1374118\n"
    },
    {
      "commit": "cc87c2871dc436b2134f60e9fa4663723a094ebd",
      "tree": "253024468ea6f45620386034ba09b0fa654043ee",
      "parents": [
        "284492cc1194bb2f156f860d35b5a1a46ac5b179"
      ],
      "author": {
        "name": "Fergal Mc Carthy",
        "email": "fergal.mccarthy@hp.com",
        "time": "Thu Oct 09 16:16:42 2014 -0400"
      },
      "committer": {
        "name": "Robert Li",
        "email": "baoli@cisco.com",
        "time": "Fri Oct 10 08:25:38 2014 -0400"
      },
      "message": "local.conf processing doesn\u0027t handle \u0027\u003d\u0027 in values\n\nWhen attempting to add a libvirt section with a volume_drivers entry\nto $NOVA_CONF, via a post-config block in the local.conf file, I\nencountered problems; the value for this attribute takes the form\n\n    driver\u003dpython.import.path.to.driver\n\nbut the value actually populated in the $NOVA_CONF was truncated at the\nequals.\n\nTaking the iscsi driver setting specified in the official nova.conf\ndocumentation as an example, if I have the following in my local.conf\nfile:\n\n[[post-config|$NOVA_CONF]]\n[libvirt]\nvolume_drivers \u003d iscsi\u003dnova.virt.libvirt.volume.LibvirtISCSIVolumeDriver\n\nI will see that the generated $NOVA_CONF has the following:\n\n[libvirt]\nvolume_driver \u003d iscsi\n\nThis occurs because the existing handling for a post-config setion, as\nimplemented in merge_config_file(), splits the line on the equals sign,\nand then uses the first and seconds elements of the resulting array as\nattribute name and value respectively.\n\nHowever when an equals occurs as part of the value this results in the\nvalue being truncated at the first equals in the value.\n\nThe fix I\u0027ve implemented, based upon review feedback, extracts the\ncontents of $0 before the first equals as the attr name, and extracts\nthe remainder after the equals as the value. Then it strips the leading\nand trailing whitespaces from both as appropriate.\n\nI\u0027ve also added test5 to tests/test_config.sh to test for, and verify,\ncorrect operation when this scenario is encountered.  Similarly I\u0027ve\nadded test6 to ensure that trailing spaces in values are stripped\ncorrectly.\n\nChange-Id: Id0cb1e6e1cece21bc5dbf427c4d756af86fbd927\nCloses-Bug: #1374482\n"
    },
    {
      "commit": "e2c9fee8ed846aba124a2fc1bba245790ed7ba90",
      "tree": "589865dd5959c3e0f9645dd1282c2a6dd4ee93d3",
      "parents": [
        "690e3c25742f47fd2a42d6407ffa30bc99288dc0"
      ],
      "author": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Fri Sep 26 09:42:11 2014 +1000"
      },
      "committer": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Tue Oct 07 12:16:00 2014 +1100"
      },
      "message": "Single quote iniset argument in merge_config_file\n\nIf we don\u0027t single quote the extracted argument to iniset we drop any\nquotes from the source.  Add a simple test-case for this.\n\nPartial-bug: #1374118\n\nChange-Id: If2f47b64b11015e727a011c7e5f6e8ad378b90eb\n"
    },
    {
      "commit": "2f27a0ed3c609bfcd6344a55c121e56d5569afc9",
      "tree": "abe0c02c1d2fd9d57f6b786ff8105896969d0e3c",
      "parents": [
        "58deafcd63ae996e0973c864e249c4a3cb82a74f"
      ],
      "author": {
        "name": "Chris Dent",
        "email": "chdent@redhat.com",
        "time": "Tue Sep 09 13:46:02 2014 +0100"
      },
      "committer": {
        "name": "Chris Dent",
        "email": "chdent@redhat.com",
        "time": "Thu Sep 11 18:59:39 2014 +0100"
      },
      "message": "Replace screen_it() with run_process() throughout\n\nrun_process will use screen if USE_SCREEN\u003dTrue (the default),\notherwise it will simply start the requested service. Therefore\nwherever screen_it used, run_process can be instead.\n\nWhere stop_screen was found it has been replaced with stop_process.\n\nA tail_log function has been added which will tail a logfile in a\nscreen if USE_SCREEN is True.\n\nlib/template has been updated to reflect the use of the new\nfunctions.\n\nWhen using sg the quoting in run_process gets very complicated.\nTo get around this run_process and the functions it calls accepts\nan optional third argument. If set it is a group to be used with sg.\n\nChange-Id: Ia3843818014f7c6c7526ef3aa9676bbddb8a85ca\n"
    },
    {
      "commit": "3159a821c2e0662278746c5311e187bcfd4d8b75",
      "tree": "619916b47ee265729ca2c120870addd5c3b13e84",
      "parents": [
        "4bd4264960917b6bcd197326020a8a894d1d47f4"
      ],
      "author": {
        "name": "Dean Troyer",
        "email": "dtroyer@gmail.com",
        "time": "Wed Aug 27 14:13:58 2014 -0500"
      },
      "committer": {
        "name": "Chris Dent",
        "email": "chdent@redhat.com",
        "time": "Tue Sep 09 13:54:01 2014 +0100"
      },
      "message": "Run processes without screen\n\nThis introduces new run_process() and screen_service() functions and sets the\ngroundwork to change how DevStack starts services.  screen_service() is simply a\ndirect call to the screen portion of the old screen_it() function and is intended\nto run commands that only need to run under screen, such as log file watchers.\n\nrun_process() is a replacement for screen_it() (which remains until all of the\nservices are updated).  The usage is similar but requires updates to every current\nscreen_it() call to remove everything that requires the command to be interpreted\nby a shell.\n\nThe old run_process() and _run_process() functions are still present as\nold_run_process() and _old_run_process() to support the deprecated screen_it()\nfunction.  These will all go away in the future once all services have been\nconfirmed to have been changed over.\n\nThere is a similar new set of stop process functions stop_process() and\nscreen_stop_service().  The old screen_stop() will also remain for the deprecation\nperiod.\n\nAs an initial test/demostration this review also includes the changes for\nlib/cinder to demonstrate what is required for every service.\n\nI included the scripts I used to test this; tests/fake-service.sh and\ntests/run-process.sh are quite rough around the edges and may bite.  They should\nmature into productive members of the testing ecosystem someday.\n\nChange-Id: I03322bf0208353ebd267811735c66f13a516637b\n"
    },
    {
      "commit": "410f5c0016a9d3b1fbd42b95ce1402a1c614e3d3",
      "tree": "51b01c296832b71b71aac47f6ef3969d57163ab9",
      "parents": [
        "4fbb8137af8c3e0e5805db7337651048f11b6bb2"
      ],
      "author": {
        "name": "Ryota MIBU",
        "email": "r-mibu@cq.jp.nec.com",
        "time": "Fri Apr 04 02:00:31 2014 +0900"
      },
      "committer": {
        "name": "Ryota MIBU",
        "email": "r-mibu@cq.jp.nec.com",
        "time": "Tue Jun 17 15:43:07 2014 +0900"
      },
      "message": "Fix unsubstituted filename creation\n\nSince merge_config_file() tries to create an unsubstituted config file,\nstack.sh fails due to permission denied in the file creation when you\nuse \u0027[[post-config|/$Q_PLUGIN_CONF_FILE]]\u0027 and the file does not exist.\n\nThis patch deletes unnecessary \u0027touch\u0027 command, because the file will\nbe made by \u0027iniset\u0027 function in the next command line with evaled\nstring from \u0027configfile\u0027.\n\nThis patch also fixes merge_config_group() to use evaled \u0027configfile\u0027\nwhen it checks the directory of the config file exists.\n\nChange-Id: I608847a34143b5c6a1708c180186dd88a32dd44b\nCloses-bug: #1294213\n"
    },
    {
      "commit": "aee18c749b0e3a1a3a6907a33db76ae83b8d41d9",
      "tree": "01a8ab5abb9867986f3e848918abd9e749b691cd",
      "parents": [
        "0ed4af02da0bd4a0f757dd8c2156913e6c7a724c"
      ],
      "author": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Fri Feb 21 15:35:08 2014 +1100"
      },
      "committer": {
        "name": "Ian Wienand",
        "email": "iwienand@redhat.com",
        "time": "Fri Feb 28 07:59:03 2014 +1100"
      },
      "message": "Enforce function declaration format in bash8\n\nCheck that function calls look like ^function foo {$ in bash8, and fix\nall existing failures of that check.  Add a note to HACKING.rst\n\nChange-Id: Ic19eecb39e0b20273d1bcd551a42fe400d54e938\n"
    },
    {
      "commit": "16dd8b3ed94d5cd217d22a26c18dca52bfca115e",
      "tree": "62994b309b39fc5d4920808f506e763feb3b6f07",
      "parents": [
        "e38cad092ff96dc0178a19fe6f33f13db99eebb0"
      ],
      "author": {
        "name": "Sean Dague",
        "email": "sean.dague@samsung.com",
        "time": "Mon Feb 03 09:10:54 2014 +0900"
      },
      "committer": {
        "name": "Chmouel Boudjnah",
        "email": "chmouel@enovance.com",
        "time": "Wed Feb 05 07:52:54 2014 +0100"
      },
      "message": "introduce if/then \u0026 for/do rules\n\nwe mostly have a consistent style on if/then \u0026 for/do in devstack,\nexcept when we don\u0027t. This attempts to build a set of rules to\nenforce this.\n\nBecause there are times when lines are legitimately long, and there\nis a continuation, this starts off ignoring if and for loops with\ncontinuations. But for short versions, we should enforce this.\n\nChanges to make devstack pass are included. The fact that the\ncleanup patch was so small is pretty solid reason that this is\nactually the style we\u0027ve all agreed to.\n\nPart of a git stash from hong kong that I finally cleaned up.\n\nChange-Id: I6376d7afd59cc5ebba9ed69e5ee784a3d5934a10\n"
    },
    {
      "commit": "cd7d956fbc30eae3c1694b187ea605a5f0d960d3",
      "tree": "18c30423780b6642155ebcefb7212db542a27681",
      "parents": [
        "78411958fd086acc0270c2380dd61f03ebd1f451"
      ],
      "author": {
        "name": "Andrea Frittoli",
        "email": "andrea.frittoli@hp.com",
        "time": "Thu Dec 05 08:09:12 2013 +0000"
      },
      "committer": {
        "name": "Andrea Frittoli",
        "email": "andrea.frittoli@hp.com",
        "time": "Thu Dec 12 12:24:55 2013 +0000"
      },
      "message": "Handle the case of pipe char in value for iniset\n\niniset did not handle the case of \"|\" in the value\nto be injected. Fix this by replacing | with \\000 (NULL).\n\nFixes bug #1258050\n\nChange-Id: I8882c2f3f177ebdfa0c66270dbbc7fd50f30b065\n"
    },
    {
      "commit": "2ac8b3f3c2ebe586802d7789cf152b13fe0d0497",
      "tree": "118837bd091932efab16e3fd59ec1e5f1824c6f9",
      "parents": [
        "df8410c387034bec1b82c8f9d9fd949967f7080b"
      ],
      "author": {
        "name": "Dean Troyer",
        "email": "dtroyer@gmail.com",
        "time": "Wed Dec 04 17:20:28 2013 -0600"
      },
      "committer": {
        "name": "Dean Troyer",
        "email": "dtroyer@gmail.com",
        "time": "Mon Dec 09 10:30:02 2013 -0600"
      },
      "message": "Fix a couple of INI whitespace bugs\n\n* iniset() bails if no section or option (attribute) is supplied\n* merge_config_file() properly skips lines with only whitespace\n\n* Also split the ini-tests into their own script\n\nBug 1257954\n\nChange-Id: Ie31c5bd0df8dfed129fbcf1e37228aaf25e9305d\n"
    },
    {
      "commit": "922c8ae6804304841167fcca662726e1e26b556a",
      "tree": "63f613b8c9262c5c2cb47d7eb57f3aedfcd933ff",
      "parents": [
        "101b4248428b4c3d7757e15ff4e19d3b4f85a51f"
      ],
      "author": {
        "name": "Sean Dague",
        "email": "sdague@linux.vnet.ibm.com",
        "time": "Tue Oct 22 10:06:06 2013 -0400"
      },
      "committer": {
        "name": "Sean Dague",
        "email": "sdague@linux.vnet.ibm.com",
        "time": "Tue Oct 22 13:02:29 2013 -0400"
      },
      "message": "clean up whitespace issues on exercises and friends\n\nChange-Id: I812a73e46ddd4d5fed4d304d9ef92c1de243f497\n"
    },
    {
      "commit": "893e66360caf3bcf0578d4541b3c17d089c33b02",
      "tree": "c91bd45ede20b9739c5dd39bec08d8ee32937af5",
      "parents": [
        "7ab1f22c606ae55883ac47298c810062965a1527"
      ],
      "author": {
        "name": "Dean Troyer",
        "email": "dtroyer@gmail.com",
        "time": "Fri Sep 13 15:05:51 2013 -0500"
      },
      "committer": {
        "name": "Dean Troyer",
        "email": "dtroyer@gmail.com",
        "time": "Fri Oct 11 11:41:58 2013 -0500"
      },
      "message": "Add meta-config via local.conf\n\nThis defines a new local.conf file that is designed to take the place of all\nof the \u0027pass-through\u0027[1] configuration options that have been defined in DevStack.\n\n* new local.conf file can contain multiple config file settings to be\n  merged in to existing project config files\n* localrc can be embedded into local.conf and will auto-extract if\n  localrc does not exist\n* Adds functions get_meta_section(), get_meta_section_files(),\n  merge_config_file() and merge_config_group()\n* Adds EXTRA_OPTS, EXTRA_BAREMETAL_OPTS, Q_DHCP_EXTRA_DEFAULT_OPTS and\n  Q_SRV_EXTRA_DEFAULT_OPTS to the deprecated warning list at the end of stack.sh\n\n[1] Pass-through options are those that do not configure or change DevStack\u0027s behaviour\nbut simply set a value in a project config file.  This includes most of the EXTRA_XXX_OPTS\nconfiguration variables.\n\nChange-Id: I367cadc86116621e9574ac203aafdab483d810d3\n"
    },
    {
      "commit": "04762cd823302ca9992b67419e55ad5fc4dbf8fe",
      "tree": "e63e3640a10c7ea85f23edc7951bd3858823620f",
      "parents": [
        "8db8f38c65d7d0f2c79e78794b974966b4e3f68d"
      ],
      "author": {
        "name": "Dean Troyer",
        "email": "dtroyer@gmail.com",
        "time": "Tue Aug 27 17:06:14 2013 -0500"
      },
      "committer": {
        "name": "Dean Troyer",
        "email": "dtroyer@gmail.com",
        "time": "Tue Aug 27 17:48:49 2013 -0500"
      },
      "message": "Fix is_package_installed() check with dpkg\n\nis_package_installed() incorrectly returned \u00270\u0027 for packages that\nhad \u0027un\u0027 status in the dpkg database.\n\nChange-Id: I81b77486c2ed7717ed81cb2c2572fe6c4b394ffc\n"
    },
    {
      "commit": "d4f69b21f530059be8d3a7001ebbd1ce53aa7926",
      "tree": "bce63e7c8dbe5fad1417562697d9c1fb0c156177",
      "parents": [
        "89b58846b5604cdf976074a68004840cc6865bdb"
      ],
      "author": {
        "name": "Dean Troyer",
        "email": "dtroyer@gmail.com",
        "time": "Wed Jul 24 12:24:43 2013 -0500"
      },
      "committer": {
        "name": "Dean Troyer",
        "email": "dtroyer@gmail.com",
        "time": "Wed Jul 24 12:25:35 2013 -0500"
      },
      "message": "Remove python-netaddr requirement\n\nRemove python-netaddr as a DevStack (stack.sh) requirement,\nthis does not change any individual project requirements.\n\nSpecifically it replaces address_in_net() and adds cidr2netmask()\nand maskip() functions.\n\nChange-Id: Ic604437fde2e057faced40a310ab282f3eb27726\n"
    },
    {
      "commit": "239f3246ad741cb824a283642a54dfe5935b74dd",
      "tree": "9bf82112f59953fecdf2d01986bbec76f67534c0",
      "parents": [
        "0d71d1ec56f6063b88e2f11ed057aefe6d7311d2"
      ],
      "author": {
        "name": "Lianhao Lu",
        "email": "lianhao.lu@intel.com",
        "time": "Fri Mar 01 15:54:02 2013 +0800"
      },
      "committer": {
        "name": "Lianhao Lu",
        "email": "lianhao.lu@intel.com",
        "time": "Wed Mar 06 09:42:14 2013 +0800"
      },
      "message": "Support MultiStrOpt options in configuration file.\n\nFixed bug #1136964.\n\n1. Added 3 ini functions to support MultiStrOpt:\n  Function \"iniset_multiline config-file section option value1 value2\nvalue3 ...\" sets a MultiStrOpt option in an ini file.\n\n  Function \"iniget_multiline config-file section option\" gets the\nMultiStrOpt option values.\n\n  Function \"iniadd config-file section option value1 value2 value3...\"\nappends an option without relacing the old values, which would result\nthe option to be MultiStrOpt.\n\n2. Modified the nova configuation to correctly enable notification for\nceilometer.\n\nChange-Id: I1c27db1a6e58b35bc4428e761f40627988f69e37\n"
    },
    {
      "commit": "588eb4129d34ea58fd40438eb1c6edd1a9f9a2d0",
      "tree": "b040aef13d23173489fecfcc0704a1212eae75e7",
      "parents": [
        "701718a844a5efc9932cd28870057ac779a49e92"
      ],
      "author": {
        "name": "Attila Fazekas",
        "email": "afazekas@redhat.com",
        "time": "Thu Dec 20 10:57:16 2012 +0100"
      },
      "committer": {
        "name": "Attila Fazekas",
        "email": "afazekas@redhat.com",
        "time": "Thu Dec 20 11:00:42 2012 +0100"
      },
      "message": "Fix iniset and his friends\n\n* In python the white spaces are part of the section name\n* Handle options with empty value\n* Support paths with white spaces\n\nChange-Id: I69a584608853cfdb8b7dce1e24d929216ef2fc41\n"
    },
    {
      "commit": "00011c0847a9972b78051954e272f54e9d07ef51",
      "tree": "d700284b823a9464196dd59f96b2f45dba4a20ec",
      "parents": [
        "e5f8d1228a139ae13da5f2fbdfd09b3b43fd52fd"
      ],
      "author": {
        "name": "Vincent Untz",
        "email": "vuntz@suse.com",
        "time": "Thu Dec 06 09:56:32 2012 +0100"
      },
      "committer": {
        "name": "Vincent Untz",
        "email": "vuntz@suse.com",
        "time": "Fri Dec 07 09:06:07 2012 +0100"
      },
      "message": "Add is_fedora and exit_distro_not_supported functions\n\nBetween is_fedora, is_ubuntu and is_suse, we can make the code a bit\nsimpler to read. We also use exit_distro_not_supported to identify\nplaces where we need implementation details for new distros.\n\nAs \"/sbin/service --skip-redirect\" is Fedora-specific, guard this with a\nis_fedora test too.\n\nChange-Id: Ic77c0697ed9be0dbb5df8e73da93463e76025f0c\n"
    },
    {
      "commit": "e83356217b48308b3a4dc975940c79a22e159238",
      "tree": "e3f2becea6bcd4acf1d3b1f7e8ea5043e6d022e3",
      "parents": [
        "140b58ba1938090174a4e2733792e12da4c155e0"
      ],
      "author": {
        "name": "Dean Troyer",
        "email": "dtroyer@gmail.com",
        "time": "Tue Nov 27 17:00:11 2012 -0600"
      },
      "committer": {
        "name": "Dean Troyer",
        "email": "dtroyer@gmail.com",
        "time": "Tue Nov 27 17:00:16 2012 -0600"
      },
      "message": "Fix ini functions to handle spaces in section names\n\nThis allows section names to look like:\n\n[ default ]\n\nOpenSSL is the primary offender for this usage.\n\nChange-Id: If5c711107e73cebab9d4a26ca02a7ce572224377\n"
    },
    {
      "commit": "71ebc6ff65e6ae3982a7e8a7ecf9ff80fd18d6bb",
      "tree": "67c928b32f58d7eaef0d1c75a32790c3dc33100d",
      "parents": [
        "c132625d1dcdc4d8ea824c0efb2b7428ab07341f"
      ],
      "author": {
        "name": "Vincent Untz",
        "email": "vuntz@suse.com",
        "time": "Tue Jun 12 13:45:15 2012 +0200"
      },
      "committer": {
        "name": "Dean Troyer",
        "email": "dtroyer@gmail.com",
        "time": "Sun Sep 09 17:40:19 2012 -0500"
      },
      "message": "Add is_package_installed function to know if a package is installed\n\nThis helps reduce the distro-dependent code in stack.sh, and also fixes\nthe bug where \"rpm -qa | grep sudo\" will work if gnome-sudoku is\ninstalled.\n\nRebased\n\nChange-Id: Ib1330b29b915b41d9724197edd791f0d4e0fe373\n"
    },
    {
      "commit": "f04178fd12731a58c899c309ad43f55d339909c5",
      "tree": "0183e5361383370cd5b0c104ece6b45731379f50",
      "parents": [
        "08bc3048b10b7dbe62b38109274b0cd32a460de9"
      ],
      "author": {
        "name": "Doug Hellmann",
        "email": "doug.hellmann@dreamhost.com",
        "time": "Thu Jul 05 17:10:03 2012 -0400"
      },
      "committer": {
        "name": "Doug Hellmann",
        "email": "doug.hellmann@dreamhost.com",
        "time": "Fri Jul 06 15:52:06 2012 -0400"
      },
      "message": "add functions to manipulate ENABLED_SERVICES\n\nEditing ENABLED_SERVICES directly can get tricky when\nthe user wants to disable something. This patch includes\ntwo new functions for adding or removing services\nsafely, and a third (for completeness) to clear the\nsettings entirely before adding a minimal set of\nservices.\n\nIt also moves the logic for dealing with \"negated\"\nservices into a function so it can be tested and\napplied by the new functions for manipulating\nENABLED_SERVICES.\n\nChange-Id: I88f205f3666b86e6f0b6a94e0ec32a26c4bc6873\nSigned-off-by: Doug Hellmann \u003cdoug.hellmann@dreamhost.com\u003e\n"
    },
    {
      "commit": "bf3923174e40b7931963bcba455d837e0ec864e3",
      "tree": "7a7ceef651ae7a152e598e4921f7b6dc03cba952",
      "parents": [
        "ef352b51c5b8840c70c396196d3a9c155a40fd02"
      ],
      "author": {
        "name": "Vincent Untz",
        "email": "vuntz@suse.com",
        "time": "Wed Jun 13 11:26:31 2012 +0200"
      },
      "committer": {
        "name": "Vincent Untz",
        "email": "vuntz@suse.com",
        "time": "Thu Jun 14 15:52:44 2012 +0200"
      },
      "message": "Remove test.ini when done with it during tests\n\nThe file is created in the tests, and so should also be removed.\n\nChange-Id: I8c087cc5cc71ac80b7c4974e2a69a747a929bedf\n"
    },
    {
      "commit": "09e636e435ed15302e3960affef0a450fa7accf6",
      "tree": "27416092e0e4e26238ee076b6fdef4c283e41374",
      "parents": [
        "e474403d5e950bc275916e752075ed0976c62128"
      ],
      "author": {
        "name": "Dean Troyer",
        "email": "dtroyer@gmail.com",
        "time": "Mon Mar 19 16:31:12 2012 -0500"
      },
      "committer": {
        "name": "Dean Troyer",
        "email": "dtroyer@gmail.com",
        "time": "Thu Apr 05 18:10:13 2012 -0500"
      },
      "message": "B) Use keystone config files from source; move to /etc/keystone\n\n* Put all config files in /etc/keystone\n* keystone.conf rewritten\n* logging.conf.sample rewritten to logging.conf\n* default_catalog.templates copied from devstack/files\n* iniset() now properly adds options that do not previously exist\n\nFixed to re-configure the catalog templated backend; sql is the\ndefault in trunk now but DevStack needs a bit more work before\nit can use it.\n\nChange-Id: Ic7060ef897e47495cd08ca3786e49fdebadf6723\n"
    },
    {
      "commit": "13dc5ccd13a636dcde03324ef7586728caa59db2",
      "tree": "79cd8122870a48a5d1a16c0baed521fe815c1043",
      "parents": [
        "60df29a234a03bb6b94c030c1661dbc8d1421156"
      ],
      "author": {
        "name": "Dean Troyer",
        "email": "dtroyer@gmail.com",
        "time": "Tue Mar 27 14:50:45 2012 -0500"
      },
      "committer": {
        "name": "Dean Troyer",
        "email": "dtroyer@gmail.com",
        "time": "Thu Mar 29 20:35:04 2012 -0500"
      },
      "message": "A) Add/move functions to \u0027functions\u0027 file\n\nAdd ini*() and tests\nAdd GetOSVersion()\nAdd install_package(), yum_install()\nAdd *_service()\n\nRebased\n\nChange-Id: I570dba5ed4d2b988cdd1771cf6bed0aaf8e0fe27\n"
    },
    {
      "commit": "27e326995aaddf9e34cdf54a56f0ed02fc04bfcc",
      "tree": "9abba1609d309b887f2960db9c00c92fb2f7bc0a",
      "parents": [
        "09407d90a841c05d83f82b588af0769161326a4d"
      ],
      "author": {
        "name": "Dean Troyer",
        "email": "dtroyer@gmail.com",
        "time": "Fri Mar 16 16:16:56 2012 -0500"
      },
      "committer": {
        "name": "Dean Troyer",
        "email": "dtroyer@gmail.com",
        "time": "Mon Mar 19 10:06:15 2012 -0500"
      },
      "message": "Simplify die_if_error\n\n* Replace die_if_error() with the simpler die()\n* Attempt to clean up unnecessary trace output\n* Formatting cleanups on all exercise scripts\n\nChange-Id: I72a542b3a59ee9bf12bee6bcc605edd7579205e0\n"
    },
    {
      "commit": "489bd2a62b5949665bc7c4a05a52d27a987e0489",
      "tree": "baed5bdd9d9f3bdba8d1325125f61f7a72ddc56a",
      "parents": [
        "4807df8e5bc0e5e78536ecea37a0ca7621720524"
      ],
      "author": {
        "name": "Dean Troyer",
        "email": "dtroyer@gmail.com",
        "time": "Fri Mar 02 10:44:29 2012 -0600"
      },
      "committer": {
        "name": "Jesse Andrews",
        "email": "anotherjesse@gmail.com",
        "time": "Fri Mar 02 17:55:37 2012 -0800"
      },
      "message": "Improve exercise robustness\n\n* Test returns and exit codes on most command invocations\n* Add start and end banners to make output easier to find in\n  long log files\n* Adds die_if_error(), die_if_not_set() and is_set() to functions\n* Add some function tests\n\nFixes bug 944593\n\nChange-Id: I55e2962c5fec9aad237b674732b1e922ad37a62e\n"
    }
  ]
}
