)]}'
{
  "log": [
    {
      "commit": "0b4eac9e0126ea3edd0d81bef972db4cb507d9ba",
      "tree": "f4e1f4212631d9b27575704838b9a7f0e565245c",
      "parents": [
        "666053ed2612a407b288618e39581e4396588cff"
      ],
      "author": {
        "name": "Koushik Dutta",
        "email": "koushd@gmail.com",
        "time": "Mon May 16 13:32:01 2011 -0700"
      },
      "committer": {
        "name": "Koushik Dutta",
        "email": "koushd@gmail.com",
        "time": "Mon May 16 13:32:01 2011 -0700"
      },
      "message": "also set UPDATE_PACKAGE in updater for old recoveries\n\nChange-Id: I90e3feb0c1655279d58751ce800f299d9b4f3d03\n"
    },
    {
      "commit": "8e5e4dada713609c9b2c45ea9cf4572bb89ef761",
      "tree": "b1dd9d0f6408811e71dade4f1ccbc52f18114a5e",
      "parents": [
        "d12560aa2134d3af21a1220cd4873553f9c51743"
      ],
      "author": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Tue Sep 14 18:06:55 2010 -0700"
      },
      "committer": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Tue Sep 14 21:26:38 2010 -0700"
      },
      "message": "close update package before installing; allow remount\n\nClose the update package before invoking the binary, to allow the\ninstaller to unmount /cache if it wants to.  Add a function to allow\nremounting of a mount as read-only.\n\nChange-Id: Idfcc96c3da66083295177f729263560be58034e4\n"
    },
    {
      "commit": "512536a54a1a211a9f582e76cbf12850dc7d5466",
      "tree": "724012f5ea1a3053adecb512baf342490bb94d02",
      "parents": [
        "21854ccdb250e6e81311b4317934e8c953b252a8"
      ],
      "author": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Wed Feb 17 16:11:44 2010 -0800"
      },
      "committer": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Thu Feb 18 14:22:12 2010 -0800"
      },
      "message": "relocate applypatch; add type system and new functions to edify\n\n- Move applypatch to this package (from build).\n\n- Add a rudimentary type system to edify:  instead of just returning a\n  char*, functions now return a Value*, which is a struct that can\n  carry different types of value (currently just STRING and BLOB).\n  Convert all functions to this new scheme.\n\n- Change the one-argument form of package_extract_file to return a\n  Value of the new BLOB type.\n\n- Add read_file() to load a local file and return a blob, and\n  sha1_check() to test a blob (or string) against a set of possible\n  sha1s.  read_file() uses the file-loading code from applypatch so it\n  can read MTD partitions as well.\n\nThis is the start of better integration between applypatch and the\nrest of edify.\n\nb/2361316 - VZW Issue PP628: Continuous reset to Droid logo:\n            framework-res.apk update failed (CR LIBtt59130)\n\nChange-Id: Ibd038074749a4d515de1f115c498c6c589ee91e5\n"
    },
    {
      "commit": "e08991e02a7d678f2574e85289a34b2a9a537c82",
      "tree": "ca53b4adbf66388805a47f93c440412be552761c",
      "parents": [
        "93dbe07ff6c06e8df2c804cbac63601fbb1de041"
      ],
      "author": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Tue Feb 02 13:09:52 2010 -0800"
      },
      "committer": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Wed Feb 03 09:20:07 2010 -0800"
      },
      "message": "bump updater API version to 3; deprecate firmware update command\n\nRemove support for the HTC-specific \"firmware\" update command and the\ncorresponding edify function write_firmware_update().  This\nfunctionality is now done by an edify extension library that lives in\nvendor/htc.\n\nChange-Id: I80858951ff10ed8dfff98aefb796bef009e05efb\n"
    },
    {
      "commit": "2b0fdc657115a4fe02af279fdbdab99c68df0a1a",
      "tree": "18b992fb671d18310abc5f21364ac50cdbade177",
      "parents": [
        "b128f54d0daa749d301b99a6637f42aa35822a76"
      ],
      "author": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Fri Jun 19 11:22:06 2009 -0700"
      },
      "committer": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Mon Jun 22 14:00:44 2009 -0700"
      },
      "message": "add device extension mechanism to updater\n\nAllow devices (in BoardConfig.mk) to define additional static\nlibraries to be linked in to updater, to make device-specific\nfunctions available in edify scripts.  Modify the updater makefile to\narrange for device libraries to register their edify functions.\n"
    },
    {
      "commit": "fb2e3af3f915c0e3f2b4b027ef26777267ad46dc",
      "tree": "45e7354eacc638f4176a095844258d1f313aba7b",
      "parents": [
        "e3da02e7bcfd85c543419e7590a3c86f64d8cc8a"
      ],
      "author": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Wed Jun 17 17:29:40 2009 -0700"
      },
      "committer": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Wed Jun 17 18:12:16 2009 -0700"
      },
      "message": "let the \"firmware\" command take the file straight from the package\n\nTo do a firmware-install-on-reboot, the update binary tells recovery\nwhat file to install before rebooting.  Let this file be specified as\n\"PACKAGE:\u003cfoo\u003e\" to indicate taking the file out of the OTA package,\navoiding an extra copy to /tmp.  Bump the API version number to\nreflect this change.\n"
    },
    {
      "commit": "d9c9d10d9da76f067d3955bea71f7bb39e859fa5",
      "tree": "1e49a3a616c3147f871e79b1b15e2b2a63379cc1",
      "parents": [
        "8edb00c990e563e6f91b278a212f2edf877cf763"
      ],
      "author": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Fri Jun 12 12:24:39 2009 -0700"
      },
      "committer": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Fri Jun 12 14:05:03 2009 -0700"
      },
      "message": "fixes to edify and updater script\n\nA few more changes to edify:\n\n  - fix write_raw_image(); my last change neglected to close the write\n    context, so the written image was corrupt.\n\n  - each expression tracks the span of the source code from which it\n    was compiled, so that assert()\u0027s error message can include the\n    source of the expression that failed.\n\n  - the \u0027cookie\u0027 argument to each Function is replaced with a State\n    object, which contains the cookie, the source script (for use with\n    the above spans), and the current error message (replacing the\n    global variables that were used for this purpose).\n\n  - in the recovery image, a new command \"ui_print\" can be sent back\n    through the command pipe to cause text to appear on the screen.\n    Add a new ui_print() function to print things from scripts.\n    Rename existing \"print\" function to \"stdout\".\n"
    },
    {
      "commit": "8edb00c990e563e6f91b278a212f2edf877cf763",
      "tree": "dcd6c0fb2ce82fcb5b43ed47dc74879cfe71b647",
      "parents": [
        "9dbc027b5f540bcf23c968398f8a70e92abd56cd"
      ],
      "author": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Thu Jun 11 17:21:44 2009 -0700"
      },
      "committer": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Fri Jun 12 09:40:37 2009 -0700"
      },
      "message": "edify extensions for OTA package installation, part 2\n\nAdds more edify functions for OTAs:\n\n  is_mounted getprop apply_patch apply_patch_check apply_patch_space\n  write_raw_image write_firmware_image package_extract_file\n\nThis allows us to install radios, hboots, boot images, and install\nincremental OTA packages.\n\nFixes a couple of dumb bugs in edify itself:\n\n  - we were doubling the size of the function table each time it was\n    *not* full, rather than each time it was full\n\n  - \"no such function\" errors weren\u0027t visible to the parser, so they\n    didn\u0027t prevent execution of the script.\n"
    },
    {
      "commit": "9931f7f3c1288171319e9ff7d053ebaad07db720",
      "tree": "42ae5b40309f6ea3410c5ad496f81368675274f7",
      "parents": [
        "9b9c2114bd7d02200ce43cb9ec513473079dfad9"
      ],
      "author": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Wed Jun 10 14:11:53 2009 -0700"
      },
      "committer": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Thu Jun 11 16:25:29 2009 -0700"
      },
      "message": "edify extensions for OTA package installation, part 1\n\nAdds the following edify functions:\n\n  mount unmount format show_progress delete delete_recursive\n  package_extract symlink set_perm set_perm_recursive\n\nThis set is enough to extract and install the system part of a (full)\nOTA package.\n\nAdds the updater binary that extracts an edify script from the OTA\npackage and then executes it.  Minor changes to the edify core (adds a\nsleep() builtin for debugging, adds \".\" to the set of characters that\ncan appear in an unquoted string).\n"
    }
  ]
}
