)]}'
{
  "log": [
    {
      "commit": "e788f95ef5b5c19f36d6aab9720dd6d8692b1392",
      "tree": "d83fcd33e3094c862f77be5bff67895f40894509",
      "parents": [
        "7949fcebaa16054ebacb2b7b9e1599fc722fec61"
      ],
      "author": {
        "name": "Nikita Putikhin",
        "email": "nputikhin@google.com",
        "time": "Mon Mar 11 19:21:24 2024 +0100"
      },
      "committer": {
        "name": "Nikita Putikhin",
        "email": "nputikhin@google.com",
        "time": "Mon Mar 18 11:31:56 2024 +0000"
      },
      "message": "Add a version of update engine that does not send stats\n\nupdate_engine_nostats has the same functionality as the update_engine\nbut without interaction with statsd libraires and without build\ndependency on it.\n\nTest: Apply an upadte to an aosp cf vm - note that merge stats are\n      reported in logcat.\n      Replace update engine with the nostats service in the product\n      packages and apply an update - note that stats reporting is\n      skipped.\nBug: 328227527\nChange-Id: Iba87119838ecb9bdd8c94f8a913ec0d6e86a26d1\n"
    },
    {
      "commit": "39fe98202ce2e519c0aeece971446a639693ebee",
      "tree": "e6c4471d771f5a307bfab9ca7f7b581bf55d0aca",
      "parents": [
        "4914ffd6b233b684709f3440da69dc754f53512e"
      ],
      "author": {
        "name": "Pawan Wagh",
        "email": "waghpawan@google.com",
        "time": "Wed Jan 03 17:03:16 2024 +0000"
      },
      "committer": {
        "name": "Pawan Wagh",
        "email": "waghpawan@google.com",
        "time": "Thu Jan 04 23:57:28 2024 +0000"
      },
      "message": "Switch to update engine stable v2 libs\n\nUpdating configs to use libupdate_engine_stable-V2.\n\nTest: m update_engine update_engine_stable_client\nBug: 317914533\nChange-Id: I39a1fbf395e5a3dd7be023c1908dcf4f01f873bf\n"
    },
    {
      "commit": "03c7be5f6096f19784af13d275f4f13f88fd4dd0",
      "tree": "729e804cae7a379c775ab8443dd99c47b4091016",
      "parents": [
        "89e5b6c0432bba1519798545b6249fc982eb1d11"
      ],
      "author": {
        "name": "Darren Krahn",
        "email": "dkrahn@google.com",
        "time": "Thu Nov 30 15:40:12 2023 -0800"
      },
      "committer": {
        "name": "Darren Krahn",
        "email": "dkrahn@google.com",
        "time": "Tue Dec 12 17:05:46 2023 +0000"
      },
      "message": "Remove dependency on cacerts_google\n\nThis set of root certs is unmaintained and is being cleaned up. Changed\nto use the default root certs instead.\n\nTest: presubmit\nBug: none\nChange-Id: I2b6b461eae45fcf85856e708ff0f2a599e877b61\n"
    },
    {
      "commit": "0dfaf407268fccf35c414ace6862556c1330a874",
      "tree": "69609ba24662e8aaa50afa2000cb0cc1c2c007c4",
      "parents": [
        "c80d39b63b56fd4638ca5136acb60b720bee38f9"
      ],
      "author": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Tue Oct 31 17:26:58 2023 -0700"
      },
      "committer": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Tue Oct 31 17:30:33 2023 -0700"
      },
      "message": "Link to libprotobuf dynamically\n\nThis reduces update_engine_sideload from 3.15M to 3.12M\n\nTest: th\nBug: 295485073\n\nChange-Id: I1e5821d08c0aec4874b77a517f974280360b4ece\n"
    },
    {
      "commit": "eceec328e24668b59a8eef8f71295f65ff9bf32b",
      "tree": "0f465a09f03d93cb3d5c863f17a5d84594da340d",
      "parents": [
        "596969b84d101cb494ec5faeb6cdd277e51c165c"
      ],
      "author": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Thu Oct 05 21:28:26 2023 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Oct 05 21:28:26 2023 +0000"
      },
      "message": "Revert \"Add UID permission check to update_engine\"\n\nThis reverts commit 596969b84d101cb494ec5faeb6cdd277e51c165c.\n\nReason for revert: Pixel doesn\u0027t go through system_server for update_engine APIs, therefore UID is not system\n\nChange-Id: I7723e4c8b35f5f252eadb36b2a871a0b24950805\n"
    },
    {
      "commit": "596969b84d101cb494ec5faeb6cdd277e51c165c",
      "tree": "815b8f82c9f9cda4dc6eba96ddafb1c9b329f840",
      "parents": [
        "80ba2feaeabfc3468c59bbaef91ab21d48337bec"
      ],
      "author": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Thu Oct 05 10:21:13 2023 -0700"
      },
      "committer": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Thu Oct 05 10:21:13 2023 -0700"
      },
      "message": "Add UID permission check to update_engine\n\nTest: th\nBug: 302761914\nChange-Id: I72a4169b79c70210ae8573abad2e8e181597cfe3\n"
    },
    {
      "commit": "8f2f529e2a444c981c1dfb31412729e10e77c097",
      "tree": "4a085388cb4e61278026e751b1d865c86faf42d4",
      "parents": [
        "6a40fabbdf6a223b754709e9a0020cfb62794150"
      ],
      "author": {
        "name": "David Anderson",
        "email": "dvander@google.com",
        "time": "Thu Aug 03 12:28:38 2023 -0700"
      },
      "committer": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Fri Aug 04 19:57:57 2023 +0000"
      },
      "message": "Don\u0027t link to libsnapshot dynamically.\n\nBug: 294151183\nTest: treehugger\nChange-Id: I3c09af708a4b393725b507e0dcae749b53278e87\n"
    },
    {
      "commit": "6a40fabbdf6a223b754709e9a0020cfb62794150",
      "tree": "2fe33ba869c024f5463908bff7ecfe5f5c1417a0",
      "parents": [
        "1302050e68fc4f7ad17a21b67395d4cc18dcf870"
      ],
      "author": {
        "name": "Cole Faust",
        "email": "colefaust@google.com",
        "time": "Thu Aug 03 10:55:00 2023 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "android-test-infra-autosubmit@system.gserviceaccount.com",
        "time": "Fri Aug 04 17:00:56 2023 +0000"
      },
      "message": "Remove references to the pdk product variable\n\npdk is deprecated and has no effect as of aosp/1319667.\n\nTest: Presubmits\nChange-Id: I5ac91622516fc434c52f3d8d2aa4a37639dda572\n"
    },
    {
      "commit": "62b0c3c6c8748b219f9f629aef6c6838083bd76d",
      "tree": "f7599d016e90535284bb3f688527a9a1b3f93bfa",
      "parents": [
        "f79d4f88e15dbfb476e9596a980d9fc4dd4a8949"
      ],
      "author": {
        "name": "David Anderson",
        "email": "dvander@google.com",
        "time": "Sun Jul 23 09:59:58 2023 -0700"
      },
      "committer": {
        "name": "David Anderson",
        "email": "dvander@google.com",
        "time": "Tue Aug 01 16:35:43 2023 +0000"
      },
      "message": "Link to libsnapshot dynamically.\n\nBug: 291688516\nTest: treehugger\nChange-Id: I9643cc73afac6232fdd893d17f03a568f0a3935b\n"
    },
    {
      "commit": "a35324f07c282a829842f503c20375eeb735faa1",
      "tree": "587b09254bfa77e15ecdc71e97a957a4efc49107",
      "parents": [
        "1d33595fe336dd604f2d8d47d35ea0b5b8379967"
      ],
      "author": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Wed Jun 28 10:29:16 2023 -0700"
      },
      "committer": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Thu Jun 29 14:21:54 2023 -0700"
      },
      "message": "Add test corpus for merge sequence generator\n\nEach cycle_nodes_*.bin is a serialized PartitionUpdate protobuf message.\nThe merge_sequence() field of PartitionUpdate() stores list of merge\noperations before generating merge sequence.\n\nThe merge sequence generator is heuristic based, so there should not be\na fixed expectation in test cases. Removed hard coded sequence\nexpectations in test, and fallback to verifying that a sequence is\ncorrect.\n\nTest: th\nBug: 289236484\nChange-Id: I0d16f5563952535816f0747883f0dd6b210649ab\n"
    },
    {
      "commit": "a4b7ba6b509dcff7d24119d51e636aa7aa888c42",
      "tree": "09d1612046bdf9a977a54b6d5e50f85e8cff595d",
      "parents": [
        "8f19b57ef0eaa672b347a206cb0ad8dcc14c50be"
      ],
      "author": {
        "name": "David Anderson",
        "email": "dvander@google.com",
        "time": "Wed May 10 21:41:37 2023 -0700"
      },
      "committer": {
        "name": "David Anderson",
        "email": "dvander@google.com",
        "time": "Wed Jun 21 22:41:17 2023 +0000"
      },
      "message": "Refactor for ISnapshotWriter removal.\n\nBug: 280529365\nTest: update_engine_unittests\n      apply ota\nChange-Id: I03e899ba31077f828268be3775ebceba3850c528\n"
    },
    {
      "commit": "daa52652c6fa5dd9264a7edccc4962df851f7659",
      "tree": "f75b5350d08bacd4509f451621667dc692815362",
      "parents": [
        "f68e8256400dd9ab4f7e93a7ae28c6d8c7deae61"
      ],
      "author": {
        "name": "Pawan Wagh",
        "email": "waghpawan@google.com",
        "time": "Thu Jun 08 23:57:11 2023 +0000"
      },
      "committer": {
        "name": "Pawan Wagh",
        "email": "waghpawan@google.com",
        "time": "Wed Jun 14 17:33:23 2023 +0000"
      },
      "message": "Adding AIDL Service fuzzer for update engine service\n\nTest: m update_engine_service_fuzzer \u0026\u0026 adb sync data \u0026\u0026 adb shell /data/fuzz/x86_64/update_engine_service_fuzzer/update_engine_service_fuzzer\nBug: 232439428\nChange-Id: I1e38cb752e25029f91d5294615efbfb8230012d7\n"
    },
    {
      "commit": "df9821b89390c9c1d028a15e4abc27d9f71aae74",
      "tree": "923b5ce24cacfbf55a967d95d8b907b385645edb",
      "parents": [
        "8bd5c4ccdecad196b3d4be3b7152f4d825aaf70c"
      ],
      "author": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Mon Jun 12 10:04:34 2023 -0700"
      },
      "committer": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Mon Jun 12 10:52:17 2023 -0700"
      },
      "message": "Support squashfs in map_file_generator\n\nTest: th\nBug: 286870582\nChange-Id: I0bc0ddab51939c2aea3882a6faa63e37c675e641\n"
    },
    {
      "commit": "8bd5c4ccdecad196b3d4be3b7152f4d825aaf70c",
      "tree": "be65aa07b0e58b88d8108de87d2320637a6027cb",
      "parents": [
        "f97848017f91999c66f24735376ec02ea19c3866"
      ],
      "author": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Thu Jun 08 11:21:27 2023 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "android-test-infra-autosubmit@system.gserviceaccount.com",
        "time": "Thu Jun 08 23:21:27 2023 +0000"
      },
      "message": "Support sparse images in map_file_generator\n\nSome targets sparse system images in $OUT dir, when such images are\ndetected, unsparse them using libsparse.\n\nTest: th, map_file_generator on a sparse image\nBug: 281960439\nChange-Id: I3582c6ace36205079050f137aa17afdea682bca3\n"
    },
    {
      "commit": "83b594bb045a8b9b6bdc13c809919db587983978",
      "tree": "7999ec19c7b0ad65d46044de74793695cfbb42a7",
      "parents": [
        "ed9b208e1261342f8c3c6a7baee9a815baf29e0b"
      ],
      "author": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Thu May 25 13:43:06 2023 -0700"
      },
      "committer": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Fri May 26 10:50:24 2023 -0700"
      },
      "message": "Add a binary to generate .map files from filesystem image\n\nThis allows us to re-use existing .img files when building target_files.\nTarget_files includes both .img files and .map file for each partition.\nIf we already have the .img file ready, we can derive file block\ninformation from the filesystem image, instead of re-generating the\nimage with block map option.\n\nTest: th\nBug: 281960439\nChange-Id: I61cfe32195e26ed68bfc1b7dc138fd68a583cbc1\n"
    },
    {
      "commit": "e47767a5a860bbdee11798d6e95f6afbfef04e5b",
      "tree": "13f272c8497670c6ea8f93ffc15c3d7393001f7a",
      "parents": [
        "010c6d14687da8bfb1f49281665dce74b2ca2ea4"
      ],
      "author": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Tue May 16 13:00:58 2023 -0700"
      },
      "committer": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Thu May 18 16:11:38 2023 +0000"
      },
      "message": "Reduce VABC memory usage\n\nBlockExtentWriter caches data in memory up until get gets a complete\nextent. For full OTAs, extents are chopped to 2MB chunks. But for\nincremental OTAs, extents can be as large as single file size. We have\nobserved a single extent to span \u003e100MB disk space on pixel. This incurs\nsignificant memory overhead depending on layout of file system image.\nTo reduce VABC memory usage, bound memory cache by 1MB\n\nTest: th\nBug: 279305177\nChange-Id: I75dbdd60f7e9939fc0fcabe7510fc7ff800087be\n"
    },
    {
      "commit": "77cb1c6b3b9166b30af79bf638fd8bd54730f86f",
      "tree": "3fa3549cc331aec8a106a925bab61252a50620a7",
      "parents": [
        "67144e53a00ca84b8a67495db1e2a7a31d6808cb"
      ],
      "author": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Fri Mar 31 20:34:52 2023 -0700"
      },
      "committer": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Tue Apr 04 10:07:30 2023 -0700"
      },
      "message": "Switch over from libbrillo flags to gflags\n\nlibbrillo is a library from chromeos. It is under-maintained in aosp.\nSwitch over to gflags.\n\nTest: th\nChange-Id: Icc6e74cb1292b39a53b263673874951f490304cf\n"
    },
    {
      "commit": "27757a245db99d1729ec4a38a4a035d642e40043",
      "tree": "50b479d5c956917f615e2099a58fd8d148ce3bbb",
      "parents": [
        "bfa10418a273267fd174bcce8a321341a2e8700e"
      ],
      "author": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Wed Feb 15 16:58:27 2023 -0800"
      },
      "committer": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Fri Mar 17 19:27:35 2023 +0000"
      },
      "message": "Add ZSTD as dependency of update_engine\n\nIn preparation for adding ZSTD support to Virtual AB COW\n\nBug: 274129758\n\nChange-Id: I4e0b838a1a78117890173423833499d02681f9c0\n"
    },
    {
      "commit": "4a637bd708d36361ab7629697a95478b0b859697",
      "tree": "049bc7b3970e7fa6995410c650cb183b1db6363a",
      "parents": [
        "24287c3fb1ed006821a0514478fb42621b6d31ff"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Fri Mar 10 13:49:12 2023 -0500"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Fri Mar 10 13:50:11 2023 -0500"
      },
      "message": "Remove unused dbus includes\n\nBug: 244341573\nTest: cd system/update_engine; mma\nChange-Id: I41fc45138665db48161c219efdf14e4d9daccfcc\n"
    },
    {
      "commit": "87484b05ea543ce93316c0ecfa19820463498cda",
      "tree": "2ba2f7952e627c1ee2e0c5faee80ced45cfe6c2e",
      "parents": [
        "ab15bebf5b9d763f2b0ac69288798539d75004c9"
      ],
      "author": {
        "name": "Devendra Singhi",
        "email": "devendra.singhi@ittiam.com",
        "time": "Tue Nov 22 14:10:14 2022 +0530"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Dec 09 04:19:07 2022 +0000"
      },
      "message": "Added update_metadata-protos-full\n\nAdded update_metadata-protos-full to build a full proto library and updated the Android.bp to resolve all dependencies\n\nTest: m update_metadata-protos-full\nBug: 193202513\n\nChange-Id: I289ea59df944649e5e65819c37fdf73b65de8736\n"
    },
    {
      "commit": "d62c81b749dd4ae7a4c8666cb994c8617db135c1",
      "tree": "590ede394181164a47ce2eb1aacc6c89e475a3d3",
      "parents": [
        "730ae9b799f62023dfff39e43f80b58e83b4cadb"
      ],
      "author": {
        "name": "Vova Sharaienko",
        "email": "sharaienko@google.com",
        "time": "Wed Sep 21 05:32:43 2022 +0000"
      },
      "committer": {
        "name": "Vova Sharaienko",
        "email": "sharaienko@google.com",
        "time": "Wed Sep 21 05:34:52 2022 +0000"
      },
      "message": "UpdateEngine: removed libstatspull dependency\n\nBug: 234904116\nTest: build \u0026 statsd_testdrive\nChange-Id: Ia477c7f988dd79f887f49dd0349759a625b44773\n"
    },
    {
      "commit": "73202a92844126fd0a5ef0f7599e526c8e0928a5",
      "tree": "11b27dbfc449773fc74711b32c87debc8e7fcd79",
      "parents": [
        "e877eac3fc4c9f42c57f01b0c6b93714ee31936c"
      ],
      "author": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Thu Jun 02 10:19:54 2022 -0700"
      },
      "committer": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Wed Aug 24 19:04:35 2022 +0000"
      },
      "message": "Make scripts/update_payload available for other python modules\n\nThe new merge_ota tool will need this module to read/write OTA packages\n\nTest: th\nBug: 227848550\n\nChange-Id: Ibfe2fca65ffbaca939ea3f8ca924c9152e5e7540\n"
    },
    {
      "commit": "e877eac3fc4c9f42c57f01b0c6b93714ee31936c",
      "tree": "3d97a63f238a24a95efc91ebb8f2f00cb919ded7",
      "parents": [
        "9f3f313a410fbe2967cb6b088509481a6766a0f2"
      ],
      "author": {
        "name": "Trevor Radcliffe",
        "email": "tradical@google.com",
        "time": "Wed Jun 08 14:10:21 2022 +0000"
      },
      "committer": {
        "name": "Trevor Radcliffe",
        "email": "tradical@google.com",
        "time": "Tue Aug 16 18:25:17 2022 +0000"
      },
      "message": "Point directly to generated c sysprop_library\n\nBug: 226199990\nTest: m\nChange-Id: Ic05352b2c5962847dcaff9e8f972b9617876f281\n"
    },
    {
      "commit": "c7a1d1f288e94304dc6db61a83a1bafd6b4fa62b",
      "tree": "7210a32801832e012c52b83e2ed612743356b1dc",
      "parents": [
        "b4416c9ade0c509c199d7144380d8a75a0423f3d"
      ],
      "author": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Fri Jul 29 13:36:29 2022 -0700"
      },
      "committer": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Tue Aug 02 12:32:14 2022 -0700"
      },
      "message": "Remove ProxyResolver from update_engine\n\nCurrent ProxyResolver code only supports no-proxy. Therefore it is\nbarely any use. Remove current implementation for a better one.\n\nTest: th\nBug: 235816007\nChange-Id: Ieb46dedf6c6ea86b11c81d7691c2adb578d3d97d\n"
    },
    {
      "commit": "901c7d5a8486b82dfe1b0f11365d6de9e3e737d0",
      "tree": "326f8c20bd6b7886a1ff2fe697641b2e5292d776",
      "parents": [
        "42c2d55eb6df1810ca1030a520ca4d32340ecb7b"
      ],
      "author": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Tue Jun 21 09:35:45 2022 -0700"
      },
      "committer": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Mon Aug 01 10:00:13 2022 -0700"
      },
      "message": "Add a flag to convert only a subset of partitions to COW\n\nTest: th\nChange-Id: I2e9be56083b3c4d7f733e94059d372c14d136c31\n"
    },
    {
      "commit": "702ce4c726d1e9406af3fc9234481c31b618626f",
      "tree": "76fbe5223676b0391c624583a0fcb9a5c361fe9c",
      "parents": [
        "e9c1d3766224445b9586d25fd2e79c2cc7f61ede"
      ],
      "author": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Thu Jul 14 10:43:22 2022 -0700"
      },
      "committer": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Thu Jul 14 11:17:26 2022 -0700"
      },
      "message": "Add transitive selinux dependency\n\nLatest erofs-utils added selinux support\n\nTest: th\nChange-Id: Id43779b1143f63d626ce22901b900ba2b2c45065\n"
    },
    {
      "commit": "e9c1d3766224445b9586d25fd2e79c2cc7f61ede",
      "tree": "56c6566f507cfde4bb6752654cc9db7e9b3164ff",
      "parents": [
        "c675fc0aaa6f9e4d88d040847435f2487ff9a2d3"
      ],
      "author": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Mon Jun 13 15:40:44 2022 -0700"
      },
      "committer": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Mon Jun 27 10:23:11 2022 -0700"
      },
      "message": "Switch update_engine over to generic BootControlClient\n\nTest: th\nChange-Id: I5097a578d5809aec48c4cbdf2dc0359a28042fb2\n"
    },
    {
      "commit": "8251dc06e198cb8b2d9331486184b12e9f0e3493",
      "tree": "728edb5b09f66984eddb696eb25b383d09326f51",
      "parents": [
        "3a3c797f6178f00115ba4b4301119a01924066d2"
      ],
      "author": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Tue Jun 14 09:46:46 2022 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Jun 15 04:15:28 2022 +0000"
      },
      "message": "Add AIDL library to update_engine\n\nAlso move IApexService.h header to apex_handler_android.h, so that\nconsumer of ApexHandlerInterface do not need to see IApexService.h.\n\nIApexService.h includes some binder_ndk headers, which includes\nsyslog.h, which defines LOG_INFO/LOG_WARNING. libchrome also defines\nthese macros, so including both libchrome and AIDL headers will cause\nmacro conflict.\n\nTest: th\nBug: 227536004\nChange-Id: Ia17d91cc878d106e9b2adeddafe35a71105e1663\n"
    },
    {
      "commit": "7e5b405961c1982c40a9baf9d2581d95ba4003e7",
      "tree": "d2be47aabcf114c1dd535a21d71b4259c7465b73",
      "parents": [
        "b936892050e662e1c514bb34af6fb14332cff4ce"
      ],
      "author": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Tue Mar 22 12:17:59 2022 -0700"
      },
      "committer": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Tue Mar 22 14:06:42 2022 -0700"
      },
      "message": "Split slower tests to a separate test target\n\nIf a test binary didn\u0027t change in a CL, ATP will skip running it. Right\nnow, all update engine unittests are packed into a single target called\nupdate_engine_unittests. This is bad, as any changes in code will cause\nthis test binary to change, triggering re-run of all test cases.\n\nThis CL splits some of the HTTP related testcases to a separate test\ntarget. We rarely change HTTP related code, and these test cases take a\nlong time to run. For majority of code changes that don\u0027t touch HTTP,\nATP should be able to skip running HTTP testcases and save us time.\n\nTest runtime:\n\n1. http unitests: 3min\n2. all other update_engine unitests: 3min\n\nTest: th\nChange-Id: Ieb5bf986a5fedf38710d96a4a9c974e5a1c1491d\n"
    },
    {
      "commit": "596a3206dac75841719f76e67f64576cfaca2331",
      "tree": "8f211532bb487cec032ef7bedd9a737f63d025fb",
      "parents": [
        "e4bffe6ddb0d2107d0f5cb1d9a0af3892a331fbc"
      ],
      "author": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Mon Mar 07 14:13:42 2022 -0800"
      },
      "committer": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Mon Mar 14 13:33:07 2022 -0700"
      },
      "message": "Add an faster OTA extractor\n\ndelta_generator is already capable of extracting images from an OTA.\nHowever, it was created for testing purposes. Code in delta_generator\ntries to mimic device environment as much as possible, and therefore\ndoes not have optimal performance. Now go/bts-image-sharing project\nneeds an ota extractor in the cloud, re-write a faster alternative.\n\nTest: ota_extractor ota.zip /tmp/extracted, 364s -\u003e 272s, 25% faster.\n\nBug: 203712723\nBug: 221875271\nChange-Id: Ie30375f2cd1df1890fc58a71f96b3aa430f0fd75\n"
    },
    {
      "commit": "e4bffe6ddb0d2107d0f5cb1d9a0af3892a331fbc",
      "tree": "4da64ba11185fb967eec028b4a58f76a49c7ac9e",
      "parents": [
        "ee60fd4d6f6b9028f832b31e44fe3d2b15f8ae5b"
      ],
      "author": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Mon Mar 07 09:08:38 2022 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Mar 08 00:25:10 2022 +0000"
      },
      "message": "Fix crash when hash tree isn\u0027t enabled but verity is\n\nTest: th\nBug: 223110157\nChange-Id: Idd254fb484ffabb3162e1f3232739cc29e00d51e\n"
    },
    {
      "commit": "85ad1472ea4b48b8901000efc7ced9d4c922b099",
      "tree": "d4934f72ee6c6dd462967445ae80e2867baeaaf5",
      "parents": [
        "35cff4f58eacd4d6e542aa30aac86683d11697e6"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Thu Feb 17 17:32:12 2022 -0800"
      },
      "committer": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Thu Feb 17 17:53:24 2022 -0800"
      },
      "message": "Add timed out test files to tidy_timeout_srcs\n\n* Timed out runs do not show any warning messages.\n* These test files cannot finish clang-tidy runs with\n  the following settings:\n    TIDY_TIMEOUT\u003d90\n    WITH_TIDY\u003d1\n    CLANG_ANALYZER_CHECKS\u003d1\n* When TIDY_TIMEOUT is set, in Android continuous builds,\n  tidy_timeout_srcs files will not be compiled by clang-tidy.\n  When developers build locally without TIDY_TIMEOUT,\n  tidy_timeout_srcs files will be compiled.\n* Some of these test modules may be split into smaller ones,\n  or disable some time consuming checks, and then\n  enable clang-tidy to run within limited time.\n\nBug: 201099167\nTest: make droid tidy-system-update_engine_subset\nChange-Id: Ibb2c17468dbb4b62a9186637a9dd81b12bd57fdb\n"
    },
    {
      "commit": "35cff4f58eacd4d6e542aa30aac86683d11697e6",
      "tree": "4d3337001d7024301f720fe890db34fafd0269ec",
      "parents": [
        "363380aa336023b0ca634948e5b55504e312c9e9"
      ],
      "author": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Wed Dec 08 16:06:00 2021 -0800"
      },
      "committer": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Thu Feb 10 12:33:35 2022 -0800"
      },
      "message": "Add lz4diff CLI util\n\nFor quickly run lz4diff on CLI\n\nTest: th\nBug: 206729162\n\nChange-Id: I18a78f5b5a5382f3dcb698af4e041689ede47b1e\n"
    },
    {
      "commit": "893b3a1c3d74273ee271d295e19b07739ea3aabf",
      "tree": "a902323bec46f0660afe6fd0e29dd40e284ab871",
      "parents": [
        "ddc2580b5650c60aeef00b50d50a9a310a57634b"
      ],
      "author": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Thu Dec 30 12:28:53 2021 -0800"
      },
      "committer": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Thu Dec 30 15:42:27 2021 -0800"
      },
      "message": "Add unittest for lz4diff postfix feature\n\nTest: th\nBug: 206729162\n\nChange-Id: If2e9446fbb04e9bb264ed8101fb761a6c591d23a\n"
    },
    {
      "commit": "4eae81e5957a445540f866a46e48b61b782d385f",
      "tree": "b459ae6c2c2acb681fff6d189ccaab1dd30e4821",
      "parents": [
        "ee481e4ce1ba7fed58708b19bbd98a74af6b2149"
      ],
      "author": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Thu Dec 09 17:07:17 2021 -0800"
      },
      "committer": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Fri Dec 24 06:09:25 2021 -0800"
      },
      "message": "Add lz4diff patch routines\n\nTest: th\nBug: 206729162\n\nChange-Id: I76a404e233e7683812bac65520c6c065e9a1ffe2\n"
    },
    {
      "commit": "ee481e4ce1ba7fed58708b19bbd98a74af6b2149",
      "tree": "c838ab4cb835788cd87d973c92027b22542171cc",
      "parents": [
        "55624034d4c491764deb642e167d831a1b4ddcf3"
      ],
      "author": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Mon Dec 20 12:59:10 2021 -0800"
      },
      "committer": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Thu Dec 23 10:13:44 2021 -0800"
      },
      "message": "Add lz4diff routines\n\nLZ4 diff works like follows:\n\nInput:\n  Compressed file data in EROFS\n  Compression info extracted by EROFS parser\n\nProcedure\n  1. Decompress input file using lz4\n  2. Try BSDIFF/puffdiff on decompressed data, pick smaller patch\n    (inner patch)\n  3. Package the generated patch and compression info into a file\n\nOutput:\nInner patch + compression info\n\nTest: th\nChange-Id: Ie0b0a771bd56fe2657185c6c926aa3916b6e4e17\n"
    },
    {
      "commit": "55624034d4c491764deb642e167d831a1b4ddcf3",
      "tree": "acbda885fbea029494088c57ff05fb85bae4c808",
      "parents": [
        "759e8b91d1ceea725f5d4bbb69e31589fd9262e8"
      ],
      "author": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Mon Dec 20 12:13:24 2021 -0800"
      },
      "committer": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Thu Dec 23 10:13:43 2021 -0800"
      },
      "message": "Add lz4 decompress/compress routines\n\nDuring OTA generation, we decompress blobs on disk using lz4, and\nperform diffing on the decompressed blobs. This is known to help OTA\nsize a lot. This CL adds decompression routines, following CLs will\nstart to actually call these routines.\n\nTest: th\nBug: 206729162\n\nChange-Id: Ifee87220e95740cb73a68ef84935c1cbb6a78666\n"
    },
    {
      "commit": "759e8b91d1ceea725f5d4bbb69e31589fd9262e8",
      "tree": "4c323ef1d0cb0443114aaa2da457f6474759f029",
      "parents": [
        "446989a32251c3ffe7f13d5a5db114373e3fd5da"
      ],
      "author": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Tue Dec 21 16:46:58 2021 -0800"
      },
      "committer": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Thu Dec 23 10:13:26 2021 -0800"
      },
      "message": "Add erofs filesystem unittest\n\nTest: th\nBug: 206729162\n\nChange-Id: I228cba4f1b5d40f164ee2e9df3575a836950bb38\n"
    },
    {
      "commit": "446989a32251c3ffe7f13d5a5db114373e3fd5da",
      "tree": "cb66a409ea8b0e1bd1652ecc64982afe529bf211",
      "parents": [
        "dcda7c0362a57858ac76da84a8dbb8ff5bbbab9c"
      ],
      "author": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Wed Dec 08 13:49:07 2021 -0800"
      },
      "committer": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Wed Dec 22 13:05:41 2021 -0800"
      },
      "message": "Add parser for EROFS file data\n\nThis CL parses file names and compression info from input EROFS image,\nso that OTA generation can use it later.\n\nTest: th\nTest: Generate an incremental OTA with erofs images, make sure we see\nfile lists.\nBug: 206729162\n\nChange-Id: I70536d7762acc19a6977460738065d5557338532\n"
    },
    {
      "commit": "98001b2ad560d66a2354702684c0be36e5cbd500",
      "tree": "bd30f459499463cb9421641d33408632643defab",
      "parents": [
        "3aa55d5e508ce1dc2e378e8e67e5cbc606655aad"
      ],
      "author": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Wed Dec 08 14:10:11 2021 -0800"
      },
      "committer": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Tue Dec 14 10:20:00 2021 -0800"
      },
      "message": "Add protobuf definition for lz4diff\n\nWe develope a new diffing format, called lz4diff. Since this diff format\nneed to store per-block compression information(which algorithm is used,\ncompressed size, etc), a new protobuf message is added to ease\ndevelopment.\n\nTest: th\nBug: 206729162\n\nChange-Id: Ib05e865a6689f561cd00b28843c98d52d0714869\n"
    },
    {
      "commit": "3fe496491e6c3d129470422199d51d7498533a7e",
      "tree": "6de338346bda6e054b9c5659b6e4601f9c42c097",
      "parents": [
        "cc04de757c9087dab79b7c1fa48ad19f01fcdb82"
      ],
      "author": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Mon Oct 04 15:35:02 2021 -0700"
      },
      "committer": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Tue Oct 19 14:15:14 2021 -0700"
      },
      "message": "Add UpdateAttempterIntegrationTesting\n\nTest: th\nBug: 201099341\n\nChange-Id: I46d5ad86e238d28b7c20ef6768ffadf0e6ab9177\n"
    },
    {
      "commit": "4e93cf1b4df274b7e480098e1257cc193b19f9cc",
      "tree": "bfe226acc312e375df6e4c2ce41d0868dd7555f8",
      "parents": [
        "06e654a353a9e2a70bfb503d311a8abd97810b1a"
      ],
      "author": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Mon Sep 13 16:03:24 2021 -0700"
      },
      "committer": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Mon Sep 13 17:14:40 2021 -0700"
      },
      "message": "Sort filenames in Android.bp\n\nChange-Id: I509bc18df69d527e05c20252343a8f82f34f58c6\n"
    },
    {
      "commit": "c5803b7d2e60d74336ab29636f2e13744b8e297d",
      "tree": "a2e214a2974b68512b15ebfa6a6f41bd22adf2d5",
      "parents": [
        "f4502bb26e5e423f8b86482833025f713b9c44b2"
      ],
      "author": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Thu Sep 02 09:06:16 2021 -0700"
      },
      "committer": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Mon Sep 13 21:36:33 2021 +0000"
      },
      "message": "Add update_engine_host_unittests\n\nSome of update_engine\u0027s codebase (payload generator stuff) run on host.\nSo it make sense to test them on the host. Adding a new unittest target\nupdate_engine_host_unittests, which includes a subset of unittest. After\nthis CL, the old update_engine_unittests target remains unchanged, it\nstill contains all 600 unittests. The new host target will contain a\nsubset of these.\n\nTest: th\nChange-Id: I49c8310cee9a2b2ea197b8ab60ea3b00bf5680cf\n"
    },
    {
      "commit": "76f10b8e0b2968f3ae7b78429908d78c2d025cf1",
      "tree": "eb403473b0ad4ce3e5f96af9605b3e0d1a763665",
      "parents": [
        "8e0090d812c1754b41e5ca8943e2d0ca82ac73e2"
      ],
      "author": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Fri Jun 25 18:45:46 2021 -0400"
      },
      "committer": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Thu Sep 02 17:06:17 2021 -0700"
      },
      "message": "Write XOR ops for bsdiff and puffdiff\n\nTest: th\nBug: 177104308\n\nChange-Id: I10f79f1a2de910e5ba57a72a5dba5901c9348d77\n"
    },
    {
      "commit": "a69cfe237e3b9880e2a553a64b93a8a65e3bcb59",
      "tree": "6b6cc03a74fa665087c2718b28e664fcf40fce1f",
      "parents": [
        "af9b9b2674d11a5c95721c2b365d6d3335a97922"
      ],
      "author": {
        "name": "Tianjie",
        "email": "xunchang@google.com",
        "time": "Sun Aug 22 23:28:44 2021 -0700"
      },
      "committer": {
        "name": "Tianjie Xu",
        "email": "xunchang@google.com",
        "time": "Wed Aug 25 03:47:32 2021 +0000"
      },
      "message": "Add libzucchini as a dependency for puffin\n\nNow puffin libraries need libzucchini to compile.\n\nBug: 197361113\nTest: TH\nChange-Id: I18345bff2092dc7aef4ae5f1b4a5fec8edf83519\n"
    },
    {
      "commit": "4bb4920a5772d006f9316bdbfd6e7dd771dfd98e",
      "tree": "0bb705f99774b138abe94f158674fc0d0fa2abbb",
      "parents": [
        "1c0fa69215d2bc486e383ce9b222b444816354bf"
      ],
      "author": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Thu Jul 08 21:39:05 2021 -0400"
      },
      "committer": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Mon Aug 16 10:00:54 2021 -0700"
      },
      "message": "Add XorExtentWriter\n\nThis class is built on top of BlockExtentWriter(block aligned writer)\nand ExtentMap. It will look at the extent map, convert blocks in the\nextent map to XOR type, and convert everythign else to COW_REPLACE.\n\nTest: th\nBug: 177104308\nChange-Id: I6f9df83ed09f1c5a6aae9f266412132b002acd29\n"
    },
    {
      "commit": "d567c8bc9f3e2273fa68ee4c861e615984d551ea",
      "tree": "a7c47aa9acbd71219adb90460fa9d3b038d17708",
      "parents": [
        "a837f00127730d3d2bf0752a8b5c135784cf4ba1"
      ],
      "author": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Thu Jul 08 14:10:23 2021 -0400"
      },
      "committer": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Wed Aug 11 12:07:39 2021 -0400"
      },
      "message": "Add Extent map\n\nWhen installing OTA, we stream operations as data becomes available. For\neach operation, update_engine needs to look at the merge sequence and\nfigure out which blocks should be converted to COW_XOR. To do that, we\nneed a data structure for querying a disjoint set of extents.\n\nTest: th\nBug: 177104308\n\nChange-Id: I14ec9d72a32e859b65516b894ca94d0153aa7e17\n"
    },
    {
      "commit": "b170676ab80f30bf6bff76d5427efd8b4fd66971",
      "tree": "36b62db20839d2d39c82272c0e39b4bf707be403",
      "parents": [
        "43cb9c0ddedd0698970c1655124c72ed7679187c"
      ],
      "author": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Fri Jun 25 15:05:22 2021 -0400"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Jul 30 22:17:33 2021 +0000"
      },
      "message": "Add block extent writer\n\nAdd a utility class for writing block aligned data. Writes will always\nhappen at block boundary, and write size will always be a multiple of\nblock size. This is handy for upcomming XOR writers.\n\nTest: th\nBug: 177104308\n\nChange-Id: I11b4d9b79e20ba48f30b55243188a47c60c65552\n"
    },
    {
      "commit": "cb419e6ffd41992a12be064c37d2df9f4f04cf30",
      "tree": "8b92a964166f4efe3fab9b3b22457d872ca586bf",
      "parents": [
        "a43d6e872cb3364985906d3c93111cd07da0fc63"
      ],
      "author": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Wed Jun 16 13:56:47 2021 -0400"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Jul 13 22:33:38 2021 +0000"
      },
      "message": "Add GetActiveBootSlot API to boot control interface\n\nThis can be used to verify OtaStatus. If on disk pref indicates that we\nswitched slot and system did not reboot, check with boot control.\n\nTest: th\nChange-Id: I416d81a3d68d8c6a204a2c28df6c567ff18d0e49\n"
    },
    {
      "commit": "ab3ce603a1ff3051c7913905f93bce0fdf1b584a",
      "tree": "23d49348aa4f94dcb697f52a9f3ffe3c0cf42949",
      "parents": [
        "3cce62a6b4f11c6ef57347c0a8a8bd56bd4ede35"
      ],
      "author": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Wed Feb 24 14:46:40 2021 -0500"
      },
      "committer": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Thu Jun 24 14:18:45 2021 -0400"
      },
      "message": "Refactor ECC related code to a separate class\n\nBoth PartitionWriter and VABC partition writer need to deal with\nhashes/ecc. Refactor out common code to a free function.\n\nTest: th\nChange-Id: I40033a1671a2c3a63e7d2d8266c4a0087d067100\n"
    },
    {
      "commit": "3cce62a6b4f11c6ef57347c0a8a8bd56bd4ede35",
      "tree": "01bd5b71199a83cfe1640e9a7ec27aa3192e7a32",
      "parents": [
        "1877a478f86c23f0d3741acbb25add61a75e2ed0"
      ],
      "author": {
        "name": "Inseob Kim",
        "email": "inseob@google.com",
        "time": "Mon Jun 14 11:55:35 2021 +0900"
      },
      "committer": {
        "name": "Inseob Kim",
        "email": "inseob@google.com",
        "time": "Fri Jun 18 17:12:18 2021 +0000"
      },
      "message": "Add ramdisk_available to init_first_stage\u0027s deps\n\nBug: 187196593\nTest: boot\nChange-Id: I0a9ba90f0ae6f0b551e73d0a4361b8cf5d2c1e85\n"
    },
    {
      "commit": "40d9666b3adbbbd40b23cb4ed35a81f8b1b4292d",
      "tree": "9623ef9dca3bdb70036b178a58f78c71cd983aeb",
      "parents": [
        "f45758675fa85bdbfbd91c87d49565c0353c9db5"
      ],
      "author": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Wed Feb 24 14:21:29 2021 -0500"
      },
      "committer": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Thu Jun 17 14:13:16 2021 -0400"
      },
      "message": "Move Install op executor to a separate file\n\nThis CL onnly moves code around, no actual changes\n\nTest: th\n\nChange-Id: Iea041d5d1b2fc34338349fb4045a79615193348f\n"
    },
    {
      "commit": "46d6c4987f143e9afbc965bf740873bc1022875f",
      "tree": "2a9053f9e3b3160be7ad6de88a6f463dc4012652",
      "parents": [
        "9105f4baeb254e45117ab91c396f0d45a4c8b9ca"
      ],
      "author": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Mon Apr 26 17:51:25 2021 -0400"
      },
      "committer": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Thu May 06 09:58:12 2021 -0400"
      },
      "message": "Create a minimal testcase to reproduce silent verity corruption\n\nb/186196758 is triggered by the following sequence of events:\n\n1. update_engine finish writing all install ops, emits kEndOfInstall\nlabel\n2. update_engine opens cow in append mode, invokes\nInitialiazeAppend(kEndOfInstall)\n3. update_engine writes verity data, invokes SnapshotWriter::Finalize()\n4. update_engine repeats step 2, but does not write any data after\nopening SnapshotWriter. Instead, it reads verity and make sure the hash\nmatches what\u0027s specified in OTA payload.\n5. Reboot device, verity data corrupted, device rollback to slot _a.\n\nThis is because, during step 4, when calling\nInitializeAppend(kEndOfInstall), the SnapshotWriter only reads up to the\ngiven label. But OpenReader() completely disregards the resume label and\nreads all ops. Therefore, update_engine sees the verity data, and\ndetermines that everything is fine. However, when calling\nSnapshotWriter::Finalize(), data after resume label are discarded,\ntherefore verity data is gone.\n\nTest: th\nBug: 186196758\n\nChange-Id: I0166271b64eb7b574434d617ce730f345ca93ff1\n"
    },
    {
      "commit": "aedfef3c2f2834645654833bae6fd1daf6ca1040",
      "tree": "47d4777cf3a961cb97b9bd9856f98f64f759233d",
      "parents": [
        "741c2d4da7dfb6e97bf7819e48b19e3214b5c09b"
      ],
      "author": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Wed Apr 28 13:54:14 2021 +0100"
      },
      "committer": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Thu Apr 29 18:56:49 2021 +0000"
      },
      "message": "Don\u0027t call into apexservice if device uses flattened apexes\n\nIf device doesn\u0027t support updatable apexes (a.k.a. uses flattened\napexes), then it won\u0027t have compressed apexes, so there is no need\ncalling into apexd.\n\nTest: atest update_engine_unittests:ApexHandlerAndroidTest\nTest: build and flash aosp_cf_x86_phone_noapex-userdebug\nTest: m dist\nTest: python3 system/update_engine/scripts/update_device.py --file out/target/product/vsoc_x86_noapex/aosp_cf_x86_phone_noapex-ota-eng.ioffe.zip\nTest: checked OTA was successfully staged\nBug: 185862111\nChange-Id: Ibf9db757f3af37d23fb8248108b2b6d22c95dec7\n"
    },
    {
      "commit": "88f3c8c78d8a59a60fd14f9e02ad66e93164c555",
      "tree": "2744b8c4e3cf5e5c1cda0c0ff65e33d1c9ac9cce",
      "parents": [
        "4d22ca2ab60f99f25d613f1ede3e1f16d9cc76cf"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Apr 22 13:47:21 2021 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Apr 22 13:47:21 2021 -0700"
      },
      "message": "Use libgtest_prod_headers.\n\nBug: http://b/185916167\nTest: treehugger\nChange-Id: Ia58cf5acc58d95b27e9e852e104e77a4b2c6bb06\n"
    },
    {
      "commit": "b4b95c28346c919bd4f4f04859bb5b7484dd2c27",
      "tree": "2e861c0f2144a49d7fdb5972a1ce9cc21f5b568e",
      "parents": [
        "65e8b6c19582f196dfab67d12cc3af78bb8d138c"
      ],
      "author": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Mon Apr 05 15:56:26 2021 -0400"
      },
      "committer": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Tue Apr 06 15:26:59 2021 -0400"
      },
      "message": "Add unittest for CleanupPreviousUpdateAction\n\nWe had a severe bug in CleanupPreviousUpdateAction, undetected for a\nwhile. Added unittest to cover the bug so we don\u0027t regress.\n\nBug: 169436297\nBug: 178637306\n\nTest: th\nChange-Id: I40fc97a5c771ec001896ecd8f6d46b551cc7724c\n"
    },
    {
      "commit": "569c97eebd46b7c7a7740dea837f2e86475c02c2",
      "tree": "169ec2046e1af4a76d4de2c48f1301076175e317",
      "parents": [
        "eeec3819f022ca4d3792ce8b627f370285cd66dc"
      ],
      "author": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Mon Oct 26 12:12:24 2020 -0400"
      },
      "committer": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Wed Mar 24 10:08:48 2021 -0400"
      },
      "message": "Add CowWriterFileDescriptor\n\nAdd a wrapper to use CowWriter as a file descriptor, this will be used\nby FileSystemVerification stage when writing FEC\n\nTest: treehugger\nBug: 173432386\n\nChange-Id: Iea42ca1081cd6836c7700db172d6987f770d52c0\n"
    },
    {
      "commit": "b93055f15cf30fbb50107fdc3a55867c2487e141",
      "tree": "44b097afeeeb5171ce4b210834a74ea2031c7794",
      "parents": [
        "4ab946d067562e018fc98d926a15c2492884225d"
      ],
      "author": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Wed Feb 03 14:22:35 2021 -0500"
      },
      "committer": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Mon Mar 01 15:02:50 2021 -0500"
      },
      "message": "Add a util for converting ota payload to cow image\n\nVAB team can use this tool to understand what real world COW images look\nlike, and perhaps write unittests\n\nHow to use this tool:\n1. mm -j cow_converter\n2. `unzip your_ota.zip payload.bin`\n3. `unzip target_file.zip \"IMAGES/*\" -d /tmp/target_file\n4. `cow_converter payload.bin /tmp/target_file/IMAGES`\n5. inspect generated cow images `ls -l /tmp/target_file/IMAGES/*.cow`\n\nTest: cow_converter payload.bin /tmp/target_file/IMAGES\nChange-Id: I2c9d1ea566378e3350a048c40ff05a79d14873e8\n"
    },
    {
      "commit": "24a827946987b5128fa375364b8f6c1213893e5f",
      "tree": "197648809f09648fbb5a650342226359d193066f",
      "parents": [
        "8933d5721a1aa28bb51e9d0f72eed63a5f05e869"
      ],
      "author": {
        "name": "Mohammad Samiul Islam",
        "email": "samiul@google.com",
        "time": "Fri Feb 12 16:52:36 2021 +0000"
      },
      "committer": {
        "name": "Mohammad Islam",
        "email": "samiul@google.com",
        "time": "Tue Feb 23 10:26:23 2021 +0000"
      },
      "message": "Allow update_engine to communicate with apexd for size calculation\n\nIn this CL, we created a ApexHandlerAndroid that can communicate with\napexd via binders to get better estimate for how much space the\nupdate_engine should reserve for capex decompression.\n\nThe size check is placed in update_attempter_android, which is also used\nin binary for sideloading OTA. Sideloading binary runs during recovery\nwhen binder calls, apexd and data parition are all not available. As\nsuch, it doesn\u0027t make sense to reserve space when sideloading.\n\nBug: 172911822\nTest: atest ApexHandlerAndroidTest\nTest: atest UpdateAttempterAndroidTest\nTest: manually served ota using `update_engine_client --allocate` and\n      observed full.tmp was written in /data/apex/ota_reserved\nChange-Id: Iccf3d8c2db24e8d8f3406d0aaa65cbf707c9ae51\n"
    },
    {
      "commit": "9b85a6c202c35fe200994d50d6750cb42e5347a6",
      "tree": "5dca858489daf9c186b8a14398a1f51b065e0116",
      "parents": [
        "deb34459c3a14a30b1824c267daadc02812255dc"
      ],
      "author": {
        "name": "Bob Badour",
        "email": "bbadour@google.com",
        "time": "Fri Feb 12 21:28:32 2021 -0800"
      },
      "committer": {
        "name": "Bob Badour",
        "email": "bbadour@google.com",
        "time": "Fri Feb 12 21:28:32 2021 -0800"
      },
      "message": "[LSC] Add LOCAL_LICENSE_KINDS to system/update_engine\n\nAdded SPDX-license-identifier-Apache-2.0 to:\n  Android.bp\n  stable/Android.bp\n\nBug: 68860345\nBug: 151177513\nBug: 151953481\n\nTest: m all\n\nExempt-From-Owner-Approval: janitorial work\nChange-Id: I00a538119e8d043812779dfb7a911347c6526cb6\n"
    },
    {
      "commit": "838793dc39746fd0eba99daaa0f62f8a402777e5",
      "tree": "1173db93bffda2cf3bdbdeedc759548c003d1163",
      "parents": [
        "8e2dce0ccc2699a0df9d8473fa586811f4b1b69c"
      ],
      "author": {
        "name": "Tianjie",
        "email": "xunchang@google.com",
        "time": "Thu Jan 14 22:05:13 2021 -0800"
      },
      "committer": {
        "name": "Tianjie Xu",
        "email": "xunchang@google.com",
        "time": "Thu Jan 28 18:26:59 2021 +0000"
      },
      "message": "Calculate vbmetadigest of inactive slot\n\nWe want to improve the security of the keystore encryption key for resume\non reboot. One AI is to create the key with the vbmeta digest of the\nnext slot to boot into. After reboot, the decryption will fail if\nro.boot.vbmeta.digest of the new slot doesn\u0027t match the calculated value\nbefore reboot.\n\nSince update_engine manages the slot switch, let it calculate the digest\nas well.\n\nBug: 177625570\nTest: do a update, check that the sysprop is set.\n\nChange-Id: I74b20fca72f6946d980b93d76990f1c8b8f246a9\n"
    },
    {
      "commit": "95f89e9add8c6ab12d70935d3327f2576d4aa1df",
      "tree": "e985072eaf5140fd8f4987f362dd4d06a9455f96",
      "parents": [
        "66a9ebbf3bcc80cfc2c31d36176882f8cf83b1c5"
      ],
      "author": {
        "name": "Jeongik Cha",
        "email": "jeongik@google.com",
        "time": "Tue Jan 26 22:33:11 2021 +0900"
      },
      "committer": {
        "name": "Jeongik Cha",
        "email": "jeongik@google.com",
        "time": "Tue Jan 26 22:33:13 2021 +0900"
      },
      "message": "Specify version for aidl_interface explicitly\n\nBug: 150578172\nTest: m\nChange-Id: I1549def20b8ff69c6bf9e46dc7dd201df62b3f59\n"
    },
    {
      "commit": "eb8703b9f6db3fb386507b71f180c98ca3137638",
      "tree": "4ff2fa699bce95cb19a9757c3c1c4bbe980342a9",
      "parents": [
        "58480ef4e5de419e43d69ec3d915267730ff1b90"
      ],
      "author": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Thu Dec 10 14:17:21 2020 -0500"
      },
      "committer": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Sun Dec 13 12:28:23 2020 -0500"
      },
      "message": "Always write SOURCE_COPY blocks in reverse order\n\nTest: treehugger\nBug: 174112589\nChange-Id: If95893569ab41d1806f266aa269722b403a50fa4\n"
    },
    {
      "commit": "c710cf28ff87c7427c3b1f01617ed684ef096793",
      "tree": "c863a7052f9d4ad0c8b45cc359c98f23b35556fa",
      "parents": [
        "6d121de1d4c09d5ef56cac6fce54c15d69148f4a",
        "4aeaa124fafcf18b8664b2baf815e17c27c834a8"
      ],
      "author": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Sat Dec 05 21:18:58 2020 +0000"
      },
      "committer": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Sat Dec 05 21:18:58 2020 +0000"
      },
      "message": "Merge \"Merge remote-tracking branch \u0027aosp/upstream-master\u0027 into merge\""
    },
    {
      "commit": "4aeaa124fafcf18b8664b2baf815e17c27c834a8",
      "tree": "a545ff82c2e3da84d9fdcd0f0086809cac8a2b6a",
      "parents": [
        "07676f5c38f146c5242c0a30edba57224b540e8e",
        "2379503a049c1584cdfcb339e89d496a794c2680"
      ],
      "author": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Fri Dec 04 13:28:47 2020 -0500"
      },
      "committer": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Sat Dec 05 14:39:00 2020 -0500"
      },
      "message": "Merge remote-tracking branch \u0027aosp/upstream-master\u0027 into merge\n\nTest: treehugger\nChange-Id: I4984f03fa95a753fb17779451eb458f177432d4f\n"
    },
    {
      "commit": "6d121de1d4c09d5ef56cac6fce54c15d69148f4a",
      "tree": "94251748d9a1e72a2a6c7372be1d5dcff8c86d12",
      "parents": [
        "07676f5c38f146c5242c0a30edba57224b540e8e"
      ],
      "author": {
        "name": "Justin Yun",
        "email": "justinyun@google.com",
        "time": "Wed Nov 11 19:31:57 2020 +0900"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Sat Dec 05 01:19:22 2020 +0000"
      },
      "message": "Add product_available to product available modules\n\nvendor_available modules were available to product modules.\nHowever, not all vendor_available modules are required to be\navailable to product modules. Some modules want to be available only\nto product modules but not vendor modules.\n\nTo cover the requirement, we separate product_available from\nvendor_available.\nvendor_available will not provide product available module.\n\nBug: 150902910\nTest: build\nChange-Id: I5f5adc822d4baa8a295580d7ed7d2dc5af35c5b6\n"
    },
    {
      "commit": "2379503a049c1584cdfcb339e89d496a794c2680",
      "tree": "6a5df4d3d3542422ba646c9981beac6984818422",
      "parents": [
        "4f5657e85ea45e8e3e1ce332174665d58f3b9436"
      ],
      "author": {
        "name": "Amin Hassani",
        "email": "ahassani@chromium.org",
        "time": "Tue Nov 24 14:38:55 2020 -0800"
      },
      "committer": {
        "name": "Commit Bot",
        "email": "commit-bot@chromium.org",
        "time": "Thu Dec 03 03:52:35 2020 +0000"
      },
      "message": "update_engine: Make InstallPlan\u0027s dump nicer\n\nIts really hard to read anything out of the current InstallPlan\u0027s\nlogs. This CL makes it a bit more structured so it can be read easier.\n\nAlso added a few other properties of InstallPlan that were missing in\nthe Dump().\n\nAdded unittest for it too.\n\nBUG\u003db:171829801\nTEST\u003dcros_workon_make --board reef --test update_engine\n\nChange-Id: Iaa327e875877e9645ef8f0af875c280e11ee485d\nReviewed-on: https://chromium-review.googlesource.com/c/aosp/platform/system/update_engine/+/2558933\nTested-by: Amin Hassani \u003cahassani@chromium.org\u003e\nAuto-Submit: Amin Hassani \u003cahassani@chromium.org\u003e\nReviewed-by: Jae Hoon Kim \u003ckimjae@chromium.org\u003e\nCommit-Queue: Jae Hoon Kim \u003ckimjae@chromium.org\u003e\n"
    },
    {
      "commit": "538bd590de3245349050d38f9ca197deb3eaa2a4",
      "tree": "2fade0be22c2c6bda462aa49236257cae2ca9409",
      "parents": [
        "79fec2da41db55983cd45036deb17a2f76f934d8"
      ],
      "author": {
        "name": "Amin Hassani",
        "email": "ahassani@chromium.org",
        "time": "Wed Nov 04 20:46:08 2020 -0800"
      },
      "committer": {
        "name": "Commit Bot",
        "email": "commit-bot@chromium.org",
        "time": "Sat Nov 14 02:44:18 2020 +0000"
      },
      "message": "update_engine: Make SystemState accessible from everywhere\n\nSystemState is supposed to be a global context and is used lamost\neverywhere. So instead of passing it to functions and keeping multiple\npointers to it, its better to do what we did in dlcservice and make it a\nsingleton class with a getter that can be get from everywhere.\n\nBUG\u003db:171829801\nTEST\u003dunittests\n\nChange-Id: I3b2de9394b7769b3911195ca52d61dbe49afd4dd\nReviewed-on: https://chromium-review.googlesource.com/c/aosp/platform/system/update_engine/+/2521792\nCommit-Queue: Amin Hassani \u003cahassani@chromium.org\u003e\nTested-by: Amin Hassani \u003cahassani@chromium.org\u003e\nReviewed-by: Jae Hoon Kim \u003ckimjae@chromium.org\u003e\n"
    },
    {
      "commit": "64a80160593434d07ee1d00364bf88a56496f694",
      "tree": "2f0989dd61d6a6da5d8183968cbb90b18560cdea",
      "parents": [
        "4fec0f26e790dc63afcd5adfbc192233eb1bb0cb"
      ],
      "author": {
        "name": "Amin Hassani",
        "email": "ahassani@chromium.org",
        "time": "Mon Nov 09 16:58:17 2020 -0800"
      },
      "committer": {
        "name": "Commit Bot",
        "email": "commit-bot@chromium.org",
        "time": "Wed Nov 11 04:34:35 2020 +0000"
      },
      "message": "update_engine: Turn on Chrome Kiosk app by default\n\nThis flag is always true in Chorme OS and android\u0027s code doesn\u0027t compile\nthis. So the flag can be removed and be turned on by default.\n\nBUG\u003db:171829801\nTEST\u003dcros_workon_make --board reef --test\n\nChange-Id: Ibb7423196f24793adf85ef5bfe7da7b1edef012a\nReviewed-on: https://chromium-review.googlesource.com/c/aosp/platform/system/update_engine/+/2528758\nTested-by: Amin Hassani \u003cahassani@chromium.org\u003e\nReviewed-by: Jae Hoon Kim \u003ckimjae@chromium.org\u003e\nCommit-Queue: Amin Hassani \u003cahassani@chromium.org\u003e\n"
    },
    {
      "commit": "4fec0f26e790dc63afcd5adfbc192233eb1bb0cb",
      "tree": "50ced95719ade1683eeed6845f10c82dc3121569",
      "parents": [
        "4c5413d0cae0c29c00257000b856890e59bab412"
      ],
      "author": {
        "name": "Amin Hassani",
        "email": "ahassani@chromium.org",
        "time": "Mon Nov 09 16:38:14 2020 -0800"
      },
      "committer": {
        "name": "Commit Bot",
        "email": "commit-bot@chromium.org",
        "time": "Wed Nov 11 04:34:32 2020 +0000"
      },
      "message": "update_engine: Turn on Chrome network proxy by default\n\nThis flag is always true in Chorme OS and android\u0027s code doesn\u0027t compile\nthis. So it can be removed.\n\nBUG\u003db:171829801\nTEST\u003dcros_workon_make --board reef --test\n\nChange-Id: I1e28955ba8fcd7ca395e538275ba68a2997bcc31\nReviewed-on: https://chromium-review.googlesource.com/c/aosp/platform/system/update_engine/+/2528757\nTested-by: Amin Hassani \u003cahassani@chromium.org\u003e\nReviewed-by: Jae Hoon Kim \u003ckimjae@chromium.org\u003e\nCommit-Queue: Amin Hassani \u003cahassani@chromium.org\u003e\n"
    },
    {
      "commit": "7a2657510c0ff24afe282d8e061916ebac78cf27",
      "tree": "baef92d6829b2f174ff8ea53b31dfb2052c48a37",
      "parents": [
        "24599af599acf74b71a555a8eeb827bedcd672b5"
      ],
      "author": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Thu Oct 29 15:51:35 2020 -0400"
      },
      "committer": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Mon Nov 09 09:27:29 2020 -0500"
      },
      "message": "Estimate COW image size during OTA generation\n\nEstimate COW image size and put the estimation in OTA metadata. Then VAB\ncould use this to allocate disk space and prompt the user if more space\nrequired.\n\nTest: create an OTA package\nChange-Id: Iaedafcf39af2d1a4d9cae9cd1a642a3cd3a4815c\n"
    },
    {
      "commit": "5b58987b7373615f40a50c3f3e168161d8fad42f",
      "tree": "64e7b25e8fdfa058aa75b57b085c054893db079f",
      "parents": [
        "8b1e0dcbca7bbcae0f84124f2898e4f3b7dab895",
        "ec7bc11c3103d9310568a391271be52baef273a7"
      ],
      "author": {
        "name": "Tianjie",
        "email": "xunchang@google.com",
        "time": "Tue Nov 03 11:16:33 2020 -0800"
      },
      "committer": {
        "name": "Tianjie Xu",
        "email": "xunchang@google.com",
        "time": "Tue Nov 03 21:22:59 2020 +0000"
      },
      "message": "Merge remote-tracking branch \u0027aosp/upstream-master\u0027 into merge\n\ngit merge aosp/upstream-master --commit -s recursive\n\nTest: treehugger\nChange-Id: Ifab9f47e1c5bea3898e78df0139d10842b41a44f\n"
    },
    {
      "commit": "ec7bc11c3103d9310568a391271be52baef273a7",
      "tree": "c7d69b3c47c8ff86876cd662b4ace630c1e1362b",
      "parents": [
        "24e1d72aa2a1024417121b0d91bf9a6f3b883a96"
      ],
      "author": {
        "name": "Amin Hassani",
        "email": "ahassani@chromium.org",
        "time": "Thu Oct 29 16:47:58 2020 -0700"
      },
      "committer": {
        "name": "Commit Bot",
        "email": "commit-bot@chromium.org",
        "time": "Tue Nov 03 03:19:41 2020 +0000"
      },
      "message": "update_engine: Create cros vs. aosp boundary clear\n\nIts time to make the boundary between Chrome OS and Android code more\nclear. This CL moves all CrOS only code to \"chromeos\" directory and the\nsame for Android (in \"android\" directory). This way we would easily know\nwhich code is uses in which project and can keep the code cleaner and\nmore maintainable.\n\nOne big remaining problem is download_action* files. It seems like\nDownloadAction class does a lot of things that chrome OS needs and it\ndepends on a lot of Chrome OS stuff, but Android is also using thie\nAction in a way that circumvent the Chrome OS stuff. For example Android\nchecks for SystemState to be nullptr to not do things. This is really\nfragile and needs to change. Probably Android Team has to implement\ntheir own DownloadAction of some sort and not re use the Chrome OS one\nin a very fragile way.\n\nRemoved a few android files that have not been used anywhere.\n\nChanged some clang-format and lint issues in order to pass preupload.\n\nBUG\u003db:171829801\nTEST\u003dcros_workon_make --board reef --test update_engine\n\nChange-Id: I3fff1d4a100a065a5c1484a845241b5521614d9f\nReviewed-on: https://chromium-review.googlesource.com/c/aosp/platform/system/update_engine/+/2508965\nTested-by: Amin Hassani \u003cahassani@chromium.org\u003e\nAuto-Submit: Amin Hassani \u003cahassani@chromium.org\u003e\nReviewed-by: Jae Hoon Kim \u003ckimjae@chromium.org\u003e\nReviewed-by: Tianjie Xu \u003cxunchang@google.com\u003e\nReviewed-by: Kelvin Zhang \u003czhangkelvin@google.com\u003e\nCommit-Queue: Amin Hassani \u003cahassani@chromium.org\u003e\n"
    },
    {
      "commit": "9754f17341a37ca2b2191c7c452c193f823fe5d2",
      "tree": "a276e671c33c9cce4ec6f29bcdd05c81d9206679",
      "parents": [
        "b05e4e2705ea06a2f7772ec2ab2c5353a696226c"
      ],
      "author": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Fri Sep 25 15:22:35 2020 -0400"
      },
      "committer": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Thu Oct 29 16:36:41 2020 -0400"
      },
      "message": "Implement SnapshotExtentWriter\n\nPart of the effort to integrate update_engine with VABC.\nSnapshotExtentWriter is the proxy between update_engine and VABC.\n\nTest: treehugger\nBug: 168554689\nChange-Id: Ib5afe8dac80658d3155f3fe9bcc42e9c3c78d6cb\n"
    },
    {
      "commit": "b05e4e2705ea06a2f7772ec2ab2c5353a696226c",
      "tree": "8d48f5230f523de1e24077760acc1db2b7e77bf5",
      "parents": [
        "9b10dba4599bf3acd2195e144a51fa24e3c90a5d"
      ],
      "author": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Fri Sep 25 16:16:19 2020 -0400"
      },
      "committer": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Tue Oct 27 17:51:06 2020 -0400"
      },
      "message": "Implement common library for converting InstallOps to Cow Ops\n\nTest: generate \u0026\u0026 serve an OTA\nBug: 168554689\nChange-Id: If9e87ca3e993372ebb6b24ed64e71b319630bb18\n"
    },
    {
      "commit": "9b10dba4599bf3acd2195e144a51fa24e3c90a5d",
      "tree": "39ec69f5b8a37eaf264e1c522cc137c72f7c5551",
      "parents": [
        "34618521d487a37d21f25812f324380f1eb394a8"
      ],
      "author": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Fri Sep 25 17:09:11 2020 -0400"
      },
      "committer": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Fri Oct 23 19:07:24 2020 -0400"
      },
      "message": "Implement VABCPartitionWriter\n\nTest: treehugger\n\nChange-Id: I7ec47adba0bc095879989b43ec642ea6a7852ab6\n"
    },
    {
      "commit": "6c190a2d716d346ccf60fceae1a4985581b42d0c",
      "tree": "88a63b8be6a7d3a887f0ca1a54d8326de0511926",
      "parents": [
        "c7939fa8fe98e27fe9b9143123f2c6e54db6fc46"
      ],
      "author": {
        "name": "David Anderson",
        "email": "dvander@google.com",
        "time": "Mon Sep 21 17:09:53 2020 -0700"
      },
      "committer": {
        "name": "David Anderson",
        "email": "dvander@google.com",
        "time": "Tue Oct 20 19:16:56 2020 +0000"
      },
      "message": "Link to libsnapshot_cow and libz where libsnapshot is linked.\n\nBug: 168554689\nTest: builds\nChange-Id: Ibbb6b4795ee5f0056e52ad7379a0033092209e78\n"
    },
    {
      "commit": "94f51cc3ffe2e20d7ef523531aa147f9a2cda3a3",
      "tree": "1527b6ea4bee78267b59968088aeac43f0d35086",
      "parents": [
        "4b883ea0aceed443fc790e4459af61c27cd162e0"
      ],
      "author": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Fri Sep 25 11:34:49 2020 -0400"
      },
      "committer": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Fri Oct 09 21:54:34 2020 +0000"
      },
      "message": "Add a skeleton class for VABCPartitionWriter\n\nBug: 168554689\nTest: treehugger\nChange-Id: Ib73084b779620db47d2ff4fbb6d87f38047e9211\n"
    },
    {
      "commit": "309c8a883eeca072bd30c563c22c001fa6e41e2a",
      "tree": "08d08e98795c51666018f8262689430b68e446ad",
      "parents": [
        "300a8eb1220ca16074341849804b6f6c9e1d5e10"
      ],
      "author": {
        "name": "Yifan Hong",
        "email": "elsk@google.com",
        "time": "Tue Oct 06 18:31:08 2020 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Oct 08 00:43:42 2020 +0000"
      },
      "message": "Make update_engine_stable_client product_specific.\n\nFor its dependencies, use vendor_available to indicate it can be used by\ncore and product variants, because product_available is not available.\n\nTest: builds\nBug: 161563386\nBug: 150902910\n\nChange-Id: I6a951ee3ea91c945a830a32c0a117af4c73bb6b8\n"
    },
    {
      "commit": "300a8eb1220ca16074341849804b6f6c9e1d5e10",
      "tree": "5fe46a54314de540c76b6b6c6beed072bedd0d76",
      "parents": [
        "50bac6567e2f6dc9e4f7d465c00a4c6568a91311"
      ],
      "author": {
        "name": "Tianjie Xu",
        "email": "xunchang@google.com",
        "time": "Sat Oct 03 07:27:00 2020 +0000"
      },
      "committer": {
        "name": "Tianjie Xu",
        "email": "xunchang@google.com",
        "time": "Sat Oct 03 19:27:29 2020 +0000"
      },
      "message": "Revert \"Link to libsnapshot_cow where libsnapshot is linked.\"\n\nRevert \"libsnapshot: Partially implement OpenSnapshotWriter.\"\n\nRevert \"Link to libsnapshot_cow everywhere libsnapshot is linked.\"\n\nRevert submission 1433573-vab-libsnapshot-linkage\n\nReason for revert: b/169981170, update crash for droidfooders.\nReverted Changes:\nIe75bba98c:Link to libsnapshot_cow where libsnapshot is linke...\nIeedfadc55:libsnapshot: Partially implement OpenSnapshotWrite...\nI28a5d4a88:Link to libsnapshot_cow everywhere libsnapshot is ...\n\nChange-Id: Ib71dc9fd3edd7a79d075c60a32ad30f8e589af42\n"
    },
    {
      "commit": "50bac6567e2f6dc9e4f7d465c00a4c6568a91311",
      "tree": "e255cc53b40e35cfe2020b432826f3258181a227",
      "parents": [
        "9bd519d4f5b5cf537038a3beb27efe0e196523cd"
      ],
      "author": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Mon Sep 28 15:51:41 2020 -0400"
      },
      "committer": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Thu Oct 01 15:52:28 2020 -0400"
      },
      "message": "Move partition writer to a separate file\n\nTest: treehugger \u0026\u0026 serve an OTA update\nChange-Id: I803692110841ce6d2207555ac7a682e9f989363d\n"
    },
    {
      "commit": "9bd519d4f5b5cf537038a3beb27efe0e196523cd",
      "tree": "7d5f4875025b84847160e5472f7387e696710ad5",
      "parents": [
        "d1d52a0b4b59be633e674dbc012baff97f8d0c80"
      ],
      "author": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Wed Sep 23 12:55:19 2020 -0400"
      },
      "committer": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Thu Oct 01 15:34:49 2020 -0400"
      },
      "message": "Add partition writer class.\n\nPreviously, delta_performer assumes that each InstallOp can be processed\nindependently, and therefore it creates an ExntentWriter instance for\nevery operation. It also assumes that source/target partition can be\nread/written using raw system file descriptors.\n\nWith the introduction of Virtual Ab Compression, both assumptions fall\napart. We need to process all SOURCE_COPY operations and reorder them\naccording to merge sequence, which means InstallOperations are no\nlonger independent of each other. Also, VABC requires us to perform\nwrites using their ICowWriter interface, as opposed to read/write\nsyscall.\n\nWe can add extra logic to handle these cases, but that will make the\nalready huge delta_performer.cc even bigger. It\u0027s 2000 lines right now.\nSo instead, we plan to add an additional class called PartitionWriter.\nWhich is supposed to perform partition level initialization, such as\nperforming SOURCE_COPY ahead of time according to merge sequence,\nsetting up snapshot devices, etc. This will make our code more\nmaintainable.\n\nThe purpose of this CL is to refactor DeltaPerformer, and move some of\nthe logic into PartitionWriter. Future CLs will add a PartitionWriter\nfor VABC.\n\nTest: treehugger, generate \u0026\u0026 serve an OTA\nBug: 168554689\n\nChange-Id: I305fe479b22d829dde527ee01df0e48e4dcb7b46\n"
    },
    {
      "commit": "420bed506f4baa36eb9b3953df068460e98bc31f",
      "tree": "092950d23dcdb229d06b76295445ee6980a488f6",
      "parents": [
        "70ba92e41473fc30f9276c6eef897a7ad0f9d758"
      ],
      "author": {
        "name": "David Anderson",
        "email": "dvander@google.com",
        "time": "Mon Sep 21 17:09:53 2020 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Sep 29 21:52:06 2020 +0000"
      },
      "message": "Link to libsnapshot_cow where libsnapshot is linked.\n\nBug: 168554689\nTest: builds\nChange-Id: Ie75bba98c8a346fcad1588b678648526a4c51a5c\n"
    },
    {
      "commit": "70ba92e41473fc30f9276c6eef897a7ad0f9d758",
      "tree": "b84d037cd5b9a0d9674251b4a2deacad135d8bd2",
      "parents": [
        "da1b3145df344b2bf597bfbb5636e1bb74642389"
      ],
      "author": {
        "name": "Yifan Hong",
        "email": "elsk@google.com",
        "time": "Tue Sep 22 23:56:00 2020 +0000"
      },
      "committer": {
        "name": "Yifan Hong",
        "email": "elsk@google.com",
        "time": "Mon Sep 28 11:38:53 2020 -0700"
      },
      "message": "Read boot image version from ro.bootimage.build.date.utc\n\nThis change re-defines boot image downgrade check logic. The\nsysprop ro.bootimage.build.date.utc is checked instead. If the\nsysprop ro.build.ab_update.gki.prevent_downgrade_version is not set,\nany detected downgrades are suppressed.\n\nBug: 162554855\nBug: 162623577\nBug: 169169031\nTest: pass\n\nChange-Id: Ib86cb40576a852e0654a4c22d81c876d0315d0d2\n"
    },
    {
      "commit": "126d13ee33880555bc55dd3b49fa6af53b3b0ed4",
      "tree": "a2f7a37f940da610492e43b41df6b677dfd59fe6",
      "parents": [
        "5e6dfe3933a7ea6e934adfa0319d52a8919a29e8"
      ],
      "author": {
        "name": "Yifan Hong",
        "email": "elsk@google.com",
        "time": "Mon Sep 21 19:50:06 2020 -0700"
      },
      "committer": {
        "name": "Yifan Hong",
        "email": "elsk@google.com",
        "time": "Wed Sep 23 23:25:33 2020 +0000"
      },
      "message": "Only prevent boot image downgrade if sysprop set.\n\nOnly return timestamp error if ro.build.ab_update.gki.prevent_downgrade_version is set.\nOtherwise, log warning message and continue the update.\n\nThis allows devices that does not support GKI updates to install OTA packages where\nthe boot image has a lower version than the existing, which is supported before.\n\nBug: 162623577\nTest: apply OTA on devices with and without sysprop set\nChange-Id: Ie98fb49ffaae1aa60fc94766f53a6fbbae519a5b\n"
    },
    {
      "commit": "5e6dfe3933a7ea6e934adfa0319d52a8919a29e8",
      "tree": "f6879dbad67ebd90f41a05af7807a3408d022b95",
      "parents": [
        "7e048edfbb8b662ccfe3a04211181fd3d11b2adb"
      ],
      "author": {
        "name": "David Anderson",
        "email": "dvander@google.com",
        "time": "Thu Sep 17 15:50:33 2020 -0700"
      },
      "committer": {
        "name": "David Anderson",
        "email": "dvander@google.com",
        "time": "Thu Sep 17 20:01:48 2020 -0700"
      },
      "message": "Allow including file_descriptor.h in fs_mgr.\n\nNote that file_descriptor.h includes base/logging.h, which conflicts\nwith android-base/logging.h. Since it doesn\u0027t actually need this header,\nchange it to base/macros.h which is safe.\n\nBug: 168554689\nTest: builds\nChange-Id: I1e903cec857c50f988b537d87c1f254338da686c\n"
    },
    {
      "commit": "18e9f3ca8d7c155da4f66aaf00e131f892fba420",
      "tree": "274815b503a35cc11d938bab04eeb41ac3b525a3",
      "parents": [
        "0870f9d7e80b974a1ab19f2baa792220febe9bd2"
      ],
      "author": {
        "name": "Martin Stjernholm",
        "email": "mast@google.com",
        "time": "Tue Sep 08 13:56:59 2020 +0100"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Sep 15 00:00:14 2020 +0000"
      },
      "message": "Use sh_binary for a host shell script.\n\nIt\u0027s more apt than cc_prebuilt_binary, and the latter breaks when it\nstarts to symlink to the source tree, because the script looks for\nshflags relative to `readlink -f $0`.\n\nTest: m dist\nBug: 145934348\nChange-Id: I8bc80a43046e4553aa399e2ab77d268e11be325b\n"
    },
    {
      "commit": "fd6640f792a54ca19cf282889d8e5c9780f04300",
      "tree": "645166027e69c4df5a3a5b3e5eeb2f81eb080411",
      "parents": [
        "87029337e3e244440e460a496a1381b533213481"
      ],
      "author": {
        "name": "Yifan Hong",
        "email": "elsk@google.com",
        "time": "Thu Aug 27 19:13:17 2020 -0700"
      },
      "committer": {
        "name": "Yifan Hong",
        "email": "elsk@google.com",
        "time": "Tue Sep 08 22:27:36 2020 +0000"
      },
      "message": "Check boot image version before update.\n\nRely on libkver to report boot image version and check\nupdateability correctly before the update.\n\nTest: apply GKI update\nBug: 162554855\nBug: 162623577\nChange-Id: If7668346db5dcb03a1fdd31a738dd5952e30ca1a\n"
    },
    {
      "commit": "c1c930547968f75be0964f2c48bfe4b2d0e04a92",
      "tree": "fa3d9fbff85a6cc0aa97bfb08af398c67ec0b769",
      "parents": [
        "31ad11922cd966772271c76a6297969b6034952e"
      ],
      "author": {
        "name": "David Anderson",
        "email": "dvander@google.com",
        "time": "Wed Aug 26 18:22:09 2020 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Sep 02 18:54:53 2020 +0000"
      },
      "message": "Revert \"Revert \"Expose extent_ranges for libsnapshot to use in resolving...\"\"\n\nThis reverts commit 5ef2d8ae7bc8ccd03ea8fc19e3e0b9a11f1dfeaf.\n\nReason for revert: re-landing\n\nChange-Id: If9d055e67158f003ba4aa05f170b90844948e2b4\n"
    },
    {
      "commit": "87af6c083dca39250c29c9ad3a0a6627891eccb7",
      "tree": "af7c886a85caf0d2bda0125cade9f5a81b48f68c",
      "parents": [
        "f2e7ee5a3dfdeee1ecce9111d02e7538a7576eb9"
      ],
      "author": {
        "name": "Tianjie",
        "email": "xunchang@google.com",
        "time": "Tue Aug 11 15:06:26 2020 -0700"
      },
      "committer": {
        "name": "Tianjie",
        "email": "xunchang@google.com",
        "time": "Fri Aug 28 12:11:14 2020 -0700"
      },
      "message": "Implement the functions in CowMergeOperations\n\nImplement the function to create an object \u0026 validate sequence.\n\nBug: 162274240\nTest: unit tests pass\nChange-Id: Id41460a886d94a98e154b222c3401a5f95b9e047\n"
    },
    {
      "commit": "e9156ec8de400e24602bd08a06a02b4a47c76c7f",
      "tree": "4709d48c4be35a4dc121525922d0f56032f59756",
      "parents": [
        "1f4964213f67ae682af8cd332cd37b3d9afdbace"
      ],
      "author": {
        "name": "Tianjie",
        "email": "xunchang@google.com",
        "time": "Tue Aug 11 11:13:54 2020 -0700"
      },
      "committer": {
        "name": "Tianjie Xu",
        "email": "xunchang@google.com",
        "time": "Thu Aug 27 20:15:12 2020 +0000"
      },
      "message": "Add CowMergeOperations as a hint for snapshot write\n\nAs proposed in http://go/vabc, we want to reduce the cow size\nfor VAB. One nature apporach is to skip writing the idential\nblocks to snapshot; instead we can read from the souce blocks.\n\nSimiliar to the non-A/B update schema, we need to compute a\nsequence for snapshot merge to avoid the read after write problem.\nIf there is a circular dependency, we will omit some blocks in the\nresult sequence to break the cycles. So libsnapshot will write\nthe raw data of these blocks to cow.\n\nAll extents in the CowMergeOperations are subsets of a particular\nOTA SOURCE_COPY InstallOperation. Also, these src \u0026 ext extents\nwill be contiguous to improve the libsnapshot read performance\nbefore merge completes, as well as to simplify the sequence\ngeneration.\n\nBug: 162274240\nTest: unittest pass, genertes an OTA\nChange-Id: I12c952593d83a8e34a0a6cff5a2066c9103a0d30\n"
    },
    {
      "commit": "5ef2d8ae7bc8ccd03ea8fc19e3e0b9a11f1dfeaf",
      "tree": "66aea10d27de030070b6d37d9ae7de3cc0c49cda",
      "parents": [
        "5243d0d880cbc77f59da558369d95d848d46472e"
      ],
      "author": {
        "name": "Ankit Goyal",
        "email": "layog@google.com",
        "time": "Wed Aug 26 07:01:26 2020 +0000"
      },
      "committer": {
        "name": "Ankit Goyal",
        "email": "layog@google.com",
        "time": "Wed Aug 26 07:24:07 2020 +0000"
      },
      "message": "Revert \"Expose extent_ranges for libsnapshot to use in resolving...\"\n\nRevert \"libsnapshot: Off-line tool for converting OTA payloads t...\"\n\nRevert submission 1405248-vab-offline-cow\n\nReason for revert: Reason for revert: Droidcop-triggered revert due to breakage https://android-build.googleplex.com/builds/quarterdeck?branch\u003dgit_master-without-vendor\u0026target\u003dsdk_mac\u0026lkgb\u003d6790614\u0026lkbb\u003d6791107\u0026fkbb\u003d6791107, bug 166383275\nReverted Changes:\nIf8a1bbf99:Expose extent_ranges for libsnapshot to use in res...\nI22c86546f:libsnapshot: Off-line tool for converting OTA payl...\n\nChange-Id: Ifa26210fc526585535d67ff9475076eb18560633\n"
    },
    {
      "commit": "1f3f3b012546bb54ae07c4a72df51d13adc9981d",
      "tree": "de4ae5d55ba289dbfbd3a458913c87ba50da984b",
      "parents": [
        "9e7a6db36721dc14a17da32394e8c0e5b234e159"
      ],
      "author": {
        "name": "David Anderson",
        "email": "dvander@google.com",
        "time": "Mon Aug 17 12:04:23 2020 -0700"
      },
      "committer": {
        "name": "David Anderson",
        "email": "dvander@google.com",
        "time": "Fri Aug 21 23:05:32 2020 +0000"
      },
      "message": "Expose extent_ranges for libsnapshot to use in resolving merge sequences.\n\nBug: 162274240\nTest: builds\nChange-Id: If8a1bbf99f9195d69b375021b59a7213935924b9\n"
    },
    {
      "commit": "a6e1812a9ba8a897cd7b22c72bdbfbe09f1a9a65",
      "tree": "d3e21138b2ea9753275d901ad6fd5dd08a2b658c",
      "parents": [
        "5d7a1de410f98011b18306c679eec2cf29cda85f"
      ],
      "author": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Thu Aug 06 15:53:25 2020 -0400"
      },
      "committer": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Wed Aug 12 21:14:13 2020 -0400"
      },
      "message": "Remove metric_report_android.cc from unittests\n\nWe don\u0027t need metric reporting for unittests. And the android reporter\noften causes dynamic linking issues if the unittest is ran on a\ndifferent target(sargo vs aosp_sargo). This change should make it easier\nto run atests.\n\nTest: atest update_engine_unittests\nChange-Id: I92367ff906472ea0513112da0d4e7cfd3bab2a84\n"
    },
    {
      "commit": "d51738c481012763aaa9c736267799fd70a77956",
      "tree": "4998972390063c5f10dc6d27d3df7f07a7d358e9",
      "parents": [
        "2562cf2960c97acdaac2dee7e306cd3c88cd9c68"
      ],
      "author": {
        "name": "Yifan Hong",
        "email": "elsk@google.com",
        "time": "Thu Jul 23 17:06:25 2020 -0700"
      },
      "committer": {
        "name": "Yifan Hong",
        "email": "elsk@google.com",
        "time": "Tue Aug 04 19:06:06 2020 +0000"
      },
      "message": "Add update_engine_stable_client\n\nThis is a update_engine console client installed to APEXes so that\nscripts can invoke on. This client operates on the IUpdateEngineStable\nservice.\n\nTest: pass\nBug: 160996544\n\nChange-Id: I0672b7bd1ccd87e35ffb99d7a66e63dffaf7df24\n"
    },
    {
      "commit": "2562cf2960c97acdaac2dee7e306cd3c88cd9c68",
      "tree": "7c45b7d14abd6710b55aa01240f51c7fa04f1bdf",
      "parents": [
        "2b291f05765486899cf0b4e8eda83bc89f083271"
      ],
      "author": {
        "name": "Yifan Hong",
        "email": "elsk@google.com",
        "time": "Tue Jul 21 19:28:44 2020 -0700"
      },
      "committer": {
        "name": "Yifan Hong",
        "email": "elsk@google.com",
        "time": "Tue Aug 04 19:06:06 2020 +0000"
      },
      "message": "Add binder_service_stable_android\n\nAdd a new binder service that uses the exact same service delegate as\nits implementation, but exposes itself with the IUpdateEngineStable* APIs.\n\nNote: Even though the new interface requires only one binding at a time,\nrace conditions for different clients are NOT handled in this CL.\nMultiple binding is still possible via the unstable IUpdateEngine API\nand via the Java android.os.UpdateEngine interface. Moreover, bindings\nwith bind(IUpdateEngineStableCallback) and bind(IUpdateEngineCallback)\nare handled separately.\n\nTest: unit test\nBug: 160996544\n\nChange-Id: I26e8b4a58c0243d46ffcd7354d04f0c69f8fa66f\n"
    },
    {
      "commit": "9dd9305611074c2b16d0f6efb532efe739f2521c",
      "tree": "a7b47f37c0cf27fd0d1993e4cc6ceddf2e99e731",
      "parents": [
        "e283ce414e749e599d0ffad31897bc5e25450cad"
      ],
      "author": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Tue Jul 21 17:31:19 2020 -0400"
      },
      "committer": {
        "name": "Kelvin Zhang",
        "email": "zhangkelvin@google.com",
        "time": "Fri Jul 31 14:53:55 2020 -0400"
      },
      "message": "Add unit test for fallback route of manifest cache\n\nTest: Run atest\nChange-Id: Icc6a2c809c571c3ad8e16a863c37afd8d4042ed6\n"
    },
    {
      "commit": "55abd3cbae6bd150b3534728a63befd1cadd6c5e",
      "tree": "0077b57b1ef96c194380908311ce2a993fb1a89c",
      "parents": [
        "99d570d67bd5dab11de321068c4002ab76ae774a",
        "694eeb0dece40f88e11ece3a776d995d855be79b"
      ],
      "author": {
        "name": "Tianjie",
        "email": "xunchang@google.com",
        "time": "Fri Jun 19 00:22:59 2020 -0700"
      },
      "committer": {
        "name": "Tianjie",
        "email": "xunchang@google.com",
        "time": "Mon Jul 06 11:24:36 2020 -0700"
      },
      "message": "Merge remote-tracking branch \u0027aosp/upstream-master\u0027 into merge\n\nIt\u0027s a merge from chrome OS with some reverts.\n1. the fd watcher change, because the libbrillo version isn\u0027t\ncompatible in aosp.\ncommit 6955bcc4ffe4cc9d62a88186b9a7e75d095a7897\ncommit 493fecb3f48c8478fd3ef244d631d857730dd14d\n2. two libcurl unittest. Because the RunOnce() of the fake message\nloop seems to have different behavior in aosp.\ncommit d3d84218cafbc1a95e7d6bbb775b495d1bebf4d2\n\nPut preprocessor guards to use the old code in aosp. And we can\nswitch to the new code in the other path after adopting the new\nlibbrillo \u0026 libchrome.\n\nTest: unit tests pass, apply an OTA\nChange-Id: Id613599834b0f44f92841dbeae6303601db5490d\n"
    },
    {
      "commit": "99d570d67bd5dab11de321068c4002ab76ae774a",
      "tree": "6310389d540a3bd86a3810c0d128e3880b9f0864",
      "parents": [
        "d3865d1bc4298739652ee101d1b625fb12361f9b"
      ],
      "author": {
        "name": "Tianjie",
        "email": "xunchang@google.com",
        "time": "Thu Jun 04 14:57:19 2020 -0700"
      },
      "committer": {
        "name": "Tianjie",
        "email": "xunchang@google.com",
        "time": "Mon Jun 15 15:40:55 2020 -0700"
      },
      "message": "Implement PartitionUpdateGenerator for partial updates\n\nImplement the logic in PartitionUpdateGenerator. Here\u0027s the summary,\n1. finds the a/b partitions (both static \u0026 dynamic) on the device\n\nFor partitions not included in the payload:\n2. calculates the partition hash for filesystem verification\n3. generates one SOURCE_COPY operation for each static partition\n\nThe order of the partitions are sorted. So the update will resume from\nthe correct operation in case it\u0027s interruptted.\n\nBug: 157778739\nTest: run a partial OTA with boot \u0026 system_ext\nChange-Id: I5683b85e3c6dab813a33d5144aceb996fd8163d4\n"
    },
    {
      "commit": "d3865d1bc4298739652ee101d1b625fb12361f9b",
      "tree": "fecda7a0207e8901999152719e1244fe9adeeb02",
      "parents": [
        "13e4195d65fb8a5583b7acb9cc0763733e8fca86"
      ],
      "author": {
        "name": "Tianjie",
        "email": "xunchang@google.com",
        "time": "Wed Jun 03 15:25:17 2020 -0700"
      },
      "committer": {
        "name": "Tianjie Xu",
        "email": "xunchang@google.com",
        "time": "Tue Jun 09 22:23:20 2020 +0000"
      },
      "message": "Add PartitionUpdateGenerator\n\nFor a/b partial update, the payload doesn\u0027t contain all partitions\nfor the device to boot up. Therefore, we add a new class to generate\nadditional operations on top of the partial update. The class is used\nin payload consumer when the install plan is created.\n\nIn specific, the new class parses for the a/b partitions not included in\nthe payload. Then, for static partitions, it generates SOURCE_COPY\noperations to copy the bytes from the source slot to target slot. For\ndynamic partitions, it only calculates the partition hash for the filesystem\nverification later.\n\nBug: 157778739\nTest: do a partial OTA\nChange-Id: Ia5c64cff4655aad05311b0e7c8c8327bc2f4fd91\n"
    }
  ],
  "next": "e757420cd6042fb68d9a3630a0d00e795c3f2ffe"
}
