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