)]}'
{
  "log": [
    {
      "commit": "933caefe553f84668690952e842ccf7e4789ffcd",
      "tree": "ed7ae55df07ce464740e534991f0a1e56dc07787",
      "parents": [
        "2b2a3ff22cdbff81f2b2eed27a4fa516fb583d5a",
        "6f4c93a57adf142503c642734ea36e2a70867768"
      ],
      "author": {
        "name": "Beatrice Marchegiani",
        "email": "beatricemarch@google.com",
        "time": "Fri Sep 22 14:31:27 2023 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Fri Sep 22 14:31:27 2023 +0000"
      },
      "message": "Merge changes from topic \"bmm-events\" into udc-qpr-dev am: 6f4c93a57a\n\nOriginal change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/24770152\n\nChange-Id: I48429aeb7811ccf7f098cfdd79412f48c2750edd\nSigned-off-by: Automerger Merge Worker \u003candroid-build-automerger-merge-worker@system.gserviceaccount.com\u003e\n"
    },
    {
      "commit": "501eeee21a5fb200b88b42eb8ed53be67bd16e56",
      "tree": "397e27982bccf37f7ff8224d60b5654f43520b40",
      "parents": [
        "e8d8bf4d73d5f75858e93bdb4373217a7c00b9ed"
      ],
      "author": {
        "name": "beatricemarch",
        "email": "beatricemarch@google.com",
        "time": "Thu Aug 31 12:53:16 2023 +0000"
      },
      "committer": {
        "name": "Beatrice Marchegiani",
        "email": "beatricemarch@google.com",
        "time": "Thu Sep 21 14:47:01 2023 +0000"
      },
      "message": "Add more BackupManagerMonitor events to PerformUnifiedRestoreTask.\n\nIn particular\nadd events to cover\n-If this is KV or Full restore\n-For each package, when the restore started and when it ended\n-When a restore operation starts, if it is system restore or restore at install\n-Any errors\n\nTest: manual testing. Run `adb shell bmgr restore 1` and verify that the\nnew restore events are added to the dumpsys\natest CtsBackupHostTestCases, GtsBackupHostTestCases\natest BackupManagerMonitorDumpsysUtilsTest,\nBackupManagerMonitorEventSenderTest, UserBackupManagerServiceTest,\nPerformUnifiedRestoreTaskTest, BmgrTest\nBug: 290747920\n\nChange-Id: I0d221f10932fea3e8fb90a1827c7f1b5bf21d25d\n"
    },
    {
      "commit": "b22aa3f72bf2ac7123b6d9fbd84da1d0813425f4",
      "tree": "f48b5390efcf3cc7b928bf90c4dea064ffa47e3f",
      "parents": [
        "a128f032d04d73152f0796296c8bfbe7b8b8c115",
        "23228107548f2afed0bac838446399b07ad8b9b4"
      ],
      "author": {
        "name": "Chan Kim",
        "email": "kimchan@google.com",
        "time": "Tue Aug 22 16:17:21 2023 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Tue Aug 22 16:17:21 2023 +0000"
      },
      "message": "Merge \"Update language to comply with Android\u0027s inclusive language guidance\" into main am: d259fb38fc am: 2322810754\n\nOriginal change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2719957\n\nChange-Id: I93b2c058cb63bd48aa45efb42d3dc49f5f11cec0\nSigned-off-by: Automerger Merge Worker \u003candroid-build-automerger-merge-worker@system.gserviceaccount.com\u003e\n"
    },
    {
      "commit": "c9c754add3d7989ec58db9c3968280ce2b946c2c",
      "tree": "4fa49c1b9ad296b309f948805070006fa5862dda",
      "parents": [
        "7e2b5c0df2f61922f96a387585fa0ab5b62f5fe2"
      ],
      "author": {
        "name": "Chan Kim",
        "email": "kimchan@google.com",
        "time": "Mon Aug 21 21:37:53 2023 +0000"
      },
      "committer": {
        "name": "Chan Kim",
        "email": "kimchan@google.com",
        "time": "Tue Aug 22 14:14:36 2023 +0000"
      },
      "message": "Update language to comply with Android\u0027s inclusive language guidance\n\nSee https://source.android.com/setup/contribute/respectful-code for reference\n\nFor this round, the fixes are only applied to the following to minimize breaking dependencies:\n  * comments (excluding javaDoc annotations)\n\t* private constants\n\t* private functions\n\t* parameters within functions\n\nBYPASS_INCLUSIVE_LANGUAGE_REASON\u003dJust updating a few select inclusive language violations.\nNo-Typo-Check: Changes focused on inclusive language violations.\nBUG: 295342157\nChange-Id: Iacc0ea9fc848b15048978637bdc25136582433ef\n"
    },
    {
      "commit": "91e98fcb5a9247485b0e86f0063f3c74d92cdbe7",
      "tree": "bb3716c3bb47197c639f170588243a72862519e3",
      "parents": [
        "6cf0c3038b92832ba06431db28a17744652b5cc3"
      ],
      "author": {
        "name": "Wonyoung Kwak",
        "email": "wykwak@google.com",
        "time": "Wed May 10 05:16:08 2023 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed May 10 05:16:14 2023 +0000"
      },
      "message": "Revert \"Modifying Backup code to support HSUM mode.\"\n\nRevert submission 22327091-br-cts-hsum\n\nReason for revert: DroidMonitor-triggered revert due to breakage https://android-build.googleplex.com/builds/quarterdeck?branch\u003dgit_udc-dev\u0026target\u003daosp_bramble-userdebug\u0026lkgb\u003d10098913\u0026lkbb\u003d10101009\u0026fkbb\u003d10098962, bug 281753581.\n\nBug: 281753581\n\nReverted changes: /q/submissionid:22327091-br-cts-hsum\n\nChange-Id: I4de169440f587d5a458300a5f360ba974239e530\n"
    },
    {
      "commit": "6cf0c3038b92832ba06431db28a17744652b5cc3",
      "tree": "ed8c072520450f799226ecc5f76f1b36fd3b0cff",
      "parents": [
        "da26f028aeb54125923284002b24fcd7058d15d8"
      ],
      "author": {
        "name": "Piyush Mehrotra",
        "email": "piee@google.com",
        "time": "Fri Feb 17 12:28:10 2023 +0000"
      },
      "committer": {
        "name": "Piyush Mehrotra",
        "email": "piee@google.com",
        "time": "Tue Apr 25 10:17:05 2023 +0000"
      },
      "message": "Modifying Backup code to support HSUM mode.\n\nBug: 266703231\n\nTest: Run CTS/GTS tests for backup\nChange-Id: I7a8d09f9f1be83ff4d9f545439f93b2c5319f007\n"
    },
    {
      "commit": "a5cb4776048ac545ffa97c9f2a3d0a195ab44271",
      "tree": "decec861227ee2278e5f037bf786dd0eb6ab1899",
      "parents": [
        "d3bffa0ce8a0f74e00b9d6c4f8d584e59efad31d"
      ],
      "author": {
        "name": "Niamh Walsh",
        "email": "niamhfw@google.com",
        "time": "Wed Mar 15 19:03:36 2023 +0000"
      },
      "committer": {
        "name": "Niamh Walsh",
        "email": "niamhfw@google.com",
        "time": "Tue Apr 04 14:41:06 2023 +0000"
      },
      "message": "Support monitor arg for bmgr restore, and include detailed agent logs\n\nBug: 272551810\nTest: adb shell bmgr backupnow com.android.wallpaperbackup --monitor; adb shell bmgr restore 1 com.android.wallpaperbackup (http://go/paste/5502576853254144)\nChange-Id: Idc3e288f2548448d9a39f69096e33def783e3853\n"
    },
    {
      "commit": "8094d4da907d8e2eac09c76e18063f98e0bfa288",
      "tree": "626fce76fdf34cead3461cc7c4aa666a456b88f8",
      "parents": [
        "8d22a5fa95d0ff92803471a47deb1195757e420e"
      ],
      "author": {
        "name": "Ruslan Tkhakokhov",
        "email": "rthakohov@google.com",
        "time": "Mon Jan 16 13:42:53 2023 +0000"
      },
      "committer": {
        "name": "Ruslan Tkhakokhov",
        "email": "rthakohov@google.com",
        "time": "Tue Jan 17 12:32:48 2023 +0000"
      },
      "message": "Allow disabling framework Backup scheduling\n\nThis remerges ag/20838898 that was reverted due to breaking a\nrobolectric test in BackupFrameworksServicesRoboTests.\n\nTest: 1. atest BackupFrameworksServicesRoboTests\n      2. atest CtsBackupHostTestCases\nBug: 259953764\nChange-Id: I11c7dbe9959f5b5d1acf53e7830b7256357768e2\n"
    },
    {
      "commit": "223ae986de20db5c0e58f176bf9909e3bdf1c389",
      "tree": "1aedad373b5d30ee3f8d3af0dfe6a6c94a537c92",
      "parents": [
        "748c64d9dd728cdbaf8004c8be1b4f372c4cd624"
      ],
      "author": {
        "name": "Jason Macnak",
        "email": "natsu@google.com",
        "time": "Fri Jan 13 19:32:20 2023 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jan 13 19:32:20 2023 +0000"
      },
      "message": "Revert \"- Allow disabling framework Backup scheduling\"\n\nThis reverts commit 748c64d9dd728cdbaf8004c8be1b4f372c4cd624.\n\nReason for revert: DroidMonitor: Potential culprit for b/265432205 - verifying through ABTD before revert submission. This is part of the standard investigation process, and does not mean your CL will be reverted\n\nBug: b/265432205\nChange-Id: I11e21ad5048635716adb5724b7d78d5513fc60e9\n"
    },
    {
      "commit": "748c64d9dd728cdbaf8004c8be1b4f372c4cd624",
      "tree": "2f68915689428bfdd3c45ea23f88c6491ee06da5",
      "parents": [
        "f3506e6c51bdc99cf5ff61b3aeb47f1072477721"
      ],
      "author": {
        "name": "Andrea Zilio",
        "email": "azilio@google.com",
        "time": "Tue Jan 03 18:48:43 2023 +0000"
      },
      "committer": {
        "name": "Andrea Zilio",
        "email": "azilio@google.com",
        "time": "Fri Jan 13 12:06:48 2023 +0000"
      },
      "message": "- Allow disabling framework Backup scheduling\n\nTest: atest implemented and passing, to be sent in separate commit\nBug: 259953764\nChange-Id: I33be1b5907a6c2a0dd08c31ba3401d28fac02b35\n"
    },
    {
      "commit": "325fb3e2aac104d7090dd4978356920875c61ee0",
      "tree": "8ac3fffa92a70d86765b1e66dd69895ea08b80cf",
      "parents": [
        "7d825e68805ead1f6862562d48f93546567e4c39"
      ],
      "author": {
        "name": "Cole Faust",
        "email": "colefaust@google.com",
        "time": "Mon Aug 29 15:15:53 2022 -0700"
      },
      "committer": {
        "name": "Cole Faust",
        "email": "colefaust@google.com",
        "time": "Mon Aug 29 18:42:32 2022 -0700"
      },
      "message": "Fix module-file name collisions\n\nBazel doesn\u0027t allow a module and file with the same name.\n\nBug: 198619163\nTest: m ime, verified it was still installed to out/target/product/emulator64_x86_64/system/bin/ime and not ime.sh\nChange-Id: I214e190e159a7aff9149e77146d1a493992e885d\n"
    },
    {
      "commit": "051ef786ace7a5177874fd9c2f654f0c8f041cfe",
      "tree": "79d0887efa908b754e190fa34e5d2111f1ce310a",
      "parents": [
        "80bbdfd100a4143154dfe17f4258b74806d5b749"
      ],
      "author": {
        "name": "Bob Badour",
        "email": "bbadour@google.com",
        "time": "Fri Feb 12 17:07:05 2021 -0800"
      },
      "committer": {
        "name": "Bob Badour",
        "email": "bbadour@google.com",
        "time": "Tue Feb 16 04:09:57 2021 -0800"
      },
      "message": "[LSC] Add LOCAL_LICENSE_KINDS to frameworks/base\n\nAdded SPDX-license-identifier-Apache-2.0 to:\n  apct-tests/perftests/autofill/Android.bp\n  apct-tests/perftests/blobstore/Android.bp\n  apct-tests/perftests/core/Android.bp\n  apct-tests/perftests/core/apps/overlay/Android.bp\n  apct-tests/perftests/core/apps/reources_manager/Android.bp\n  apct-tests/perftests/core/jni/Android.bp\n  apct-tests/perftests/multiuser/Android.bp\n  apct-tests/perftests/multiuser/apps/dummyapp/Android.bp\n  apct-tests/perftests/packagemanager/Android.bp\n  apct-tests/perftests/packagemanager/apps/query-all/Android.bp\n  apct-tests/perftests/textclassifier/Android.bp\n  apct-tests/perftests/utils/Android.bp\n  apct-tests/perftests/windowmanager/Android.bp\n  apex/Android.bp\n  apex/blobstore/framework/Android.bp\n  apex/blobstore/service/Android.bp\n  apex/jobscheduler/framework/Android.bp\n  apex/jobscheduler/service/Android.bp\n  apex/media/Android.bp\n  apex/media/aidl/Android.bp\n  apex/media/framework/Android.bp\n  cmds/am/Android.bp\n  cmds/app_process/Android.bp\n  cmds/appops/Android.bp\n  cmds/appwidget/Android.bp\n  cmds/backup/Android.bp\n  cmds/bmgr/Android.bp\n  cmds/bootanimation/Android.bp\n  cmds/bu/Android.bp\n  cmds/content/Android.bp\n  cmds/dpm/Android.bp\n  cmds/hid/Android.bp\n  cmds/hid/jni/Android.bp\n  cmds/idmap2/Android.bp\n  cmds/ime/Android.bp\n  cmds/incident/Android.bp\n  cmds/incident_helper/Android.bp\n  cmds/incidentd/Android.bp\n  cmds/input/Android.bp\n  cmds/interrupter/Android.bp\n  cmds/locksettings/Android.bp\n  cmds/pm/Android.bp\n  cmds/requestsync/Android.bp\n  cmds/screencap/Android.bp\n  cmds/sm/Android.bp\n  cmds/svc/Android.bp\n  cmds/telecom/Android.bp\n  cmds/uiautomator/Android.bp\n  cmds/uiautomator/cmds/uiautomator/Android.bp\n  cmds/uiautomator/instrumentation/Android.bp\n  cmds/uiautomator/library/Android.bp\n  cmds/vr/Android.bp\n  cmds/wm/Android.bp\n  config/Android.bp\n  core/java/android/service/wallpaper/Android.bp\n  core/jni/Android.bp\n  core/sysprop/Android.bp\n  core/tests/BroadcastRadioTests/Android.bp\n  core/tests/ConnectivityManagerTest/Android.bp\n  core/tests/PackageInstallerSessions/Android.bp\n  core/tests/PlatformCompatFramework/Android.bp\n  core/tests/bandwidthtests/Android.bp\n  core/tests/benchmarks/Android.bp\n  core/tests/bluetoothtests/Android.bp\n  core/tests/bugreports/Android.bp\n  core/tests/coretests/Android.bp\n  core/tests/coretests/BinderDeathRecipientHelperApp/Android.bp\n  core/tests/coretests/BinderProxyCountingTestApp/Android.bp\n  core/tests/coretests/BinderProxyCountingTestService/Android.bp\n  core/tests/coretests/BstatsTestApp/Android.bp\n  core/tests/coretests/DisabledTestApp/Android.bp\n  core/tests/coretests/EnabledTestApp/Android.bp\n  core/tests/coretests/aidl/Android.bp\n  core/tests/coretests/apks/Android.bp\n  core/tests/coretests/apks/install/Android.bp\n  core/tests/coretests/apks/install_bad_dex/Android.bp\n  core/tests/coretests/apks/install_complete_package_info/Android.bp\n  core/tests/coretests/apks/install_decl_perm/Android.bp\n  core/tests/coretests/apks/install_jni_lib/Android.bp\n  core/tests/coretests/apks/install_jni_lib_open_from_apk/Android.bp\n  core/tests/coretests/apks/install_loc_auto/Android.bp\n  core/tests/coretests/apks/install_loc_internal/Android.bp\n  core/tests/coretests/apks/install_loc_sdcard/Android.bp\n  core/tests/coretests/apks/install_loc_unspecified/Android.bp\n  core/tests/coretests/apks/install_use_perm_good/Android.bp\n  core/tests/coretests/apks/install_uses_feature/Android.bp\n  core/tests/coretests/apks/install_verifier_bad/Android.bp\n  core/tests/coretests/apks/install_verifier_good/Android.bp\n  core/tests/coretests/apks/keyset/Android.bp\n  core/tests/coretests/apks/locales/Android.bp\n  core/tests/coretests/apks/overlay_config/Android.bp\n  core/tests/coretests/apks/version/Android.bp\n  core/tests/coretests/apks/version_nosys/Android.bp\n  core/tests/featureflagtests/Android.bp\n  core/tests/hdmitests/Android.bp\n  core/tests/hosttests/test-apps/AutoLocTestApp/Android.bp\n  core/tests/hosttests/test-apps/AutoLocVersionedTestApp_v1/Android.bp\n  core/tests/hosttests/test-apps/AutoLocVersionedTestApp_v2/Android.bp\n  core/tests/hosttests/test-apps/ExternalLocAllPermsTestApp/Android.bp\n  core/tests/hosttests/test-apps/ExternalLocPermsFLTestApp/Android.bp\n  core/tests/hosttests/test-apps/ExternalLocTestApp/Android.bp\n  core/tests/hosttests/test-apps/ExternalLocVersionedTestApp_v1/Android.bp\n  core/tests/hosttests/test-apps/ExternalLocVersionedTestApp_v2/Android.bp\n  core/tests/hosttests/test-apps/ExternalSharedPerms/Android.bp\n  core/tests/hosttests/test-apps/ExternalSharedPermsBT/Android.bp\n  core/tests/hosttests/test-apps/ExternalSharedPermsDiffKey/Android.bp\n  core/tests/hosttests/test-apps/ExternalSharedPermsFL/Android.bp\n  core/tests/hosttests/test-apps/InternalLocTestApp/Android.bp\n  core/tests/hosttests/test-apps/MultiDexLegacyTestServicesTests/Android.bp\n  core/tests/hosttests/test-apps/NoLocTestApp/Android.bp\n  core/tests/hosttests/test-apps/NoLocVersionedTestApp_v1/Android.bp\n  core/tests/hosttests/test-apps/NoLocVersionedTestApp_v2/Android.bp\n  core/tests/hosttests/test-apps/SharedUid/32/Android.bp\n  core/tests/hosttests/test-apps/SharedUid/32/jni/Android.bp\n  core/tests/hosttests/test-apps/SharedUid/64/Android.bp\n  core/tests/hosttests/test-apps/SharedUid/64/jni/Android.bp\n  core/tests/hosttests/test-apps/SharedUid/dual/Android.bp\n  core/tests/hosttests/test-apps/SharedUid/dual/jni/Android.bp\n  core/tests/hosttests/test-apps/SharedUid/java_only/Android.bp\n  core/tests/hosttests/test-apps/SimpleTestApp/Android.bp\n  core/tests/hosttests/test-apps/UpdateExtToIntLocTestApp_v1_ext/Android.bp\n  core/tests/hosttests/test-apps/UpdateExtToIntLocTestApp_v2_int/Android.bp\n  core/tests/hosttests/test-apps/UpdateExternalLocTestApp_v1_ext/Android.bp\n  core/tests/hosttests/test-apps/UpdateExternalLocTestApp_v2_none/Android.bp\n  core/tests/hosttests/test-apps/VersatileTestApp_Auto/Android.bp\n  core/tests/hosttests/test-apps/VersatileTestApp_External/Android.bp\n  core/tests/hosttests/test-apps/VersatileTestApp_Internal/Android.bp\n  core/tests/hosttests/test-apps/VersatileTestApp_None/Android.bp\n  core/tests/mockingcoretests/Android.bp\n  core/tests/notificationtests/Android.bp\n  core/tests/overlaytests/device/Android.bp\n  core/tests/overlaytests/device/test-apps/AppOverlayOne/Android.bp\n  core/tests/overlaytests/device/test-apps/AppOverlayTwo/Android.bp\n  core/tests/overlaytests/device/test-apps/FrameworkOverlay/Android.bp\n  core/tests/overlaytests/host/Android.bp\n  core/tests/overlaytests/remount/Android.bp\n  core/tests/overlaytests/remount/test-apps/Overlay/Android.bp\n  core/tests/overlaytests/remount/test-apps/SharedLibrary/Android.bp\n  core/tests/overlaytests/remount/test-apps/SharedLibraryOverlay/Android.bp\n  core/tests/overlaytests/remount/test-apps/Target/Android.bp\n  core/tests/packagemanagertests/Android.bp\n  core/tests/privacytests/Android.bp\n  core/tests/screenshothelpertests/Android.bp\n  core/tests/systemproperties/Android.bp\n  core/tests/utillib/Android.bp\n  core/tests/utiltests/Android.bp\n  core/tests/utiltests/jni/Android.bp\n  core/tests/uwbtests/Android.bp\n  core/xsd/Android.bp\n  core/xsd/vts/Android.bp\n  data/etc/Android.bp\n  data/etc/car/Android.bp\n  data/fonts/Android.bp\n  data/keyboards/Android.mk\n  drm/jni/Android.bp\n  errorprone/Android.bp\n  graphics/proto/Android.bp\n  keystore/Android.bp\n  keystore/tests/Android.bp\n  libs/WindowManager/Jetpack/Android.bp\n  libs/WindowManager/Shell/Android.bp\n  libs/WindowManager/Shell/tests/Android.bp\n  libs/androidfw/Android.bp\n  libs/androidfw/fuzz/resourcefile_fuzzer/Android.bp\n  libs/hostgraphics/Android.bp\n  libs/incident/Android.bp\n  libs/input/Android.bp\n  libs/input/tests/Android.bp\n  libs/protoutil/Android.bp\n  libs/services/Android.bp\n  libs/storage/Android.bp\n  libs/usb/tests/AccessoryChat/Android.bp\n  libs/usb/tests/AccessoryChat/accessorychat/Android.bp\n  location/lib/Android.bp\n  location/tests/Android.bp\n  location/tests/locationtests/Android.bp\n  lowpan/tests/Android.bp\n  media/Android.bp\n  media/java/Android.bp\n  media/java/android/media/tv/tunerresourcemanager/Android.bp\n  media/jni/Android.bp\n  media/jni/audioeffect/Android.bp\n  media/jni/soundpool/Android.bp\n  media/jni/soundpool/tests/Android.bp\n  media/lib/remotedisplay/Android.bp\n  media/lib/signer/Android.bp\n  media/lib/tvremote/Android.bp\n  media/lib/tvremote/tests/Android.bp\n  media/mca/filterfw/Android.bp\n  media/mca/filterfw/native/Android.bp\n  media/mca/filterpacks/Android.bp\n  media/mca/samples/CameraEffectsRecordingSample/Android.bp\n  media/mca/tests/Android.bp\n  media/native/midi/Android.bp\n  media/packages/BluetoothMidiService/Android.bp\n  media/packages/BluetoothMidiService/tests/unit/Android.bp\n  media/tests/AudioPolicyTest/Android.bp\n  media/tests/CameraBrowser/Android.bp\n  media/tests/EffectsTest/Android.bp\n  media/tests/MediaDump/Android.bp\n  media/tests/MediaFrameworkTest/Android.bp\n  media/tests/MediaRouter/Android.bp\n  media/tests/MtpTests/Android.bp\n  media/tests/ScoAudioTest/Android.bp\n  media/tests/SoundPoolTest/Android.bp\n  media/tests/TunerTest/Android.bp\n  media/tests/audiotests/Android.bp\n  media/tests/players/Android.bp\n  mime/Android.bp\n  native/android/Android.bp\n  native/graphics/jni/Android.bp\n  native/webview/loader/Android.bp\n  nfc-extras/Android.bp\n  nfc-extras/tests/Android.bp\n  packages/AppPredictionLib/Android.bp\n  packages/BackupEncryption/Android.bp\n  packages/BackupEncryption/test/robolectric-integration/Android.bp\n  packages/BackupEncryption/test/robolectric/Android.bp\n  packages/BackupEncryption/test/unittest/Android.bp\n  packages/BackupRestoreConfirmation/Android.bp\n  packages/CarSystemUI/Android.bp\n  packages/CarrierDefaultApp/Android.bp\n  packages/CarrierDefaultApp/tests/unit/Android.bp\n  packages/CompanionDeviceManager/Android.bp\n  packages/Connectivity/framework/Android.bp\n  packages/Connectivity/service/Android.bp\n  packages/CtsShim/Android.bp\n  packages/CtsShim/build/Android.bp\n  packages/CtsShim/build/jni/Android.bp\n  packages/DynamicSystemInstallationService/Android.bp\n  packages/DynamicSystemInstallationService/tests/Android.bp\n  packages/EasterEgg/Android.bp\n  packages/EncryptedLocalTransport/Android.bp\n  packages/ExtShared/Android.bp\n  packages/ExternalStorageProvider/Android.bp\n  packages/ExternalStorageProvider/tests/Android.bp\n  packages/FakeOemFeatures/Android.bp\n  packages/FusedLocation/Android.bp\n  packages/InputDevices/Android.bp\n  packages/LocalTransport/Android.bp\n  packages/PackageInstaller/Android.bp\n  packages/PrintRecommendationService/Android.bp\n  packages/PrintSpooler/Android.bp\n  packages/PrintSpooler/jni/Android.bp\n  packages/PrintSpooler/tests/outofprocess/Android.bp\n  packages/SettingsLib/ActionBarShadow/Android.bp\n  packages/SettingsLib/ActionButtonsPreference/Android.bp\n  packages/SettingsLib/AdaptiveIcon/Android.bp\n  packages/SettingsLib/Android.bp\n  packages/SettingsLib/AppPreference/Android.bp\n  packages/SettingsLib/BarChartPreference/Android.bp\n  packages/SettingsLib/DisplayDensityUtils/Android.bp\n  packages/SettingsLib/EntityHeaderWidgets/Android.bp\n  packages/SettingsLib/HelpUtils/Android.bp\n  packages/SettingsLib/LayoutPreference/Android.bp\n  packages/SettingsLib/ProgressBar/Android.bp\n  packages/SettingsLib/RadioButtonPreference/Android.bp\n  packages/SettingsLib/RestrictedLockUtils/Android.bp\n  packages/SettingsLib/SchedulesProvider/Android.bp\n  packages/SettingsLib/SearchProvider/Android.bp\n  packages/SettingsLib/SearchWidget/Android.bp\n  packages/SettingsLib/SettingsSpinner/Android.bp\n  packages/SettingsLib/SettingsTheme/Android.bp\n  packages/SettingsLib/Tile/Android.bp\n  packages/SettingsLib/Utils/Android.bp\n  packages/SettingsLib/search/Android.bp\n  packages/SettingsLib/tests/integ/Android.bp\n  packages/SettingsLib/tests/robotests/Android.bp\n  packages/SettingsProvider/Android.bp\n  packages/SharedStorageBackup/Android.bp\n  packages/Shell/Android.bp\n  packages/Shell/tests/Android.bp\n  packages/SimAppDialog/Android.bp\n  packages/SoundPicker/Android.bp\n  packages/StatementService/Android.bp\n  packages/SystemUI/Android.bp\n  packages/SystemUI/plugin/Android.bp\n  packages/SystemUI/plugin/ExamplePlugin/Android.bp\n  packages/SystemUI/plugin_core/Android.bp\n  packages/SystemUI/shared/Android.bp\n  packages/VpnDialogs/Android.bp\n  packages/WAPPushManager/Android.bp\n  packages/WAPPushManager/tests/Android.bp\n  packages/WallpaperBackup/Android.bp\n  packages/WallpaperCropper/Android.bp\n  packages/overlays/Android.mk\n  packages/overlays/tests/Android.bp\n  packages/services/PacProcessor/Android.bp\n  packages/services/PacProcessor/jni/Android.bp\n  packages/services/Proxy/Android.bp\n  proto/Android.bp\n  rs/jni/Android.mk\n  samples/demo/haptic-assessment/Android.bp\n  sax/tests/saxtests/Android.bp\n  services/Android.bp\n  services/accessibility/Android.bp\n  services/appprediction/Android.bp\n  services/appwidget/Android.bp\n  services/autofill/Android.bp\n  services/backup/Android.bp\n  services/backup/backuplib/Android.bp\n  services/companion/Android.bp\n  services/contentcapture/Android.bp\n  services/contentsuggestions/Android.bp\n  services/core/Android.bp\n  services/core/java/com/android/server/vcn/Android.bp\n  services/core/jni/Android.bp\n  services/core/xsd/Android.bp\n  services/core/xsd/vts/Android.bp\n  services/coverage/Android.bp\n  services/devicepolicy/Android.bp\n  services/incremental/Android.bp\n  services/midi/Android.bp\n  services/net/Android.bp\n  services/people/Android.bp\n  services/print/Android.bp\n  services/profcollect/Android.bp\n  services/restrictions/Android.bp\n  services/robotests/Android.bp\n  services/robotests/backup/Android.bp\n  services/systemcaptions/Android.bp\n  services/tests/PackageManagerComponentOverrideTests/Android.bp\n  services/tests/PackageManagerServiceTests/host/Android.bp\n  services/tests/PackageManagerServiceTests/host/test-apps/Android.bp\n  services/tests/mockingservicestests/Android.bp\n  services/tests/rescueparty/Android.bp\n  services/tests/servicestests/Android.bp\n  services/tests/servicestests/aidl/Android.bp\n  services/tests/servicestests/apks/Android.bp\n  services/tests/servicestests/apks/install-split-base/Android.bp\n  services/tests/servicestests/apks/install-split-feature-a/Android.bp\n  services/tests/servicestests/apks/install_intent_filters/Android.bp\n  services/tests/servicestests/apks/install_uses_sdk/Android.bp\n  services/tests/servicestests/test-apps/ConnTestApp/Android.bp\n  services/tests/servicestests/test-apps/JobTestApp/Android.bp\n  services/tests/servicestests/test-apps/PackageParserApp/Android.bp\n  services/tests/servicestests/test-apps/PackageParsingTestManifests/Android.bp\n  services/tests/servicestests/test-apps/SimpleServiceTestApp/Android.bp\n  services/tests/servicestests/test-apps/SuspendTestApp/Android.bp\n  services/tests/shortcutmanagerutils/Android.bp\n  services/tests/uiservicestests/Android.bp\n  services/tests/wmtests/Android.bp\n  services/usage/Android.bp\n  services/usb/Android.bp\n  services/voiceinteraction/Android.bp\n  services/wifi/Android.bp\n  startop/apps/test/Android.bp\n  startop/iorap/Android.bp\n  startop/iorap/functional_tests/Android.bp\n  startop/iorap/stress/Android.bp\n  startop/iorap/tests/Android.bp\n  startop/view_compiler/Android.bp\n  startop/view_compiler/dex_builder_test/Android.bp\n  test-base/hiddenapi/Android.bp\n  test-mock/Android.bp\n  test-runner/tests/Android.bp\n  tests/AccessibilityEventsLogger/Android.bp\n  tests/AccessoryDisplay/common/Android.bp\n  tests/AccessoryDisplay/sink/Android.bp\n  tests/AccessoryDisplay/source/Android.bp\n  tests/ActivityManagerPerfTests/stub-app/Android.bp\n  tests/ActivityManagerPerfTests/test-app/Android.bp\n  tests/ActivityManagerPerfTests/tests/Android.bp\n  tests/ActivityManagerPerfTests/utils/Android.bp\n  tests/ActivityTests/Android.bp\n  tests/ActivityViewTest/Android.bp\n  tests/AmSlam/Android.bp\n  tests/ApkVerityTest/Android.bp\n  tests/ApkVerityTest/ApkVerityTestApp/Android.bp\n  tests/ApkVerityTest/block_device_writer/Android.bp\n  tests/AppLaunch/Android.bp\n  tests/AppLaunchWear/Android.bp\n  tests/AppResourcesLoaders/Android.bp\n  tests/AppResourcesLoaders/Overlay/Android.bp\n  tests/Assist/Android.bp\n  tests/AutoVerify/app1/Android.bp\n  tests/AutoVerify/app2/Android.bp\n  tests/AutoVerify/app3/Android.bp\n  tests/AutoVerify/app4/Android.bp\n  tests/BackgroundDexOptServiceIntegrationTests/Android.bp\n  tests/BandwidthTests/Android.bp\n  tests/BatteryWaster/Android.bp\n  tests/BiDiTests/Android.bp\n  tests/BlobStoreTestUtils/Android.bp\n  tests/BootImageProfileTest/Android.bp\n  tests/BrowserPowerTest/Android.bp\n  tests/Camera2Tests/SmartCamera/SimpleCamera/jni/Android.bp\n  tests/CameraPrewarmTest/Android.bp\n  tests/Codegen/Android.bp\n  tests/Compatibility/Android.bp\n  tests/CoreTests/android/Android.bp\n  tests/DataIdleTest/Android.bp\n  tests/DozeTest/Android.bp\n  tests/DpiTest/Android.bp\n  tests/DynamicCodeLoggerIntegrationTests/Android.mk\n  tests/FeatureSplit/base/Android.bp\n  tests/FeatureSplit/feature1/Android.bp\n  tests/FeatureSplit/feature2/Android.bp\n  tests/FixVibrateSetting/Android.bp\n  tests/FlickerTests/Android.bp\n  tests/FlickerTests/test-apps/Android.bp\n  tests/FlickerTests/test-apps/flickerapp/Android.bp\n  tests/FrameworkPerf/Android.bp\n  tests/GamePerformance/Android.bp\n  tests/GridLayoutTest/Android.bp\n  tests/HierarchyViewerTest/Android.bp\n  tests/HugeBackup/Android.bp\n  tests/HwAccelerationTest/Android.bp\n  tests/Internal/Android.bp\n  tests/JankBench/Android.bp\n  tests/JobSchedulerPerfTests/Android.bp\n  tests/JobSchedulerTestApp/Android.bp\n  tests/LargeAssetTest/Android.bp\n  tests/LegacyAssistant/Android.bp\n  tests/LocalizationTest/Android.bp\n  tests/LocationTracker/Android.bp\n  tests/LotsOfApps/Android.bp\n  tests/LowStorageTest/Android.bp\n  tests/ManagedProfileLifecycleStressTest/Android.bp\n  tests/ManagedProfileLifecycleStressTest/app/DummyDPC/Android.bp\n  tests/MemoryUsage/Android.bp\n  tests/MirrorSurfaceTest/Android.bp\n  tests/NativeProcessesMemoryTest/Android.bp\n  tests/NetworkSecurityConfigTest/Android.bp\n  tests/NullHomeTest/Android.bp\n  tests/OdmApps/Android.bp\n  tests/OdmApps/app/Android.bp\n  tests/OdmApps/priv-app/Android.bp\n  tests/OneMedia/Android.bp\n  tests/PackageWatchdog/Android.bp\n  tests/PlatformCompatGating/Android.bp\n  tests/PlatformCompatGating/test-rules/Android.bp\n  tests/ProtoInputStreamTests/Android.bp\n  tests/RemoteDisplayProvider/Android.bp\n  tests/RenderThreadTest/Android.bp\n  tests/RollbackTest/Android.bp\n  tests/SerialChat/Android.bp\n  tests/ServiceCrashTest/Android.bp\n  tests/SharedLibrary/client/Android.bp\n  tests/SharedLibrary/lib/Android.bp\n  tests/ShowWhenLockedApp/Android.bp\n  tests/SmokeTest/Android.bp\n  tests/SmokeTest/tests/Android.bp\n  tests/SmokeTestApps/Android.bp\n  tests/SoundTriggerTestApp/Android.bp\n  tests/Split/Android.bp\n  tests/StagedInstallTest/Android.bp\n  tests/StatusBar/Android.bp\n  tests/SurfaceComposition/Android.bp\n  tests/SurfaceControlViewHostTest/Android.bp\n  tests/SystemMemoryTest/device/Android.bp\n  tests/SystemMemoryTest/host/Android.bp\n  tests/SystemUIDemoModeController/Android.bp\n  tests/TaskOrganizerTest/Android.bp\n  tests/TelephonyCommonTests/Android.bp\n  tests/TouchLatency/Android.bp\n  tests/TransformTest/Android.bp\n  tests/TtsTests/Android.bp\n  tests/UiBench/Android.bp\n  tests/UsageReportingTest/Android.bp\n  tests/UsageStatsPerfTests/Android.bp\n  tests/UsageStatsTest/Android.bp\n  tests/UsbHostExternalManagmentTest/AoapTestDevice/Android.bp\n  tests/UsbHostExternalManagmentTest/AoapTestHost/Android.bp\n  tests/UsbHostExternalManagmentTest/UsbHostExternalManagmentTestApp/Android.bp\n  tests/UsbManagerTests/Android.bp\n  tests/UsbManagerTests/lib/Android.bp\n  tests/UsbTests/Android.bp\n  tests/UsesFeature2Test/Android.bp\n  tests/VectorDrawableTest/Android.bp\n  tests/VoiceEnrollment/Android.bp\n  tests/VoiceInteraction/Android.bp\n  tests/WallpaperTest/Android.bp\n  tests/WindowAnimationJank/Android.bp\n  tests/WindowInsetsTests/Android.bp\n  tests/appwidgets/AppWidgetHostTest/Android.bp\n  tests/appwidgets/AppWidgetProviderTest/Android.bp\n  tests/backup/Android.mk\n  tests/benchmarks/Android.bp\n  tests/libs-permissions/Android.bp\n  tests/net/Android.bp\n  tests/net/common/Android.bp\n  tests/net/deflake/Android.bp\n  tests/net/integration/Android.bp\n  tests/net/jni/Android.bp\n  tests/net/smoketest/Android.bp\n  tests/notification/Android.bp\n  tests/permission/Android.bp\n  tests/privapp-permissions/Android.bp\n  tests/testables/Android.bp\n  tests/testables/tests/Android.bp\n  tests/utils/StubIME/Android.bp\n  tests/utils/hostutils/Android.bp\n  tests/utils/testutils/Android.bp\n  tests/vcn/Android.bp\n  tools/aapt/Android.bp\n  tools/aapt2/Android.bp\n  tools/aapt2/integration-tests/AutoVersionTest/Android.bp\n  tools/aapt2/integration-tests/BasicTest/Android.bp\n  tools/aapt2/integration-tests/MergeOnlyTest/LeafLib/Android.mk\n  tools/aapt2/integration-tests/MergeOnlyTest/LocalLib/Android.mk\n  tools/aapt2/integration-tests/NamespaceTest/LibOne/Android.mk\n  tools/aapt2/integration-tests/NamespaceTest/LibTwo/Android.mk\n  tools/aapt2/integration-tests/StaticLibTest/App/Android.bp\n  tools/aapt2/integration-tests/StaticLibTest/LibOne/Android.bp\n  tools/aapt2/integration-tests/StaticLibTest/LibTwo/Android.bp\n  tools/aapt2/integration-tests/SymlinkTest/Android.bp\n  tools/bit/Android.bp\n  tools/codegen/Android.bp\n  tools/dump-coverage/Android.bp\n  tools/incident_report/Android.bp\n  tools/incident_section_gen/Android.bp\n  tools/lock_agent/Android.bp\n  tools/locked_region_code_injection/Android.bp\n  tools/obbtool/Android.bp\n  tools/powermodel/Android.bp\n  tools/preload-check/Android.bp\n  tools/preload-check/device/Android.bp\n  tools/preload/loadclass/Android.bp\n  tools/processors/staledataclass/Android.bp\n  tools/processors/view_inspector/Android.bp\n  tools/protologtool/Android.bp\n  tools/sdkparcelables/Android.bp\n  tools/split-select/Android.bp\n  tools/streaming_proto/Android.bp\n  tools/validatekeymaps/Android.bp\n  wifi/java/Android.bp\n  wifi/tests/Android.bp\n\nAdded SPDX-license-identifier-Apache-2.0 SPDX-license-identifier-BSD to:\n  libs/hwui/Android.bp\n  native/webview/plat_support/Android.bp\n  obex/Android.bp\n\nAdded SPDX-license-identifier-Apache-2.0 SPDX-license-identifier-BSD\n    SPDX-license-identifier-CC-BY SPDX-license-identifier-CPL-1.0\n    SPDX-license-identifier-GPL SPDX-license-identifier-GPL-2.0\n    SPDX-license-identifier-MIT SPDX-license-identifier-Unicode-DFS\n    SPDX-license-identifier-W3C legacy_unencumbered\nto:\n  Android.bp\n\nAdded SPDX-license-identifier-Apache-2.0 SPDX-license-identifier-BSD\n    legacy_unencumbered\nto:\n  core/java/Android.bp\n\nAdded SPDX-license-identifier-Apache-2.0 SPDX-license-identifier-CPL-1.0\nto:\n  test-base/Android.bp\n  test-runner/Android.bp\n\nAdded SPDX-license-identifier-Apache-2.0 SPDX-license-identifier-GPL\nto:\n  core/res/Android.bp\n\nAdded SPDX-license-identifier-Apache-2.0 SPDX-license-identifier-GPL-2.0\nto:\n  libs/usb/Android.bp\n  libs/usb/tests/accessorytest/Android.bp\n\nAdded SPDX-license-identifier-Apache-2.0 SPDX-license-identifier-MIT\nto:\n  tools/preload/Android.bp\n\nAdded SPDX-license-identifier-Apache-2.0 SPDX-license-identifier-MIT\n    SPDX-license-identifier-Unicode-DFS\nto:\n  api/Android.bp\n  boot/Android.bp\n  cmds/device_config/Android.bp\n  cmds/settings/Android.bp\n  core/api/Android.bp\n  core/tests/coretests/certs/Android.bp\n  core/tests/overlaytests/remount/test-apps/certs/Android.bp\n  core/tests/overlaytests/remount/test-apps/overlaid_apex/Android.bp\n  core/tests/overlaytests/remount/test-apps/overlay_apex/Android.bp\n  libs/tracingproxy/Android.bp\n  services/startop/Android.bp\n  test-legacy/Android.mk\n  tests/ApkVerityTest/testdata/Android.bp\n  tests/TransitionTests/Android.bp\n\nBug: 68860345\nBug: 151177513\nBug: 151953481\n\nTest: m all\n\nExempt-From-Owner-Approval: janitorial work\n\nChange-Id: Ic44d662936d1ff0cae7fbe915932b37aa4e4869a\nMerged-in: I6e9103c3275cb2e6df5dc586588eccd7d2ab6b06\n"
    },
    {
      "commit": "52b9862f87c70156a6027564cdc478f46ed89e9a",
      "tree": "d08f055d0e0d2e455fedc4dd3d2ff85c8d03cab9",
      "parents": [
        "fab0ab3c9cd160e50c09017c79f75f5f16342dcb"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Dec 08 08:36:17 2020 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Dec 08 08:36:28 2020 -0700"
      },
      "message": "Improve OWNERS coverage across frameworks/base/.\n\nAs general background, OWNERS files expedite code reviews by helping\ncode authors quickly find relevant reviewers, and they also ensure\nthat stakeholders are involved in code changes in their areas.\n\nSome teams under frameworks/base/ have been using OWNERS files\nsuccessfully for many years, and we\u0027re ready to expand them to cover\nmore areas.  Here\u0027s the historical coverage statistics for the last\ntwo years of changes before these new OWNERS changes land:\n\n-- 56% of changes are fully covered by OWNERS\n-- 17% of changes are partially covered by OWNERS\n-- 25% of changes have no OWNERS coverage\n\nWorking closely with team leads, we\u0027ve now identified clear OWNERS on\na per-package basis, and we\u0027re using \"include\" directives whenever\npossible to to simplify future maintenance.  With this extensive\neffort, we\u0027ve now improved our coverage as follows:\n\n-- 98% of changes are fully covered by OWNERS\n-- 1% of changes are partially covered by OWNERS\n-- 1% of changes have no OWNERS coverage\n\nThis specific change is automatically generated by a script that\nidentifies relevant \"include\" directives.\n\nBug: 174932174\nTest: manual\nExempt-From-Owner-Approval: refactoring with team leads buy-in\nMerged-In: I3480ddf2fe7ba3dfb922b459d4da01fa17a2c813\nChange-Id: I3480ddf2fe7ba3dfb922b459d4da01fa17a2c813\n"
    },
    {
      "commit": "6baf03e1ad49ae4df23004fbc5269f06174f635f",
      "tree": "13b6ac182d4f058e109deb3f9b05f97d0de60a20",
      "parents": [
        "35fa063e895d682faa6431dc6e89fcbebe01f2c1"
      ],
      "author": {
        "name": "Ruslan Tkhakokhov",
        "email": "rthakohov@google.com",
        "time": "Tue Aug 27 08:50:10 2019 +0100"
      },
      "committer": {
        "name": "Ruslan Tkhakokhov",
        "email": "rthakohov@google.com",
        "time": "Tue Aug 27 11:11:24 2019 +0100"
      },
      "message": "Add bmgr command to enable/disable auto restore\n\nBug: 139658304\nTest: 1. atest AutoRestoreHostSideTest\n      2. \"bmgr autorestore true\", verify auto restore enabled via\n         dumpsys\n         \"bmgr autorestore false\", verify auto restore disabled via\n\t dumpsys\n\nChange-Id: I1174d2db172d06e90fd79385b9f0c64f4e8f4201\n"
    },
    {
      "commit": "3c57dd20f655748518f42ed83ce280b57ea7af45",
      "tree": "5ef6432accca1291a2182982d9251d2db4b91206",
      "parents": [
        "d32cc0a359c0dc25ec2f26b77bf42622c489bf4c"
      ],
      "author": {
        "name": "nathch",
        "email": "nathch@google.com",
        "time": "Tue Jul 16 18:01:04 2019 +0100"
      },
      "committer": {
        "name": "Chandan Nath",
        "email": "nathch@google.com",
        "time": "Wed Jul 17 13:04:45 2019 +0000"
      },
      "message": "Differentiate between various error conditions when calling Bmgr methods\n\nDifferentiate between\n1. when the service is null\n2. the service is not activated\n3. there is a remote exception\n4. we cant get a restore session from the service\n\nBug: 137156961\n\nTest: atest -v CtsBackupTestCases CtsBackupHostTestCases\nTest: atest -v BmgrTest\n\nChange-Id: I63f1005f43d8e3e23bbd629b183f128fa02bbac1\n"
    },
    {
      "commit": "6d11422acf32391910a999f04a1559bec6ff3041",
      "tree": "635ef14dce8666063cd9a9a9233d3c85ea84b229",
      "parents": [
        "6d06741156918ea469bca8308138db6b93924e39",
        "8a741eaecc8500d64c9c84c2d4ce754aef9a47fa"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri May 10 20:04:33 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri May 10 20:04:33 2019 -0700"
      },
      "message": "Merge \"Clean up some shell script copy \u0026 paste.\" am: b4012baaf4 am: fda05c96c1\nam: 8a741eaecc\n\nChange-Id: Iba84d2567795bb92d2fbf1774fa1562fee46278b\n"
    },
    {
      "commit": "8a741eaecc8500d64c9c84c2d4ce754aef9a47fa",
      "tree": "be4248769d3d32a1f41ecc20ce80ea53a7b3d757",
      "parents": [
        "ff58f1e378dbc090de8eb30c06305fd3d6407f1e",
        "fda05c96c17f969df7483cdbbeb2eb4d6092c3f8"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri May 10 11:22:58 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri May 10 11:22:58 2019 -0700"
      },
      "message": "Merge \"Clean up some shell script copy \u0026 paste.\" am: b4012baaf4\nam: fda05c96c1\n\nChange-Id: I104862db5d787ffc14512bf1181332c8ca7ba872\n"
    },
    {
      "commit": "5a03b69fc8723a2e4dcfb5ffe420cad9c8bff85c",
      "tree": "a254280735fae2424ffd70694724aaa9dc6484db",
      "parents": [
        "8e63c9cc01ffaa1c0929c45569dabbd6b788f0da"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu May 09 22:01:14 2019 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu May 09 22:01:14 2019 -0700"
      },
      "message": "Clean up some shell script copy \u0026 paste.\n\nRemove apparently meaningless comment that\u0027s been copy \u0026 pasted all over.\n\nRemove trailing whitespace.\n\nConsistently use \"$@\".\n\nInline single-use constant.\n\nTest: treehugger\nChange-Id: Ie3b3e285cd35ecff9e6fdb7144fe4bbd04e42452\n"
    },
    {
      "commit": "508181e2b725afbccf6e531a5913dca84bf30645",
      "tree": "d14ebe711d75b5f95a23b61ba19d03fb67d2a311",
      "parents": [
        "c207d5fd05736df02d7d02ce60791f11b3719a79"
      ],
      "author": {
        "name": "Al Sutton",
        "email": "alsutton@google.com",
        "time": "Tue Apr 30 11:22:04 2019 +0100"
      },
      "committer": {
        "name": "Al Sutton",
        "email": "alsutton@google.com",
        "time": "Wed May 01 05:48:29 2019 +0000"
      },
      "message": "Add TEST_MAPPING for backup paths\n\nFixes: 131298070\nTest: Gerrit verification that tests are running\nChange-Id: I3eab9721f1f4e74d70b718ca8f54943278ef6ee1\n"
    },
    {
      "commit": "7053e28b596ed7bdf3180cd5069001c37880e32c",
      "tree": "ade3a14384387a88afda0424dd56eab62cdb0f17",
      "parents": [
        "be8b2e8583583997f96bdbe7132f62dba5889182"
      ],
      "author": {
        "name": "Chandan Nath",
        "email": "nathch@google.com",
        "time": "Fri Mar 29 13:18:35 2019 +0000"
      },
      "committer": {
        "name": "Chandan Nath",
        "email": "nathch@google.com",
        "time": "Wed Apr 03 13:36:55 2019 +0100"
      },
      "message": "[Multi-user] Clean up user state stored in the system user directory\nwhen user is removed.\n\nFor non system users, backup state is stored in both the user\u0027s own dir and the system dir.\nWhen the user is removed, the user\u0027s own dir gets removed by the OS. This code change ensures\nthat the part of the user backup state which is in the system dir also gets removed.\n\nBug: 127650374\n\nTest: atest -v CtsBackupHostTestCases:android.cts.backup.MultiUserBackupStateTest\n\nChange-Id: I4ea252e8e6da608e36ec3ac335666923d88a8748\n"
    },
    {
      "commit": "45c0d71e774c84ec81392393a0fafad398d2838d",
      "tree": "40b86b0262b7c58c72a2be670380e56bf7fce96d",
      "parents": [
        "4ae4e50deffeddcfbaa7dcd85816c60e18011c3d"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Thu Mar 28 22:31:35 2019 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Fri Mar 29 16:35:06 2019 -0700"
      },
      "message": "Convert frameworks/base/cmds/* to Android.bp\n\nSee build/soong/README.md for more information.\n\nAlso converts the rest of frameworks/base/tools/streaming_proto.\n\nBug: 122332340\nTest: m checkbuild\nChange-Id: I87c500c5464fb1722b4b518d89065f5e1ee29a97\nMerged-In: Ieb54feb3902bddfd5a571369fbf50161ae646647\n"
    },
    {
      "commit": "0a2d8cbb26b5cca5b87d286cc676c7cf8adb5898",
      "tree": "c3fc17fefed667787f0152cb1616f00170b7d0e0",
      "parents": [
        "1bf4cace33b2a6eeb38c8b5ae3e5d99d8d1614b3"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Fri Mar 29 11:05:21 2019 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Fri Mar 29 12:41:25 2019 -0700"
      },
      "message": "Convert frameworks/base/cmds/media and bmgr to Android.bp\n\nSee build/soong/README.md for more information.\n\nBug: 122332340\nTest: m media\nTest: m RunBackupFrameworksServicesRoboTests\nChange-Id: Ieb54feb3902bddfd5a571369fbf50161ae646647\n"
    },
    {
      "commit": "507e6f834daa7021c3c1afc752972a079cf96fb3",
      "tree": "12e447e1a50a873eaa57d78c3e5cee8eb052c841",
      "parents": [
        "25f0e8167185b53a41328d9181799f61c61d0950"
      ],
      "author": {
        "name": "Ruslan Tkhakokhov",
        "email": "rthakohov@google.com",
        "time": "Mon Mar 11 16:26:17 2019 +0000"
      },
      "committer": {
        "name": "Ruslan Tkhakokhov",
        "email": "rthakohov@google.com",
        "time": "Mon Mar 18 12:26:02 2019 +0000"
      },
      "message": "API Review: Internal RestoreSession#restorePackages\n\nBug: 120843781\nTest: 1) atest RunBackupFrameworksServicesRoboTests\n      2) atest CtsBackupTestCases\n      3) atest CtsBackupHostTestCases\n      4) atest GtsBackupTestCases\n      5) atest GtsBackupHostTestCases\n\nChange-Id: Ice42aedd702e1c16b074d7a00d7b15d8f4aaf733\n"
    },
    {
      "commit": "bdb8848abe9999fbd302d71f2c0ce62b9a09fd8a",
      "tree": "b2c8d96aeb9ee6e07dc9434cabe619c8857b50da",
      "parents": [
        "25b54058c0e3bb7e0630650f750092f7ccd2289f"
      ],
      "author": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Tue Jan 22 15:32:25 2019 +0000"
      },
      "committer": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Thu Jan 24 15:14:09 2019 +0000"
      },
      "message": "[Multi-user] Disable backup by default in non-system users\n\nKey changes in this CL:\n- Backup is now disabled by default in non-system users unless DPM\nactivates backup for this user AND the system user is activated. This\nprovides gating for the multi-user B\u0026R feature.\n- Activation is done via an \u0027activate\u0027 file that is per-user (but lives\nin the system user directory to account for locked users).\n- isBackupServiceActive() handles both locked and unlocked users.\n- Added a bmgr command to expose isBackupServiceActive() for testing\npurposes and enforce appropriate permissions.\n\nFuture CLs:\n- Handle future migration to backup on by default for non-system users\n- Change CTS tests to use the new bmgr command\n\nBug: 121306407\nTest: 1) atest TrampolineTest\n2) Start system user -\u003e service started; run backup and restore\nsuccessfully\n3) Start non-system user -\u003e ignored;\n4) adb shell bmgr --user 0 activate true -\u003e security exception;\nadb shell bmgr --user 10 activate true -\u003e security exception (work\nprofile);\nadb shell bmgr --user 11 activate true/false -\u003e creates/deletes activate\nfile and starts/stops the service\nChange-Id: Ic77db9b8b2e5170dcf89bef863dac4713730797a\n"
    },
    {
      "commit": "d1ee43e576b2a87b28c096404f7cb3cf7a123ae2",
      "tree": "58b8862335c56ac80e6f220e96690ed4b13f6a9d",
      "parents": [
        "009bd1bfe357418d993a93f3b28adb56d8ea01e5"
      ],
      "author": {
        "name": "Chandan Nath",
        "email": "nathch@google.com",
        "time": "Sun Dec 16 21:41:03 2018 +0000"
      },
      "committer": {
        "name": "Chandan Nath",
        "email": "nathch@google.com",
        "time": "Tue Dec 18 14:10:17 2018 +0000"
      },
      "message": "[Multi-user] Change more BackupManager AIDL methods to accept userId in methods\n\nBug: 120120742\n\nTest: 1) atest RunFrameworksServicesRoboTests\n2) atest $(find \\\nframeworks/base/services/tests/servicestests/src/com/android/server/backup \\\n-name \u0027*Test.java\u0027)\n3) atest CtsBackupTestCases\n4) atest CtsBackupHostTestCases\n5) atest GtsBackupTestCases\n6) atest GtsBackupHostTestCases\n7) \u0027adb shell bmgr\u0027 enabled/backupnow flow\n\nChange-Id: Ia0641f66dd0a935420f1aee332bb2e21ca03610e\n"
    },
    {
      "commit": "cd44f758952f17f838f10381d24a9ff3e8b4cdbe",
      "tree": "b64a72d55e1185bbad5b29292098374ea9983103",
      "parents": [
        "a96d8d0b78b93a428edad06b0202cb38741213ef"
      ],
      "author": {
        "name": "Chandan Nath",
        "email": "nathch@google.com",
        "time": "Fri Dec 07 16:49:37 2018 +0000"
      },
      "committer": {
        "name": "Chandan Nath",
        "email": "nathch@google.com",
        "time": "Tue Dec 11 17:06:30 2018 +0000"
      },
      "message": "[Multi-user] Change BackupManager AIDL to accept userId in methods\n\nBug: 120120742\n\nTest: 1) atest RunFrameworksServicesRoboTests\n2) atest $(find \\\nframeworks/base/services/tests/servicestests/src/com/android/server/backup \\\n-name \u0027*Test.java\u0027)\n3) atest CtsBackupTestCases\n4) atest CtsBackupHostTestCases\n5) atest GtsBackupTestCases\n6) atest GtsBackupHostTestCases\n7) Toggle Backup/\u0027Backup Now\u0027 in Settings\n8) \u0027adb shell bmgr\u0027 enabled/backupnow flow\n\nChange-Id: I5dba38f6a24e07947d1b0948f9caefeca011205d\n"
    },
    {
      "commit": "57bf7bad03df4623d5864cb9b802817f2850c319",
      "tree": "853cc47397b1dd27651d2cce5048effe6bae4a9e",
      "parents": [
        "2252fcc415633e9af7675f78f97096be70334204"
      ],
      "author": {
        "name": "Chandan Nath",
        "email": "nathch@google.com",
        "time": "Fri Nov 16 18:19:28 2018 +0000"
      },
      "committer": {
        "name": "Chandan Nath",
        "email": "nathch@google.com",
        "time": "Wed Nov 21 13:52:34 2018 +0000"
      },
      "message": "add option --user to Bmgr.java\n\nBug: 118480337\n\nTest: 1) atest RunFrameworksServicesRoboTests\n    2) atest BmgrTest\n    3) atest CtsBackupTestCases\n    4) atest CtsBackupHostTestCases\n    5) atest GtsBackupTestCases\n    6) atest GtsBackupHostTestCases\n    UsageStatsRestoreHostSideTest fails. I verified locally that this test\n    fails without this change too.\n    7) flashed device and ran:adb shell bmgr --user 10 backupnow --all\n    Logs and output are as expected since backupservice isnt active for user 10\n    log: Bmgr    : Running backupnow for user:10\n    output: Error: Could not access the Backup Manager.  Is the system running\n\n    8) flashed device and ran:adb shell bmgr backupnow --all\n    log: Bmgr    : Running backupnow for user:0\n    output:\n\tRunning incremental backup for all packages.\n\tPackage @pm@ with result: Success\n\t....\n\tBackup finished with result: Success\n\nChange-Id: Icfebe26f36276ea687d15c9f9c361c409313ae9d\n"
    },
    {
      "commit": "607d78e18845aea4cccaff0f5aa181efb844bec3",
      "tree": "19dda036cf68275ae9e82f61601caadc336cde49",
      "parents": [
        "be018bbb0c635575735b27339ccb7912618ea869"
      ],
      "author": {
        "name": "Bernardo Rufino",
        "email": "brufino@google.com",
        "time": "Wed Aug 22 09:56:34 2018 +0100"
      },
      "committer": {
        "name": "Bernardo Rufino",
        "email": "brufino@google.com",
        "time": "Wed Aug 22 09:56:34 2018 +0100"
      },
      "message": "Add adb shell bmgr init TRANSPORT... to bmgr help\n\nWasn\u0027t there.\n\nTest: adb shell bmgr init\n      android/com.android.internal.backup.LocalTransport, verify it works\nTest: adb shell bmgr, check help message\n\nChange-Id: Icceb78eac8c73128897f64a3d7c72fd27ff269dc\n"
    },
    {
      "commit": "3deabebb24a3d1db2ac56ff53f6953814a1d9ea0",
      "tree": "2e2cc47b50cd451b7edb2b7d656f3092bdb074dd",
      "parents": [
        "9a64ba2602677e1ec3e0edc94e754d393983362e"
      ],
      "author": {
        "name": "Bernardo Rufino",
        "email": "brufino@google.com",
        "time": "Thu Aug 09 10:48:45 2018 +0100"
      },
      "committer": {
        "name": "Bernardo Rufino",
        "email": "brufino@google.com",
        "time": "Thu Aug 09 10:48:45 2018 +0100"
      },
      "message": "Add --monitor to bmgr backupnow\n\nAnd --monitor-verbose. For debugging.\n\nTest: adb shell bmgr backupnow --monitor \u003cpackages\u003e and verify output\nTest: adb shell bmgr backupnow --monitor-verbose \u003cpackages\u003e and verify\n      output\n\nChange-Id: I6c0a46a6b642063c37e548e181f4659dd46426a5\n"
    },
    {
      "commit": "da7b36c9d9da5e856620ef1552761844db1e078e",
      "tree": "25be4e9ef6f386b8407ec49516e255afd644633d",
      "parents": [
        "88cc4d09a39ac5b402597a74760bf2cb9b5906b6",
        "8927037477f4a895b35c492e0861dea86dd2440f"
      ],
      "author": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Wed Jun 06 10:30:33 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jun 06 10:30:33 2018 +0000"
      },
      "message": "Merge \"Disable bmgr if BMS is not running\""
    },
    {
      "commit": "52642716a3447d3c6159ce1456e6f6a17c330f4e",
      "tree": "aaf996344f2ad9f9a4d680db1605d1e8d4c55894",
      "parents": [
        "047577692e53c025ef7db7fee015cf265ed917d8"
      ],
      "author": {
        "name": "Bernardo Rufino",
        "email": "brufino@google.com",
        "time": "Wed May 30 10:09:25 2018 +0100"
      },
      "committer": {
        "name": "Bernardo Rufino",
        "email": "brufino@google.com",
        "time": "Wed Jun 06 08:25:26 2018 +0000"
      },
      "message": "Remove adb shell bmgr restore \u003cpackage\u003e\n\nAlso put comment on RestoreSession saying that it doesn\u0027t kill the app\nin the end.\n\nBug: 29255593\nTest: Builds\n      adb shell bmgr help, verify usage\n      adb shell bmgr restore android, verify no-op\n\nChange-Id: I89304149ea6c03a80937e321cf3a46fd173308e2\n"
    },
    {
      "commit": "8927037477f4a895b35c492e0861dea86dd2440f",
      "tree": "1a8237223e3818eeb5df53c0f99f99ccc4518c52",
      "parents": [
        "9cf1839e502c30b415f858e8628fb9d2ce3f8c99"
      ],
      "author": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Mon Jun 04 19:12:16 2018 +0100"
      },
      "committer": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Tue Jun 05 19:25:37 2018 +0100"
      },
      "message": "Disable bmgr if BMS is not running\n\nIf BMS is not running, we should not run any bmgr commands and print an\nerror. This can occur after a device with a lockscreen reboots and has\nnot unlocked yet, as the backup service is not active before unlocking.\n\nBug: 80691476\nTest: 1) Device with lock + adb reboot -\u003e run any \u0027adb shell bmgr\u0027\ncommand -\u003e prints error\n2) Device with no lock + adb reboot -\u003e run any \u0027adb shell bmgr\u0027 command\n-\u003e success\n\nChange-Id: I101b61d18a637cdb945ffc4a5e989a5dd270ee32\n"
    },
    {
      "commit": "760c1f552c42e11a2fc1ca32acf474ad846217d5",
      "tree": "81b0596cc81f60dee2670d492724f68319a3321c",
      "parents": [
        "53346e39ecc7b21758246d8eb302f73c29e2f718"
      ],
      "author": {
        "name": "Bernardo Rufino",
        "email": "brufino@google.com",
        "time": "Wed Feb 28 12:10:18 2018 +0000"
      },
      "committer": {
        "name": "Bernardo Rufino",
        "email": "brufino@google.com",
        "time": "Wed Feb 28 12:11:26 2018 +0000"
      },
      "message": "Bmgr about running backups\n\nSays that backups can be canceled if one already running. Put message\nfor running backups in dumpsys for checking.\n\nBug: 72484277\nTest: Triggered backup, checked dumpsys and bmgr backupnow\nChange-Id: I028cf663858e374389f50175aaf5a3e8c9d45e42\n"
    },
    {
      "commit": "fa51853ae56ed74a0c854c01851cb1435453005f",
      "tree": "d9ae04564295053eb2b8621f55fa2f64b63bb1a3",
      "parents": [
        "dc4cb146315240441fc8d9c05fe8dd63370a7c57"
      ],
      "author": {
        "name": "Bernardo Rufino",
        "email": "brufino@google.com",
        "time": "Tue Jan 02 16:01:53 2018 +0000"
      },
      "committer": {
        "name": "Bernardo Rufino",
        "email": "brufino@google.com",
        "time": "Fri Jan 05 16:33:33 2018 +0000"
      },
      "message": "Binding on-demand #8: Miscellaneous usages\n\nMigrate usages of the transport binder to binding on-demand:\n* getDestinationString()\n* isAppEligibleForBackup()\n* dump()\n\nFor getDestinationString() we\u0027ll be introducing an invisible bug for\npeople that haven\u0027t updated GMSCore to include the usage of\nupdateTransportAttributes() API introduced in earlier CL. The bug is\nthat that text won\u0027t change, it\u0027ll remain constant. It\u0027s invisible\nbecause currently only place that uses that method is Settings in some\ncircumstances that depend on the transport, and those circunstances\ndon\u0027t happen with our transports. Check http://ag/1831025.\n\nFor isAppEligibleForBackup(), a new filterAppsEligibleForBackup() is\ncreated and there we bind on-demand.\n\nChange-Id: Idc9e31f0e8eda8531e204c05a84fafdaf0247d08\nRef: http://go/br-binding-on-demand\nBug: 17140907\nTest: adb shell dumpsys backup, observe destination of transports\nTest: adb shell bmgr backupnow --all, observe only eligible apps got backed-up\nTest: Force-loaded settings screen and observed destination string\nTest: m -j RunFrameworksServicesRoboTests\n"
    },
    {
      "commit": "4037fe04d2cd4a8ef8e8cb9fcc490d71a7adbeeb",
      "tree": "7096e9e90ef0a3f15f23b88c8ec17de6ca9fb0ef",
      "parents": [
        "b567ea9ddad6a6486b585f6ed27317561425f2e8",
        "2c61e3de27d42c7ee5c24fad695804979df2fb55"
      ],
      "author": {
        "name": "George Burgess IV",
        "email": "gbiv@google.com",
        "time": "Mon Nov 06 23:45:01 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Mon Nov 06 23:45:01 2017 +0000"
      },
      "message": "Merge \"cmds: add #!s\" am: 8911c35df3\nam: 2c61e3de27\n\nChange-Id: Ifb1e12b63312570b5451b0e548adf0a5d25c4010\n"
    },
    {
      "commit": "6c1688850eb7b3ada9cd9e191bf31c4153ea01fd",
      "tree": "c441779f39476523ca38538a249ef8791daa531e",
      "parents": [
        "8f380ab29c8606bca861ba21eee52cedfbc99f46"
      ],
      "author": {
        "name": "George Burgess IV",
        "email": "gbiv@google.com",
        "time": "Sat Nov 04 15:58:58 2017 -0700"
      },
      "committer": {
        "name": "George Burgess IV",
        "email": "gbiv@google.com",
        "time": "Sun Nov 05 01:07:30 2017 -0700"
      },
      "message": "cmds: add #!s\n\nWithout this, exec()ing these fails.\n\nFound with `grep -L bin/sh $(grep -Rl Script)`\n\nBug: None\nTest: exec()ed each of these scripts; I no longer get \"exec format\nerror\" for any of them.\nChange-Id: I47db5007e5cc14ab91eb846b7bffecb925d37874\n"
    },
    {
      "commit": "924afe2b0f721afa857a55c33da559f6efc41d32",
      "tree": "fa7031d15af51b8a466b67e7c8d615d3f549803f",
      "parents": [
        "101ba665ddcd40de9f2fe51be910f03b90574a55"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Fri Jun 16 13:14:48 2017 -0700"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Tue Jun 20 13:28:56 2017 -0700"
      },
      "message": "Add \u0027bmgr\u0027 command to synchronously init transports\n\nbmgr init TRANSPORT [...]\n\nwill run an init operation on each named transport, blocking\nuntil the operations have all completed.\n\nBug 62253989\nTest: manual\n\nChange-Id: I7dbd94293738d5ecf195764f5b28905253819791\n"
    },
    {
      "commit": "73be23de30e4d2d4983273f201d04888689afd60",
      "tree": "d7c91f7c78dba83c74fe3ba6f3ac1614bd2621d8",
      "parents": [
        "5c3e1f7f3e2d324391c353a50abc06f991cbb055"
      ],
      "author": {
        "name": "Michal Karpinski",
        "email": "mkarpinski@google.com",
        "time": "Thu Jun 08 12:10:45 2017 +0100"
      },
      "committer": {
        "name": "Michal Karpinski",
        "email": "mkarpinski@google.com",
        "time": "Thu Jun 08 12:10:49 2017 +0100"
      },
      "message": "Extend \"Transport rejected package\" message in Bmgr\n\nTest: read it twice :)\nBug: 36705040\nChange-Id: I4eda5d2688b5f58f5a07131c5e6d6dafd6250570\n"
    },
    {
      "commit": "a56ba60c944c82265906f40088fddecb65705733",
      "tree": "971e02a5b84befdaaccf5595d87589516b71f493",
      "parents": [
        "6acaa0382c86ac1e557c92e4d8dd83fb2c4972f2"
      ],
      "author": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Wed Apr 12 10:10:22 2017 -0700"
      },
      "committer": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Wed Apr 12 11:08:49 2017 -0700"
      },
      "message": "\"bmgr restore\" really should wait until operation finishes.\n\nTest: manual test\nBug 37246838\n\nChange-Id: Ice381dc250e2d2a59cff48152dd3c8d6897d0804\n"
    },
    {
      "commit": "c3704427c9a34397fd90bf5438adae2eebcc97f6",
      "tree": "8b72d3ecfea34539e7b35ed942d2b30b2aafdd0f",
      "parents": [
        "f49f3482de64b44c9c6d3132521c5ed54b64a2f1"
      ],
      "author": {
        "name": "Shreyas Basarge",
        "email": "snb@google.com",
        "time": "Sat Jan 28 16:50:09 2017 +0000"
      },
      "committer": {
        "name": "Shreyas Basarge",
        "email": "snb@google.com",
        "time": "Tue Feb 14 13:51:59 2017 +0000"
      },
      "message": "BackupManager#cancelBackups() API\n\nIntroduces a cancelBackups() API for\nBackupManager. When this function returns,\nit is guaranteed that currently running\nbackup operations won\u0027t interact with\nthe active transport.\n\nBug: 34760860\n\nRef: https://docs.google.com/document/d/18MnfwkDfKNtXQBPRmL8vpVgfLgSWJsDja1Nm1QV5hOw/edit#heading\u003dh.9p6yo0wx44k3\n\nTest: GTS tests at ag/1893365\n\nChange-Id: I67f78699bbe763ea71c85937fbc01a5b48694eed\n"
    },
    {
      "commit": "f4e237c6855fcbb8767695f072174ace1cf801bc",
      "tree": "6c55b206a12cf32050f8f39b5cd0cbfa2d3dcc6e",
      "parents": [
        "b1f573dca3ccdd113ca513f32c9964211ca71c78"
      ],
      "author": {
        "name": "Stefanot",
        "email": "stefanot@google.com",
        "time": "Mon Feb 06 21:14:05 2017 +0000"
      },
      "committer": {
        "name": "Stefanot",
        "email": "stefanot@google.com",
        "time": "Fri Feb 10 13:52:02 2017 +0000"
      },
      "message": "Add instrumentation for BackupManager during restore.\n\nThis CL adds more instumentation to\nbackup/restore operation in the BackupManager. For more details please\npoint to:\nhttps://docs.google.com/document/d/1sUboR28LjkT1wRXOwVOV3tLo0qisiCvzxIGmzCVEjbI/edit#\nThis first Cl introduces 3 events that we sent to the monitor.\nThe base cl is ag/1835775\n\nTest: TODO\n\nBUG: 34873525\nChange-Id: I127fe739a7522078eecce2ae689a4607203a98da\n"
    },
    {
      "commit": "b1f573dca3ccdd113ca513f32c9964211ca71c78",
      "tree": "5baf30a11c5ee9acf7405867a69a2df1b68ebd1c",
      "parents": [
        "570661486882ab2690b62176e83c23a4b2d6a796"
      ],
      "author": {
        "name": "Stefanot",
        "email": "stefanot@google.com",
        "time": "Fri Jan 27 12:03:53 2017 +0000"
      },
      "committer": {
        "name": "Stefanot",
        "email": "stefanot@google.com",
        "time": "Fri Feb 10 11:03:08 2017 +0000"
      },
      "message": "Add monitoring to backup in BackupManager.\n\nThis is the first CL of many that will add instumentation to\nbackup/restore operation in the BackupManager. For more details please\npoint to:\nhttps://docs.google.com/document/d/1sUboR28LjkT1wRXOwVOV3tLo0qisiCvzxIGmzCVEjbI/edit#\nThis first Cl introduces 3 events that we sent to the monitor.\n\nTest: ag/1858962 (same topic)\n\nBUG: 34873525\n\nChange-Id: I6c338b6fd9f4d7c8670dac201897250b6b170677\n"
    },
    {
      "commit": "865303fce57b968f5bd7efb4dd23ccb1a3747b93",
      "tree": "d4fac32c678adc66ce81fc77c252a41b00107f5f",
      "parents": [
        "1628b97e54d7f56352d7f3ad9c6b4166d56082a5"
      ],
      "author": {
        "name": "Shreyas Basarge",
        "email": "snb@google.com",
        "time": "Fri Jan 13 14:48:56 2017 +0000"
      },
      "committer": {
        "name": "Shreyas Basarge",
        "email": "snb@google.com",
        "time": "Tue Jan 24 17:28:48 2017 +0000"
      },
      "message": "API to select backup transport\n\nThis cl adds an API to select a backup\ntransport by its component name and\nreceive a callback when BackupManager\nis bound to the transport. Calling this API\nwill make BackupManager bind to the transport\nif it isn\u0027t already bound to it.\n\nAlso fixes the issue where BackupManager would\ndetect only one transport per package.\n\nRef: go/backup-transport-switching\n\nBug: 33616220\nTest: Manually tested. GTS tests will be put up shortly.\n\nChange-Id: I8c23bdbb84ceb05eb1fad9b3a8b9c4441cb06c74\n"
    },
    {
      "commit": "38e7486d3870797f7cc6e2cd2f5b59462a66b1a6",
      "tree": "03c22a4d2f3c60e19c4390c77d6e2fe30066b6f3",
      "parents": [
        "0ae1a7d9e97b99b63397030fee4deec3f5eb47b2"
      ],
      "author": {
        "name": "Shreyas Basarge",
        "email": "snb@google.com",
        "time": "Wed Jan 11 17:15:58 2017 +0000"
      },
      "committer": {
        "name": "Shreyas Basarge",
        "email": "snb@google.com",
        "time": "Thu Jan 19 22:13:01 2017 +0000"
      },
      "message": "Non incremental backup flag for requestBackup\n\nThis cl adds a new requestBackup API to\nBackupManager that takes in an int flag\nto indicate whether the caller wants the\nentire key value set to be passed to the\ntransport and not just a diff.\n\nChange-Id: Ia225797a58c4431fe742f2f116b257d006b30cd1\n\nBug: 33749084\nRef: go/request-backup-api-changes\nTest: GTS Test at ag/1774002\n"
    },
    {
      "commit": "24c08b27ef08154d687e599f5fafa763cb4e3cb4",
      "tree": "06806be7a2fb0d8367529ea056a08239ec5d8286",
      "parents": [
        "fd540afef565e6153dc2ac363212dad21caf39a0",
        "0754128dc9dbd15b0896e385237fbcb8a1021373"
      ],
      "author": {
        "name": "Chris Tate",
        "email": "ctate@android.com",
        "time": "Mon Jun 20 17:54:15 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Mon Jun 20 17:54:15 2016 +0000"
      },
      "message": "Merge \\\\\"Let bmgr inspect the set of whitelisted transports\\\\\" into nyc-dev am: 0f101342e1\nam: 0754128dc9\n\nChange-Id: I86f7a4965945fba52916b4db7e7a54e90aa824ab\n"
    },
    {
      "commit": "e227ec61c24c3c33d42de4996d38fc4e44fa5e4d",
      "tree": "92a90ccd7b2182e30ffb8a61932556aba1c4405f",
      "parents": [
        "931a7c03e070fce6d9be40978159c2bfcb2b9e3a"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Wed Jun 15 17:38:00 2016 -0700"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Wed Jun 15 17:40:31 2016 -0700"
      },
      "message": "Let bmgr inspect the set of whitelisted transports\n\nNeeded for compliance testing.\n\nBug 29072466\n\nChange-Id: I025058ab9197f9e2db062bf0074e79f1cd04b443\n"
    },
    {
      "commit": "dc3b8521256eaec189e8dd6335df40fd2493adb1",
      "tree": "a2d0d50f3c26ac182f66ef0110945e2b6baa5b78",
      "parents": [
        "775c73f6474522fdb7f4496ad22762d6d1b71702",
        "8416096fe88567630cece9213fb2583c4149b019"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed Mar 23 15:31:32 2016 -0700"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed Mar 23 15:31:32 2016 -0700"
      },
      "message": "resolve merge conflicts of 8416096 to nyc-dev-plus-aosp\n\nChange-Id: I1638601fe84dda01bf52c59eb6c976bc1fe37498\n"
    },
    {
      "commit": "98ff0b72f0ac630be2b7fd8ab77f5ee50a1ce26f",
      "tree": "3730b312d23319d81a2c1d1f81b6277e67d2edd6",
      "parents": [
        "f3edaf6a4397859d3558a2df07e4bd5011ebddd3"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed Mar 23 00:42:44 2016 -0700"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed Mar 23 13:42:52 2016 -0700"
      },
      "message": "Remove custom copy rules, stop using ACP\n\nReplace some custom rules with BUILD_PREBUILT.\n\nMove tools from ALL_PREBUILTS to BUILD_PREBUILT. All of them are already\nin PRODUCT_PACKAGES in build/target/product/base.mk.\n\nRemove uses of ACP and replace with core build system macros or \u0027cp\u0027\n\nChange-Id: I529e7c6c50fc64ad36b75bb47142f6bde909d141\n"
    },
    {
      "commit": "10f0f712498b8c4b6308788d20027b35a8ce43a0",
      "tree": "4d17ca660a78f7385ab0054b69577bd68d4739ca",
      "parents": [
        "3b5a29cb5d2150a04db40fc176b283a339b9088d"
      ],
      "author": {
        "name": "Sergey Poromov",
        "email": "poromov@google.com",
        "time": "Mon Feb 08 21:55:42 2016 +0100"
      },
      "committer": {
        "name": "Sergey Poromov",
        "email": "poromov@google.com",
        "time": "Wed Feb 10 00:08:02 2016 +0000"
      },
      "message": "Update bmgr tool.\n\nAdd support to QUOTA_EXCEEDED error output.\nCommand \"backupnow --all\" without parameters now starts backup of all eligible packages.\n\nChange-Id: I563be35d575346d3dfb45a6dd254b387053c7ab7\n(cherry picked from commit d5d68528bc7a7c1edb4691b5a40e37955128e73b)\n"
    },
    {
      "commit": "b998532be8451993fe6d4e22f6ac290ffab57c76",
      "tree": "52db46dc20a9325ff55a775473dfa66fb2ff0ff6",
      "parents": [
        "b7cc096fd49e99c01a9e963a895f6d26d685e474"
      ],
      "author": {
        "name": "Sergey Poromov",
        "email": "poromov@google.com",
        "time": "Tue Jan 12 17:07:11 2016 +0100"
      },
      "committer": {
        "name": "Sergey Poromov",
        "email": "poromov@google.com",
        "time": "Fri Jan 22 13:15:06 2016 +0100"
      },
      "message": "Update bmgr cmd line tool to use requestBackup() API in BackupManager\n\nThe new command works as \"bmgr backupnow [list of packages]\"\nThis change should be submitted after ag/834173\n\nChange-Id: Ie1cdd18a38653dd71a1d499620dd2afec3cbbb24\n"
    },
    {
      "commit": "fbec21ff43c8a35e95fca9ce40351350608974e9",
      "tree": "24d58d1fa567fb10682da017b5acdb3693a3e81b",
      "parents": [
        "2f8d4ea2064940b373c96b47d6fcdefad3732ee8"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Thu Nov 13 16:36:33 2014 -0800"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Thu Nov 13 16:39:56 2014 -0800"
      },
      "message": "Teach bmgr that \"android\" is a valid package name\n\nBug 18379037\n\nChange-Id: I4d6da2893f83e672920bbda9447aa4cbd1ecec7b\n"
    },
    {
      "commit": "ab225b301b8b13a141053a33d5dd5eeccfc69887",
      "tree": "e79e890866f6002fb9656ade335cc6bd4b31d812",
      "parents": [
        "7218e9c6beaa066237c6b2aac6d10dd7dc84e0a2"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Tue Jun 24 16:28:48 2014 -0700"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Tue Jun 24 16:52:09 2014 -0700"
      },
      "message": "Add \u0027fullbackup\u0027 to bmgr\u0027s usage statement\n\nAlso make it handle the list of packages to be backed up as a single\nmultiple-app argument to fullTransportBackup() rather than N calls\neach backing up one app.\n\nChange-Id: I9fe4d5caca54fafef70ffe9af4c26e3941dc5d26\n"
    },
    {
      "commit": "9ff53a7100b1a40f5d2df3eb19a2f3f2fff39a46",
      "tree": "162c23a51e116f9506e7d6801236dd2e2c8f3788",
      "parents": [
        "ad60891a6ecaf2a5815677b33e96afe7f49ee113"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Tue Jun 03 17:20:07 2014 -0700"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Sun Jun 15 17:35:33 2014 -0700"
      },
      "message": "Implement full data backup through transport\n\nCurrently no timed/scheduled full-data backup operations are\nperformed by the OS, but the plumbing is now in place and can\nbe tested using \u0027adb shell bmgr fullbackup pkg [pkg2 pkg3 ...]\u0027.\n\nThe LocalTransport test transport implementation has been augmented\nto support the new full-data backup API as well.\n\nIn addition, \u0027adb backup\u0027 now takes the -compress/-nocompress\ncommand line options to control whether the resulting archive is\ncompressed before leaving the device.  Previously the archive was\nalways compressed.  (The default is still to compress, as it will\nusually reduce the archive size considerably.)\n\nInternally, the core implementation of gathering the full backup\ndata stream from the target application has been refactored into\nan \"engine\" component that is shared by both \u0027adb backup\u0027 and the\ntransport-oriented full backup task.  The archive file header\ngeneration, encryption, and compression logic are now factored out\nof the engine itself instead of being hardwired into the data\nhandling.\n\nBug 15329632\n\nChange-Id: I4a044faa4070d684ef457bd3e11771198cdf557c\n"
    },
    {
      "commit": "b0183f0ae311966cff0e10e8139c56f97288d1f2",
      "tree": "6bd0662fd8d6b0640b2da0c293882b47ff9480e6",
      "parents": [
        "c04aa87e4ac41b6c65dceb7b20d7a7f92c2efec1"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Mon Nov 18 14:20:36 2013 -0800"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Tue Nov 19 11:24:46 2013 -0800"
      },
      "message": "Harden against transiently unavailable backup transports\n\nThe init \u0026 clear operations are particularly important to ensure\ndelivery when at all possible, so we retry those periodically\nif the transport is unavailable when we first attempt them.\n\nNow with 100% less build break.\n\nBug 11716868\n\nChange-Id: I2af4e93788068cfac97c0a48d3568c561eefa23d\n"
    },
    {
      "commit": "d5965cb506bde84612109bf26c3fcc6712ca91e5",
      "tree": "a679a23ee7ab71d8e14aac8edcc99cb08defc408",
      "parents": [
        "8f98252afea3fd0e68693635ec21b6004a52fa69"
      ],
      "author": {
        "name": "Sascha Prueter",
        "email": "saschap@google.com",
        "time": "Tue Nov 19 06:51:21 2013 +0000"
      },
      "committer": {
        "name": "Sascha Prueter",
        "email": "saschap@google.com",
        "time": "Tue Nov 19 06:51:21 2013 +0000"
      },
      "message": "Trying to unbreak build...\n\nRevert \"Harden against transiently unavailable backup transports\"\n\nThis reverts commit 8f98252afea3fd0e68693635ec21b6004a52fa69.\n\nChange-Id: I3aabb80f1a5932d530bce6b82d4b30c6cd1cdd5a\n"
    },
    {
      "commit": "8f98252afea3fd0e68693635ec21b6004a52fa69",
      "tree": "ae1c473590c0a9d1c2022376f047f88151e3db7a",
      "parents": [
        "245408d29018fee4b1231e52f5da1edcc3283c4a"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Mon Nov 18 14:20:36 2013 -0800"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Mon Nov 18 16:12:38 2013 -0800"
      },
      "message": "Harden against transiently unavailable backup transports\n\nThe init \u0026 clear operations are particularly important to ensure\ndelivery when at all possible, so we retry those periodically\nif the transport is unavailable when we first attempt them.\n\nBug 11716868\n\nChange-Id: I4860fe3d4e99618b2cd194c83162bd7cbd5a83a9\n"
    },
    {
      "commit": "284f1bb4daf77f7e6b688c0936dd4a31ec2e7c74",
      "tree": "d651aa41ee14b9137285163166b391badfe4cbe2",
      "parents": [
        "1d19c18f9bd66b2b4883f8ce33c04ff5c87dd881"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Thu Jul 07 14:31:18 2011 -0700"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Fri Jul 08 12:28:48 2011 -0700"
      },
      "message": "Can now restore a subset of apps from historical dataset\n\nAdds the ability to filter a restore of an historical dataset so that it\nonly restores certain apps\u0027 data regardless of what is actually present\nin the dataset.  This is currently only used by the bmgr command-line tool,\nfor debugging / developer support.\n\nBug 2021590\n\nChange-Id: I7685e5d609b0f5506f71d70c26410602bb387659\n"
    },
    {
      "commit": "4a627c71ff53a4fca1f961f4b1dcc0461df18a06",
      "tree": "270190b1e030424210b6375ca886c45db10c4fb6",
      "parents": [
        "2bb51bb203c117649db10ad8bd497f199ca797b0"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Fri Apr 01 14:43:32 2011 -0700"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Tue May 10 17:52:51 2011 -0700"
      },
      "message": "Full local backup infrastructure\n\nThis is the basic infrastructure for pulling a full(*) backup of the\ndevice\u0027s data over an adb(**) connection to the local device.  The\nbasic process consists of these interacting pieces:\n\n1. The framework\u0027s BackupManagerService, which coordinates the\n   collection of app data and routing to the destination.\n\n2. A new framework-provided BackupAgent implementation called\n   FullBackupAgent, which is instantiated in the target applications\u0027\n   processes in turn, and knows how to emit a datastream that contains\n   all of the app\u0027s saved data files.\n\n3. A new shell-level program called \"bu\" that is used to bridge from\n   adb to the framework\u0027s Backup Manager.\n\n4. adb itself, which now knows how to use \u0027bu\u0027 to kick off a backup\n   operation and pull the resulting data stream to the desktop host.\n\n5. A system-provided application that verifies with the user that\n   an attempted backup/restore operation is in fact expected and to\n   be allowed.\n\nThe full agent implementation is not used during normal operation of\nthe delta-based app-customized remote backup process.  Instead it\u0027s\nused during user-confirmed *full* backup of applications and all their\ndata to a local destination, e.g. via the adb connection.\n\nThe output format is \u0027tar\u0027.  This makes it very easy for the end\nuser to examine the resulting dataset, e.g. for purpose of extracting\nfiles for debug purposes; as well as making it easy to contemplate\nadding things like a direct gzip stage to the data pipeline during\nbackup/restore.  It also makes it convenient to construct and maintain\nsynthetic backup datasets for testing purposes.\n\nWithin the tar format, certain artificial conventions are used.\nAll files are stored within top-level directories according to\ntheir semantic origin:\n\napps/pkgname/a/  : Application .apk file itself\napps/pkgname/obb/: The application\u0027s associated .obb containers\napps/pkgname/f/  : The subtree rooted at the getFilesDir() location\napps/pkgname/db/ : The subtree rooted at the getDatabasePath() parent\napps/pkgname/sp/ : The subtree rooted at the getSharedPrefsFile() parent\napps/pkgname/r/  : Files stored relative to the root of the app\u0027s file tree\napps/pkgname/c/  : Reserved for the app\u0027s getCacheDir() tree; not stored.\n\nFor each package, the first entry in the tar stream is a file called\n\"_manifest\", nominally rooted at apps/pkgname.  This file contains some\nmetadata about the package whose data is stored in the archive.\n\nThe contents of shared storage can optionally be included in the tar\nstream. It is placed in the synthetic location:\n\nshared/...\n\nuid/gid are ignored; app uids are assigned at install time, and the\napp\u0027s data is handled from within its own execution environment, so\nwill automatically have the app\u0027s correct uid.\n\nForward-locked .apk files are never backed up.  System-partition\n.apk files are not backed up unless they have been overridden by a\npost-factory upgrade, in which case the current .apk *is* backed up --\ni.e. the .apk that matches the on-disk data.  The manifest preceding\neach application\u0027s portion of the tar stream provides version numbers\nand signature blocks for version checking, as well as an indication\nof whether the restore logic should expect to install the .apk before\nextracting the data.\n\nSystem packages can designate their own full backup agents.  This is\nto manage things like the settings provider which (a) cannot be shut\ndown on the fly in order to do a clean snapshot of their file trees,\nand (b) manage data that is not only irrelevant but actively hostile\nto non-identical devices -- CDMA telephony settings would seriously\nmess up a GSM device if emplaced there blind, for example.\n\nWhen a full backup or restore is initiated from adb, the system will\npresent a confirmation UI that the user must explicitly respond to\nwithin a short [~ 30 seconds] timeout.  This is to avoid the\npossibility of malicious desktop-side software secretly grabbing a copy\nof all the user\u0027s data for nefarious purposes.\n\n(*) The backup is not strictly a full mirror.  In particular, the\n    settings database is not cloned; it is handled the same way that\n    it is in cloud backup/restore.  This is because some settings\n    are actively destructive if cloned onto a different (or\n    especially a different-model) device: telephony settings and\n    AndroidID are good examples of this.\n\n(**) On the framework side it doesn\u0027t care that it\u0027s adb; it just\n    sends the tar stream to a file descriptor.  This can easily be\n    retargeted around whatever transport we might decide to use\n    in the future.\n\nKNOWN ISSUES:\n\n* the security UI is desperately ugly; no proper designs have yet\n  been done for it\n* restore is not yet implemented\n* shared storage backup is not yet implemented\n* symlinks aren\u0027t yet handled, though some infrastructure for\n  dealing with them has been put in place.\n\nChange-Id: Ia8347611e23b398af36ea22c36dff0a276b1ce91\n"
    },
    {
      "commit": "44ab8453e1c4c46790f792a46d026fa1017d8cfe",
      "tree": "9c499e6c6c1c894bd00c203e8ce6f815cf580187",
      "parents": [
        "64f1163084433952766eed31dbd26df420ba6cfb"
      ],
      "author": {
        "name": "Chris Tate",
        "email": "ctate@google.com",
        "time": "Tue Nov 16 15:10:49 2010 -0800"
      },
      "committer": {
        "name": "Chris Tate",
        "email": "ctate@google.com",
        "time": "Tue Nov 16 16:57:29 2010 -0800"
      },
      "message": "Permission fix: don\u0027t require BACKUP perm for self-restores\n\nThe public API is not supposed to require the BACKUP permission in order\nfor an application to restore its own last-known-good backup data.  However,\nas currently implemented, BackupManager.requestRestore() [the public API\nin question] depends on private Backup Manager methods that *do* enforce\nthat permission.  The net result is that the method cannot be successfully\nused by third party applications: it will throw an exception if attempted.\nThis CL restructures the permission checking involved.\n\nFirst, the underlying beginRestoreSession() operation can now be passed a\n\u0027null\u0027 transport name; if this is done, then the restore session is begun\non whatever the currently-active transport is.  Looking up the name of the\nactive transport is one of the permission-guarded actions that was required\nwith the initial implementation.\n\nSecond, a package name can now be passed to beginRestoreSession().  If\nthis is done, then the restore session can only be used to perform a\nsingle-package restore of that one application.  The BACKUP permission is\nnot required if the caller is tying the restore to its own package name.\n\nIn combination, these changes permit BackupManager.requestRestore() to\nfunction without the calling app needing to hold any special permission.\nThe no-permission case is intentionally quite narrow:  the caller must\nhold the permission unless they both (a) pass \u0027null\u0027 for the transport\nname, thereby accepting whatever the currently active transport is, and\n(b) pass their own package name to restrict the restore session only\nto their own app.\n\nExternal bug http://code.google.com/p/android/issues/detail?id\u003d10094\nInternal bug 3197202\n\nChange-Id: Ibc9d652323f2da03727d850f991b4096af6520d2\n"
    },
    {
      "commit": "7a0fc8776782a18374ec6e3b4418027c3c685b1a",
      "tree": "10c6de4405abf313c3d13cefbfd627e4d5090e60",
      "parents": [
        "de4077487dc32b3b00ec76f8f8ef11a02cccd0f2"
      ],
      "author": {
        "name": "Chris Tate",
        "email": "ctate@google.com",
        "time": "Mon Nov 01 15:50:35 2010 -0700"
      },
      "committer": {
        "name": "Chris Tate",
        "email": "ctate@google.com",
        "time": "Mon Nov 01 15:50:35 2010 -0700"
      },
      "message": "Don\u0027t crash bmgr if there are no available restore sets\n\nProperly guard against a null set of available restore sets when\nvalidating the token passed to \u0027bmgr restore TOKEN\u0027 against what\u0027s\nknown to exist on the backend.\n\nFixes bug 3153986\n\nChange-Id: I74bdd4c6242f682833c1633baa4fefccb2b165a7\n"
    },
    {
      "commit": "04686f428995fde3f6f5f5f12ccdd135f885ac84",
      "tree": "16d3da40249f7a0463b305c5aea2e0106ffe193b",
      "parents": [
        "f01a873029641da2155ca1882f311d8f4e92675a"
      ],
      "author": {
        "name": "Fabrice Di Meglio",
        "email": "fdimeglio@google.com",
        "time": "Fri Oct 01 11:16:10 2010 -0700"
      },
      "committer": {
        "name": "Fabrice Di Meglio",
        "email": "fdimeglio@google.com",
        "time": "Fri Oct 01 11:16:10 2010 -0700"
      },
      "message": "Fix bug #3055578 (\"adb shell bmgr list sets\" generates NPE and cannot be run again when device has no account setup)\n\n- fix NPE\n- code cleaning\n\nChange-Id: Ieb30b666d995de8cbd27ee6d17e2178e7ea670f6\n"
    },
    {
      "commit": "7e76ff1c409bc22e89ed09ef90161164dae40838",
      "tree": "fdb5a34ac33b3c79228bd3fb080deb396814ff7b",
      "parents": [
        "55f8209da3048768a6dc24929dec8798e8ddf077"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Wed Jun 09 12:21:31 2010 -0700"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Wed Jun 09 12:21:31 2010 -0700"
      },
      "message": "Fail gracefully if the user fails to supply necessary args to bmgr\n\nFixes bug #2755355\n\nChange-Id: I4690756bb5077a6b4bbbfb232cd852cad43cef77\n"
    },
    {
      "commit": "1398e27bb0f5768cbbd5b9d9fd7c8675da63ccb0",
      "tree": "91eea1fbb15f2e7a96df53d2268aa62867a81039",
      "parents": [
        "fede9aed2b1f0b6316e18cbfa58be593fa7eb14c"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Tue Apr 06 12:17:12 2010 -0700"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Tue Apr 06 12:17:46 2010 -0700"
      },
      "message": "Fix \u0027bmgr restore\u0027\n\nZero means success.  Fixes bug #2573785\n\nChange-Id: I11bd4d85aa2b3a061aa37e085790ee8cd52d50a2\n"
    },
    {
      "commit": "2d449afe3d075020bdd1115bcc15c9383cbce122",
      "tree": "d7c71c9a74e317319de947f3e3fe3ee673f0c559",
      "parents": [
        "ae405d56215e4ab43e8210b66e741a0bf9d5edcf"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Mon Mar 29 19:14:24 2010 -0700"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Tue Mar 30 12:42:35 2010 -0700"
      },
      "message": "Make RestoreSession.getAvailableRestoreSets() asynchronous\n\nThis transaction can involve the transport having to query a remote backend\nover the wire, so it can take a Long Time(tm).  Make it main-thread-safe by\nmaking it asynchronous, with the results passed as a callback to the invoker\u0027s\nRestoreObserver.  We also make the IRestoreObserver callback interface\nproperly oneway.\n\nBug #2550665\nBug #2549422\n\nChange-Id: If18a233a0a3d54c7b55101715c9e6195b762c5a0\n"
    },
    {
      "commit": "9c3cee9824026764275e4d84ba9b5d9fdc5da690",
      "tree": "a68cba5a6d4dc4dc747c4089a2426dcfe5550b77",
      "parents": [
        "a3de74555120cc4dc205a3f93ef44c843b8d64a8"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Thu Mar 25 16:06:43 2010 -0700"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Fri Mar 26 14:26:44 2010 -0700"
      },
      "message": "API CHANGE: Backup/restore API changes requested by the API Council\n\n* @hide the android.app.backup.RestoreSession class and functionality\n\n* Provide a public method on android.app.backup.BackupManager that apps\n  can use to request a restore pass of their last-known-good dataset.\n  The new method is called requestRestore().\n\n* Provide the name of the package being restored, not just its ordinal,\n  in the RestoreObserver\u0027s onUpdate() callback.\n\nPart of bug #2545514\n\nChange-Id: I9689bf8d6e2b808b4ee412424a36a835be0a5ca8\n"
    },
    {
      "commit": "4528186e0d65fc68ef0dd1941aa2ac8aefcd55a3",
      "tree": "3f1276aef1448aad75a0d44ad1abbbd1478a4937",
      "parents": [
        "931bf89d327ecf07301231fd86b17deac535feaa"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Fri Mar 05 15:46:30 2010 -0800"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Fri Mar 05 16:27:15 2010 -0800"
      },
      "message": "Refactor android.backup \u003d\u003e android.app.backup\n\nChange-Id: I0b21316ff890d7f3c7d4b82837bb60670724c2e8\n"
    },
    {
      "commit": "485c3a16cef38136a821e79a5fe37df4e1779d28",
      "tree": "b8c6d546e9bb365c347ffc0f936a1f18e5ab2f3a",
      "parents": [
        "4a3c3b23d0aa87a68088976b4f397be116cd2338"
      ],
      "author": {
        "name": "Christian Sonntag",
        "email": "cxs@google.com",
        "time": "Thu Mar 04 14:59:04 2010 -0800"
      },
      "committer": {
        "name": "Christian Sonntag",
        "email": "cxs@google.com",
        "time": "Thu Mar 04 14:59:04 2010 -0800"
      },
      "message": "fix hex parsing of bmgr\n"
    },
    {
      "commit": "7d411a3b947ba82d1d57f73c0fa698c3b9c95892",
      "tree": "9fae7c4860733aaa126af64ab433c98665ff2819",
      "parents": [
        "4c904a3bf3dbe98607b5e3f706ee8ef8887ee104"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Fri Feb 26 11:27:08 2010 -0800"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Fri Feb 26 12:45:22 2010 -0800"
      },
      "message": "Add single-package restore to Bmgr feature set\n\nAlso sanity-check the package name on the Backup Manager side, failing gracefully\nif the given package is not a backup/restore participant.\n\nBug: 2293977\n\nChange-Id: I3575046ffcaa3cf45c1c602824baeadd64082f70\n"
    },
    {
      "commit": "8472581aa32eee1368de379c2c079ea0a66baa3c",
      "tree": "c7e71e08b7e465fa710c7e0903b8a2a74cce6fc4",
      "parents": [
        "348f7b904851e3edcf09b8362406ff2f4ae57db2"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Thu Feb 04 15:52:40 2010 -0800"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Thu Feb 04 16:01:09 2010 -0800"
      },
      "message": "Add single-package restore from an app\u0027s most-recent data\n\nRenamed the RestoreSession performRestore() method to restoreAll(), and\nadded a new restorePackage() method that only restores the single\nspecified app.  In order to restore an app other than itself, the\ncaller must hold the android.permission.BACKUP permission.\n\nThis change also introduces dataset tracking:  the Backup Manager\npersistently remembers both the current backup dataset\u0027s identity\nand that of the \"ancestral\" dataset, i.e. the one most recently used\nfor a whole-device restore such as performed by SetupWizard.  When a\nsingle package is restored via restorePackage(), the selection of\nmost-recent dataset to use is this:\n\n1. The data from the currently-active backup dataset, if such exists.\n   An app that has ever backed up data will therefore get its last-\n   known-good data.\n\n2. The app\u0027s data from the ancestral dataset, if such exists.  This\n   covers the case of a factory reset followed by reinstallation of\n   an app at a later time.  The app had not yet backed anything up\n   post-wipe, but the old data is in the ancestral dataset and should\n   be brought forward when the app reappears.\n\n3. If neither 1. nor 2. exist, there is no data to restore, so just\n   skip it and return failure.\n\nNote that the infrastructure to automatically attempt a restore after\nan application has been installed does not yet exist; that\u0027s coming.\n\nChange-Id: I0ba170df9885128000c46ed28d3dddda3a63a143\n"
    },
    {
      "commit": "0e0b4ae5bc5c652c8339d71ed9667e1e37baaa03",
      "tree": "42fa43521b6d394421d9f93f8191da457876ec63",
      "parents": [
        "a1cbccd7b31f3c33ea46b7fe2a287168eb672056"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@android.com",
        "time": "Mon Aug 10 16:13:47 2009 -0700"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@android.com",
        "time": "Tue Aug 11 17:25:12 2009 -0700"
      },
      "message": "Don\u0027t let bmgr leave a restore session hanging on error\n\nSpecifically, don\u0027t wait for the RestoreObserver to be informed that the restore\nhas completed unless performRestore() ran.  We were winding up in a case where\nbmgr was hanging forever waiting on a nonexistent restore process instead of\ncalling endRestoreSession().\n\nAlso improve the documentation, explicitly calling out the need to call\nendRestoreSession() even if previous operations on the session were\nunsuccessful.\n"
    },
    {
      "commit": "84780f56f441deb4ff736987986daeaf64db17a4",
      "tree": "8bfa903dfd7770403b27f0a2e4fdacc33fcd8e01",
      "parents": [
        "b99ab30cbc98ec38d514bbd11197a6abf1c104b5"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@android.com",
        "time": "Fri Aug 07 15:40:35 2009 -0700"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@android.com",
        "time": "Fri Aug 07 15:50:02 2009 -0700"
      },
      "message": "Don\u0027t crash if the Backup Manager returns a null RestoreSet[]\n"
    },
    {
      "commit": "77095d49f203eed6a6742f2605ca319e7360af32",
      "tree": "ba5d5cd0606f9a2ca58bffaa76ba42be16f86954",
      "parents": [
        "02d34e78f4de20fc05831c22a771fffc645c5953"
      ],
      "author": {
        "name": "Christian Sonntag",
        "email": "cxs@android.com",
        "time": "Fri Aug 07 11:16:05 2009 -0700"
      },
      "committer": {
        "name": "Christian Sonntag",
        "email": "cxs@android.com",
        "time": "Fri Aug 07 13:42:45 2009 -0700"
      },
      "message": "make restore tokens shown in hex.\n\nSince they are android ids, it is much easier to use them as hex, since we can just copy then into android inspector and learn more about the restore set.\n"
    },
    {
      "commit": "08e40b858e8a3266c5519a83fda6f7505f1c14db",
      "tree": "1d88e375aa6d464e0f221e86429a0909dec0569c",
      "parents": [
        "8851e163fc5bc17d139bf29cd2ec2f3926d342bc"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@android.com",
        "time": "Fri Aug 07 11:35:35 2009 -0700"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@android.com",
        "time": "Fri Aug 07 11:35:35 2009 -0700"
      },
      "message": "Fix Bmgr\u0027s logic around restore completion\n\nThe caller needs to wait for the restore observer to be informed that the\nrestore has finished processing before it can safely shut down the restore\nsession.\n"
    },
    {
      "commit": "d23d7f2d12c20314e1e8ff206fafc8f21745ca2d",
      "tree": "4b640ba80d1820d59aea0b53fd49da8f12869d7a",
      "parents": [
        "e15df4017c3625de700e9f9953073f38898bbc89"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Thu Jul 02 14:37:05 2009 -0700"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Thu Jul 02 14:37:50 2009 -0700"
      },
      "message": "Add a \u0027wipe\u0027 operation to Bmgr\n\n\"bmgr wipe PACKAGE\" now issues the backup transport clearBackupData() operation\nfor the given package.\n"
    },
    {
      "commit": "6ef58a1509b9d3348a33ca5686917796c2759aa5",
      "tree": "0cdfef7bf8e2085dc2888c4222aba7481683ee2f",
      "parents": [
        "3a608f829b54a7653c9cc2b3bdbda0641cca37bb"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Mon Jun 29 14:56:28 2009 -0700"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Mon Jun 29 15:33:27 2009 -0700"
      },
      "message": "Implement persistent enable/disable of the backup manager\n\nBackup \u0026 restore is still enabled by default, but with the expectation that it\nwill be enabled during the course of the Setup Wizard or some other privileged\nentity that has notified the user about the ramifications.  While disabled,\ndata-changed notices will still be collected, but no backup pass will be\nscheduled.  When the backup manager is later enabled, any pending data-changed\nnotices will then be processed and the apps invoked for backup.\n"
    },
    {
      "commit": "9171749700853305f3e6abbcdbd9e02f3a71d459",
      "tree": "7aaa1fada6783a588d1662165730e8d3f4ef591c",
      "parents": [
        "4cb1276e143e175590c69ceefa58eb721aa52846"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Fri Jun 26 21:07:13 2009 -0700"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Fri Jun 26 21:14:41 2009 -0700"
      },
      "message": "Use system properties to track the current transport\n\nThis change retools the transport selection mechanism a fair bit.  Transports\nare now specified by name rather than by numeric ID, and the name of the\ncurrently selected transport is stored in a persistent system property under the\nname \"persist.service.bkup.trans\".\n\nThe name -\u003e IBackupTransport translation is now handled by maintaining a map\nfrom the names to the live IBackupTransport objects that correspond.  The Google\ntransport service observer now registers and unregisters the transport as the\nservice goes up and down.\n\nThe bmgr command has been expanded to include real transport interrogation and\nselection by name, and some documentation has been written for it.\n"
    },
    {
      "commit": "156411df4627336b246db78cddca8248ed615b67",
      "tree": "e0aab41ac43c870e5c464b297418034a50e47d93",
      "parents": [
        "040441fa992bcfc11070d559bfceeb039667b382"
      ],
      "author": {
        "name": "Dan Egnor",
        "email": "egnor@google.com",
        "time": "Fri Jun 26 13:20:02 2009 -0700"
      },
      "committer": {
        "name": "Dan Egnor",
        "email": "egnor@google.com",
        "time": "Fri Jun 26 13:25:27 2009 -0700"
      },
      "message": "Use a long for restore token\n"
    },
    {
      "commit": "c73a218c2663e6ae3ec8a9ab8b9524f95702ade9",
      "tree": "ded996c56eae0df093d1d36857d38fef4870bf10",
      "parents": [
        "56bc71565ecd72bf7a3e45b5c871b0407ed9f781"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Fri Jun 26 11:41:26 2009 -0700"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Fri Jun 26 12:20:10 2009 -0700"
      },
      "message": "Add some error reporting \u0026 info to bmgr\u0027s output\n"
    },
    {
      "commit": "4a64bded06a0299785c295a975e2818308eb53e2",
      "tree": "a24057a8f82108aae7f8e6fcb5067c2ed7fe9690",
      "parents": [
        "5e8a4b842c20dd47b82e9915f1bd730ee1b0d46d"
      ],
      "author": {
        "name": "Joe Onorato",
        "email": "joeo@android.com",
        "time": "Thu Jun 25 23:53:29 2009 -0400"
      },
      "committer": {
        "name": "Joe Onorato",
        "email": "joeo@android.com",
        "time": "Thu Jun 25 23:53:29 2009 -0400"
      },
      "message": "Add some helpful tests scripts for backup and make bmgr restore wait until the backup is done.\n"
    },
    {
      "commit": "5e8a4b842c20dd47b82e9915f1bd730ee1b0d46d",
      "tree": "7408bf959f58575cb3e991ca72b3b9a6bb39f72c",
      "parents": [
        "7d562ec393d54dd9ef387c49d1283243bfdbd2b1"
      ],
      "author": {
        "name": "Joe Onorato",
        "email": "joeo@android.com",
        "time": "Thu Jun 25 21:34:49 2009 -0400"
      },
      "committer": {
        "name": "Joe Onorato",
        "email": "joeo@android.com",
        "time": "Thu Jun 25 21:34:49 2009 -0400"
      },
      "message": "Give the bmgr command an IRestoreObserver too.\n"
    },
    {
      "commit": "abce4e8714bed26a2b37b20ad3f02cf619d71c9a",
      "tree": "274cf438fcda8dca4b13a056bc73fea61ba4dd77",
      "parents": [
        "2810f681991d1beb5ceb3515159f9fad3cc341d5"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Thu Jun 18 18:35:32 2009 -0700"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Thu Jun 18 18:38:02 2009 -0700"
      },
      "message": "Use signatures on restore\n\nOn restore now, the backup manager gets the signature blocks corresponding to\nthe restore set from the transport.  It then validates those signatures against\nthe on-device app signatures, and refuses to restore data to an app whose\non-device sig block does not match the backup image\u0027s.\n\nAlso actually implement \u0027bmgr transport N\u0027 so that we can select the local\ntransport easily during runtime.\n"
    },
    {
      "commit": "f68eb500f99361541049e09eb7f9ddd6f4ef4efa",
      "tree": "ccb031f408b087de63baf720b13779d4d989a61d",
      "parents": [
        "5633034f79bfa67c4219f16fd6d23e962e800be2"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Tue Jun 16 11:02:01 2009 -0700"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Tue Jun 16 13:58:17 2009 -0700"
      },
      "message": "More bmgr work; fix clear-data signalling\n\nThe \u0027list sets\u0027 and \u0027restore token#\u0027 commands from bmgr now do what they are\nsupposed to.  At this point we see the restore target\u0027s data being cleared\nproperly and its agent being launched and invoked for restore.\n"
    },
    {
      "commit": "ace7f094bf07bbd90cb998b9462e4f2d101a498c",
      "tree": "9581b7ce708b84fa8c433041722e9f730e3c0fe3",
      "parents": [
        "9908b3d820f7574ef432f22d280c7f1f5065f67f"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Mon Jun 15 18:07:25 2009 -0700"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Mon Jun 15 18:07:25 2009 -0700"
      },
      "message": "Sketch out a \u0027bmgr\u0027 command line tool\n\nNot finished, but eventually will allow adb shell access to the Backup Manager\nfor testing purposes etc.\n"
    }
  ]
}
