)]}'
{
  "log": [
    {
      "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"
    }
  ]
}
