)]}'
{
  "log": [
    {
      "commit": "21ad8d04dd150e53869e7860fec1113908dd32f2",
      "tree": "4836538becd1fa047d9424d446ef812239edf74d",
      "parents": [
        "0e7d88613a8a455de0ebb5446a0bda1372052825"
      ],
      "author": {
        "name": "Koushik Dutta",
        "email": "koushd@gmail.com",
        "time": "Wed Nov 16 18:28:20 2011 -0800"
      },
      "committer": {
        "name": "Koushik Dutta",
        "email": "koushd@gmail.com",
        "time": "Wed Nov 16 18:28:20 2011 -0800"
      },
      "message": "remove dedupe\n"
    },
    {
      "commit": "0df56f4db49c1fde314e1e0b02b32cfc6ceca1dd",
      "tree": "b14e75085d72d8a1f8aa2727c847b35dc7910526",
      "parents": [
        "88a233d5faa82e51050bdfacfebaf9624b073797",
        "441031dadc4f5e8c1487468229781702bc08fb14"
      ],
      "author": {
        "name": "Koushik Dutta",
        "email": "koushd@gmail.com",
        "time": "Wed Nov 16 16:00:35 2011 -0800"
      },
      "committer": {
        "name": "Koushik Dutta",
        "email": "koushd@gmail.com",
        "time": "Wed Nov 16 16:00:35 2011 -0800"
      },
      "message": "wip\n"
    },
    {
      "commit": "0d651b1b707b4a0e01d814b9e15298cfa5e99340",
      "tree": "b0c24d5d0b4ce05175b29f0b073234003b4b3d16",
      "parents": [
        "7e70b6be7fdb94d91bfb9d3555add1f852ae8d7b",
        "7172eb7b623f4b30f5a709d639fcd3fb51cd6220"
      ],
      "author": {
        "name": "Steve Kondik",
        "email": "shade@chemlab.org",
        "time": "Tue Jul 26 13:06:34 2011 -0400"
      },
      "committer": {
        "name": "Steve Kondik",
        "email": "shade@chemlab.org",
        "time": "Tue Jul 26 13:06:34 2011 -0400"
      },
      "message": "Merge branch \u0027gingerbread\u0027 of git://android.git.kernel.org/platform/bootable/recovery into upstream-2.3.5\n"
    },
    {
      "commit": "6242a8bc9b01786e4b58ed897858f593d1d546cf",
      "tree": "cfb34688dc9cee839fef8aac2a1eccd0a3fc272e",
      "parents": [
        "8918673cf79f20f0fd9cb735c3ed3510842fc625"
      ],
      "author": {
        "name": "Michael Ward",
        "email": "mikeward@google.com",
        "time": "Thu Jul 14 15:06:12 2011 -0700"
      },
      "committer": {
        "name": "Michael Ward",
        "email": "mikeward@google.com",
        "time": "Thu Jul 14 15:12:20 2011 -0700"
      },
      "message": "Support multiple recovery updater extensions.\n\nChange-Id: I787c086223b674050c0a12fc575add9badb471af\n"
    },
    {
      "commit": "cf5195aa79c4cf75056bdd873e6ba6b7bd6ca36a",
      "tree": "1f131cb1b715c8ab184e95c3e42da19484c1d06d",
      "parents": [
        "30712302e030657bc256ce860f6db6f4946726d6"
      ],
      "author": {
        "name": "Koushik Dutta",
        "email": "koushd@gmail.com",
        "time": "Sun May 29 18:45:42 2011 -0700"
      },
      "committer": {
        "name": "Koushik Dutta",
        "email": "koushd@gmail.com",
        "time": "Sun May 29 18:45:42 2011 -0700"
      },
      "message": "fix boot image not flashing properly, prevent the error in the future.\n\nChange-Id: I6163e5a519ef28e9e9ea12d5a46d525d1d9d8fb2\n"
    },
    {
      "commit": "b7b7b37457ab4070a9f9f645501a236d38fd1a07",
      "tree": "2bd70317003201fbd0c3e34fb2a2764a1ae46bd3",
      "parents": [
        "5d6309e77f6055a9aec062dd991d071054726ebb"
      ],
      "author": {
        "name": "Ying Wang",
        "email": "wangying@android.com",
        "time": "Tue May 24 16:08:38 2011 -0700"
      },
      "committer": {
        "name": "Ying Wang",
        "email": "wangying@android.com",
        "time": "Tue May 24 16:11:05 2011 -0700"
      },
      "message": "Mute unharmful build warning at the top of the build log:\n\ndiff: out/target/product/generic/obj/PACKAGING/updater_extensions_intermediates/register.inc.list:\nNo such file or directory\n\nChange-Id: I269b1703b6091b343db45b1c5cdd0962c738788b\n"
    },
    {
      "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": "179b2d989532afe14a88d57c3d1533b8cfe76cb9",
      "tree": "5233d5c0c89bea3458c08e53403dbb7d5340222d",
      "parents": [
        "469243e53689b6f312d20813444dc00d83528758"
      ],
      "author": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Tue Apr 12 15:49:04 2011 -0700"
      },
      "committer": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Tue Apr 12 16:48:49 2011 -0700"
      },
      "message": "make write_raw_image able to take a blob\n\nwrite_raw_image() can now take either a blob or a filename as the\nsource.  The blob format eliminates the need for a temp file.\n\nChange-Id: I0c6effec53d47862040efcec75e64b7c951cdcf7\n"
    },
    {
      "commit": "8f132ed870b4b83727d59f8019b8fabe49fe8ed4",
      "tree": "a5f2aac0d8bbd1bca7288bce9dacc0cc47311c62",
      "parents": [
        "be3e6f13b810046fb1981b21d9e6f0715ae67a22"
      ],
      "author": {
        "name": "Ken Sumrall",
        "email": "ksumrall@android.com",
        "time": "Fri Jan 14 18:55:05 2011 -0800"
      },
      "committer": {
        "name": "Ken Sumrall",
        "email": "ksumrall@android.com",
        "time": "Wed Jan 19 17:12:47 2011 -0800"
      },
      "message": "Reserve the last 16 Kbytes of /data for the crypto footer.\n\nWhen formatting /data, if it\u0027s an ext4 filesystem, reserve the\nlast 16 Kbytes for the crypto footer.\n\nChange-Id: I7b401d851ee87732e5da5860df0287a1c331c5b7\n"
    },
    {
      "commit": "b4c5fd63050bd1cc44adc14fb29007def9974bbe",
      "tree": "17bff1f3654503ab55f01024527cc18dfe69eb1d",
      "parents": [
        "9f52e5f23b0eaf24cb5acd10d3c0c0af4d2c6727"
      ],
      "author": {
        "name": "Koushik Dutta",
        "email": "koushd@gmail.com",
        "time": "Sun Jan 02 22:54:31 2011 -0800"
      },
      "committer": {
        "name": "Koushik Dutta",
        "email": "koushd@gmail.com",
        "time": "Sun Jan 02 22:54:31 2011 -0800"
      },
      "message": "Support for ext2 and ext3 update-binary.\n\nChange-Id: Ide34392bd8ac56878aa3e992b275a39d6b6bc7cf\n"
    },
    {
      "commit": "264f549b7d5aa5846e691dfe8aa9254fa4dbdc0b",
      "tree": "92b959f63b0854d58d693e634e9a7d0d9ae969c5",
      "parents": [
        "70f7e8dbf0c56f55bdeb2fe563c4f49da165d16d"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Wed Dec 29 14:18:26 2010 -0800"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Wed Dec 29 14:18:26 2010 -0800"
      },
      "message": "Update arguments to make_ext4fs\n\nChange-Id: Id96e98da76b3091987b01651f980797b1d6b49d8\n"
    },
    {
      "commit": "7c1bffefebcce8be953bbb3469ae25861eebbb58",
      "tree": "987c0da2b13be1d8463d82705872e3ea84731788",
      "parents": [
        "bf4444f1fbc1aa82f39f06a1e866bfd8107dd624"
      ],
      "author": {
        "name": "Koushik Dutta",
        "email": "koushd@gmail.com",
        "time": "Sat Dec 18 19:44:33 2010 -0800"
      },
      "committer": {
        "name": "Koushik Dutta",
        "email": "koushd@gmail.com",
        "time": "Sat Dec 18 19:44:33 2010 -0800"
      },
      "message": "Fix the build\n\nChange-Id: I2ae07e94eb68dd261b3978671aec88c25cd2518e\n"
    },
    {
      "commit": "8637c7375792bb773b80266a077a057e257325fe",
      "tree": "33d82baf9a433736629724643245bd70c54f8923",
      "parents": [
        "df1e4067821353af7a006ef4d70b7001ad3bd924"
      ],
      "author": {
        "name": "Koushik Dutta",
        "email": "koushd@gmail.com",
        "time": "Sat Dec 18 18:18:44 2010 -0800"
      },
      "committer": {
        "name": "Koushik Dutta",
        "email": "koushd@gmail.com",
        "time": "Sat Dec 18 18:18:44 2010 -0800"
      },
      "message": "revert updater changes except what is necesary to do a write_raw_image on emmc devices.\n\nChange-Id: I674c7b5873b7758bf15f0b55c34ec01513e6f23c\n"
    },
    {
      "commit": "df1e4067821353af7a006ef4d70b7001ad3bd924",
      "tree": "874fd5be1d93fb75610bf1d14925799934127977",
      "parents": [
        "5d6309e77f6055a9aec062dd991d071054726ebb",
        "0b7bbf29d5864fc2939ab9b954c0e1d18a24bffd"
      ],
      "author": {
        "name": "Koushik Dutta",
        "email": "koushd@gmail.com",
        "time": "Sat Dec 18 17:42:31 2010 -0800"
      },
      "committer": {
        "name": "Koushik Dutta",
        "email": "koushd@gmail.com",
        "time": "Sat Dec 18 17:42:31 2010 -0800"
      },
      "message": "Merge from ClockworkMod recovery\n\nChange-Id: Id5b312147173ced559a62d97029acede6c2f8766\n"
    },
    {
      "commit": "4123b582992c9b50d6ff11cc08811970a472a937",
      "tree": "53ba3837331b1a76a0e964c79772c28409b7cb35",
      "parents": [
        "158d25cae4c8cc5009654e112653b5fd21b469e9"
      ],
      "author": {
        "name": "Steve Kondik",
        "email": "shade@chemlab.org",
        "time": "Sun Nov 14 03:18:40 2010 -0500"
      },
      "committer": {
        "name": "Steve Kondik",
        "email": "shade@chemlab.org",
        "time": "Sun Nov 14 22:40:30 2010 -0500"
      },
      "message": "recovery: Autodetection of device flash type\n\nDetect flash type at runtime rather than requiring this to be set in the\ndevice configuration. The detection is based on the existence of /proc/mtd,\n/proc/emmc, or /dev/block/bml1.\n\nChange-Id: I464962a567022c5862c249f06d36c2d1cddeacba\n"
    },
    {
      "commit": "1b86754eaa6b2aca915a281d6e27ae7ebf71d9fa",
      "tree": "9da076534c7a8e77bdb531a71ae0c67dc6b58ad8",
      "parents": [
        "19447c05506e4dfd19f621081770fe03e29d0457"
      ],
      "author": {
        "name": "Koushik Dutta",
        "email": "koushd@gmail.com",
        "time": "Wed Nov 10 23:52:09 2010 -0800"
      },
      "committer": {
        "name": "Koushik Dutta",
        "email": "koushd@gmail.com",
        "time": "Wed Nov 10 23:52:09 2010 -0800"
      },
      "message": "Fix up updater to use the new refactored block device support.\n\nChange-Id: I597f3d83ef14d2640192e0026a0fe1a93023bfc6\n"
    },
    {
      "commit": "19447c05506e4dfd19f621081770fe03e29d0457",
      "tree": "301e637311e817165d030878adb102f32b28ab14",
      "parents": [
        "fef77c02533ee2e62c6827af5ba3cfcc2bd0e749"
      ],
      "author": {
        "name": "Koushik Dutta",
        "email": "koushd@gmail.com",
        "time": "Wed Nov 10 10:40:44 2010 -0800"
      },
      "committer": {
        "name": "Koushik Dutta",
        "email": "koushd@gmail.com",
        "time": "Wed Nov 10 23:31:34 2010 -0800"
      },
      "message": "Refactor recovery\u0027s block device handling to work across variant hardware in a cleaner fashion.\n\nRe add firmware update\n\nChange-Id: I699ad22390ed14e597d17a7bcb32ad1b1af00b4b\n\nsupport mmc misc\n\nChange-Id: Iff02f8d03db6835f501d052140cebeefee521305\n\nfix compile errors\n\nChange-Id: I032edbd157a8a15f561bb83330c715ebaa008d18\n\nfix compile errors\n\nChange-Id: Idff3449be3376f22fceefc2c35637527f8df8f3f\n\nInitial work to clean up the block devices.\n\nChange-Id: I4be20ac124864a281be9cd116e211a2618404a27\n\nall done\n\nChange-Id: I0338f62f6a045556ebe90b0200685be113178319\n\nfix up nandroid\n\nChange-Id: I886f00271183e6d2921c080b0939341f2cf12a4d\n"
    },
    {
      "commit": "815ca5d230e2416370ab9645c0da9e4a0905000d",
      "tree": "0e71beb26946af967498eabe8e26059acf27eb35",
      "parents": [
        "0209a62c7dffcde7db6c2a57a22eb2c00f76bc62"
      ],
      "author": {
        "name": "Shashank Mittal",
        "email": "mittals@codeaurora.org",
        "time": "Tue Jul 27 11:09:19 2010 -0700"
      },
      "committer": {
        "name": "Koushik Dutta",
        "email": "koushd@gmail.com",
        "time": "Tue Oct 12 18:46:30 2010 -0700"
      },
      "message": "[recovery]: Add support for OTA upgrade on mmc devices.\n\nChange-Id: I8f230dfa5be4e9f142765797d949e10434e1fdeb\n"
    },
    {
      "commit": "dc49ce453efee52044287a2d0139996952f71170",
      "tree": "a8d5e6cdcecda5b508a4388dc2713770b20117a4",
      "parents": [
        "6c3e03b3c55e9e8cc11cca9aca71d0a65c8e3d62"
      ],
      "author": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Wed Sep 15 18:05:10 2010 -0700"
      },
      "committer": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Wed Sep 15 18:05:10 2010 -0700"
      },
      "message": "add missing sparseness parameter\n\nChange-Id: Ie6e309b127e80cd6475f1deaa5dbadf9f5cc2746\n"
    },
    {
      "commit": "792b00712bb1411d3b0583bcea95b43b3107fb95",
      "tree": "e15356e5663ffb35985692b5f2c182e5647e91cc",
      "parents": [
        "8a8e6cc33cc0dcfe7e184b59d5ef1f1c29095509"
      ],
      "author": {
        "name": "Brian Swetland",
        "email": "swetland@google.com",
        "time": "Wed Sep 15 18:03:58 2010 -0700"
      },
      "committer": {
        "name": "Brian Swetland",
        "email": "swetland@google.com",
        "time": "Wed Sep 15 18:03:58 2010 -0700"
      },
      "message": "do not merge - update to match ext4utils api\n\nChange-Id: I9d34e491022d7dfed653a861b0728a0a656f1fbe\n"
    },
    {
      "commit": "a66c32ab1dde5ea8fc5d9fd9450ded267a94c429",
      "tree": "54b9729748467b6b9f3f4d67227e4cce085fecd4",
      "parents": [
        "d7693c4c8e0825927fe5d76133fed96b43e60afb",
        "9f89b0e4673f0e28066ba41321dc9e626e04c64f"
      ],
      "author": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Wed Sep 15 17:40:14 2010 -0700"
      },
      "committer": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Wed Sep 15 17:40:14 2010 -0700"
      },
      "message": "resolved conflicts for merge of 9f89b0e4 to master\n\nChange-Id: Id458df96fd56830fdb35397e95a80274761ecff5\n"
    },
    {
      "commit": "6b1ff61f62db82adf8e47c121cd13c29831ad21b",
      "tree": "8c6fc308e9e26895a46aca7ba7e930dd83fe6a44",
      "parents": [
        "4f69afdb631a2480d466505635cde3a1d61e3610",
        "858f0a763d0f736eb721f54257b6164886bfcbfc"
      ],
      "author": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Wed Sep 15 16:32:52 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Sep 15 16:32:52 2010 -0700"
      },
      "message": "am 858f0a76: am 8e5e4dad: close update package before installing; allow remount\n\nMerge commit \u0027858f0a763d0f736eb721f54257b6164886bfcbfc\u0027\n\n* commit \u0027858f0a763d0f736eb721f54257b6164886bfcbfc\u0027:\n  close update package before installing; allow remount\n"
    },
    {
      "commit": "56c5105bd7096704eaed35329b2c8c84cc282867",
      "tree": "41ec0075fa7181d1103bacdbce2fa1c9454eb136",
      "parents": [
        "8674a726ff05a4a6c09c6934778c251635f130a8"
      ],
      "author": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Thu Jul 01 09:18:44 2010 -0700"
      },
      "committer": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Wed Sep 15 11:10:02 2010 -0700"
      },
      "message": "support for ext4/EMMC filesystems in updater binary\n\nMake the mount and format functions take extra parameters describing\nthe filesystem type and add support for mounting and formatting ext4\nfilesystems on EMMC.\n\nChange recovery to consistently use stdout for status messages instead\nof mixing stdout and stderr.\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": "28a41b4df2aced3b04671be8ad95ef453afccc39",
      "tree": "971432b02c8c496fc3cc5fe9dc8ab672fb8bd473",
      "parents": [
        "5a9fe1c964d535db42405a723fec15e5bfbdb95a"
      ],
      "author": {
        "name": "Koushik Dutta",
        "email": "koushd@gmail.com",
        "time": "Mon Sep 13 14:55:17 2010 -0700"
      },
      "committer": {
        "name": "Koushik Dutta",
        "email": "koushd@gmail.com",
        "time": "Mon Sep 13 14:55:17 2010 -0700"
      },
      "message": "initial support for bml backup and restore\n\nChange-Id: I7e6f1a76371c0d1c1f4cfac0413ba6fa7743f17a\n"
    },
    {
      "commit": "b5a36a0e2045b9319193f0eeea62c6e2fd6a58fb",
      "tree": "e816310bb7aac477103523cff82ab68dcfd5d2fd",
      "parents": [
        "e5678e9249795d26e97687e31ba279ef7127555e"
      ],
      "author": {
        "name": "Koushik Dutta",
        "email": "koushd@gmail.com",
        "time": "Mon Sep 13 14:33:15 2010 -0700"
      },
      "committer": {
        "name": "Koushik Dutta",
        "email": "koushd@gmail.com",
        "time": "Mon Sep 13 14:33:15 2010 -0700"
      },
      "message": "add bmlutils\n\nChange-Id: Ia402c4fcd2881cfb7cf7318718933ed64a19ec6b\n"
    },
    {
      "commit": "e5678e9249795d26e97687e31ba279ef7127555e",
      "tree": "520ec5bdea6b8479c641fd6604c11673754d248e",
      "parents": [
        "4233c7fb3c9aca62862ff58313b1fe2bb6a4e949"
      ],
      "author": {
        "name": "Koushik Dutta",
        "email": "koushd@gmail.com",
        "time": "Mon Sep 13 13:25:11 2010 -0700"
      },
      "committer": {
        "name": "Koushik Dutta",
        "email": "koushd@gmail.com",
        "time": "Mon Sep 13 13:25:11 2010 -0700"
      },
      "message": "initial support for flashing samsung kernels via redbend_ua\n\nChange-Id: I9033146899d596c6d0a4ba8a5fad080d799d96ae\n"
    },
    {
      "commit": "8101125ee5068aff91f98c042660cb29576b8612",
      "tree": "dc311ab0a7fb8fe2a3cd289935b8470dd5aa4dbc",
      "parents": [
        "80dcee145ff6aa734b611133ef98045f940cf82c"
      ],
      "author": {
        "name": "Ken Sumrall",
        "email": "ksumrall@android.com",
        "time": "Fri Aug 13 16:08:03 2010 -0700"
      },
      "committer": {
        "name": "Ken Sumrall",
        "email": "ksumrall@android.com",
        "time": "Fri Aug 13 19:22:47 2010 -0700"
      },
      "message": "Changes to work with updated make_ext4fs tool that supports creating sparse images.\n\nAn extra parameter was added to the make_ext4fs() function, we these tools need\nto be updated to match.\n\nChange-Id: Id640a7f2b03153eb333b00337f0f991ff5332349\n"
    },
    {
      "commit": "db314d69f023d2a6c8956073aa9d283e20b280ef",
      "tree": "8d076d8b94464e1173b2b5dbf3f2ee419a1d7fa9",
      "parents": [
        "f635d2e91006028afa8b0fc53f80e5c157c495e6"
      ],
      "author": {
        "name": "Hristo Bojinov",
        "email": "hristo@google.com",
        "time": "Mon Aug 02 10:29:49 2010 -0700"
      },
      "committer": {
        "name": "Hristo Bojinov",
        "email": "hristo@google.com",
        "time": "Mon Aug 02 14:17:33 2010 -0700"
      },
      "message": "Working ASLR implementation\n\nSeparate files for retouch functionality are in minelf/*\n\nASLR for shared libraries is controlled by \"-a\" in ota_from_target_files.\nBinary files are self-contained. Retouch logic can recover from crashes.\n\nSigned-off-by: Hristo Bojinov \u003christo@google.com\u003e\nChange-Id: I76c596abf4febd68c14f9d807ac62e8751e0b1bd\n"
    },
    {
      "commit": "b4277c25c639aa462a1d2f2d78f776443c670fb6",
      "tree": "8166459cce8b5ba4bdc7bab67388cc8b893e0415",
      "parents": [
        "050d0f7fec309a51d1e616a98882faaf3655e04e"
      ],
      "author": {
        "name": "Ying Wang",
        "email": "wangying@google.com",
        "time": "Tue Jul 20 17:31:04 2010 -0700"
      },
      "committer": {
        "name": "Ying Wang",
        "email": "wangying@google.com",
        "time": "Tue Jul 20 17:31:04 2010 -0700"
      },
      "message": "Mute unwanted error message\n\nThis CL removes the following line from the top of build logs:\n\"diff: out/target/product/*/obj/PACKAGING/updater_extensions_intermediates/register.inc.list: No such file or directory\"\n\nChange-Id: I79c15a69a0b1b0da0e45620b45a7a0fea5625250\n"
    },
    {
      "commit": "3d177d055c9cf3571e4b7c098818b454d1dbf9d7",
      "tree": "1f9841903bccde2c88ee8be32aa507cccaa6b02e",
      "parents": [
        "b442b45bdd7df72de4958fad40f8ac675203d5c1"
      ],
      "author": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Thu Jul 01 09:18:44 2010 -0700"
      },
      "committer": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Thu Jul 01 15:42:28 2010 -0700"
      },
      "message": "support for ext4/EMMC filesystems in updater binary\n\nMake the mount and format functions take extra parameters describing\nthe filesystem type and add support for mounting and formatting ext4\nfilesystems on EMMC.\n\nChange recovery to consistently use stdout for status messages instead\nof mixing stdout and stderr.\n"
    },
    {
      "commit": "0eb14b30e0203ba5758452f115786ee3d6dc97a1",
      "tree": "80bd67cd0333c25d0721288509a6197bf02edad5",
      "parents": [
        "cd44ab973ebef327384ca5475f8276c37c2e8538",
        "2654f5aae18c67ad9aff6dbcdf9bc67b62e37d2d"
      ],
      "author": {
        "name": "Koushik Dutta",
        "email": "koushd@gmail.com",
        "time": "Wed Jun 23 17:38:05 2010 -0700"
      },
      "committer": {
        "name": "Koushik Dutta",
        "email": "koushd@gmail.com",
        "time": "Wed Jun 23 17:38:05 2010 -0700"
      },
      "message": "Merge from Froyo.\n"
    },
    {
      "commit": "ada3f3ba33bb4bd87bc9e8a80c935013434ae2c0",
      "tree": "85b734f0a92429b034991bfa2555f04dc0c0d93d",
      "parents": [
        "fd1579b7c015cc22584a4d9608a11214f5ca540c"
      ],
      "author": {
        "name": "Koushik Dutta",
        "email": "koushd@gmail.com",
        "time": "Sat May 01 21:30:55 2010 -0700"
      },
      "committer": {
        "name": "Koushik Dutta",
        "email": "koushd@gmail.com",
        "time": "Sat May 01 21:30:55 2010 -0700"
      },
      "message": "publish update-binary as a utility\n"
    },
    {
      "commit": "c4351c791052ad529a4e83c600b1aa6e6420ea86",
      "tree": "cdc534868eb58ea980bcca2fbc8e04b68fd9936c",
      "parents": [
        "583fc12c3dbe09e3a9b759b9466c505b006e6a39"
      ],
      "author": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Mon Feb 22 14:46:32 2010 -0800"
      },
      "committer": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Mon Feb 22 15:30:33 2010 -0800"
      },
      "message": "refactor applypatch and friends\n\nChange the applypatch function to take meaningful arguments instead of\nargc and argv.  Move all the parsing of arguments into main.c (for the\nstandalone binary) and into install.c (for the updater function).\napplypatch() takes patches as Value objects, so we can pass in blobs\nextracted from the package without ever writing them to temp files.\n\nThe patching code is changed to read the patch from memory instead of\na file.\n\nA bunch of compiler warnings (mostly about signed vs unsigned types)\nare fixed.\n\nSupport for the IMGDIFF1 format is dropped.  (We\u0027ve been generating\nIMGDIFF2 packages for some time now.)\n\nChange-Id: I217563c500012750f27110db821928a06211323f\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": "6aece33b3f3af6a161e326af36bc894427fcf5ad",
      "tree": "b164457ed1f664a0d195f30933b70386687a0887",
      "parents": [
        "aa062531aa3e740b6cf7d3690fd5310e7fdf03f2"
      ],
      "author": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Mon Feb 01 14:40:12 2010 -0800"
      },
      "committer": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Mon Feb 01 14:40:12 2010 -0800"
      },
      "message": "add a one-argument version of package_extract_file\n\nAdd a version of package_extract_file that returns the file data as\nits return value (to be consumed by some other edify function that\nexpects to receive a bunch of binary data as an argument).  Lets us\navoid having two copies of a big file in memory (extracting it into\n/tmp, which is a ramdisk, and then having something load it into\nmemory) when doing things like radio updates.\n\nChange-Id: Ie26ece5fbae457eb0ddcd8a13d74d78a769fbc70\n"
    },
    {
      "commit": "60babf8ba766662cc0932e8271b67daa69cddd5f",
      "tree": "d7d3e4f78d922b4c4475c1a3394b08eef4f9edd0",
      "parents": [
        "196c25c777daedbe2fe5a45171fb42e43ceed9af"
      ],
      "author": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Fri Sep 18 15:11:24 2009 -0700"
      },
      "committer": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Fri Sep 18 15:11:24 2009 -0700"
      },
      "message": "delete files before symlinking; log error messages\n\nThe symlink() function should remove existing files before creating\nsymlinks, so scripts are idempotent.  Log messages when various system\ncalls fail (but don\u0027t make the whole script fail).\n"
    },
    {
      "commit": "a3f89eabb7ddcf44add8ce3b321ceab6d35289cb",
      "tree": "6b82ff1904ef58ce74d4cee0359097446a66dc84",
      "parents": [
        "34c98df78a80881698f63ce0815f3e16823d85e0"
      ],
      "author": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Thu Sep 10 14:10:48 2009 -0700"
      },
      "committer": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Thu Sep 10 14:20:53 2009 -0700"
      },
      "message": "add a run_program() function to edify\n\nHandy for producing debugging OTA packages (eg, running sqlite3 or\nwhatever in recovery).\n"
    },
    {
      "commit": "fc382dfc751725253f956ddaf5b7b90be90b41d7",
      "tree": "fe7b772f6bea69f487e66d588d80d3219a92aaf0",
      "parents": [
        "898ef399d3ee998a871bebd04264b29e23c66738",
        "d8f7c9b85e25fab93fef2221a84b60edc2e7b837"
      ],
      "author": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jun 29 16:39:15 2009 -0700"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Mon Jun 29 16:39:15 2009 -0700"
      },
      "message": "am d8f7c9b8: Merge change 5545 into donut\n\nMerge commit \u0027d8f7c9b85e25fab93fef2221a84b60edc2e7b837\u0027\n\n* commit \u0027d8f7c9b85e25fab93fef2221a84b60edc2e7b837\u0027:\n  remove updater from the user system image\n"
    },
    {
      "commit": "d8f7c9b85e25fab93fef2221a84b60edc2e7b837",
      "tree": "69ac87bc0708d8da8a07c7184f31424ad7d98994",
      "parents": [
        "0bbfe3d901885c1f0ab006e8d4cc1029c44a7376",
        "ad3db099d5ee17b1b46fee3131b9561b73b36703"
      ],
      "author": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jun 26 14:42:37 2009 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jun 26 14:42:37 2009 -0700"
      },
      "message": "Merge change 5545 into donut\n\n* changes:\n  remove updater from the user system image\n"
    },
    {
      "commit": "ad3db099d5ee17b1b46fee3131b9561b73b36703",
      "tree": "2af419320a7b066da0a618513c0572a3b5fa753f",
      "parents": [
        "fbf3c10e45c20f8fe6bd1ac49ffe220035b9c454"
      ],
      "author": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Fri Jun 26 13:38:55 2009 -0700"
      },
      "committer": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Fri Jun 26 13:38:55 2009 -0700"
      },
      "message": "remove updater from the user system image\n\nupdater (which is only needed in OTA packages) is getting included in\n/system/bin, where it just takes up (quite a bit of) space.  Use the\nhack of including it only in eng builds so it\u0027s not there for user\nbuilds.\n"
    },
    {
      "commit": "898ef399d3ee998a871bebd04264b29e23c66738",
      "tree": "32746aaa2d76a814e8ab627b18bab7ca9af7a43c",
      "parents": [
        "4275c3cfc828ac2df143d353a4e27e8dda20b4a9",
        "0bbfe3d901885c1f0ab006e8d4cc1029c44a7376"
      ],
      "author": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Thu Jun 25 14:34:03 2009 -0700"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Thu Jun 25 14:34:03 2009 -0700"
      },
      "message": "am 0bbfe3d9: fix off-by-one error in set_perm()\n\nMerge commit \u00270bbfe3d901885c1f0ab006e8d4cc1029c44a7376\u0027\n\n* commit \u00270bbfe3d901885c1f0ab006e8d4cc1029c44a7376\u0027:\n  fix off-by-one error in set_perm()\n"
    },
    {
      "commit": "0bbfe3d901885c1f0ab006e8d4cc1029c44a7376",
      "tree": "7a6abda5856a0fc4e62d94a1ad89c145a3d41c45",
      "parents": [
        "fbf3c10e45c20f8fe6bd1ac49ffe220035b9c454"
      ],
      "author": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Thu Jun 25 13:37:31 2009 -0700"
      },
      "committer": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Thu Jun 25 13:37:31 2009 -0700"
      },
      "message": "fix off-by-one error in set_perm()\n\nWe were inadvertently skipping over the first filename in the list of\narguments.\n"
    },
    {
      "commit": "4275c3cfc828ac2df143d353a4e27e8dda20b4a9",
      "tree": "f36a4716573ef9d73f445a73c06bfa7b74054606",
      "parents": [
        "2b0fdc657115a4fe02af279fdbdab99c68df0a1a",
        "fbf3c10e45c20f8fe6bd1ac49ffe220035b9c454"
      ],
      "author": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Wed Jun 24 17:39:16 2009 -0700"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Wed Jun 24 17:39:16 2009 -0700"
      },
      "message": "am fbf3c10e: improve updater progress bar\n\nMerge commit \u0027fbf3c10e45c20f8fe6bd1ac49ffe220035b9c454\u0027\n\n* commit \u0027fbf3c10e45c20f8fe6bd1ac49ffe220035b9c454\u0027:\n  improve updater progress bar\n"
    },
    {
      "commit": "fbf3c10e45c20f8fe6bd1ac49ffe220035b9c454",
      "tree": "458bbaf030872557aeea42b057383f246c5f6f75",
      "parents": [
        "47cace98369f60df2351a65801c8065bb7f9dbf0"
      ],
      "author": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Wed Jun 24 09:36:20 2009 -0700"
      },
      "committer": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Wed Jun 24 09:36:20 2009 -0700"
      },
      "message": "improve updater progress bar\n\nLet recovery accept set_progress commands to control progress over the\n\u0027current segment\u0027 of the bar.  Add a set_progress() builtin to the\nupdater binary.\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": "47cace98369f60df2351a65801c8065bb7f9dbf0",
      "tree": "e030f48230e2e6e47204224018fc4c62db3d27ce",
      "parents": [
        "fb2e3af3f915c0e3f2b4b027ef26777267ad46dc"
      ],
      "author": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Thu Jun 18 10:11:50 2009 -0700"
      },
      "committer": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Thu Jun 18 10:11:50 2009 -0700"
      },
      "message": "add file_getprop() to updater\n\nAdd a function to read a property from a \".prop\"-formatted file\n(key\u003dvalue pairs, one per line, ignore # comment lines and blank\nlines).  Move ErrorAbort to the core of edify; it\u0027s not specific to\nupdater now that errors aren\u0027t stored in the app cookie.\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"
    }
  ]
}
