)]}'
{
  "commit": "c6f2d01128322a4a0f07a3ca4f2bd54c05fbf018",
  "tree": "a210dc033c6d1dfb436b6deefd38bafaf3b935d2",
  "parents": [
    "63a03ccdba640a77429670d1b1013eb9d621a103"
  ],
  "author": {
    "name": "Nikita Ioffe",
    "email": "ioffe@google.com",
    "time": "Wed Apr 07 16:25:49 2021 +0100"
  },
  "committer": {
    "name": "android-build-team Robot",
    "email": "android-build-team-robot@google.com",
    "time": "Thu Apr 08 03:48:55 2021 +0000"
  },
  "message": "Call apexd --unmount-all at the end of otapreopt_chroot run\n\nWe don\u0027t really care for the umount part, but we do care about freeing\nup loop and dm block devices so that next run of otapreopt_chroot can\nre-use them.\n\nNote that we must run `apexd --unmount-all` inside otapreopt_chroot\nitself. This is because otapreopt_chroot runs in /postintall namespace.\n\nTest: install an OTA, check number of loop devices\nTest: Install an OTA, cancel during finalization, Restart OTA\nTest: forrest test -l remote --test_bench_config asit/crosshatch --extra_args \u0027--delegated-tf ab://tradefed/tradefed/P21446393/.*google-tradefed.zip?unzip\u003dtrue\u0027 ab::P21523880:aosp_crosshatch-userdebug:git_master asit/dexoptota/self_full\nBug: 184716804\nChange-Id: I4f01cb9082f90fd40fba4a1864e8d6b548f5a274\n(cherry picked from commit 2a42aee981c6d53282a7d0e23232d32e886e30e7)\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "c04b558e2de20c63aa1af6b99212500a1d13ebf3",
      "old_mode": 33188,
      "old_path": "cmds/installd/otapreopt_chroot.cpp",
      "new_id": "3a8777616275fd7c9cb76f710df40a54420f5485",
      "new_mode": 33188,
      "new_path": "cmds/installd/otapreopt_chroot.cpp"
    }
  ]
}
