)]}'
{
  "log": [
    {
      "commit": "7b49598f7e8ac5a5ad0391088b5a0316175d2eb7",
      "tree": "f370c408a8111d601c1765a2771f41641b0710da",
      "parents": [
        "7d8f0366627e2c5f3873782c4a279d5e67bc51c5",
        "6a3912de8589d505a019e9630ce930a4cf5f7354"
      ],
      "author": {
        "name": "Jenkins",
        "email": "jenkins@review.openstack.org",
        "time": "Thu Aug 16 17:20:22 2012 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "review@openstack.org",
        "time": "Thu Aug 16 17:20:22 2012 +0000"
      },
      "message": "Merge \"Add git update tag support\""
    },
    {
      "commit": "a8cdd355d25a808f02505f2848fdd8b8857c410c",
      "tree": "fdfacbf4b2b13589eb046452527c97b51ac64fc2",
      "parents": [
        "ceaa75fdb3b237f48e91f62e0862eb7b014dac91",
        "c9ad14bd3879e54c30cc88b186128dca3f6ab21a"
      ],
      "author": {
        "name": "Jenkins",
        "email": "jenkins@review.openstack.org",
        "time": "Fri Aug 10 21:43:48 2012 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "review@openstack.org",
        "time": "Fri Aug 10 21:43:48 2012 +0000"
      },
      "message": "Merge \"Use default route to find HOST_IP\""
    },
    {
      "commit": "ceaa75fdb3b237f48e91f62e0862eb7b014dac91",
      "tree": "21d28316fbd208e8b6c239a6a1b5312a38e62522",
      "parents": [
        "c42922090ba92cd1be870650dee9fa16c2838e45",
        "7abe4f24a3b77a1507ab0d1c994c3f5052aa0fe9"
      ],
      "author": {
        "name": "Jenkins",
        "email": "jenkins@review.openstack.org",
        "time": "Fri Aug 10 21:43:46 2012 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "review@openstack.org",
        "time": "Fri Aug 10 21:43:46 2012 +0000"
      },
      "message": "Merge \"support no_proxy environment variable\""
    },
    {
      "commit": "7abe4f24a3b77a1507ab0d1c994c3f5052aa0fe9",
      "tree": "826f831002ae67bfaf894584a54698eb7669e66e",
      "parents": [
        "14ab37eb4174b8a1be8c5ff5e531cff5db3791c9"
      ],
      "author": {
        "name": "Osamu Habuka",
        "email": "xiu.yushen@gmail.com",
        "time": "Wed Jul 25 12:39:32 2012 +0900"
      },
      "committer": {
        "name": "Osamu Habuka",
        "email": "xiu.yushen@gmail.com",
        "time": "Tue Jul 31 13:49:34 2012 +0900"
      },
      "message": "support no_proxy environment variable\n\nChange-Id: I5175f9752abe358cca0d2e3e5cf6d94605df451a\n"
    },
    {
      "commit": "c9ad14bd3879e54c30cc88b186128dca3f6ab21a",
      "tree": "61838122b759fef284607596a82d282a99b659ff",
      "parents": [
        "14ab37eb4174b8a1be8c5ff5e531cff5db3791c9"
      ],
      "author": {
        "name": "Vishvananda Ishaya",
        "email": "vishvananda@gmail.com",
        "time": "Tue Jul 03 20:29:01 2012 +0000"
      },
      "committer": {
        "name": "Vishvananda Ishaya",
        "email": "vishvananda@gmail.com",
        "time": "Mon Jul 30 15:28:41 2012 -0700"
      },
      "message": "Use default route to find HOST_IP\n\nWhen running devstack, nova moves the host ip from eth0 onto the\nbridge. This causes devstack to fail on the second run unless you\nexplicitly set HOST_IP in localrc.\n\nThis patch searches for an ip on the interface that is used for\nthe default route. This will be eth0 (or en0) in most cases, but\nit will search br100 instead if nova has moved the ip, since it\nmoves the default route as well.\n\nIt also will filter out ips from the potential list that are part\nof the fixed range and floating range if the netaddr library is\ninstalled. This allows us to find the proper ip even if we have\naccidentally left a floating ip or fixed ip on the bridge.\n\nChange-Id: I13288e53ee2786c5ae0edb3f9ab457be8303f1f6\n"
    },
    {
      "commit": "47f02060ad0500ccb2d4ceeb6015ad7a4c56b4e9",
      "tree": "a6df46450d7b63230b44e4ee7e5350b4991dfb91",
      "parents": [
        "d5b18ecb724ba64a57a7bf97f4982b670d639da5"
      ],
      "author": {
        "name": "Monty Taylor",
        "email": "mordred@inaugust.com",
        "time": "Thu Jul 26 11:09:24 2012 -0500"
      },
      "committer": {
        "name": "Monty Taylor",
        "email": "mordred@inaugust.com",
        "time": "Thu Jul 26 13:18:40 2012 -0500"
      },
      "message": "Optionally install all pip into a global venv.\n\nThis is useful for tracking what pip is causing to be\ninstalled over and beyond os pacakges.\n\nIn support of this, move all package installation to before\nthe section where we install via pip. Leave the deferred configuration\nuntil later though.\n\nChange-Id: I89677fd54635e82b10ab674ddeb9ffb3f1a755f0\n"
    },
    {
      "commit": "798da01906b0ecd827fb4562feebaf149317403c",
      "tree": "74cf5f5bcc16f8f6fcdd7343952b733f88fb0ceb",
      "parents": [
        "3aabdbad1d1b73144ad5aad522706dd473ff5bb4",
        "a9e0a488cf72431aabc972f7aac76abb56aaba02"
      ],
      "author": {
        "name": "Jenkins",
        "email": "jenkins@review.openstack.org",
        "time": "Wed Jul 18 18:45:32 2012 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "review@openstack.org",
        "time": "Wed Jul 18 18:45:32 2012 +0000"
      },
      "message": "Merge \"Update info.sh\""
    },
    {
      "commit": "b5a1f92b490a1292f1588af5087882f83df62f7d",
      "tree": "3d85fb3d812be6123c3b34f5d0b40e652a791fd4",
      "parents": [
        "070d492da95629e56609c91a631efe8534c02ac5",
        "4d5e29d906068a7a2ed8815b27c48c3b3622af76"
      ],
      "author": {
        "name": "Jenkins",
        "email": "jenkins@review.openstack.org",
        "time": "Mon Jul 16 15:59:46 2012 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "review@openstack.org",
        "time": "Mon Jul 16 15:59:46 2012 +0000"
      },
      "message": "Merge \"Allow user to override pip cache location\""
    },
    {
      "commit": "4d5e29d906068a7a2ed8815b27c48c3b3622af76",
      "tree": "64fff7b6007355ce81784dd4105fc04124718fd5",
      "parents": [
        "efb80509f397e4a01589de96a2e2d83c4722b164"
      ],
      "author": {
        "name": "Doug Hellmann",
        "email": "doug.hellmann@dreamhost.com",
        "time": "Fri Jul 13 11:11:50 2012 -0400"
      },
      "committer": {
        "name": "Doug Hellmann",
        "email": "doug.hellmann@dreamhost.com",
        "time": "Fri Jul 13 11:11:50 2012 -0400"
      },
      "message": "Allow user to override pip cache location\n\nBuilding a VM containing devstack is faster if you can save\nthe cache files for pip in a location that is not deleted\nwhen the VM is rebuilt. This change allows the user to\nset the PIP_DOWNLOAD_CACHE in their localrc file to point\nto any directory writable by root, including a directory\nmounted from the host containing the VM.\n\nChange-Id: I27179c1c212140d6734f6725f498be52fd18e9ed\nSigned-off-by: Doug Hellmann \u003cdoug.hellmann@dreamhost.com\u003e\n"
    },
    {
      "commit": "6a3912de8589d505a019e9630ce930a4cf5f7354",
      "tree": "edf8827e31271dbb7cef75dd978d839777147815",
      "parents": [
        "8156062dc4f0e8338590dcb74cfade5af31daa8a"
      ],
      "author": {
        "name": "Evgeniy Afonichev",
        "email": "eafonichev@mirantis.com",
        "time": "Tue Jul 10 14:02:43 2012 +0300"
      },
      "committer": {
        "name": "Evgeniy Afonichev",
        "email": "eafonichev@mirantis.com",
        "time": "Wed Jul 11 13:29:33 2012 +0300"
      },
      "message": "Add git update tag support\n\nChange-Id: I5ce1f05186d05b9cf0ccd74708af926ba054d2f0\n"
    },
    {
      "commit": "a9e0a488cf72431aabc972f7aac76abb56aaba02",
      "tree": "b26774e5d14cee141ecac2278879c3897b98e23b",
      "parents": [
        "08bc3048b10b7dbe62b38109274b0cd32a460de9"
      ],
      "author": {
        "name": "Dean Troyer",
        "email": "dtroyer@gmail.com",
        "time": "Mon Jul 09 14:07:23 2012 -0500"
      },
      "committer": {
        "name": "Dean Troyer",
        "email": "dtroyer@gmail.com",
        "time": "Mon Jul 09 14:59:52 2012 -0500"
      },
      "message": "Update info.sh\n\n* Works properly on Fedora 17 now, possibly other RPM-based distros\n* Add GetDistro() function taken from logic in stack.sh\n* Source functions in tools/info.sh\n* Use GetDistro() and get_packages() in tools/info.sh\n* Report all installed pips\n* Don\u0027t sort localrc output as order is important\n\nChange-Id: I1b3e48e94786378c7313a0a6bea88d5cf9d0f0c0\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": "7e27051ccb125de4e419cc9b6d33528ca66b9774",
      "tree": "26a9c2d9161fd61e54a2c14231df5581592e03f8",
      "parents": [
        "8d618ca855e9aa4f09073040490cb5ca769b7142"
      ],
      "author": {
        "name": "Dean Troyer",
        "email": "dtroyer@gmail.com",
        "time": "Thu Jun 14 15:23:24 2012 -0500"
      },
      "committer": {
        "name": "Dean Troyer",
        "email": "dtroyer@gmail.com",
        "time": "Thu Jun 28 18:00:15 2012 -0500"
      },
      "message": "Move get_packages() to functions.\n\nThis is a prerequisite to fixing the tools/build_uec* scripts to properly\ninstall prereq packages.\n\nChange-Id: I1c60f7b9a9d07076841d9aff524c0833dc987c66\n"
    },
    {
      "commit": "94cb960009cabe0afbf35bd843ae7580fbbd56d1",
      "tree": "14fafe8369321f48cfb21a88fa3b69ada44ac17c",
      "parents": [
        "8d2c8faf36abd0808226542e0a68c7576d4006e7"
      ],
      "author": {
        "name": "James E. Blair",
        "email": "jeblair@hp.com",
        "time": "Fri Jun 22 15:28:29 2012 -0700"
      },
      "committer": {
        "name": "James E. Blair",
        "email": "jeblair@hp.com",
        "time": "Fri Jun 22 16:47:43 2012 -0700"
      },
      "message": "Add ERROR_ON_CLONE.\n\nThis lets the user assert that stack.sh should never need to clone\nany git repositories.  If set to True, and devstack does need to\nclone a git repo, stack.sh will exit with an error.\n\nThis is useful in testing environments to make sure that the correct\ncode is being tested instead of silently falling back on cloning\nfrom the public repos.\n\nChange-Id: Ic0312ab4df492c5cf2e04c08aa7669a81736daa6\n"
    },
    {
      "commit": "67787e6b4c6f31388cbee6d83b67371b31c443d4",
      "tree": "ae56f924e8e1395a4187cf8c2626e9ca90ab62a7",
      "parents": [
        "1c620dfcc66401041131c9b5a675bca243aa4a4f"
      ],
      "author": {
        "name": "Dean Troyer",
        "email": "dtroyer@gmail.com",
        "time": "Wed May 02 11:48:15 2012 -0500"
      },
      "committer": {
        "name": "John Griffith",
        "email": "john.griffith@solidfire.com",
        "time": "Wed Jun 20 14:11:19 2012 -0600"
      },
      "message": "Add cinder support\n\n* using the new functional pattern: cinder_XXX functions are in\n  lib/cinder\n* enable with \u0027c-api,c-sch,c-vol\u0027 in ENABLED_SERVICES, n-vol is still the default\n* exercises/volumes.sh runs for cinder and n-vol\n* move config to /etc/cinder\n* change volume_group to stack-volumes; this also renames the backing file\n  to /opt/stack/data/stack-volumes-backing-file.\n* removes osapi_volume from nova.conf enabled_apis\n* integrates cinder + keystone\n* launches c-sch\n* tweaks for multi node\n* move enabled_apis substitution to init_cinder\n\n18Jun2010\n* restored \u0026 rebased\n* update setup.py to use setup_develop() in lib/cinder\n\nChange-Id: I1e1aa4387031c56e4fa239eb73bea2af8cef0e38\n"
    },
    {
      "commit": "33bd721e8843ca0cdd95481eea22e2c6f369beb1",
      "tree": "e4b17add8d3d90491019c0ecdf4df1f8ac8fc8d6",
      "parents": [
        "0317583d5eca3382872c4123e194325425b8e764",
        "bbafb1b5b24377f9d471fc73de3ef07f97deed96"
      ],
      "author": {
        "name": "Jenkins",
        "email": "jenkins@review.openstack.org",
        "time": "Thu Jun 14 20:08:32 2012 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "review@openstack.org",
        "time": "Thu Jun 14 20:08:32 2012 +0000"
      },
      "message": "Merge \"Fix issues when working through an outbound proxy\""
    },
    {
      "commit": "bbafb1b5b24377f9d471fc73de3ef07f97deed96",
      "tree": "444263c7131af51e0746ab8da250896a6818222e",
      "parents": [
        "fda9df8795d422679387b2ea8b20556fe4116645"
      ],
      "author": {
        "name": "Dean Troyer",
        "email": "dtroyer@gmail.com",
        "time": "Mon Jun 11 16:51:39 2012 -0500"
      },
      "committer": {
        "name": "Dean Troyer",
        "email": "dtroyer@gmail.com",
        "time": "Mon Jun 11 16:53:44 2012 -0500"
      },
      "message": "Fix issues when working through an outbound proxy\n\n* reqork setup-develop() to handle proxy operations and empty dependency lists\n* use keystone to get admin token (eliminate a direct curl invocation)\n* check for cached image files of 0 bytes and re-download if needed\n\nChange-Id: Ief356667ed3ef8d05c6604f12513ae81f68cec04\n"
    },
    {
      "commit": "c7214e838e65b51b81b84e2a3e2ce3c34490fd46",
      "tree": "26e7a1666e24a958203dd9860833206fa9eb47b9",
      "parents": [
        "e959dbc1324047a47cde1ccfb26d05a1d26fdb3f"
      ],
      "author": {
        "name": "Chmouel Boudjnah",
        "email": "chmouel@chmouel.com",
        "time": "Wed Jun 06 13:56:39 2012 +0200"
      },
      "committer": {
        "name": "Chmouel Boudjnah",
        "email": "chmouel@chmouel.com",
        "time": "Wed Jun 06 13:56:39 2012 +0200"
      },
      "message": "Use swift config files shipped with swift.\n\n- Fixes bug 1004548.\n- Add function iniuncomment.\n- Trying to match the indent as the other stack.sh file.\n\nChange-Id: I70339f7b4c0dd3ef8a018daecb2e1b3fb72c741b\n"
    },
    {
      "commit": "5218d451dc6d21c32e5bf5ab81c53bdd1db50234",
      "tree": "819ee74485e720bad41b141e2f30b7f5414610e8",
      "parents": [
        "c1a37a5d463a04675c5718be1b7510ffbd31a020"
      ],
      "author": {
        "name": "Dean Troyer",
        "email": "dtroyer@gmail.com",
        "time": "Sat Feb 04 02:13:23 2012 -0600"
      },
      "committer": {
        "name": "Dean Troyer",
        "email": "dtroyer@gmail.com",
        "time": "Wed Apr 11 14:55:47 2012 -0500"
      },
      "message": "E) Add support for Fedora 16\n\nHighlights:\n* Add files/rpms/*\n* get_packages() only loads deps for services that are enabled\n\n11Apr2012\n* change mod_wsgi cwd to $HORIZON_DIR\n* fix horizon apache log file name and location\n\nNote: This superceeds https://review.openstack.org/4364\n\nChange-Id: I95486584561e4418907a6a4feb0ffbe4f4ea1843\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": "408b009ccda94a95d3b3999f6db2bd62e92cdfb9",
      "tree": "7011b3ccd44a5e9d943514b84c6ae3f9b1e5616a",
      "parents": [
        "17ff9763da677f3db0339a395c558cdb881d5d56"
      ],
      "author": {
        "name": "Chmouel Boudjnah",
        "email": "chmouel@chmouel.com",
        "time": "Thu Mar 15 23:21:55 2012 +0000"
      },
      "committer": {
        "name": "Chmouel Boudjnah",
        "email": "chmouel@chmouel.com",
        "time": "Wed Mar 28 11:34:51 2012 +0100"
      },
      "message": "Allow skipping exercises.\n\n- Catch a special exit signal 55 to notify that we want to skip an\n  excercise.\n- Move is_enabled_service to functions.\n- Fix bug 928390.\n\nChange-Id: Iebf7a6f30a0f305a2a70173fb6b988bc07e34292\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": "d0b21e2d1967f650ddd123c1ecc1659b1baff783",
      "tree": "cc42f9cac1da7cdd8e2740d949f99584658a977f",
      "parents": [
        "51aa401ff1bc5a217c53dcdfe74c3d13a6a991f6"
      ],
      "author": {
        "name": "Dean Troyer",
        "email": "dtroyer@gmail.com",
        "time": "Wed Mar 07 14:52:25 2012 -0600"
      },
      "committer": {
        "name": "Dean Troyer",
        "email": "dtroyer@gmail.com",
        "time": "Wed Mar 07 15:36:50 2012 -0600"
      },
      "message": "Fix dependency list generation corner cases\n\n* Handle empty install lists in apt_get() and pip_install()\n* pip_install now uses get_packages() to get the dependency list\n\nFixes bug 948714\n\nChange-Id: I174a60976df18c670eab2067edcd1871c51d07d6\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"
    },
    {
      "commit": "7f9aa71bcea98a27d144a71841842069106bb3bc",
      "tree": "eb8e97edcb4e24eea5ad92cbf4b114bc90ef1203",
      "parents": [
        "d1ee828f339ac8efe1f6d693f13ee9a871dc8fc5"
      ],
      "author": {
        "name": "Dean Troyer",
        "email": "dtroyer@gmail.com",
        "time": "Tue Jan 31 12:11:56 2012 -0600"
      },
      "committer": {
        "name": "Dean Troyer",
        "email": "dtroyer@gmail.com",
        "time": "Tue Jan 31 12:18:16 2012 -0600"
      },
      "message": "Extract common functions into a separate file\n\nThis is the start of an effort to organize devstack\u0027s code\nto better document the requirements for configuring the individual\ncomponents.\n\nChange-Id: I3476b76b9d1f9ee63687fb9898a98729118cbd84\n"
    }
  ]
}
