)]}'
{
  "log": [
    {
      "commit": "e7f89bf4a6b80aa154f62ce8b9e44bf56bb2c790",
      "tree": "5d88d20bbb6f1172676bf95f79a1451bc4d2601f",
      "parents": [
        "a84bf315720e467a6c554fa462b523f26ad76d31",
        "240c2b8782fb3b1688d3c05344dfb4efe940f86d"
      ],
      "author": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Wed May 30 16:59:18 2018 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed May 30 16:59:18 2018 -0700"
      },
      "message": "Recover source hash failures on other source operations. am: 77ab7bdf2d\nam: 240c2b8782\n\nChange-Id: Ib9f0302934df4784558c289008fffff8e69f7302\n"
    },
    {
      "commit": "77ab7bdf2dcf7fd4aa982e654f359958ad7ab0c3",
      "tree": "81831f51ba58f7222c1c1a10d564ed15541a234a",
      "parents": [
        "8712e96150cd37ff776c2401b2a944c3c3b73cd3"
      ],
      "author": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Tue May 22 17:24:23 2018 -0700"
      },
      "committer": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Wed May 30 23:48:57 2018 +0000"
      },
      "message": "Recover source hash failures on other source operations.\n\nIn addition to SOURCE_COPY, now SOURCE_BSDIFF, BROTLI_BSDIFF and\nPUFFDIFF will also recover source hash failures using error correction\ndata.\n\nBug: 34284069\nTest: update_engine_unittests\nChange-Id: I536d0675e3550aa142b77b4c8bf0a9f70a789652\n"
    },
    {
      "commit": "dcaf7974410a2674c8f6b315402082c7564e14ec",
      "tree": "6eb32764ac61de2d304f0b3b91a9afa70a702b94",
      "parents": [
        "28d8ed9cf3aff69f4d71f9f9b62e9dd3b9c07073"
      ],
      "author": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Fri May 11 16:03:23 2018 -0700"
      },
      "committer": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Fri May 18 11:17:30 2018 -0700"
      },
      "message": "Support a range of major and minor version.\n\nIn DeltaPerformer we set a supported major and minor version and only\naccept that perticular version, but in reality we still support older\nversions to test backward comatibility.\n\nThis CL change the supported major and minor version to a range to\nreflect the truth of which version is supported and moved them to\npayload_constants.\n\nThis is also useful when we have multi payload and want to reuse old\npayload for non system partition while updating the system partition\nto use a higher minor version.\n\nBug: 36289531\nTest: update_engine_unittests\nChange-Id: I49d73d69e64d78dfc2db21446faa98b3579ff995\nMerged-In: I49d73d69e64d78dfc2db21446faa98b3579ff995\n"
    },
    {
      "commit": "f123663efe3deafde5759dfb96ff31cc2134ea01",
      "tree": "3e17842411c01adf83a456b2c97e91147aa0f43a",
      "parents": [
        "4d6d0380f4e58feb8e6db9fe8bb627e3db8c17bd"
      ],
      "author": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Fri May 11 16:03:23 2018 -0700"
      },
      "committer": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Thu May 17 18:08:05 2018 -0700"
      },
      "message": "Support a range of major and minor version.\n\nIn DeltaPerformer we set a supported major and minor version and only\naccept that perticular version, but in reality we still support older\nversions to test backward comatibility.\n\nThis CL change the supported major and minor version to a range to\nreflect the truth of which version is supported and moved them to\npayload_constants.\n\nThis is also useful when we have multi payload and want to reuse old\npayload for non system partition while updating the system partition\nto use a higher minor version.\n\nBug: 36289531\nTest: update_engine_unittests\nChange-Id: I49d73d69e64d78dfc2db21446faa98b3579ff995\nMerged-In: I49d73d69e64d78dfc2db21446faa98b3579ff995\n"
    },
    {
      "commit": "28d8ed9cf3aff69f4d71f9f9b62e9dd3b9c07073",
      "tree": "bad32bdc242e86ae3f8a18d3ce8a94f99e79f81c",
      "parents": [
        "b5f601d35d80d6e90dae881bdfd31dcde1b75d35"
      ],
      "author": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Thu Feb 01 13:46:39 2018 -0800"
      },
      "committer": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Fri May 11 17:20:09 2018 -0700"
      },
      "message": "Implement VerifyPayloadApplicable.\n\nParse the payload metadata and validate the source hash of all operations.\nReturn false if any error occur or hash mismatch.\n\nBug: 65283633\nTest: mma\n\nChange-Id: I6f5ae3cb69f4de973cecd0e3d7b733a48b2462f1\n(cherry picked from commit 8371c1c852eae461043d8a3d911394a0ec0db909)\n"
    },
    {
      "commit": "b5f601d35d80d6e90dae881bdfd31dcde1b75d35",
      "tree": "6022190804e956df1d35ca34eba812f87df0c693",
      "parents": [
        "20c96723e97755d7480ba09d6d93f63166bf8481"
      ],
      "author": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Fri Feb 02 13:51:21 2018 -0800"
      },
      "committer": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Fri May 11 17:19:51 2018 -0700"
      },
      "message": "Split payload metadata logic from DeltaPerformer into its own class.\n\nDeltaPerformer have code for both parsing payload and performing\noperations. This change moves parsing payload header and validating\nmetadata signature to a new class PayloadMetadata so that\nDeltaPerformer can focus on performing.\n\nWe will also have new code in another class that will use the new\nPayloadMetadata class to parse payload metadata.\n\nBug: 65283633\nTest: update_engine_unittests\nChange-Id: Ie20b84713a0c66867a1de9d3d0cc29d0189b3c97\n(cherry picked from commit 9c89e8499abeac3894718120d12b41301ffa3fc1)\n"
    },
    {
      "commit": "ae3e77c7e3267c1698003d43d6b31fa11c89f44b",
      "tree": "bb7b1ac0dda5509fb423a1136036ee1496782f78",
      "parents": [
        "41f5a014940026616c0f61d1efa2251cc100bf8a",
        "4630ec1601c78f53f33076aa2dbeafe99d039fc0"
      ],
      "author": {
        "name": "Alex Deymo",
        "email": "deymo@google.com",
        "time": "Thu May 10 15:46:09 2018 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu May 10 15:46:09 2018 -0700"
      },
      "message": "Recover source hash failures on SOURCE_COPY operations. am: 51c264e33e\nam: 4630ec1601\n\nChange-Id: I39abd31949bb64582dc2e61bc41857d22c4881f0\n"
    },
    {
      "commit": "51c264e33e6769f37d56a4f6aa28a4c2cc771e16",
      "tree": "030ac68f71c39b8c2e64556df3174e83c8455041",
      "parents": [
        "96e36724112591c8c08129c66a7ceeb35a3d934c"
      ],
      "author": {
        "name": "Alex Deymo",
        "email": "deymo@google.com",
        "time": "Fri Nov 04 15:49:53 2016 -0700"
      },
      "committer": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Thu May 10 22:28:51 2018 +0000"
      },
      "message": "Recover source hash failures on SOURCE_COPY operations.\n\nSOURCE_COPY operations may fail due to a mismatch in the source data\nread from the device and the expected hash of such data as specified in\nthe operation. This means either a failure to read the source partition\nblock device or corrupt data on the source partition.\n\nA device in this state may continue to work even with a corrupt source\npartition if the corrupt block has not be accessed or if the error\ncorrection data stored with the verity metadata is able to correct that\nblock.\n\nThis patch attempts to use libfec to parse the error-correction data and\ncorrect the corrupt blocks when the source hash mismatches in\nSOURCE_COPY operations.\n\nBug: 34284069\nTest: Added unittests to the error-correction fallback logic.\n\nChange-Id: I9400405071de0d124ab3330c335b8ab87e60532e\n"
    },
    {
      "commit": "8411ae85f8fb470bf2df1a927e5fbef880045a7a",
      "tree": "39d477d2166afec7747362a02eb83c51c0af784e",
      "parents": [
        "6c6ca4fcd24ac4510a65aace1f0a5389e9211946",
        "94f9c0c5929bdf3e7b5d25554ddad7efd2d1e25e"
      ],
      "author": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Fri Apr 27 17:29:16 2018 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri Apr 27 17:29:16 2018 -0700"
      },
      "message": "Move calling BZ2_bzDecompressEnd() to destructor. am: ac773deff2\nam: 94f9c0c592\n\nChange-Id: I2f07424f4510d608f02ee4ddd4e0e6574087bf43\n"
    },
    {
      "commit": "ac773deff2287f0f3a2da52919efa2eefd574970",
      "tree": "46917af5f20dba2f1c1a3e421bb20bbd5933a221",
      "parents": [
        "128936fb266af57d19e1faced52d686d271519d6"
      ],
      "author": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Thu Apr 26 15:50:13 2018 -0700"
      },
      "committer": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Sat Apr 28 00:13:48 2018 +0000"
      },
      "message": "Move calling BZ2_bzDecompressEnd() to destructor.\n\nNot calling it could lead to memory leaks.\n\nTest: fail a REPLACE_BZ operation repeatedly\nChange-Id: I898b5c71f8963a70647ae08ae81466e22b98cbfb\n"
    },
    {
      "commit": "6c6ca4fcd24ac4510a65aace1f0a5389e9211946",
      "tree": "fcb6a92e0b1c6d29aa69e1c7287b89ed05b2e303",
      "parents": [
        "131238b0c952e378f34bfd2cbd4e40bfd085e539",
        "e1f78fdc4d2d453c2f74dac16e1883ddd37dd921"
      ],
      "author": {
        "name": "Yoshitaka Ishida",
        "email": "yoshitaka.ishida@sony.com",
        "time": "Wed Apr 25 12:37:55 2018 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed Apr 25 12:37:55 2018 -0700"
      },
      "message": "postinstall: fixed postinst_action_progress is NaN am: 128936fb26\nam: e1f78fdc4d\n\nChange-Id: I7f6766bba8445c78d152fb2fb784cd878ea52e75\n"
    },
    {
      "commit": "128936fb266af57d19e1faced52d686d271519d6",
      "tree": "515701ecf4854448cf4ce23304c1696e10e99709",
      "parents": [
        "51c3e5d3446d8c3fdb16f93b91534a308e114649"
      ],
      "author": {
        "name": "Yoshitaka Ishida",
        "email": "yoshitaka.ishida@sony.com",
        "time": "Fri Feb 16 18:20:07 2018 +0900"
      },
      "committer": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Wed Apr 25 19:28:47 2018 +0000"
      },
      "message": "postinstall: fixed postinst_action_progress is NaN\n\nIf no postinstall is defined, total_weight_ is 0.\nWhen total_weight_ is 0, the result of division is NaN.\nThe NaN is set to postinst_action_progress, and update_engine\nsends the NaN for other software(ex. application) by callback.\nThe software might show the NaN value on screen as decimal\nfraction(double).\nUpdate_engine should not send NaN in this case.\n\nBug: 78199138\nTest: manual - Create update.zip with AB_OTA_POSTINSTALL_CONFIG\u003d(null)\n      Then, Run ./update_device.py --file update.zip,\n      and check log\n\nChange-Id: I1ab5e607bc6598262c47b58b2fe7415195d913a4\n"
    },
    {
      "commit": "61c753193ba6e178a518ad0b00aba7a1b84328ca",
      "tree": "c303a7d2105b32f6df851a5ea89db94b040ddbfe",
      "parents": [
        "474ed122d1eed21b0411361b0a8479b8533c8792",
        "b62bb6ab3317d60766a00d3b79e62d6f582e6c4a"
      ],
      "author": {
        "name": "Amin Hassani",
        "email": "ahassani@google.com",
        "time": "Tue Apr 10 17:35:54 2018 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue Apr 10 17:35:54 2018 -0700"
      },
      "message": "Replace is_interactive with interactive for consistency in the code. am: ed37d6819b\nam: b62bb6ab33\n\nChange-Id: I7f79eaf487664237b8b5225c210e8dc01cf94f2f\n"
    },
    {
      "commit": "ed37d6819b336ebb815233e896aa56f40755ab5c",
      "tree": "2fdd57f0838e02cf90a7293826212faafe03fdf7",
      "parents": [
        "49a08972bae293f4b5f8403d5e87c9d12b0329d9"
      ],
      "author": {
        "name": "Amin Hassani",
        "email": "ahassani@google.com",
        "time": "Fri Apr 06 13:22:00 2018 -0700"
      },
      "committer": {
        "name": "Amin Hassani",
        "email": "ahassani@google.com",
        "time": "Fri Apr 06 13:23:45 2018 -0700"
      },
      "message": "Replace is_interactive with interactive for consistency in the code.\n\nBug: none\nTest: unittests\nChange-Id: I8c98860cfeadb52c7f8e4931d2ad154ae4211d47\n"
    },
    {
      "commit": "6d7c0a578b330a7d8b5af412c7f3f197bbd557c5",
      "tree": "983dd61a29c3fa8576ec7cc6797d61d95ded98a2",
      "parents": [
        "8905bd8bd617a9194f29eb44ff5d71262fcf4b7d",
        "5e67287bc19e37ab071a2c3aa8edb8cad511041a"
      ],
      "author": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Thu Apr 05 16:25:12 2018 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Apr 05 16:25:12 2018 -0700"
      },
      "message": "Correct some spellings. am: 771f6486a3\nam: 5e67287bc1\n\nChange-Id: I98a5bd68116da28a5bbcc61da6830e188d854be0\n"
    },
    {
      "commit": "771f6486a3b0333d43a2f8c743bfb945dca9db2c",
      "tree": "c72aa56680550f17c2b60621a1ede140f550aec8",
      "parents": [
        "a57d53e3edbda255a938a7dc76a2f38faeb520d4"
      ],
      "author": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Wed Apr 04 17:59:10 2018 -0700"
      },
      "committer": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Wed Apr 04 18:07:19 2018 -0700"
      },
      "message": "Correct some spellings.\n\nTest: mma\nChange-Id: Icc49a4ee76f12d302ed18982d334f2f70b7263a8\n"
    },
    {
      "commit": "b044055c557e571ba4de415a76b675a7b55f7b83",
      "tree": "5c305fab6edd4ff783a4987b37098758751ec263",
      "parents": [
        "a6715642256227c2462985250320709256fed5fc",
        "eb5dd35f81839490c11d4253d5100435515cde65"
      ],
      "author": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Fri Mar 16 20:59:50 2018 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri Mar 16 20:59:50 2018 +0000"
      },
      "message": "Fix attempt number for multi payload. am: 7ebfccfab8\nam: eb5dd35f81\n\nChange-Id: I084ba14bc4a372781f82451512fa8d5560dd46e5\n"
    },
    {
      "commit": "7ebfccfab86af1904534c444929ef4f3e7cea8b3",
      "tree": "569b759e7ccc4e687e9456cd341c55d59b9f3afc",
      "parents": [
        "42fa45e78aeee0985ecae558887d30276bfc45f0"
      ],
      "author": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Thu Mar 15 13:55:55 2018 -0700"
      },
      "committer": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Thu Mar 15 16:34:22 2018 -0700"
      },
      "message": "Fix attempt number for multi payload.\n\nVerifyPayload() is called for every payload, so we shouldn\u0027t call\nDownloadComplete() in there, move it to DownloadAction after all\npayloads are applied.\n\nBug: 74980927\nTest: check UpdateEngine.SuccessfulUpdate.AttemptCount in log\nTest: update_engine_unittests\nChange-Id: Iddb0ab111a7893f0c7bbf7a5119bd517ac5410a7\n"
    },
    {
      "commit": "7bee1b437e04d2a6c1b29179fd99261b39316129",
      "tree": "a3d97e841a55362f667fb0261842ad9b9bf0cc7a",
      "parents": [
        "880e2be7471409e68de790fa9c20bc4348a9c694",
        "f7006be5079ed91c93223273f3ddb69d655ba858"
      ],
      "author": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Fri Mar 09 15:01:33 2018 -0800"
      },
      "committer": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Fri Mar 09 15:01:33 2018 -0800"
      },
      "message": "Merge remote-tracking branch \u0027goog/upstream-master\u0027.\n\nBug: 30989362\nTest: update_engine_unittests\nChange-Id: I04417ac21508f4da3ead29b1dea34886f2fc84af\nMerged-In: I04417ac21508f4da3ead29b1dea34886f2fc84af\n"
    },
    {
      "commit": "84e0e31e0c55ca1cec966991f22fe9f494534afa",
      "tree": "4c17bdbc93e22a0904d50fac7cb8df423cae3b28",
      "parents": [
        "f87e5cd57a7d543c54327e342cea7f46fd819a90",
        "f7006be5079ed91c93223273f3ddb69d655ba858"
      ],
      "author": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Thu Mar 08 18:07:12 2018 -0800"
      },
      "committer": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Fri Mar 09 14:32:19 2018 -0800"
      },
      "message": "Merge remote-tracking branch \u0027aosp/upstream-master\u0027.\n\nBug: 30989362\nTest: update_engine_unittests\nChange-Id: I04417ac21508f4da3ead29b1dea34886f2fc84af\nMerged-In: I04417ac21508f4da3ead29b1dea34886f2fc84af\n"
    },
    {
      "commit": "e7f1ac4f4c25c2af535efdb684037fa283098b0f",
      "tree": "74095d1648829caad907fe0177ac5fe36045293f",
      "parents": [
        "e20eb915eb1d9777bbcdcffb324ce92014cafa79"
      ],
      "author": {
        "name": "Amin Hassani",
        "email": "ahassani@google.com",
        "time": "Tue Feb 13 14:20:52 2018 -0800"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Tue Mar 06 17:22:41 2018 -0800"
      },
      "message": "update_engine: bump minor version to 5\n\nWe recently disable puffin in minor version 4 and enabled it in minor version\n5. This patch bumps the minor version to 5.\n\nBUG\u003dchromium:810184\nTEST\u003dbrillo_update_payload {generate|verify}\n\nChange-Id: I06b92f792fbc05c0acec062f8f3ff5d7305bd0a0\nReviewed-on: https://chromium-review.googlesource.com/917306\nCommit-Ready: Amin Hassani \u003cahassani@chromium.org\u003e\nTested-by: Amin Hassani \u003cahassani@chromium.org\u003e\nReviewed-by: Ben Chan \u003cbenchan@chromium.org\u003e\n"
    },
    {
      "commit": "13ca39f04b9d9db5571a93944809af010a1feb2c",
      "tree": "bbc272c0c79aff63b38787d64a2b4a82c632f287",
      "parents": [
        "77d7cbcef1ca1afd36720ec7ec74039b5445101e"
      ],
      "author": {
        "name": "Amin Hassani",
        "email": "ahassani@google.com",
        "time": "Wed Feb 28 11:54:47 2018 -0800"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Mon Mar 05 18:34:25 2018 -0800"
      },
      "message": "Match update_engine puffin API to the ToT\n\nPuffin stream API has changed. This patch reflects those changes in\nupdate_engine.\n\nBug: 73781483\nTest: Unittests\nCQ-DEPNED\u003dCL:946862\n\nChange-Id: Ie2068e42e2648724e236cadc15493aaf41f5d040\n(cherry picked from commit 678a68f298a4e2a0435ea612cbbd120bf5f7f6be in cros/upstream)\nReviewed-on: https://chromium-review.googlesource.com/946886\nCommit-Ready: Amin Hassani \u003cahassani@chromium.org\u003e\nTested-by: Amin Hassani \u003cahassani@chromium.org\u003e\nReviewed-by: Ben Chan \u003cbenchan@chromium.org\u003e\n"
    },
    {
      "commit": "efb6e6b4d822b5576334f1a8931c67c7e20789bb",
      "tree": "d01cda347b01133635fdefca91596484c092653a",
      "parents": [
        "0366795070b8b723c3449b80e6b9165efa89d8f7",
        "396ae1ee0cc4ea668a0200c6c556f32d8216ade5"
      ],
      "author": {
        "name": "Amin Hassani",
        "email": "ahassani@google.com",
        "time": "Fri Mar 02 00:49:47 2018 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri Mar 02 00:49:47 2018 +0000"
      },
      "message": "Match update_engine puffin API to the ToT am: 678a68f298 am: 57d2300130\nam: 396ae1ee0c\n\nChange-Id: I075252eb028a87f5309a8ca6bf3a7be2175378d0\n"
    },
    {
      "commit": "396ae1ee0cc4ea668a0200c6c556f32d8216ade5",
      "tree": "cdbe09f6234b70105c2a290d797390e52b7c18d7",
      "parents": [
        "c72bc8708544c44fa0268e826e5b36946cfc7732",
        "57d2300130b9d737a28bd6f9cbdd99b1440598eb"
      ],
      "author": {
        "name": "Amin Hassani",
        "email": "ahassani@google.com",
        "time": "Fri Mar 02 00:46:01 2018 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri Mar 02 00:46:01 2018 +0000"
      },
      "message": "Match update_engine puffin API to the ToT am: 678a68f298\nam: 57d2300130\n\nChange-Id: Ieec71861c3f15b0ffa69c2d826e8c2f83fb8ab78\n"
    },
    {
      "commit": "678a68f298a4e2a0435ea612cbbd120bf5f7f6be",
      "tree": "14c5e76d8639d2ef0562762ac6b5f15bc4e8c868",
      "parents": [
        "ba2213a53e110e127ebab4fc27e8af06a3ca6602"
      ],
      "author": {
        "name": "Amin Hassani",
        "email": "ahassani@google.com",
        "time": "Wed Feb 28 11:54:47 2018 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Mar 02 00:30:57 2018 +0000"
      },
      "message": "Match update_engine puffin API to the ToT\n\nPuffin stream API has changed. This patch reflects those changes in\nupdate_engine.\n\nBug: 73781483\nTest: Unittests\nChange-Id: Ie2068e42e2648724e236cadc15493aaf41f5d040\n"
    },
    {
      "commit": "0366795070b8b723c3449b80e6b9165efa89d8f7",
      "tree": "07e91178e5b5dfd0b773747a574ac2ebb0264352",
      "parents": [
        "5bf2c2927fad189c4f0d427cb43c601ef550880d",
        "c72bc8708544c44fa0268e826e5b36946cfc7732"
      ],
      "author": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Thu Mar 01 01:24:26 2018 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Mar 01 01:24:26 2018 +0000"
      },
      "message": "Fix P2PDownloadActionTest. am: ba2213a53e am: 0a735f14cb\nam: c72bc87085\n\nChange-Id: I2bc5ebbbcb890a5a1f05385d30b7506e9856fa05\n"
    },
    {
      "commit": "c72bc8708544c44fa0268e826e5b36946cfc7732",
      "tree": "010731b9f630c388263e39f0e19441f023c48317",
      "parents": [
        "a942d63daa91947219085260b062c8978392633c",
        "0a735f14cb882ee35246658310871f7de382a59a"
      ],
      "author": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Thu Mar 01 01:20:04 2018 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Mar 01 01:20:04 2018 +0000"
      },
      "message": "Fix P2PDownloadActionTest. am: ba2213a53e\nam: 0a735f14cb\n\nChange-Id: Iaa0fe6f450926b7da0a0e2cef5ab67958712f936\n"
    },
    {
      "commit": "ba2213a53e110e127ebab4fc27e8af06a3ca6602",
      "tree": "1385d8e62a1a714cc4802d482b51bce22ff5a728",
      "parents": [
        "6bb001ff0c2a6b0f26e50354e6a53cd37eb780d4"
      ],
      "author": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Tue Feb 27 16:28:20 2018 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Mar 01 01:04:43 2018 +0000"
      },
      "message": "Fix P2PDownloadActionTest.\n\nDownloadAction is now always using MultiRangeHttpFetcher, so had to\nimplement MultiRangeHttpFetcher::SetOffset() for unittest.\n\nBug: 73949420\nTest: tests pass\n\nChange-Id: I4ced2431e6a649402a318d601c384e998ef96b47\n"
    },
    {
      "commit": "77d7cbcef1ca1afd36720ec7ec74039b5445101e",
      "tree": "6305cce22e391284bc5b06bce00928ba7fb8d69d",
      "parents": [
        "15de2fd0ff2d19a7ef36a0f28bb5df028163605c"
      ],
      "author": {
        "name": "Amin Hassani",
        "email": "ahassani@google.com",
        "time": "Wed Feb 07 16:21:33 2018 -0800"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Thu Feb 08 23:41:46 2018 -0800"
      },
      "message": "update_engine: Disable puffin in minor version 4\n\nThis patch disables puffin for minor version 4, but keeps BROTLI_BSDIFF in the\nsame minor version.  Also adds puffin for minor version 5, but it does not\nenable it.\n\nBUG\u003db:72815313\nBUG\u003dchromium:810184\nTEST\u003dupdate_engine unittests pass\nTEST\u003dupdate_payload unittests pass\nTEST\u003dtest_paycheck.sh on two images with minor version 4 pass\nTEST\u003dbrill_update_payload generate/verify pass\n\nChange-Id: I814fc126d67207501d419cff9c575cd13d877b48\nReviewed-on: https://chromium-review.googlesource.com/907223\nCommit-Ready: Amin Hassani \u003cahassani@chromium.org\u003e\nTested-by: Amin Hassani \u003cahassani@chromium.org\u003e\nReviewed-by: Amin Hassani \u003cahassani@chromium.org\u003e\n"
    },
    {
      "commit": "6179054c4abe0c5be02a2e7e281b95d0eb5602d6",
      "tree": "d42ae72d1d602d8592a70cad7737268a05feaaa5",
      "parents": [
        "50daf71d2477a39a8af8632007614dfb6873e673",
        "8371c1c852eae461043d8a3d911394a0ec0db909"
      ],
      "author": {
        "name": "Tao Bao",
        "email": "tbao@google.com",
        "time": "Fri Feb 09 01:05:02 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 09 01:05:02 2018 +0000"
      },
      "message": "Merge changes from topic \"checksum-api\"\n\n* changes:\n  Implement VerifyPayloadApplicable.\n  Split payload metadata logic from DeltaPerformer into its own class.\n  Add a binder function verifyPayloadApplicable().\n"
    },
    {
      "commit": "7ea80bd982e82c1929577d71719338d512b4f8c7",
      "tree": "39985362166a6e5dc83c64f3e513390290720544",
      "parents": [
        "dbc44fc4df6564152e131cc32922e2c211d7534a",
        "d9ce49c9972518bef183507d544dc529c33bfb67"
      ],
      "author": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Thu Feb 08 22:09:40 2018 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Feb 08 22:09:40 2018 +0000"
      },
      "message": "Fix End() not called on ExtentWriter. am: bcb15aaae8\nam: d9ce49c997\n\nChange-Id: I529593a5b42762ddd725971f752698a048b39226\n"
    },
    {
      "commit": "bcb15aaae8ce567c940837ff564c904c4733cfcd",
      "tree": "8df52eba4d3e4a53005f1a08fae0a52099253e87",
      "parents": [
        "7d2800522c9cbc134c13dc920119d5eb1aa2acb9"
      ],
      "author": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Wed Feb 07 18:01:48 2018 -0800"
      },
      "committer": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Thu Feb 08 21:55:11 2018 +0000"
      },
      "message": "Fix End() not called on ExtentWriter.\n\nPass the DirectExtentWriter as a pointer to CommonHashExtents to avoid\nconstructing the class if we are not using it.\n\nBug: 73085863\nTest: brillo_update_payload verify a delta payload\nChange-Id: Ie76aa1b533cafc7d649fd55316d9b1c6066822ba\n"
    },
    {
      "commit": "8371c1c852eae461043d8a3d911394a0ec0db909",
      "tree": "6db6364ca1f59bc79d07e153ba6cc21d6027fcef",
      "parents": [
        "9c89e8499abeac3894718120d12b41301ffa3fc1"
      ],
      "author": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Thu Feb 01 13:46:39 2018 -0800"
      },
      "committer": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Wed Feb 07 13:28:07 2018 -0800"
      },
      "message": "Implement VerifyPayloadApplicable.\n\nParse the payload metadata and validate the source hash of all operations.\nReturn false if any error occur or hash mismatch.\n\nBug: 65283633\nTest: mma\n\nChange-Id: I6f5ae3cb69f4de973cecd0e3d7b733a48b2462f1\n"
    },
    {
      "commit": "9c89e8499abeac3894718120d12b41301ffa3fc1",
      "tree": "19a008649238f8f77a92ba01572aebc44f518217",
      "parents": [
        "07fbb1b7dff86d8b26bf976b72f2722fde66b603"
      ],
      "author": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Fri Feb 02 13:51:21 2018 -0800"
      },
      "committer": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Tue Feb 06 13:45:34 2018 -0800"
      },
      "message": "Split payload metadata logic from DeltaPerformer into its own class.\n\nDeltaPerformer have code for both parsing payload and performing\noperations. This change moves parsing payload header and validating\nmetadata signature to a new class PayloadMetadata so that\nDeltaPerformer can focus on performing.\n\nWe will also have new code in another class that will use the new\nPayloadMetadata class to parse payload metadata.\n\nBug: 65283633\nTest: update_engine_unittests\nChange-Id: Ie20b84713a0c66867a1de9d3d0cc29d0189b3c97\n"
    },
    {
      "commit": "50db9b67c89f3a7fddb7357a2f3f1eb4ffb4fa80",
      "tree": "f70b93f8995383c5b8a26c3bca2f271e6291c42c",
      "parents": [
        "8cbf2b7525801b01a2cce6f972526ce821dbb3b9",
        "6085a0e6c2fce9a3db809b8a8033cf06e86c4987"
      ],
      "author": {
        "name": "Amin Hassani",
        "email": "ahassani@google.com",
        "time": "Tue Feb 06 03:45:07 2018 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue Feb 06 03:45:07 2018 +0000"
      },
      "message": "Restructure hash calculation in delta_performer am: b379d19c05\nam: 6085a0e6c2\n\nChange-Id: Idfc8e2b1bbec1c7ff9d3fe7dcc2d02c37379c186\n"
    },
    {
      "commit": "b379d19c05c5128a7fa45b72dbe74a764d143b98",
      "tree": "4401a36d4174b68dfeff004d85f4ff3a1f45e5da",
      "parents": [
        "4e13cf4743d5c02dec7030c71a3c7e2fa8da7aa8"
      ],
      "author": {
        "name": "Amin Hassani",
        "email": "ahassani@google.com",
        "time": "Wed Dec 06 15:31:17 2017 -0800"
      },
      "committer": {
        "name": "Amin Hassani",
        "email": "ahassani@google.com",
        "time": "Mon Feb 05 12:53:18 2018 -0800"
      },
      "message": "Restructure hash calculation in delta_performer\n\nThis patch moves DeltaPerformer::CalculateAndValidateHash to\nfd_utils::ReadAndHashExtents and cleans up the code. It also adds\nunittests for ReadAndHashExtents.\n\nBug: None\nTest: unittest pass\n\nChange-Id: I297cf79ef38a7495d5bcc0e6516a1ca783e505ea\nSigned-off-by: Amin Hassani \u003cahassani@google.com\u003e\n"
    },
    {
      "commit": "8cbf2b7525801b01a2cce6f972526ce821dbb3b9",
      "tree": "1227ba3a992fd176d3fd4b9a98f162fbccd803c1",
      "parents": [
        "975dc6cb9360256a07720e56d59bfadd939476c5",
        "7e1e2f819f336bd350d756318c157cbe547215bd"
      ],
      "author": {
        "name": "Hkan Kvist",
        "email": "hakan.kvist@sony.com",
        "time": "Fri Feb 02 17:06:33 2018 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri Feb 02 17:06:33 2018 +0000"
      },
      "message": "Upon source hash validation failure, log ext4 remount information am: 4e13cf4743\nam: 7e1e2f819f\n\nChange-Id: I66e16157a4522acf6f8b8c0901bb0a92a14763e2\n"
    },
    {
      "commit": "4e13cf4743d5c02dec7030c71a3c7e2fa8da7aa8",
      "tree": "6f7c64fe2c42ed038ac892422342b3b3dff5121f",
      "parents": [
        "8cd423449436887dbf2743178712c64b441a9451"
      ],
      "author": {
        "name": "Håkan Kvist",
        "email": "hakan.kvist@sony.com",
        "time": "Tue Jan 23 12:57:55 2018 +0100"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Feb 02 10:12:57 2018 +0000"
      },
      "message": "Upon source hash validation failure, log ext4 remount information\n\nWhen source hash verification fails, check if the current partition\nis an ext4 that has been remounted.\nLog mount count and date.\n\nBased on corresponding functionality in recovery.\n\nBug: 72074823\nTest: manual - Confirm that remount count is present in the log when\n      installing an update and the system has been remounted\n\nChange-Id: I3cf12c9f93fa5ef9f73f0a1b6a795eb2a3e9335e\n"
    },
    {
      "commit": "4495bfeb17c1e821ae4e72137bc100d3bcac29d9",
      "tree": "8f485bb536a85487291e4f03c34271ea53de8781",
      "parents": [
        "7feac5b5fe3b4832edf96b34f5d8f3b3e41b2d2f"
      ],
      "author": {
        "name": "Eric Caruso",
        "email": "ejcaruso@chromium.org",
        "time": "Tue Jan 23 16:34:20 2018 -0800"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Wed Jan 24 20:24:39 2018 -0800"
      },
      "message": "update_engine: fix lint issues in DeltaPerformer tests\n\nTwo lint issues:\n* nondeterminism caused by rand(), replaced with rand_r()\n  [runtime/threadsafe_fn]\n* two spaces between code and comments [whitespace/comments]\n\nThe latter was resolved by moving out the comment and what it was\nattached to.\n\nBUG\u003dNone\nTEST\u003dunit tests\n\nChange-Id: Ie29237c578e34c9f5f22fca984c5e9bf5a54b1a7\nReviewed-on: https://chromium-review.googlesource.com/882559\nCommit-Ready: Eric Caruso \u003cejcaruso@chromium.org\u003e\nTested-by: Eric Caruso \u003cejcaruso@chromium.org\u003e\nReviewed-by: Luis Hector Chavez \u003clhchavez@chromium.org\u003e\nReviewed-by: Amin Hassani \u003cahassani@chromium.org\u003e\n"
    },
    {
      "commit": "7feac5b5fe3b4832edf96b34f5d8f3b3e41b2d2f",
      "tree": "8fd1aa943c1690e78a8351212ae5e121fce05d9d",
      "parents": [
        "8a51cd7412072dc8d01a15a5088c36fdd6dff9c8"
      ],
      "author": {
        "name": "Eric Caruso",
        "email": "ejcaruso@chromium.org",
        "time": "Tue Jan 23 16:20:19 2018 -0800"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Wed Jan 24 20:24:30 2018 -0800"
      },
      "message": "update_engine: use ScopedTempDir::GetPath\n\nUpstream versions of libchrome have gotten rid of ScopedTempDir\u0027s\ninline path method because they wanted to introduce a DCHECK that\nhelps make sure people create the temp directory before using it.\nTo avoid introducing a header dependency on the logging header\nthey took this method out of the header so it wouldn\u0027t be inlined.\n\nBUG\u003db:37434548\nTEST\u003dunit tests\n\nChange-Id: If1dcc5e43f54ab32fd43da7b939216a4834548d5\nReviewed-on: https://chromium-review.googlesource.com/882543\nCommit-Ready: Eric Caruso \u003cejcaruso@chromium.org\u003e\nTested-by: Eric Caruso \u003cejcaruso@chromium.org\u003e\nReviewed-by: Amin Hassani \u003cahassani@chromium.org\u003e\n"
    },
    {
      "commit": "e091f698ecfd52ccb6307cfa17379c4523b88053",
      "tree": "3e8604069711a41c702a4d1277cbf79a3eb17551",
      "parents": [
        "f6a127e89136090fa823302f381514954a71734e",
        "2bef76ef7daa9b95d26ecc8f12135ddaedcd058c"
      ],
      "author": {
        "name": "Tianjie Xu",
        "email": "xunchang@google.com",
        "time": "Thu Jan 18 22:18:10 2018 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Jan 18 22:18:10 2018 +0000"
      },
      "message": "Fix the uninitialized zeros buffer when zeroing blocks am: 06bbe49817\nam: 2bef76ef7d\n\nChange-Id: I13999244e0dc91dc30f6be5eaf7e687e05587ad7\n"
    },
    {
      "commit": "06bbe49817dea125b63280a99f5535b2ee084ce7",
      "tree": "d3716995cbd590f22596a9dfab300f494fe56cde",
      "parents": [
        "7b9a587d7c488aef0686d5b1579c6dd7bd7b536c"
      ],
      "author": {
        "name": "Tianjie Xu",
        "email": "xunchang@google.com",
        "time": "Fri Jan 12 12:37:48 2018 -0800"
      },
      "committer": {
        "name": "Tianjie Xu",
        "email": "xunchang@google.com",
        "time": "Thu Jan 18 22:11:07 2018 +0000"
      },
      "message": "Fix the uninitialized zeros buffer when zeroing blocks\n\nThe zeros buffer is uninitialized if \"attempt_ioctl\" is false at the\nfirst iteration, leading to an infinite loop when verifying payload on\nhost.\n\nTest: Update verification on host no longer stuck\nChange-Id: I5552ff872e3d0e59098f32822cf5d5f0d724e7f1\n"
    },
    {
      "commit": "f6a127e89136090fa823302f381514954a71734e",
      "tree": "bcfd0b4d15313aba9f24a90bc420275a0daddad3",
      "parents": [
        "aac2e304f9796b75958c70ff482d78115f89e19b",
        "8afebd28e062da666b66a5f809aa1c32409bd4cc"
      ],
      "author": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Thu Jan 18 03:31:01 2018 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Jan 18 03:31:01 2018 +0000"
      },
      "message": "Don\u0027t log old PartitionInfo for full payload. am: 7b9a587d7c\nam: 8afebd28e0\n\nChange-Id: Iafed23c61c07e1faf6c3ea89410e0af7deddd380\n"
    },
    {
      "commit": "7b9a587d7c488aef0686d5b1579c6dd7bd7b536c",
      "tree": "5dfd9d98f5ba00be36dcec307b3c1a34f298d665",
      "parents": [
        "1841408827c93f8ba7bb44ba95a8fb3438762b9d"
      ],
      "author": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Wed Jan 17 13:25:06 2018 -0800"
      },
      "committer": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Wed Jan 17 14:59:45 2018 -0800"
      },
      "message": "Don\u0027t log old PartitionInfo for full payload.\n\nFor full payload we were logging something like:\nPartitionInfo old system sha256:  size: 0\nWhich has no useful information and could lead to confusion.\n\nBug: 71913973\nTest: brillo_update_payload verify with a full payload\nChange-Id: I3ebf2e663907350387cfa0b93fdf2512423d39e3\n"
    },
    {
      "commit": "682cad5a12a41b9cf4e4c5af964403c3e0cb284a",
      "tree": "b2221d82b71ff9cabd739cdeac405dd497cfe8f1",
      "parents": [
        "82b8ee405ba9a9a9d53cbe538abf7b7a6f9f231a",
        "0b77cb9fa6941163c4a4099471bef6ef564c0ffe"
      ],
      "author": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Thu Jan 11 17:51:40 2018 -0800"
      },
      "committer": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Thu Jan 11 17:51:40 2018 -0800"
      },
      "message": "resolve merge conflicts of 0b77cb9fa6941163c4a4099471bef6ef564c0ffe to oc-mr1-dev-plus-aosp\n\nTest: I solemnly swear I tested this conflict resolution.\nChange-Id: If51b3d48a3553b81ad7aa79764e649debc844cac\n"
    },
    {
      "commit": "1841408827c93f8ba7bb44ba95a8fb3438762b9d",
      "tree": "22bc43f3ff506165d006e62347255c2a2c2bf2ec",
      "parents": [
        "b19c3ec7bda83b15c7fc659f65eb6f92ca84f9c4",
        "840703a4cc77228e2606f45665ae3a4bd75ff7dd"
      ],
      "author": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Thu Jan 11 14:50:36 2018 -0800"
      },
      "committer": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Thu Jan 11 14:50:36 2018 -0800"
      },
      "message": "Merge remote-tracking branch \u0027goog/upstream-master\u0027.\n\nThe following commits were reverted:\n840703a Fix update over cellular network on guest account\neaad5d0 Do not merge to AOSP: Fixes the link to brillo-clang-format in CrOS\n740efad Reboot even if a system update is not available.\n\nFixed a few sign compare warnings.\nHad to ifdef out 2 SquashfsFilesystemTest because it depends on unsquashfs -m.\n\nTest: update_engine_unittests\nChange-Id: I6f4ca5003e78c76064ec60d0797505d8c18d00bf\nMerged-In: I6f4ca5003e78c76064ec60d0797505d8c18d00bf\n"
    },
    {
      "commit": "d9cb290966a77730010aa01f0db675c157cd5c8f",
      "tree": "d3aa53c2dfcff84bfda81bc0abd2b4d541bab4c5",
      "parents": [
        "b9e91efc7f9b5bb7cb839e9c50c5969eb0f824e8"
      ],
      "author": {
        "name": "Amin Hassani",
        "email": "ahassani@google.com",
        "time": "Wed Sep 20 12:11:39 2017 -0700"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Wed Jan 03 14:23:33 2018 -0800"
      },
      "message": "update_engine: Unify disk access for SOURCE_BSDIFF through update_engine\n\nSwitch bspatch to use ExtentReader and ExtentWriter. This allows to:\n- Cache the writes.\n- Unify all the reads through ExtentReader object.\n- Unify all the writes through ExtentWrite object.\n\nThis patch allows running bspatch without being dependent on how bspatch reads\nand writes from disk. The disk access can be controlled through update_engine\nitself. Currently, SOURCE_BSDIFF operation can still cause bugs such as\nb/31709028. But through this mechanism, those kind of problems can be\nalleviated.\n\nBUG\u003dchromium:762815\nTEST\u003dunittests pass; brillo_update_payload verify passes;\n\nChange-Id: I3f8e29366743d0383d41bf3700e9db3135fbd82a\nReviewed-on: https://chromium-review.googlesource.com/683357\nCommit-Ready: Amin Hassani \u003cahassani@chromium.org\u003e\nTested-by: Amin Hassani \u003cahassani@chromium.org\u003e\nReviewed-by: Ben Chan \u003cbenchan@chromium.org\u003e\n"
    },
    {
      "commit": "d060a63f4c96e84ca5bc147e82ef18533b94da8f",
      "tree": "e3399a0334b198dcda3ce7e9356b79d1b2cc8002",
      "parents": [
        "c51665346b9b90a7d632d624c58a84db25fed156",
        "76a62ae06be6a3bd344817117da0b27d70614149"
      ],
      "author": {
        "name": "Hidehiko Abe",
        "email": "hidehiko@google.com",
        "time": "Mon Dec 18 10:37:56 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Mon Dec 18 10:37:56 2017 +0000"
      },
      "message": "update_engine: Update libchrome APIS to r456626. am: 2b9d241772\nam: 76a62ae06b\n\nChange-Id: Ia0534e94f58ba309155a07ff54f67d7cafb1de4e\n"
    },
    {
      "commit": "2b9d2417722cd4052b0e22494886f93c5b4ef042",
      "tree": "6f94bc97547d8b1c3ca26d30bc25e0f0a970c946",
      "parents": [
        "6651a120b498539f682a43a28e6209cb81e33a20"
      ],
      "author": {
        "name": "Hidehiko Abe",
        "email": "hidehiko@google.com",
        "time": "Wed Dec 13 18:56:18 2017 +0900"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Dec 18 10:28:42 2017 +0000"
      },
      "message": "update_engine: Update libchrome APIS to r456626.\n\nThe new libchrome has been ported from Chromium and some APIs\nhave changed. Make necessary changes at call sites.\n\nBUG\u003dchromium:724678\nCQ-DEPEND\u003dCL:480928\nTest: Build.\n\nChange-Id: I01b70da87521d0884ed21acbd7ed3e0ff1e94357\nMerged-In: I4dbaea4a2a19031375a8bf2415645a4f226dab57\n"
    },
    {
      "commit": "d8b67f49d7f8ae291cd4fa901b2d3767137704e7",
      "tree": "2d039015afcd03433da0dd8860a83ce3ce2a65cf",
      "parents": [
        "06c6d088b89656a120d40c4b578200c87af5c4c8"
      ],
      "author": {
        "name": "Amin Hassani",
        "email": "ahassani@google.com",
        "time": "Wed Dec 06 13:47:52 2017 -0800"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Tue Dec 12 13:50:58 2017 -0800"
      },
      "message": "update_engine: Remove the duplicate BlocksInExtents\n\nThis patch removes the duplicate BlocksInExtents from extent_utils.h and fixes\nthe remainder of the code to reflect this change.\n\nBUG\u003dnone\nTEST\u003dunittests pass;\n\nChange-Id: I76f5106f75072b20cd8f41f081b2f2b07aeac9a8\nReviewed-on: https://chromium-review.googlesource.com/812009\nCommit-Ready: Amin Hassani \u003cahassani@chromium.org\u003e\nTested-by: Amin Hassani \u003cahassani@chromium.org\u003e\nReviewed-by: Ben Chan \u003cbenchan@chromium.org\u003e\nReviewed-by: Alex Deymo \u003cdeymo@google.com\u003e\nReviewed-by: Sen Jiang \u003csenj@chromium.org\u003e\n"
    },
    {
      "commit": "7bc9c02869b90a5876bd74a97693a866f1c5ea5e",
      "tree": "06fadba729227296bb8dbedfcbe204e07e531e14",
      "parents": [
        "efa62d959cf8f225477ab85d8ff42d5150007cf8"
      ],
      "author": {
        "name": "Amin Hassani",
        "email": "ahassani@google.com",
        "time": "Tue Nov 07 14:01:39 2017 -0800"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Mon Nov 27 22:50:44 2017 -0800"
      },
      "message": "update_engine: Increase minor version to 4\n\nThis patch increases the minor version to 4. This minor version in the\nupdate engine adds support for three operations:\n- ZERO: For zeroing blocks without writing zero bytes.\n- DISCARD: For discarding blocks.\n- PUFFDIFF: Reduces the size of the delta payload for boards with ARC++.\n- BROTLI_BSDIFF: A new form of bsdiff patch that is 10-20% smaller.\n\nThis patch might have consequences specially for the paygen tests in canary\nbuilds. Refer to the bug for proper handling of errors initiated from this patch\nif canary builds fail. Please read the bug before reverting this patch.\n\nBUG\u003dchromium:782448\nTEST\u003dtryjob with canary build passes.\nCQ-DEPEND\u003dCL:658297\n\nChange-Id: I7e4d06d55b47fd22527861f823087e3c91d996e1\nReviewed-on: https://chromium-review.googlesource.com/756940\nCommit-Ready: ChromeOS CL Exonerator Bot \u003cchromiumos-cl-exonerator@appspot.gserviceaccount.com\u003e\nTested-by: Amin Hassani \u003cahassani@chromium.org\u003e\nReviewed-by: Andrew de los Reyes \u003cadlr@chromium.org\u003e\n"
    },
    {
      "commit": "efa62d959cf8f225477ab85d8ff42d5150007cf8",
      "tree": "fc0c2b20c5fbf01e6ca2c53d3441f8a90524cd6a",
      "parents": [
        "02855c25944b8d64e569e9e8051be514acf40438"
      ],
      "author": {
        "name": "Amin Hassani",
        "email": "ahassani@google.com",
        "time": "Thu Nov 09 13:46:56 2017 -0800"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Wed Nov 22 17:29:40 2017 -0800"
      },
      "message": "update_engine: Adds BROTLI_BSDIFF operation\n\nBrotli compression creates on average 10%-20% smaller output than bzip2\nin addition to having faster decompressor. With recent changes in bsdiff\nto compress the its patch with brotli, we can use it in the\nupdate_engine as a new operation BROTLI_BSDIFF. This operation will be\nturned on in minor version 4. However, this CL only adds support for it\nin the client. It will not generate BROTLI_BSDIFF operations yet.\n\nBUG\u003dchromium:783437\nTEST\u003dunittests pass for both update_engine and update_payload;\n\u0027brillo_update_payload {generate|verify}\u0027 passes;\n\u0027scripts/paycheck.py payload.delta\u0027 passes;\n\nChange-Id: Ie791ba5431561c95de6fbc031a8196dbfd912288\nReviewed-on: https://chromium-review.googlesource.com/764791\nCommit-Ready: Amin Hassani \u003cahassani@chromium.org\u003e\nTested-by: Amin Hassani \u003cahassani@chromium.org\u003e\nReviewed-by: Ben Chan \u003cbenchan@chromium.org\u003e\n"
    },
    {
      "commit": "2fa3ebbdba56d03e4de3a81a21b4c076cb23fbc0",
      "tree": "e17c392faf39042aaeb69115841930bcea66ffe5",
      "parents": [
        "db68add20261c6996b9648c4e6b086ae41e7b75d",
        "89d3162334007f59eb9dd9be97e7c852d073f9cc"
      ],
      "author": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Wed Nov 22 03:50:29 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed Nov 22 03:50:29 2017 +0000"
      },
      "message": "Reserve max buffer size in delta performer. am: be19a24bc2\nam: 89d3162334\n\nChange-Id: I61a9f6598e938d3d28592c5e04a6ed63401646e2\n"
    },
    {
      "commit": "be19a24bc29f954252ae7b61d3524928a702edcd",
      "tree": "ad5c028ad5f78fcd7435dca6019f80cf70bcb134",
      "parents": [
        "8cbf696f9f5eccbfeaa28db521ecc976389d3762"
      ],
      "author": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Fri Nov 17 11:48:17 2017 -0800"
      },
      "committer": {
        "name": "Tianjie Xu",
        "email": "xunchang@google.com",
        "time": "Tue Nov 21 14:48:02 2017 -0800"
      },
      "message": "Reserve max buffer size in delta performer.\n\nFrom the analysis in b/34220646#comment68, repeatedly insertion to the\nvector caused memory reallocation and potentially increase the peak\nmemory usage a lot. This issue can be easily fixed by reserving the\nmemory first since we know the patch size in advance.\n\nBug: 34220646\nTest: run an incremental update on sailfish and check the memory usage.\nChange-Id: I89726cc5c8d51c2e43ac8616c711eeabc3f88dbc\n"
    },
    {
      "commit": "02855c25944b8d64e569e9e8051be514acf40438",
      "tree": "a108c31eb6a893d591c05bc7e556a62cc5840e07",
      "parents": [
        "3cd4df127c29eb90c0e203373edfbc9534c79169"
      ],
      "author": {
        "name": "Amin Hassani",
        "email": "ahassani@google.com",
        "time": "Wed Sep 06 22:34:50 2017 -0700"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Tue Nov 07 17:52:16 2017 -0800"
      },
      "message": "update_engine: Apply PUFFDIFF operation\n\nThis patch adds operation for applying PUFFDIFF operation. As long as\nthe minor version is not increased, this patch will not be directly\nused.\n\nThis patch sets the cache requirement for PUFFDIFF operation to 5MB as it has\nbeen selected for now from sample data below:\n\nUpdate from ToT(R64) to veyron-minnie-R63-9928.0.0\nCache Size (MB)\t- Time to Update (minutes)\nno-puffdiff\t0:04:20\n50\t0:05:30\n20\t0:06:40\n10\t0:09:10\n5\t0:11:00\n3\t0:13:40\n2\t0:15:45\n1\t0:19:30\n\nBUG\u003dchromium:717785\nTEST\u003dbrillo_update_payload verify passes; unittests pass;\nCQ-DEPEND\u003dCL:722452\n\nChange-Id: I481481d40ef9df6412782198e3c97deb3997cc2e\nReviewed-on: https://chromium-review.googlesource.com/658297\nCommit-Ready: Amin Hassani \u003cahassani@chromium.org\u003e\nTested-by: Amin Hassani \u003cahassani@chromium.org\u003e\nReviewed-by: Ben Chan \u003cbenchan@chromium.org\u003e\nReviewed-by: Sen Jiang \u003csenj@chromium.org\u003e\n"
    },
    {
      "commit": "02c4942cbf76441dfdc7412e5b5ae0402b313e80",
      "tree": "1f85d90f065bf0486dbe9a3b32ac10510ed2ef76",
      "parents": [
        "13df600a35efb65c4c3858dd2e9885b504ed4cc5"
      ],
      "author": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Tue Oct 31 15:14:11 2017 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Nov 02 21:53:57 2017 +0000"
      },
      "message": "Add support for new payload property headers to delay switching slots.\n\nSet SWITCH_SLOT_ON_REBOOT\u003d0 to skip marking new slot as active.\nWhen ready to reboot to the new update, call applyPayload() again to\nswitch the slots, download will be skipped because it has already\nfinished, filesystem verification will always happen, and postinstall\ncan be skipped if it succeeded before for this update and\nRUN_POST_INSTALL is set to 0.\n\nAlso removed reset update progress when update succeeded to support\nreverting to current slot with resetStatus() without clearing download\nprogress. If the next update is a different payload then we will still\nreset the progress on next update.\n\nBug: 35212183\nTest: update_device.py --extra-headers \u0027SWITCH_SLOT_ON_REBOOT\u003d0\u0027 ...\n\nMerged-In: I52e2371ea4a9e6a6d026b4dd04bb1a60d95c9d5c\nChange-Id: I52e2371ea4a9e6a6d026b4dd04bb1a60d95c9d5c\n"
    },
    {
      "commit": "fe5228282571154b51d3907cad4744e228e66a22",
      "tree": "0ba712bc0a948783ede564bd73d3f6268af3251e",
      "parents": [
        "54e6868331ac10558f8bcb25c5448097a548b268"
      ],
      "author": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Tue Oct 31 15:14:11 2017 -0700"
      },
      "committer": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Wed Nov 01 16:50:30 2017 -0700"
      },
      "message": "Add support for new payload property headers to delay switching slots.\n\nSet SWITCH_SLOT_ON_REBOOT\u003d0 to skip marking new slot as active.\nWhen ready to reboot to the new update, call applyPayload() again to\nswitch the slots, download will be skipped because it has already\nfinished, filesystem verification will always happen, and postinstall\ncan be skipped if it succeeded before for this update and\nRUN_POST_INSTALL is set to 0.\n\nAlso removed reset update progress when update succeeded to support\nreverting to current slot with resetStatus() without clearing download\nprogress. If the next update is a different payload then we will still\nreset the progress on next update.\n\nBug: 35212183\nTest: update_device.py --extra-headers \u0027SWITCH_SLOT_ON_REBOOT\u003d0\u0027 ...\n\nMerged-In: I52e2371ea4a9e6a6d026b4dd04bb1a60d95c9d5c\nChange-Id: I52e2371ea4a9e6a6d026b4dd04bb1a60d95c9d5c\n(cherry picked from commit e9685de187317c3bc92a2d63d3f4a40b9831f448)\n"
    },
    {
      "commit": "54e6868331ac10558f8bcb25c5448097a548b268",
      "tree": "7c4058705c0c519a56af1e78d0c156334b0a6b88",
      "parents": [
        "84743e3cccf2c48516ec5d7c9ad163aae7aed4f9",
        "09786c9c790b9f807a6f7ece98dea5117f0c7c5c"
      ],
      "author": {
        "name": "Amin Hassani",
        "email": "ahassani@google.com",
        "time": "Wed Nov 01 21:25:17 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed Nov 01 21:25:17 2017 +0000"
      },
      "message": "update_engine: Fix lint issues in delta_performer.cc am: d87304c6f5\nam: 09786c9c79\n\nChange-Id: I178d3806a0ee3406423da756ae152715a9b09f5a\n"
    },
    {
      "commit": "d87304c6f5e707efe85d1e3379a926a500b14591",
      "tree": "7659577963a3232874895e9578c8aaf52d4a4438",
      "parents": [
        "6fbfd7d945c69dfa7d8fe0038d3128949723b9e9"
      ],
      "author": {
        "name": "Amin Hassani",
        "email": "ahassani@google.com",
        "time": "Tue Aug 29 11:40:03 2017 -0700"
      },
      "committer": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Tue Oct 31 18:59:31 2017 -0700"
      },
      "message": "update_engine: Fix lint issues in delta_performer.cc\n\nThis is necessary to allow repo upload succeed in the next cherry-picked\npatch.\n\nBug: none\nTest: FEATURES\u003d\"test\" emerge-amd64-generic update_engine\n\nChange-Id: Ibf922e4fec6dc62b477588d0748ecaed60867b63\nReviewed-on: https://chromium-review.googlesource.com/641957\nCommit-Ready: Amin Hassani \u003cahassani@chromium.org\u003e\nTested-by: Amin Hassani \u003cahassani@chromium.org\u003e\nReviewed-by: Ben Chan \u003cbenchan@chromium.org\u003e\nReviewed-by: Sen Jiang \u003csenj@chromium.org\u003e\n(cherry picked from commit 69583ba50b96d51c7206e834ff165a871c7f2ffd)\n"
    },
    {
      "commit": "672c1f54a499a825cc0bb9bc4f240bf1887550d9",
      "tree": "3af8dfb6a3674a6df97f9b3957ffec786a06a4e2",
      "parents": [
        "8ad22ba0765dc6351bfd59da8c43e06476b56c01"
      ],
      "author": {
        "name": "Ben Chan",
        "email": "benchan@chromium.org",
        "time": "Mon Oct 23 15:41:39 2017 -0700"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Tue Oct 24 15:30:15 2017 -0700"
      },
      "message": "update_engine: replace testing::SetArgumentPointee with testing::SetArgPointee\n\ntesting::SetArgumentPointee defined in gmock has been deprecated and\nsuperseded by an equivalent testing::SetArgPointee.\n\nBUG\u003dchromium:777011\nTEST\u003dRun unit tests.\n\nChange-Id: Ifc48897148d721e6f65159a54586e1fb456d75b9\nReviewed-on: https://chromium-review.googlesource.com/735213\nCommit-Ready: Ben Chan \u003cbenchan@chromium.org\u003e\nTested-by: Ben Chan \u003cbenchan@chromium.org\u003e\nReviewed-by: Mike Frysinger \u003cvapier@chromium.org\u003e\n"
    },
    {
      "commit": "8e768e9359d01008b286db1f6c54a6c3972a56b9",
      "tree": "0cae4fb21b0769cca98fb3f511a53a609e8fe3b6",
      "parents": [
        "9ae5f7f85f10997e8a3af2e2afa27891c05fbac7"
      ],
      "author": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Wed Jun 28 17:13:19 2017 -0700"
      },
      "committer": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Tue Oct 24 15:11:43 2017 -0700"
      },
      "message": "Add maximum timestamp to the payload.\n\nAdded a new field max_timestamp in the protobuf, from now on\nupdate_engine will reject any payload without this field.\nIf the OS build timestamp is newer than the max_timestamp, the payload\nwill also be rejected to prevent downgrade.\n\nBug: 36232423\nTest: update_engine_unittests\n\nMerged-In: Ib20f5f35aaf41165013bada02bc8720917358237\nChange-Id: Ib20f5f35aaf41165013bada02bc8720917358237\n(cherry picked from commit 5011df680621eb477cad8b34f03fba5b542cc2f9)\n"
    },
    {
      "commit": "ab5a0af8e6ebac0211da5b08010e4855ce463108",
      "tree": "7c04b5b82deaa51966b87706fe18e58b58813811",
      "parents": [
        "a3fc20af5ea6b75c568122065f487b23aaabf1d2"
      ],
      "author": {
        "name": "Ben Chan",
        "email": "benchan@chromium.org",
        "time": "Thu Oct 12 14:57:50 2017 -0700"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Fri Oct 13 14:44:50 2017 -0700"
      },
      "message": "update_engine: migrate from base::MakeUnique to std::make_unique\n\nbase::MakeUnique is being deprecated as we can now use std::make_unique\nwhen compiling code in the C++14 mode.\n\nBUG\u003dchromium:769107\nCQ-DEPEND\u003dCL:669672\nTEST\u003dRun unit tests.\n\nChange-Id: I82f76647239b1eb3b98b19f6479788ffd86ce756\nReviewed-on: https://chromium-review.googlesource.com/716826\nCommit-Ready: Ben Chan \u003cbenchan@chromium.org\u003e\nTested-by: Ben Chan \u003cbenchan@chromium.org\u003e\nReviewed-by: Amin Hassani \u003cahassani@chromium.org\u003e\nReviewed-by: Sen Jiang \u003csenj@chromium.org\u003e\n"
    },
    {
      "commit": "a3fc20af5ea6b75c568122065f487b23aaabf1d2",
      "tree": "ab6e9fb110b2cebaed605c7ef1c1485478d58522",
      "parents": [
        "cf5f1f1420b472477317b0ea0fa7f6456d2605cf"
      ],
      "author": {
        "name": "Amin Hassani",
        "email": "ahassani@google.com",
        "time": "Tue Sep 19 17:19:34 2017 -0700"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Mon Oct 09 22:23:49 2017 -0700"
      },
      "message": "update_engine: Activate CachedFileDescriptor\n\nThis patch activates CachedFileDescriptor for use in target_fd_. We\nintend to use ExtentWriter for all payload operations. This patch alone\ndecreased the update time for a lumpy device from around 16 minutes down\nto 2:30 minutes without necessarily putting pressure on memory. And that\nis with O_DSYNC flag on.\n\nBUG\u003dchromium:762815\nTEST\u003dFEATURES\u003d\"test\" emerge-amd-generic update_engine; brillo_update_payload verify\n\nChange-Id: Ie35a5e4d320496a9793c202c43271ff02b95a788\nReviewed-on: https://chromium-review.googlesource.com/674165\nCommit-Ready: Amin Hassani \u003cahassani@chromium.org\u003e\nTested-by: Amin Hassani \u003cahassani@chromium.org\u003e\nReviewed-by: Ben Chan \u003cbenchan@chromium.org\u003e\nReviewed-by: Sen Jiang \u003csenj@chromium.org\u003e\n"
    },
    {
      "commit": "acd7be816579a0c13ac6f746a2555b7c73f95a3b",
      "tree": "382abdddcea43068c8828241b3dabc9a8bbb603c",
      "parents": [
        "5192fe54e9ea90c3831a4beb799b8f19a9d061d0"
      ],
      "author": {
        "name": "Amin Hassani",
        "email": "ahassani@google.com",
        "time": "Fri Aug 25 15:32:13 2017 -0700"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Thu Oct 05 13:19:47 2017 -0700"
      },
      "message": "update_engine: Add CachedFileDescriptor\n\nCurrently there are operations in the delta_performer which are not\nefficient in writing into disk. For example BzipExtentWriter and\nXZExtentWriter write in 16KB buffers which is not very efficient for\ntoday\u0027s disks specially if we are writing with O_DSYNC flag. Another\nproblem is operations such as bspatch which write in very small number\nof bytes in order of a few bytes to a few hundred bytes. Even though\nbspatch open\u0027s its own file descriptor and currently have no O_DSYNC\nadded, writing in very small bytes into disk in general is not a good\nidea for the purpose of the update engine.\n\nThis patch adds new wrapper for a FileDescriptor interface which caches\nall the writes into a large buffer (like 1MB) and writes it into disk\nwhen either a \u0027Flush\u0027 request comes or if the offset of the file has\nbeen changed to a different position than what it is writing now. This\ncached buffer can be wrapped around target_fd_ and every operation can\nwrite into it. This centralizes all write oprerations through one file\ndescriptor and gives greater control on how writes should be performed.\n\nBUG\u003dchromium:762815\nTEST\u003dFEATURES\u003d\"test\" emerge-amd-generic update_engine; brillo_update_payload verify\n\nChange-Id: I4911d917ec9362bf66c4dd2ed19d89440042733c\nReviewed-on: https://chromium-review.googlesource.com/674164\nCommit-Ready: Amin Hassani \u003cahassani@chromium.org\u003e\nTested-by: Amin Hassani \u003cahassani@chromium.org\u003e\nReviewed-by: Ben Chan \u003cbenchan@chromium.org\u003e\n"
    },
    {
      "commit": "5192fe54e9ea90c3831a4beb799b8f19a9d061d0",
      "tree": "316091196864f617a21d8511a19cff72d9b67098",
      "parents": [
        "db56be971d5c1adb405858e24ca772b5f3290099"
      ],
      "author": {
        "name": "Amin Hassani",
        "email": "ahassani@google.com",
        "time": "Mon Aug 28 10:28:46 2017 -0700"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Wed Oct 04 18:47:11 2017 -0700"
      },
      "message": "update_engine: Add Flush() to FileDescriptor\n\nThis patch adds Flush() function to the file descriptor. This function\nshould be called after each operation in order to ensure that data\nresides to disk before any checkpointing happen. In addition, if any\nfuture file descriptor that caches the data is added, this ensures\nintegrity of written data.\n\nBUG\u003dchromium:762815\nTEST\u003dbrillo_update_payload verify\n\nChange-Id: I12442142647605afef1b01dc932eb7cf182af85b\nReviewed-on: https://chromium-review.googlesource.com/674163\nCommit-Ready: Amin Hassani \u003cahassani@chromium.org\u003e\nTested-by: Amin Hassani \u003cahassani@chromium.org\u003e\nReviewed-by: Ben Chan \u003cbenchan@chromium.org\u003e\nReviewed-by: Sen Jiang \u003csenj@chromium.org\u003e\n"
    },
    {
      "commit": "db56be971d5c1adb405858e24ca772b5f3290099",
      "tree": "79107907bdf797fcf1550e238410be4b04687c18",
      "parents": [
        "ee6d9a1067175ab94de080feaf4db937eda43442"
      ],
      "author": {
        "name": "Amin Hassani",
        "email": "ahassani@google.com",
        "time": "Wed Sep 06 12:41:23 2017 -0700"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Mon Sep 25 15:52:39 2017 -0700"
      },
      "message": "update_engine: Use ExtentReader\n\nUpdates CopyAndHashExtents to use the new ExtentReader.\n\nAdds CalculateAndValidatffeSourceHash() to DeltaPerformer to be used in both\nSOURCE_BSDIFF and PUFFDIFF.\n\nBUG\u003dchromium:761138\nTEST\u003dFEATURES\u003d\"test\" emerge-amd64-generic update_engine; brillo_update_payload verify\n\nChange-Id: I2e0c10fe0078c5a1ab4cd646a91d42893b6b691b\nReviewed-on: https://chromium-review.googlesource.com/653478\nCommit-Ready: Amin Hassani \u003cahassani@chromium.org\u003e\nTested-by: Amin Hassani \u003cahassani@chromium.org\u003e\nReviewed-by: Ben Chan \u003cbenchan@chromium.org\u003e\nReviewed-by: Sen Jiang \u003csenj@chromium.org\u003e\n"
    },
    {
      "commit": "ee6d9a1067175ab94de080feaf4db937eda43442",
      "tree": "c466f5854abe0d32d6e286d84f4a298669828036",
      "parents": [
        "cd7edbe3eeff0b4379649eea8308c325882407ff"
      ],
      "author": {
        "name": "Amin Hassani",
        "email": "ahassani@google.com",
        "time": "Thu Aug 31 14:09:15 2017 -0700"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Mon Sep 25 15:52:39 2017 -0700"
      },
      "message": "update_engine: Add ExtentReader\n\nCurrently Each operation in DeltaPerformer has the responsibility of\nreading from the source device by itself. Adding an\nExtentReader (similar to ExtentWriter) aggregates all these\nresponsibilities on DeltaPerformer.source_fd_. This simplifies the\ndesign as each operation does not need to invent is own open/read/close\netc. This specially will be used in conjunction with bspatch and puffin.\n\nBUG\u003dchromium:761138\nTEST\u003dFEATURES\u003d\"test\" emerge-amd64-generic update_engine;\n\nChange-Id: I2c7a21a02bd1df06bbaa7ebf374a13f654768721\nReviewed-on: https://chromium-review.googlesource.com/651336\nCommit-Ready: Amin Hassani \u003cahassani@chromium.org\u003e\nTested-by: Amin Hassani \u003cahassani@chromium.org\u003e\nReviewed-by: Andrew de los Reyes \u003cadlr@chromium.org\u003e\nReviewed-by: Sen Jiang \u003csenj@chromium.org\u003e\n"
    },
    {
      "commit": "cd7edbe3eeff0b4379649eea8308c325882407ff",
      "tree": "b5619b1081d2420df7ca9b04f876a7d90aa1fc4b",
      "parents": [
        "b7f45dfcc72b1cfed2432cf30b36d815ff1af0d4"
      ],
      "author": {
        "name": "Amin Hassani",
        "email": "ahassani@google.com",
        "time": "Mon Sep 18 17:05:02 2017 -0700"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Thu Sep 21 14:15:50 2017 -0700"
      },
      "message": "update_engine: Replace vector\u003cExtent\u003e with RepeatedPtrField\u003cExtent\u003e\n\nThis patch removes references to vector\u003cExtent\u003e and replaces them with\nRepeatedPtrField in payload_consumer. Extent itself is a protobuf item\nand it makes sense to use google::protobuf::RepeatedPtrField instead of\nvector because then we won\u0027t have any extra copy to vector. We can\ndirectly use the list of extents given in the payload protobuf.\n\nAlso removed references to vector in files which did not use vector.\n\nBUG\u003dchromium:766397\nTEST\u003dFEATURES\u003d\"test\" emerge-amd64-generic update_engine\n\nChange-Id: I1f12332ff4d6303c1e4b7470bb87bf934acdf81a\nReviewed-on: https://chromium-review.googlesource.com/672006\nCommit-Ready: Amin Hassani \u003cahassani@chromium.org\u003e\nTested-by: Amin Hassani \u003cahassani@chromium.org\u003e\nReviewed-by: Ben Chan \u003cbenchan@chromium.org\u003e\n"
    },
    {
      "commit": "9321f501029e7c0fdca55db3a79c9dcb24e4a767",
      "tree": "50eac2d84c7fc5b82e13941a9dff1657c9ea4670",
      "parents": [
        "7dcdedf1b65bc3cc15ea7486d612eae5713e07d8"
      ],
      "author": {
        "name": "Aaron Wood",
        "email": "aaronwood@google.com",
        "time": "Thu Sep 07 11:18:54 2017 -0700"
      },
      "committer": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Tue Sep 19 18:04:35 2017 -0700"
      },
      "message": "Track bytes received across multiple update files\n\nWhen downloading the packages that comprise a multi-package or multi-app\nupdate, the UpdateAttempter receives BytesReceived() callbacks with\nbytes_received resetting to 0 for each file.  This causes the progress\ncalculations to be incorrect.\n\nThis change tracks the total of the previously downloaded packages\nwithin the DownloadAction, so that it properly tracks.  Resumed\ndownloads will jump ahead over skipped data, when the payload is\nincremented.\n\nBug:  65451460\nTests: Added unit tests to directly test the accumulation and the the\ntransition from the previous state to UpdateStatus::DOWNLOADING when the\nfirst bytes are received.\n\nChange-Id: I3b540df16b9a664b09f53ee3ec962e2cbc8adf1b\n(cherry picked from commit d6f869dbd9952be8a926e80c4f1e172845ab8d5f)\n"
    },
    {
      "commit": "7dcdedf1b65bc3cc15ea7486d612eae5713e07d8",
      "tree": "0f38237ce581c73b30248ea5f30f309df6808c30",
      "parents": [
        "62414d77f9c202b481938079b3f3a132c28fe781"
      ],
      "author": {
        "name": "Aaron Wood",
        "email": "aaronwood@google.com",
        "time": "Wed Sep 06 17:17:41 2017 -0700"
      },
      "committer": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Tue Sep 19 18:01:12 2017 -0700"
      },
      "message": "Extract new system version from Omaha responses\n\nWhen processing an Omaha response, line up the app elements for the main\nproduct and system apps, by their appid fields.  This allows the (product)\nversion and system version to be differentiated and recorded in the\nInstallPlan.\n\nBug: 65422956\nTest:  Unit-tests, and using a live OTA\nChange-Id: I5217b7ac6fbf6f7ae595c1cec6fbc329051925eb\n(cherry picked from commit 19ef6db4885387a5e3fbd2affcbd57a9a40d8b9b)\n"
    },
    {
      "commit": "5e11cefa8713eb57effd5a067cf8850a7c555796",
      "tree": "119b7212b9f6140cbf81e5291e81fbab574b7c23",
      "parents": [
        "21ec92f9356a7f486ba7ce017b9aa557323e7050"
      ],
      "author": {
        "name": "Amin Hassani",
        "email": "ahassani@google.com",
        "time": "Tue Aug 29 11:25:23 2017 -0700"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Thu Aug 31 14:19:55 2017 -0700"
      },
      "message": "update_engine: Fixes issues introduced in a previous AOSP CL.\n\nAdds fcntl.h for using O_RDWR in file_descriptor_utils_unittest.cc.\n\nReorders includes in file_descriptor_utils_unittest.cc to the proper\ncode style.\n\nFixed some nits.\n\nBUG\u003db:34284069\nTEST\u003dFEATURES\u003d\"test\" emerge-amd64-generic update_engine\n\nChange-Id: Ib79b6cfd5ef0c0393373a017b6fb05b3c1b958ef\nReviewed-on: https://chromium-review.googlesource.com/641959\nCommit-Ready: Amin Hassani \u003cahassani@chromium.org\u003e\nTested-by: Amin Hassani \u003cahassani@chromium.org\u003e\nReviewed-by: Ben Chan \u003cbenchan@chromium.org\u003e\n"
    },
    {
      "commit": "21ec92f9356a7f486ba7ce017b9aa557323e7050",
      "tree": "9f1163923dac3114158e769a925d22ac950db2d4",
      "parents": [
        "69583ba50b96d51c7206e834ff165a871c7f2ffd"
      ],
      "author": {
        "name": "Alex Deymo",
        "email": "deymo@google.com",
        "time": "Fri Nov 04 15:49:53 2016 -0700"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Thu Aug 31 14:19:54 2017 -0700"
      },
      "message": "Move extent copy and hash logic to a new file.\n\nThe SOURCE_COPY operation used to copy the source blocks one by one to\nthe target partition. This process is sub-optimal if there are several\nconsecutive blocks. This patch moves this copy and hash logic to a new\nfile and adds several unittests for it. The new logic copies in chunks\nof up to 1MiB when the source and target data is contiguous.\n\nBUG\u003db:34284069\nTEST\u003dAdded unittests.\n\nChange-Id: I9ed52b429a54a2b4d6edaba051284b7dcd8a9525\n(cherry picked from commit a48f630400429ca010c5462967607985f2ffa7e4)\nReviewed-on: https://chromium-review.googlesource.com/641958\nCommit-Ready: Amin Hassani \u003cahassani@chromium.org\u003e\nTested-by: Amin Hassani \u003cahassani@chromium.org\u003e\nReviewed-by: Ben Chan \u003cbenchan@chromium.org\u003e\nReviewed-by: Sen Jiang \u003csenj@chromium.org\u003e\n"
    },
    {
      "commit": "69583ba50b96d51c7206e834ff165a871c7f2ffd",
      "tree": "b1b743889979d10a4086e22c984b00ec1964d85c",
      "parents": [
        "a50011f515d9feee0f7e8ae13c385b8da2d277ba"
      ],
      "author": {
        "name": "Amin Hassani",
        "email": "ahassani@google.com",
        "time": "Tue Aug 29 11:40:03 2017 -0700"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Thu Aug 31 14:19:54 2017 -0700"
      },
      "message": "update_engine: Fix lint issues in delta_performer.cc\n\nThis is necessary to allow repo upload succeed in the next cherry-picked\npatch.\n\nBUG\u003dnone\nTEST\u003dFEATURES\u003d\"test\" emerge-amd64-generic update_engine\n\nChange-Id: Ibf922e4fec6dc62b477588d0748ecaed60867b63\nReviewed-on: https://chromium-review.googlesource.com/641957\nCommit-Ready: Amin Hassani \u003cahassani@chromium.org\u003e\nTested-by: Amin Hassani \u003cahassani@chromium.org\u003e\nReviewed-by: Ben Chan \u003cbenchan@chromium.org\u003e\nReviewed-by: Sen Jiang \u003csenj@chromium.org\u003e\n"
    },
    {
      "commit": "a50011f515d9feee0f7e8ae13c385b8da2d277ba",
      "tree": "d1627cb34235e5a58e63a08ccba653b9fa8aa3f7",
      "parents": [
        "79cdbd638422e6e0d2a4bfd913b27a2f86df6e34"
      ],
      "author": {
        "name": "Alex Deymo",
        "email": "deymo@google.com",
        "time": "Wed Feb 01 15:12:59 2017 -0800"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Thu Aug 31 14:19:54 2017 -0700"
      },
      "message": "Remove unused FileDescriptor::Reset().\n\nThe Reset() method was not directly used anywhere.\n\nBUG\u003db:34284069\nTEST\u003dRan unittests. grep for \u0027Reset()\u0027 in update_engine.\n\nChange-Id: I8db0f17c43a36b03acbc22cdfa35a3e6042c3e75\n(cherry picked from commit 4a53c76795b4df0a4ea6636ee740371ffe83d7b4)\nReviewed-on: https://chromium-review.googlesource.com/641956\nCommit-Ready: Amin Hassani \u003cahassani@chromium.org\u003e\nTested-by: Amin Hassani \u003cahassani@chromium.org\u003e\nReviewed-by: Ben Chan \u003cbenchan@chromium.org\u003e\nReviewed-by: Sen Jiang \u003csenj@chromium.org\u003e\n"
    },
    {
      "commit": "a48f630400429ca010c5462967607985f2ffa7e4",
      "tree": "028f9315021096dcea0e591aa8096464c2a586f6",
      "parents": [
        "4136062ed805d8d078998e3a3cff56754c474396"
      ],
      "author": {
        "name": "Alex Deymo",
        "email": "deymo@google.com",
        "time": "Fri Nov 04 15:49:53 2016 -0700"
      },
      "committer": {
        "name": "Alex Deymo",
        "email": "deymo@google.com",
        "time": "Mon Aug 28 12:18:35 2017 +0000"
      },
      "message": "Move extent copy and hash logic to a new file.\n\nThe SOURCE_COPY operation used to copy the source blocks one by one to\nthe target partition. This process is sub-optimal if there are several\nconsecutive blocks. This patch moves this copy and hash logic to a new\nfile and adds several unittests for it. The new logic copies in chunks\nof up to 1MiB when the source and target data is contiguous.\n\nBug: 34284069\nTest: Added unittests.\n\nChange-Id: I9ed52b429a54a2b4d6edaba051284b7dcd8a9525\n"
    },
    {
      "commit": "49fdb09d1ff2e078fa44c26540a5b82900df0f9a",
      "tree": "8e5fd2ca126e456ce08cbcd681a0e787f5ddd92a",
      "parents": [
        "e94ece50ccff67a1948c461737dc049d9f1ae4d8"
      ],
      "author": {
        "name": "Amin Hassani",
        "email": "ahassani@google.com",
        "time": "Fri Aug 04 13:10:59 2017 -0700"
      },
      "committer": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Wed Aug 23 01:10:12 2017 +0000"
      },
      "message": "update_engine: Change imgdiff/imgpatch to a dummy puffdiff/puffpatch\n\nCurrently we never create imgdiff operation as it was never\nactivated. In near future we will be adding puffdiff and puffpatch\noperations which replaces the imgdiff. This CL does not actually adds\npuffdiff, but adds a placeholder for it.\n\nBUG\u003dnone\nTEST\u003dcros_workon_make --board\u003damd64-generic --test update_engine\n\nChange-Id: I6453048acb65c052354a1658f0c6fd41ad33e242\nReviewed-on: https://chromium-review.googlesource.com/602733\nCommit-Ready: Amin Hassani \u003cahassani@chromium.org\u003e\nTested-by: Amin Hassani \u003cahassani@chromium.org\u003e\nReviewed-by: Ben Chan \u003cbenchan@chromium.org\u003e\nReviewed-by: Sen Jiang \u003csenj@chromium.org\u003e\n"
    },
    {
      "commit": "a7ee9d0e6297a16d0f10cc7825c3b68867f19b24",
      "tree": "8eacc147cc768f280cca5bf8c28adbff804e0301",
      "parents": [
        "ac95cd54dd1faf398724bdcfe2c4b096fa4fc2d6"
      ],
      "author": {
        "name": "Andrey Ulanov",
        "email": "andreyu@google.com",
        "time": "Fri Jun 02 15:12:46 2017 -0700"
      },
      "committer": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Wed Aug 23 01:10:12 2017 +0000"
      },
      "message": "update_engine: Remove zlib fingerprint checking\n\nThis is not needed as imgdiff is not being used and will be replaced by\npuffin.\nPresence of this code makes updating to newer version of zlib\nimpossible. (e.g. 1.2.8-\u003e1.2.11 update introduces some changes in\ncompression algorithm which make compressed output different).\n\nBUG\u003dNone\nTEST\u003d\"ebuild zlib.ebuild test\"\n\nChange-Id: I50793f552a44faaba5771271fdcf2b4f4aeba6e4\nReviewed-on: https://chromium-review.googlesource.com/522949\nCommit-Ready: Andrey Ulanov \u003candreyu@google.com\u003e\nTested-by: Andrey Ulanov \u003candreyu@google.com\u003e\nReviewed-by: Ben Chan \u003cbenchan@chromium.org\u003e\nReviewed-by: Sen Jiang \u003csenj@chromium.org\u003e\n"
    },
    {
      "commit": "4a53c76795b4df0a4ea6636ee740371ffe83d7b4",
      "tree": "c8c61279d6f4134f57fe7643a734b8508b7f94ca",
      "parents": [
        "a1784b7e231b0ab2b3071c6e57485fdbac5dc057"
      ],
      "author": {
        "name": "Alex Deymo",
        "email": "deymo@google.com",
        "time": "Wed Feb 01 15:12:59 2017 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Aug 21 09:49:29 2017 +0000"
      },
      "message": "Remove unused FileDescriptor::Reset().\n\nThe Reset() method was not directly used anywhere.\n\nBug: 34284069\nTest: Ran unittests. grep for \u0027Reset()\u0027 in update_engine.\n\nChange-Id: I8db0f17c43a36b03acbc22cdfa35a3e6042c3e75\n"
    },
    {
      "commit": "5ef5d4561dbc40c128d1e9bbd8e2da525adcf581",
      "tree": "3156e7bde5f17bba8940b2863424e2669fb1334a",
      "parents": [
        "489875a27f4cdc4be979b1d9fd8dd026ea0cc820"
      ],
      "author": {
        "name": "Amin Hassani",
        "email": "ahassani@google.com",
        "time": "Fri Aug 04 13:10:59 2017 -0700"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Wed Aug 09 14:05:10 2017 -0700"
      },
      "message": "update_engine: Change imgdiff/imgpatch to a dummy puffdiff/puffpatch\n\nCurrently we never create imgdiff operation as it was never\nactivated. In near future we will be adding puffdiff and puffpatch\noperations which replaces the imgdiff. This CL does not actually adds\npuffdiff, but adds a placeholder for it.\n\nBUG\u003dnone\nTEST\u003dcros_workon_make --board\u003damd64-generic --test update_engine\n\nChange-Id: I6453048acb65c052354a1658f0c6fd41ad33e242\nReviewed-on: https://chromium-review.googlesource.com/602733\nCommit-Ready: Amin Hassani \u003cahassani@chromium.org\u003e\nTested-by: Amin Hassani \u003cahassani@chromium.org\u003e\nReviewed-by: Ben Chan \u003cbenchan@chromium.org\u003e\nReviewed-by: Sen Jiang \u003csenj@chromium.org\u003e\n"
    },
    {
      "commit": "4155520522b40a5e5f9b098eb903213d65d1cee6",
      "tree": "d4afc9ac04a6521b547cc94ee2791f0ff258d08c",
      "parents": [
        "ffb30ed63b5a186d4ed62c335d16b3b9467785ee"
      ],
      "author": {
        "name": "Amin Hassani",
        "email": "ahassani@google.com",
        "time": "Fri Jun 23 12:42:00 2017 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Jul 26 20:50:28 2017 +0000"
      },
      "message": "Fix the long time ioctl problem.\n\nOn some boards ioctl() takes a long time (several seconds) to perform\ndiscarding blocks for a few hundred MB (which might be expected). This\ncauses the UE (which is single threaded) to block for ioctl for several\nseconds and prevents the message loop from responding to dbus requests.\n\u0027update_engine_client --status\u0027 relies on dbus signals to get the status\nof the update engine. This can cause \u0027cros flash\u0027 or provisionning of\ndevices to fail due error returned from ssh invokation of\nupdate_engine_client. This CL fixes the issue by doing\nBLKDISCARD before BLKSECDISCARD.\n\nDiscarding the end of partition were originally added for b/28744609.\n\nAlso, BLKSECDISCARD never works on our android devices anyway; and it\ncauses a selinux denial to sys_rawio.\n\n670 W update_engine: [0708/111132:WARNING:delta_performer.cc(154)] Error discarding\nthe last 152 KiB using ioctl(4733)\n\n670 W update_engine: type\u003d1400 audit(0.0:159): avc: denied { sys_rawio } for\ncapability\u003d17 scontext\u003du:r:update_engine:s0 tcontext\u003du:r:update_engine:s0\ntclass\u003dcapability permissive\u003d0\n\nBUG: 30035671\nTest: unit tests pass\n(cherry picked from https://chromium-review.googlesource.com/547015)\n\nChange-Id: I91ea559910bfb39ddb3f824a5504983a8d553cc9\n"
    },
    {
      "commit": "ffb30ed63b5a186d4ed62c335d16b3b9467785ee",
      "tree": "95fc4d0b25d02282f6de7d6d8158a68bbe3ab16a",
      "parents": [
        "663ff4b30b9f629a130ef6d357d462b897d4071e"
      ],
      "author": {
        "name": "Luis Hector Chavez",
        "email": "lhchavez@google.com",
        "time": "Wed Jul 26 17:35:57 2017 +0000"
      },
      "committer": {
        "name": "Luis Hector Chavez",
        "email": "lhchavez@google.com",
        "time": "Wed Jul 26 17:35:57 2017 +0000"
      },
      "message": "Revert \"update_engine: Update libchrome APIS to r456626.\"\n\nThis reverts commit 663ff4b30b9f629a130ef6d357d462b897d4071e.\n\nReason for revert: Broke the mac_sdk\nExempt-From-Owner-Approval: Fixing mac_sdk\n\nChange-Id: I8184ec58e74d62dca0deafb39340d4bd36bf40e0\n"
    },
    {
      "commit": "663ff4b30b9f629a130ef6d357d462b897d4071e",
      "tree": "5a985e92f68ab9299e44e47e39d31ce1fcfd329c",
      "parents": [
        "fd42c84269a2fc4d57f5c17fbba3d13e3ccff27e"
      ],
      "author": {
        "name": "Jay Civelli",
        "email": "jcivelli@google.com",
        "time": "Thu Mar 30 11:02:03 2017 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Jul 26 01:47:45 2017 +0000"
      },
      "message": "update_engine: Update libchrome APIS to r456626.\n\nThe new libchrome has been ported from Chromium and some APIs\nhave changed. Make necessary changes at call sites.\n\nChange-Id: I8c3cea4510774c813a5d8fb10240918b5736884e\n"
    },
    {
      "commit": "7ecda265a87236e83cf820364947a1618872b6be",
      "tree": "39a5e3c3b8166289074bfb814f9cad8c8f186371",
      "parents": [
        "39f571439821118c9ee5b36131e851206b819074"
      ],
      "author": {
        "name": "Amin Hassani",
        "email": "ahassani@google.com",
        "time": "Tue Jul 11 17:10:50 2017 -0700"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Tue Jul 18 00:32:49 2017 -0700"
      },
      "message": "Open partitions with O_DSYNC flag only if the update is periodic.\n\nCurrently when updating we always open the target partition with flag O_DSYNC\n(CL:562552), but this makes all infrastructure operations like \u0027cros flash\u0027,\nprovisioning, force update, paygen, etc much slower. This changes the update\nengine to only add O_DSYNC flag if an update is triggered by periodic checks\n(not interactively forced). This means if the user clicks on \u0027check for update\u0027\nit will be an interactive update and O_DSYNC will not be used. This change keeps\nthe AOSP partitions open without O_DSYNC flag. This CL uses non-interactive mode\nfor all unit tests but currently there are no integration test like provisioning\nfor triggering periodic updates.\n\nCurrently \u0027parrot\u0027 board canaries (only board with rotating HDD) is failing due\nto timeouts related to slow updates. This CL potentially will clear that problem.\n\nTEST\u003dcros_workon_make --test, installed an image with/out the O_DSYCN flag and\nmeasured the \u0027cros flash\u0027 time.\nBUG\u003dchromium:738027\n\nChange-Id: If45fcf5e798b9c9353e09021ad812c859d983a65\nReviewed-on: https://chromium-review.googlesource.com/567360\nCommit-Ready: Amin Hassani \u003cahassani@chromium.org\u003e\nTested-by: Amin Hassani \u003cahassani@chromium.org\u003e\nReviewed-by: Grant Grundler \u003cgrundler@chromium.org\u003e\n"
    },
    {
      "commit": "39f571439821118c9ee5b36131e851206b819074",
      "tree": "74ac2824ca26071fbaa30ae9af7929cc01846b93",
      "parents": [
        "3584bce5a45f0c40b43385324bfc4a44f1960567"
      ],
      "author": {
        "name": "Lann Martin",
        "email": "lannm@chromium.org",
        "time": "Fri Jul 14 09:18:42 2017 -0600"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Sun Jul 16 17:58:18 2017 -0700"
      },
      "message": "Log DeltaPerformer operation histogram after update\n\nRecord and log InstallOperation run durations in DeltaPerformer. Since\nthese operations block the single-threaded process they may be\nresponsible for dbus service timeouts.\n\nBUG\u003dchromium:578270\nTEST\u003ddeploy to device, restart update-engine, perform update (e.g.\n`cros flash ssh://...`), check logs for histogram.\n\nChange-Id: Idb782c86a627b1738a29901edd5d3b45790f4bb9\nReviewed-on: https://chromium-review.googlesource.com/570997\nCommit-Ready: Lann Martin \u003clannm@chromium.org\u003e\nTested-by: Lann Martin \u003clannm@chromium.org\u003e\nReviewed-by: Simon Glass \u003csjg@chromium.org\u003e\nReviewed-by: Grant Grundler \u003cgrundler@chromium.org\u003e\n"
    },
    {
      "commit": "cdd5206c6507fa5c70344c269053d30777f7d674",
      "tree": "90b3cf88891d775cb21222cfc8cc913a36b2a1f9",
      "parents": [
        "5006aeac1064598f0442e00e817b5dbc9f4b1d5b"
      ],
      "author": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Thu May 18 15:33:10 2017 -0700"
      },
      "committer": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Tue Jul 11 18:35:37 2017 -0700"
      },
      "message": "Support IsDeltaPayload per \u003cpackage\u003e.\n\nMixed full and delta payloads are now supported for multi-payload.\n\nBug: 36252799\nTest: update_engine_unittests\nChange-Id: Ic519f8399579c714a65ba9f9f948a389fcc249ed\n(cherry picked from commit 4928112f8635f7a5b583171640aee2bda690ba34)\n"
    },
    {
      "commit": "5ae865b431cc041feed82f1db28a38e99dbd631f",
      "tree": "4b7f838abe6ccc13fc66efc5896b73b8ad901d03",
      "parents": [
        "d2ff2a0ee883148c6c4c935791aaf150138a0366"
      ],
      "author": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Tue Apr 18 14:24:40 2017 -0700"
      },
      "committer": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Tue Jul 11 18:35:21 2017 -0700"
      },
      "message": "Resume multiple payloads.\n\nDownloadAction will first go through all the already applied payload\nand only downloading the manifest and filling in partitions info in\ninstall plan without applying or downloading any operations.\nAnd then resume the partially applied payload using states in prefs.\n\nMoved constuction of MultiRangeHttpFetcher from UpdateAttempter to\nDownloadAction, because we now need to setup the range for every\npayload, also reduced code duplication.\n\nAlso fixed download progress for multi payload.\n\nBug: 36252799\nTest: stop an update during second payload and resume the update\nChange-Id: I9ee54a87d15d88c7a14a13575965b19c1773340b\n(cherry picked from commit 7162b666318cdd6c75b73fa6a0b06b23559de3e5)\n"
    },
    {
      "commit": "d2ff2a0ee883148c6c4c935791aaf150138a0366",
      "tree": "31af41b6771e024b8ca5299e49a8d5f6bcf3d34e",
      "parents": [
        "78850aa56f6886f1cf5368c78ccc5c707502c797"
      ],
      "author": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Thu Apr 06 14:53:31 2017 -0700"
      },
      "committer": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Tue Jul 11 18:35:12 2017 -0700"
      },
      "message": "Don\u0027t clear previous partitions in DeltaPerformer.\n\nWhen we used to have a FilesystemVerifierAction before DownloadAction,\npartitions in InstallPlan was filled in by FilesystemVerifierAction\nwith source hashes, but now that action is gone, DeltaPerformer is the\nfirst action that touches partitions, so clearing partitions are not\nneeded. In multi payload case, partitions in previous payloads are\nstored there so it should not be removed.\n\nWe could also move the partitions into Payload but that will make our\ncode more complex (keeping track of both payload index and partition\nindex in FilesystemVerifierAction and PostinstallRunnerAction) thus\nmore likely to have bugs.\n\nThis simple patch solves the same problem without polluting the code.\n\nBug: 36252799\nTest: FilesystemVerifierAction verifies all partitions in all payloads.\nChange-Id: I2aed02389bf047a6dedf59b306434ccea4eebca8\n(cherry picked from commit cf6bd59a3cd149bd86d763e96ede81ce102d64d9)\n"
    },
    {
      "commit": "6c73668ddcd3dd905c976808bfa13609eeef00b9",
      "tree": "35c5bc44b329d4a958698a53e11b636bc2d02477",
      "parents": [
        "0affc2c099fac47b999ba39f8f1bacb418e65a97"
      ],
      "author": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Fri Mar 10 15:01:36 2017 -0800"
      },
      "committer": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Tue Jul 11 18:34:31 2017 -0700"
      },
      "message": "Apply multiple payload in DownloadAction.\n\nDownloadAction will now call DeltaPerformer once for each payload.\n\nBug: 36252799\nTest: update two payload works!\nTest: update_engine_unittest\n\nChange-Id: Ibd4f3a4af9f701852f2c70b9384ca9d1fedacbeb\n(cherry picked from commit 7bd9f0b95403664229b701a13dca03c31a46fb49)\n"
    },
    {
      "commit": "0affc2c099fac47b999ba39f8f1bacb418e65a97",
      "tree": "06e54138e65e3a26a03a17ab0b85bb6bdb06319c",
      "parents": [
        "2703ef4466066d64d8021904e233b120f38c0272"
      ],
      "author": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Fri Feb 10 15:55:05 2017 -0800"
      },
      "committer": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Tue Jul 11 18:34:24 2017 -0700"
      },
      "message": "Parse multiple packages from Omaha response.\n\nThe multi-payload info are stored in OmahaResponse and InstallPlan, but\nwe still can only apply the first payload for now.\n\nBug: 36252799\nTest: mma -j\nTest: update_engine_unittests\n\nChange-Id: I5ca63944ae9082670d0e67888409374f140d4245\n(cherry picked from commit 2aba8a87d4fac245a2e2d238b3159f8eabce630f)\n"
    },
    {
      "commit": "2703ef4466066d64d8021904e233b120f38c0272",
      "tree": "e6a8adc62ac00bc08514328f54c1380866ff8176",
      "parents": [
        "5caab19d5aaa564befb60273a703c9a8e8d1a727"
      ],
      "author": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Thu Mar 16 13:36:21 2017 -0700"
      },
      "committer": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Tue Jul 11 18:32:19 2017 -0700"
      },
      "message": "Store raw payload hash blob in install plan.\n\nWe were using a custom sha256 pair in Omaha response, now that Omaha\nhas a standard hash_sha256 field in package, we should use that instead.\n\nThe difference is that hash_sha256 is encoded in hex instead of base64,\nbut the android payload property is still using base64, to be backward\ncompatible, we have to keep accepting base64 there, to avoid decoding\nand then re-encoding to another encoding, we store the decoded raw hash.\n\nAlso removed the hash() related functions in HashCalculator, since it\u0027s\nrarely used and the caller should encode it in whatever encoding they\nwant.\nAlso make use of RawHashOfBytes to simply code in a few places.\n\nBug: 36252799\nTest: update_engine_unittests\nChange-Id: Iaa02611b4c9cda3ead5de51e777e8caba6d99d93\n(cherry picked from commit f14d51b6823522f6b2eb834f9e14d72c8363a3ad)\n"
    },
    {
      "commit": "5c02c1335b98b3a1c8759a664bf7b6a48773f913",
      "tree": "4be3b1fd24c439bd32d13c36f4158ae8e99ff126",
      "parents": [
        "1677e812f16ce2949238b0ec15d7925ac1035d01"
      ],
      "author": {
        "name": "Ben Chan",
        "email": "benchan@chromium.org",
        "time": "Tue Jun 27 07:10:36 2017 -0700"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Fri Jun 30 12:51:26 2017 -0700"
      },
      "message": "Replace brillo::make_unique_ptr with base::MakeUnique/base::WrapUnique.\n\nbase::MakeUnique mimics std::make_unique and is preferred over\nbrillo::make_unique_ptr (which is identical to base::WrapUnique).\nbrillo::make_unique_ptr will eventually be deprecated and removed as its\nfunctionality is well covered by base::MakeUnique and base::WrapUnique.\n\nBUG\u003dchromium:704644\nTEST\u003dRun unit tests.\n\nChange-Id: I771b312d04643a1c74dd843947ed30bda510eed2\nReviewed-on: https://chromium-review.googlesource.com/458562\nCommit-Ready: Ben Chan \u003cbenchan@chromium.org\u003e\nTested-by: Ben Chan \u003cbenchan@chromium.org\u003e\nReviewed-by: Dan Erat \u003cderat@chromium.org\u003e\nReviewed-by: Alex Deymo \u003cdeymo@google.com\u003e\nReviewed-by: Mike Frysinger \u003cvapier@chromium.org\u003e\nReviewed-by: Sen Jiang \u003csenj@chromium.org\u003e\n"
    },
    {
      "commit": "8f08cfc84ed0e2dd3652fc03ac989056ebacbebf",
      "tree": "01186e254f2926f6eb8ec314c1dee6e29ddfb050",
      "parents": [
        "fca4775f0b1ad4e7c013bf626b42d06f6b74738e"
      ],
      "author": {
        "name": "Amin Hassani",
        "email": "ahassani@google.com",
        "time": "Fri Jun 23 12:42:00 2017 -0700"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Mon Jun 26 15:28:35 2017 -0700"
      },
      "message": "Fix the long time ioctl problem.\n\nOn some boards ioctl() takes a long time (several seconds) to perform\ndiscarding blocks for a few hundred MB (which might be expected). This\ncauses the UE (which is single threaded) to block for ioctl for several\nseconds and prevents the message loop from responding to dbus requests.\n\u0027update_engine_client --status\u0027 relies on dbus signals to get the status\nof the update engine. This can cause \u0027cros flash\u0027 or provisionning of\ndevices to fail due error returned from ssh invokation of\nupdate_engine_client. This CL fixes the issue by doing\nBLKDISCARD before BLKSECDISCARD.\n\nDiscarding the end of partition were originally added for b/28744609.\n\nBUG\u003dchromium:734731\nTEST\u003dcros flash; test_that provision_AutoUpdate;\n\nChange-Id: I1f9b572f5155284b3aa399285630daee560573a0\nReviewed-on: https://chromium-review.googlesource.com/547015\nCommit-Ready: Amin Hassani \u003cahassani@chromium.org\u003e\nTested-by: Amin Hassani \u003cahassani@chromium.org\u003e\nReviewed-by: Gwendal Grignou \u003cgwendal@chromium.org\u003e\nReviewed-by: Grant Grundler \u003cgrundler@chromium.org\u003e\nReviewed-by: Alex Deymo \u003cdeymo@google.com\u003e\n"
    },
    {
      "commit": "013ebf9cc81b1be2eaef6a0e1d19ff806a8fcdb8",
      "tree": "b46dd55bc145531845da546a642637eb6eb1f59d",
      "parents": [
        "a763c2ddabdb9cb51057823e0d79e53d089427af",
        "e5f6f2571d43eb65e0b27dd8d50f2c1f0b3fe30f"
      ],
      "author": {
        "name": "Amin Hassani",
        "email": "ahassani@google.com",
        "time": "Thu Jun 08 10:54:45 2017 -0700"
      },
      "committer": {
        "name": "Amin Hassani",
        "email": "ahassani@google.com",
        "time": "Thu Jun 15 16:24:38 2017 -0700"
      },
      "message": "Merge branch \u0027cros/upstream\u0027 into \u0027cros/master\u0027\n\nFixed:\n\tconnection_manager_interface.h: remove line 53-56\n\tfix the assert in common/http_fetcher_unittest.cc:637\n\nBUG\u003dnone\nTEST\u003dsent squashed merge to buildbots and HWtest was success.\n\nChange-Id: I15037921592a2b7a4dd76dff71417d03caf97cf6\n"
    },
    {
      "commit": "a763c2ddabdb9cb51057823e0d79e53d089427af",
      "tree": "141253e03e3d220413646a33c9cb69a4e57c6a02",
      "parents": [
        "948ea5885a76f2d79e39aa178b83c4a955207458"
      ],
      "author": {
        "name": "Grant Grundler",
        "email": "grundler@google.com",
        "time": "Wed May 10 11:12:52 2017 -0700"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Wed Jun 07 23:45:42 2017 -0700"
      },
      "message": "update_engine_client: add O_DSYNC flags\n\nOut-Of-Memory (OOM) kernel crash reports spike about 2x when new\nreleases are pushed to Jetstream devices: \"Google Wifi\" only has\n512MB total ram and only about 370MB available for all of user space\ntasks (AP deamons, update engine, crash reporting, etc). About half of\nthe OOM reports show \"active_anon\" was \u003e 350MB though \"dirty\" was\ngenerally very low (\u003c 10MB) in those same OOM reports.\n\nWhile \"cros flash $IP\" is running (uses update_engine_client), \"dirty\"\nwould climb to ~100MB (on gale; ~200MB for whirlwind) for most of the\nduration that the update was being written.  Those pages are no longer\navailable for general use. However, \"cros flash\" by default is performing\na \"full update\" and not a delta update which is what users typically get.\nThe difference is where the data is sourced from: a \"delta update\" is a\ncombination of \"patch updates\" and the currently in-use partition while\n\"full update\" means the entire image comes over the network (compressed).\nIn both cases, the entire new KERNEL and ROOT partition are rewritten.\n\nAdding two flags to open() call can improve this situation:\n\nO_DSYNC will guarantee the write() syscall does not return until\nthe data has (a) landed on the device and (b) flushed from the\ndevice cache (uses SCSI FUA). This limits the number of dirty\npages occupying host RAM.\n\nO_DIRECT will bypass the buffer cache and write directly from host\nmemory. However, until the write() calls are block size and block\naligned offsets, we can\u0027t turn this on. So current behavior will\nstill \"pollute\" the buffer cache but at least the pages of mem\ncan be recycled for other apps (due to O_DSYNC).\n\nWith this change, \"dirty\" was generally \u003c 200KB on whirlwind (huge\nimprovement!) with two exceptions:\n60 seconds after \"Preparing update\" (peak  ~70MB for \u003c 5 seconds)\n10 seconds after \"Update completed\" (peak ~220MB for about 30 seconds)\n\nThe first exception is scp getting the \"delta\" update from the host.\n\nThe second exception is running scp then \"tar + gzip\" - possibly\ndownloading and unpacking of /usr/local/autotest (et al) for \"test\" builds.\n\nBUG\u003db:31709028\nTEST\u003dmonitor buffer cache size while update_engine_client is running on gale.\n    Verify \"delta\" usage is \u003c 10MB peak with change.\n    test_that $DUT_IP autoupdate_EndToEndTest\n\nChange-Id: I993aa541cc29d818920312c0a900afaba9f88b74\nReviewed-on: https://chromium-review.googlesource.com/502369\nCommit-Ready: Grant Grundler \u003cgrundler@chromium.org\u003e\nTested-by: Grant Grundler \u003cgrundler@chromium.org\u003e\nReviewed-by: Dan Erat \u003cderat@chromium.org\u003e\nReviewed-by: Sonny Rao \u003csonnyrao@chromium.org\u003e\nReviewed-by: Ben Chan \u003cbenchan@chromium.org\u003e\nReviewed-by: Grant Grundler \u003cgrundler@chromium.org\u003e\n"
    },
    {
      "commit": "948ea5885a76f2d79e39aa178b83c4a955207458",
      "tree": "ea098375295d3f2a8287b0bb056f1de6fd1f2ef4",
      "parents": [
        "27d9d5399a0863949a995f631919d7745525644b"
      ],
      "author": {
        "name": "Andrey Ulanov",
        "email": "andreyu@google.com",
        "time": "Fri Jun 02 15:12:46 2017 -0700"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Mon Jun 05 16:39:50 2017 -0700"
      },
      "message": "update_engine: Remove zlib fingerprint checking\n\nThis is not needed as imgdiff is not being used and will be replaced by\npuffin.\nPresence of this code makes updating to newer version of zlib\nimpossible. (e.g. 1.2.8-\u003e1.2.11 update introduces some changes in\ncompression algorithm which make compressed output different).\n\nBUG\u003dNone\nTEST\u003d\"ebuild zlib.ebuild test\"\n\nChange-Id: I50793f552a44faaba5771271fdcf2b4f4aeba6e4\nReviewed-on: https://chromium-review.googlesource.com/522949\nCommit-Ready: Andrey Ulanov \u003candreyu@google.com\u003e\nTested-by: Andrey Ulanov \u003candreyu@google.com\u003e\nReviewed-by: Ben Chan \u003cbenchan@chromium.org\u003e\nReviewed-by: Sen Jiang \u003csenj@chromium.org\u003e\n"
    },
    {
      "commit": "7f4bc3f009c711b5bd1bd145f7f53cd837ed6414",
      "tree": "e6b759306bcb13bd385b20b78413409cf14ac27d",
      "parents": [
        "80098619176a8031b6fde1a57513c12e06a2e1e1"
      ],
      "author": {
        "name": "Ben Chan",
        "email": "benchan@chromium.org",
        "time": "Tue Jan 10 15:32:11 2017 -0800"
      },
      "committer": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Wed May 31 15:56:02 2017 -0700"
      },
      "message": "update_engine: resume suspended PostInstall action to handle termination\n\nPostinstallRunnerActionTest.RunAsRootCancelPostinstallActionTest exposes\nan issue when PostinstallRunnerAction tries to terminate an action that\nhas been suspended. PostinstallRunnerAction::TerminateProcessing() uses\nSubprocess::KillExec() to terminate the action by sending SIGTERM to the\nchild process associated with the action. However, if the action has\nbeen suspended by PostinstallRunnerAction::SuspendAction(), the child\nprocess won\u0027t receive the SIGTERM until it\u0027s resumed. This CL changes\nPostinstallRunnerAction::TerminateProcessing() to resume the child\nprocess after issuing SIGTERM.\n\nBUG\u003dchromium:678643\nTEST\u003dVerified that no orphaned \u0027sleep\u0027 process is left after running\nPostinstallRunnerActionTest.RunAsRootCancelPostinstallActionTest.\n\nReviewed-on: https://chromium-review.googlesource.com/426878\nCommit-Ready: Ben Chan \u003cbenchan@chromium.org\u003e\nTested-by: Ben Chan \u003cbenchan@chromium.org\u003e\nReviewed-by: Luigi Semenzato \u003csemenzato@chromium.org\u003e\nReviewed-by: Mike Frysinger \u003cvapier@chromium.org\u003e\n\n(cherry picked from commit f13a40924e0b1d71df07738078cebc933dd90a7e)\n\nChange-Id: I631da8bb5bf29141623f3eef3fc7c438cbccc98a\n"
    },
    {
      "commit": "eecb0a5b696c830e3db5019654141dc58fbef825",
      "tree": "0ca023f5ce1ffafda1aac658dba37bc9f041027d",
      "parents": [
        "558fe6ad38c6c419a135ce1ed1e3d1152f55ff7c"
      ],
      "author": {
        "name": "Alex Deymo",
        "email": "deymo@google.com",
        "time": "Fri May 19 15:15:08 2017 -0700"
      },
      "committer": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Wed May 31 15:55:51 2017 -0700"
      },
      "message": "Remove IMGDIFF operation application support.\n\nRemove support for applying IMGDIFF operations as this will be replaced\nwith PUFFIN.\n\nBug: None\nTest: Unittests still build.\nChange-Id: Idd8151a4fc772c70359afdd2da8d4a2f05bbd293\n"
    },
    {
      "commit": "6765a68c5f3963ce986f0bb11951b3af40e3e098",
      "tree": "21c5772b91cae2bb222e0bea354656457bc239e8",
      "parents": [
        "56db75ded7891f863463def26c938b6eee1b1b6f"
      ],
      "author": {
        "name": "Alex Deymo",
        "email": "deymo@google.com",
        "time": "Fri May 19 13:13:54 2017 -0700"
      },
      "committer": {
        "name": "Sen Jiang",
        "email": "senj@google.com",
        "time": "Wed May 31 13:56:11 2017 -0700"
      },
      "message": "Move to use bsdiff/ prefix in includes.\n\nThe bspatch.h headers are now under a \"bsdiff/\" directory.\n\nChange-Id: Ica2935e4163f617d60df1bc0846978b0e1a59f46\n"
    },
    {
      "commit": "4b5da322bdb715c952f2fd5faf55c4bbca6bb057",
      "tree": "a9f54c47b5ab45214ddabd70bab21bb9d885079a",
      "parents": [
        "dc066f14d22f7e3843ad3c4bbcfd8718f95d4dcd"
      ],
      "author": {
        "name": "Tao Bao",
        "email": "tbao@google.com",
        "time": "Sat Mar 25 23:49:47 2017 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Mar 28 19:01:31 2017 +0000"
      },
      "message": "Track the API change to ApplyImagePatch().\n\nIt now accepts a std::function as the sink callback.\n\nTest: update_engine_unittests\nChange-Id: I1d92197581069b36e14a5e25ee7c66079a987a6d\n"
    },
    {
      "commit": "f411650403c1d69c15ec0f2ee09b24c6c0ec67b5",
      "tree": "be70f831776e3b31271b3c78b75ca103586245e2",
      "parents": [
        "a6dc0fe787733d489f403b5162d99a78e17517f4"
      ],
      "author": {
        "name": "Alex Deymo",
        "email": "deymo@google.com",
        "time": "Wed Mar 22 17:00:31 2017 -0700"
      },
      "committer": {
        "name": "Alex Deymo",
        "email": "deymo@google.com",
        "time": "Sat Mar 25 01:43:15 2017 +0000"
      },
      "message": "Unmount old postinstall mountpoint from previous runs.\n\nWhen update_engine crashes, is killed or a developer runs\n\"stop update_engine\" while we are waiting for postinstall to finish\nthe other partition will continue to be mounted (read-only) on the\n/postinsall path. This will prevent to mount the new postinstall\nstep on top of it due to different SELinux labels when mounted and\nunmounted. After failing to run postinstall due to the failed mount\noperation we would cleanup the mountpoint, so this situation fixes\nitself after one failed update attempt, which can then be resumed\nfrom the very end.\n\nThis patch attempts to unmount /postinstall if a filesystem is mounted\nthere at the time we need to use the mountpoint.\n\nBug: 36391471\nTest: Added unittests.\nChange-Id: Idffd7a9319715bfb4ab6a9994c6757d27028d40a\n"
    }
  ],
  "next": "a6dc0fe787733d489f403b5162d99a78e17517f4"
}
