)]}'
{
  "log": [
    {
      "commit": "25641ca1ac5b09727f86fe01389877332a00455d",
      "tree": "e18f66c852164f4fbc6fbdf3d7c689b9b2ac3d83",
      "parents": [
        "08d1f937236230756bffde241ad6b335da368cf9",
        "0b285499db739ba50f2f839d633e763c70e67f96"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Tue Apr 19 10:41:20 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Apr 19 10:41:20 2011 -0700"
      },
      "message": "Merge \"Plumbing in PackageManager and installd for multi-user support.\""
    },
    {
      "commit": "0b285499db739ba50f2f839d633e763c70e67f96",
      "tree": "77e6ecb6572cefdfae2095dcf64c4388adae15c2",
      "parents": [
        "4123211637dcc0155091016f0c0987b80e56ab7b"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Thu Apr 14 17:35:23 2011 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri Apr 15 15:15:27 2011 -0700"
      },
      "message": "Plumbing in PackageManager and installd for multi-user support.\n\n- Create /data/user directory and symlink /data/user/0 -\u003e /data/data for\n  backward compatibility\n- Create data directories for all packages for new user\n\n- Remove data directories when removing a user\n\n- Create data directories for all users when a package is created\n\n- Clear / Remove data for multiple users\n\n- Fixed a bug in verifying the location of a system app\n\n- pm commands for createUser and removeUser (will be disabled later)\n\n- symlink duplicate lib directories to the original lib directory\n\nChange-Id: Id9fdfcf0e62406a8896aa811314dfc08d5f6ed95\n"
    },
    {
      "commit": "f68327e7e23d78e209acc76ccecbc4601e3f5fc2",
      "tree": "5fd429b956afff5084ac28d815d2950c2768242a",
      "parents": [
        "3758321fcecf1a6af653937d295a14a5289e8e5b"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Thu Apr 14 16:20:03 2011 -0700"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Thu Apr 14 16:20:03 2011 -0700"
      },
      "message": "Make installd resistant to umask changes.\n\nBug: 3272072\nChange-Id: Ic2d241afcb4d0dabd63fcdadf13b2d48b7f398e8\n"
    },
    {
      "commit": "86c9584559439504fc57ece2ccd9b6cbd568430c",
      "tree": "8c9cc83b3a980394b7cbe23dfd3c44fcc189b6b4",
      "parents": [
        "7f5a026d255fdcbd600a01b4abbd87eb0b528e37"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Mar 31 13:16:12 2011 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Apr 05 10:45:35 2011 -0700"
      },
      "message": "Update installd to allow multiuser\n\n* Add ability to select different personas to generate the path to be\n  created.\n\n* Move hardcoded paths to read from init\u0027s set environment.\n\n* Add unit tests for all the utility functions that build strings to\n  make sure they\u0027re correct.\n\n* Fill in persona with \"0\" all the time now. Will be plumbed through in\n  later CL.\n\nChange-Id: I0a7f6e3640cb6b052f8823080886ee79e90b679f\n"
    },
    {
      "commit": "35ab3ad61fcc349380d7e7f2fcf9a0dfbf76ae11",
      "tree": "a5db3c2583c81b59c28b1f7d9ab72ff2e00a317f",
      "parents": [
        "6f6ef48dc9a40d6afe2b66db4d1a411771e85a5b"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Feb 02 16:42:14 2011 -0800"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Feb 02 16:42:18 2011 -0800"
      },
      "message": "Remove defunct secure FS work\n\nBug: 3365047\nChange-Id: I68eaea295881f5431907e1b93bdd73e644e84aa5\n"
    },
    {
      "commit": "33b2264ea9ab0f1980c49698729a0ab3c51d07fe",
      "tree": "0c30e474c5ddb66c8bc0bcdc44126447f26afd92",
      "parents": [
        "0b44476a23660baabc1984c2fa8ee2c0c114460b"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Nov 30 13:49:32 2010 -0800"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Nov 30 16:51:13 2010 -0800"
      },
      "message": "Move disk usage utilities to its own library\n\nDisk usage calculation will happen in more places now, so move the\ninstalld calculation utilities out to its own library that only gets\nbuilt for the target.\n\nChange-Id: Idceb6bd663ca6ab3d38fa00e57ee74a25b784855\n"
    },
    {
      "commit": "0332d1c5a5a0353df9e9b02422b33656930c2941",
      "tree": "4d10e11973d21478b437de7b0f62e12ddbff846c",
      "parents": [
        "703aae06c0925b19657877bb1872bb2f28874969"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Oct 21 16:14:06 2010 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Oct 21 16:14:06 2010 -0700"
      },
      "message": "Exit immediately on some linklib failures\n\nIf the library couldn\u0027t be printed to the string, installd should fail\nearly instead of trying to chmod() back to uninitialized stat struct.\n\nBug: 3121721\nChange-Id: I8a3604954ae657a1e07c1ad8d5569aa80aff9e0a\n"
    },
    {
      "commit": "6a6b007c77e5cab7ee435506a4f65824f52028b6",
      "tree": "09daacd02a3582c26d72411e5ef0129812d0c8d6",
      "parents": [
        "b74941e32e068ec03f90b9a53670328cd17ff4b4"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Oct 07 16:46:10 2010 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Oct 07 17:20:26 2010 -0700"
      },
      "message": "Symlink application lib directory when on SD card\n\nThis will help legacy games that use dlopen() to directly access the\n/data/data/\u003capp\u003e/lib directory before the\nApplicationInfo.nativeLibraryDir was part of the API.\n\nChange-Id: Ie9f3e7239b6334708b5d086ffafe66a507f6d9da\n"
    },
    {
      "commit": "3e319a9962434e1fae86b2180ad210170f02c152",
      "tree": "741d7c4c3d9b4ebf0ea1260621609ba4ad6052f1",
      "parents": [
        "2cb3e83654c99e202c170d9d0237d8d1f4054354"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Sep 07 13:58:28 2010 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Sep 07 14:35:47 2010 -0700"
      },
      "message": "Allow installd to handle large partitions\n\nUse int64_t because we\u0027re RPCing over to Java which uses a Long to\nrepresent the filesystem space.\n\nChange-Id: I842b2cf9f2ff8f980ff5895c1c8eb9ebefa1ea31\n"
    },
    {
      "commit": "508715259c332613240b2399c77d35ea7214f91a",
      "tree": "8a870592ef3ea4691f212ee080aa18cce93a46d9",
      "parents": [
        "737998f5955aa14f1b21967f6f559bca60cb1844"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Aug 04 09:14:01 2010 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Aug 04 13:15:12 2010 -0700"
      },
      "message": "Add more debugging to installd\n\nIf a command to installd fails, it would be nice to know exactly why.\nLog failures and the errno associated with the failures.\n\nChange-Id: Ia3122675f243037c556d3a49d06da7e03b8c59f6\n"
    },
    {
      "commit": "8a9ab24a5c9b595ac0268fcade4b5bbfe7c45c2d",
      "tree": "f445dbf1504f02783b550a80a01ee06d45fbcb4a",
      "parents": [
        "50fdbef2fbcd390035517090bc54220c265f5c75"
      ],
      "author": {
        "name": "Suchi Amalapurapu",
        "email": "asuchitra@google.com",
        "time": "Thu Mar 11 16:49:16 2010 -0800"
      },
      "committer": {
        "name": "Suchi Amalapurapu",
        "email": "asuchitra@google.com",
        "time": "Tue Mar 16 16:36:26 2010 -0700"
      },
      "message": "Do storage checks before initiating a move.\nAdd new remote method to check for insufficient error conditions.\nSome fixes in MountService when updating media status on PackageManagerService\nFix size calculation condition in installd.\n\nAdd new error code if media is unavailable.\nNew tests for testing error codes.\nSome additional debugging statements in MountService.\n\nChange-Id: Ibfe90d5ed6c71d57f9c1c67806f38b5ae9ecdfbf\n"
    },
    {
      "commit": "089262dc022d87e31eefc536025be6c015c7ebde",
      "tree": "2c4706dc952c2c3a4407427579a01057564fab52",
      "parents": [
        "e182a92ae408f27f46d15de01c8a263cfe6f9246"
      ],
      "author": {
        "name": "Suchi Amalapurapu",
        "email": "asuchitra@google.com",
        "time": "Wed Mar 10 14:19:21 2010 -0800"
      },
      "committer": {
        "name": "Suchi Amalapurapu",
        "email": "asuchitra@google.com",
        "time": "Wed Mar 10 16:08:51 2010 -0800"
      },
      "message": "Dont include code size for apps on sdcard.\nUse constants defined in PackageHelper for user preferences\nto install auto, internal, external.\nSet default install location to external.\nUpdate settings db version number\n\nChange-Id: Ib5110c9377990e20a48cee923e55898dfddfd1e6\n"
    },
    {
      "commit": "c1552397be706c243338389c628a44eee6011eae",
      "tree": "a6854366e2a68e37400a22ab95c7d9496007a4fa",
      "parents": [
        "6be0fc100e46bc1cd4d9eda6c63a962d1c24dbd4"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Mar 03 16:19:01 2010 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Mar 03 16:26:26 2010 -0800"
      },
      "message": "Allow multiple original-package tags.\n\nAlso fix some issues with moving files from update commands.\n"
    },
    {
      "commit": "8fe5c9e39def5a0a2139d902a09ae11414b90c92",
      "tree": "efb2e1d6acbd40dd85401ffc5ab7814047baa290",
      "parents": [
        "9d6e45ad9213b3cf85e3a4ad037b4e9b182a4cc7"
      ],
      "author": {
        "name": "Oscar Montemayor",
        "email": "oam@google.com",
        "time": "Thu Feb 25 00:06:41 2010 -0800"
      },
      "committer": {
        "name": "Oscar Montemayor",
        "email": "oam@google.com",
        "time": "Thu Feb 25 00:06:41 2010 -0800"
      },
      "message": "Replacing hard-coded mount point for ASEC with a getenv() call.\n"
    },
    {
      "commit": "cf6eaeaae9e6745dd6e07540812c79821d7043c2",
      "tree": "fe1224c5b492a8ad09d00e167b66a45413fb3d73",
      "parents": [
        "2a399f066d4f3870385002cdcda8082a0eeeb770"
      ],
      "author": {
        "name": "Suchi Amalapurapu",
        "email": "asuchitra@google.com",
        "time": "Tue Feb 23 19:37:45 2010 -0800"
      },
      "committer": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Wed Feb 24 11:31:36 2010 -0800"
      },
      "message": "Some framework fixes for apps on sd\nchange hard coded path in installd\nfix tests\nWork around for renaming containers.\nDo forced unmount when destroying containers.\nForce a gc in default container service to release handle to parsed package\nand thus avoid getting killed by vold\nSome cosmetic changes to PackageManager api.\nUnit tests for renaming container for MountService\nRemove internal size limit on app to be installed.\n"
    },
    {
      "commit": "d705fd2b0aca3f57168934f2ea8c351ef249f829",
      "tree": "1e9c2835b330f7c1a202abdc1a68cc8827424ef7",
      "parents": [
        "f5c6eff63d19a9f7a970a4f90619edac873c006d"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Feb 12 14:58:04 2010 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Feb 12 16:29:50 2010 -0800"
      },
      "message": "Tweak updatecmds to be able to move entire directories.\n"
    },
    {
      "commit": "0dd50e61267818b4cba0453c2abe18a77d3f6f66",
      "tree": "f7246ab284e9c357889bc84a007390170366f556",
      "parents": [
        "b687581d4cf67fe8f25bac4333b513bcba2f3cb2"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Tue Feb 09 19:02:38 2010 -0800"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Tue Feb 09 19:02:38 2010 -0800"
      },
      "message": "Fix installd to create /data/data/\u003cpkgname\u003e with appropriate permissions.\n\nThe directory was created with read+exec rights for others.\nThe patch restricts it to only exec rights.\n"
    },
    {
      "commit": "b858dfda5012a1040927ed62c3bb856c3294d882",
      "tree": "d865e8580e15ecda54e4fd4e891c489eb222a8b1",
      "parents": [
        "70d10c0156f5d2d1c639d0ebe62de8ec950d4306"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Feb 02 10:49:14 2010 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Feb 03 15:42:02 2010 -0800"
      },
      "message": "Implement system data migration support.\n\nThis adds three new features:\n\n- \u003coriginal-package android:name\u003d\"com.foo\" /\u003e manifest tag.\n  This allows an .apk to specify another package it originally came from,\n  propagating all state and data from the old to new package.\n\n- \u003cadopt-permissions android:name\u003d\"com.foo\" /\u003e manifest tag.\n  In some more complicated cases, a new .apk may be a combination\n  of multiple older .apks that each declared their own permissions.\n  This allows you to propagate the permissions from these other\n  .apks into the new one.\n\n- A new system/etc/updatecmds directory.\n  You can place files here which describe data files to move from\n  one package to another.  (See below for details.)\n\nAlso in this change: we now clean up the data directories of\n.apks that disappear from the system image, and some improvements\nto logging and reporting error messages.\n\nA typical file in the updatecmds directory looks like this:\n\n-------\ncom.google.android.gsf:com.google.android.providers.talk\n    databases/talk.db\ncom.google.android.gsf:com.google.android.googleapps\n    databases/gls.db\n-------\n\nThis says that for com.google.android.sfs, there are two packages to\nmove files from:\n\nFrom com.google.android.providers.talk, the file databases/talk.db.\nFrom com.google.android.googleapps, the file databases/gls.db\n\nAs part of moving the file, its owner will be changed from the old\npackage to whoever is the owner of the new package\u0027s data directory.\n\nIf those two files had existed, after booting you would now have the\nfiles:\n\n/data/data/com.google.android.gsf/databases/talk.db\n/data/data/com.google.android.gsf/databases/gls.db\n\nNote that all three of these facilities assume that the older .apk\nis completely removed from the newer system.  The WILL NOT work\ncorrectly if the older .apk still remains.\n"
    },
    {
      "commit": "c028be4f3b8c7476b46859f66c3f33d528adf181",
      "tree": "8a740e6207e958572706a636fcb92425dbf13a6e",
      "parents": [
        "aeb4126736c1b93abe5252e1723c568a13da7c81"
      ],
      "author": {
        "name": "Suchi Amalapurapu",
        "email": "asuchitra@google.com",
        "time": "Mon Jan 25 12:19:12 2010 -0800"
      },
      "committer": {
        "name": "Suchi Amalapurapu",
        "email": "asuchitra@google.com",
        "time": "Wed Jan 27 10:26:43 2010 -0800"
      },
      "message": "AppsOnSd feature - Add default container\n\nAdd new remote interface to do temporary copies. The new\nremote stub handling is done on mHandler thread and doesn\u0027t need locking\nfor now.\nAdd new InstallArgs class and subclasses to isolate cases for installation.\nMove resource deletion for failed installs/upgrades to later on in installation\ncycle.\nFix code path for forward locked apps when using scanPackageLI\n\nTODO\u0027s\nFix installation paths to completely use InstallArgs based design later on.\nGet rid of using flags in various install/uninstall code paths.\nIdeally InstallArgs should be created using these flags and used in the\nrest of the code.\nFunction renames.\nRevisit mount api\u0027s.\n"
    },
    {
      "commit": "af8e9f4805643f90a9dc0ecfa119e0a860c12f8a",
      "tree": "a6ea88a10b61204a5256901dca8b958849e13dc4",
      "parents": [
        "f6fff20a96268b0b1136a2c44199ad8de46ced5d"
      ],
      "author": {
        "name": "Suchi Amalapurapu",
        "email": "asuchitra@google.com",
        "time": "Tue Jan 12 10:17:28 2010 -0800"
      },
      "committer": {
        "name": "Suchi Amalapurapu",
        "email": "asuchitra@google.com",
        "time": "Thu Jan 14 14:02:39 2010 -0800"
      },
      "message": "app install on sdcard. provide skeleton implementation\nto install an app on sdcard, just resources.\nAdd new install path for /asec in installd.\nignore . when checking for apk path since the sdcard packages id\u0027ed\nby package name.\nAdd new -s option to adb shell pm\nRefactor fwd locked from scanMode to ApplicationInfo.\nAdd new flag for sd install\nAdd new parse flags for fwd locking and installing on sdcard\nNew mock api\u0027s in PackageManagerService to invoke MountService api\u0027s. These\nwill be refactored again and so have been wrapped internally.\nSome error codes in PackageManager\nChanges in PackageManagerService to use mPath and mScanPath during installation\nand switch to using PackageParser.Package.applicationInfo attributes for\nsource and public resource directories.\nSome known issues that will be addressed later\n using system_uid for now. needs some tinkering with uid and packagesetting creation to use the actual app uid\n error handling from vold not very robust. ignoring lot of things for now\n sending a delayed destroy to delete packages. will revisit later\n revisit temp file creation later. just copy for now\n"
    },
    {
      "commit": "a8529f68671a8a118751cb6ad577f44eaf076b96",
      "tree": "bf191767698261c9bdd7b599593f3177a188da7d",
      "parents": [
        "579d418db016a9ae87479da9e29d8827474d68f5"
      ],
      "author": {
        "name": "Oscar Montemayor",
        "email": "oam@google.com",
        "time": "Wed Nov 18 10:14:20 2009 -0800"
      },
      "committer": {
        "name": "Oscar Montemayor",
        "email": "oam@google.com",
        "time": "Tue Nov 24 11:44:19 2009 -0800"
      },
      "message": "Encrypted File Systems Project. Installer modifications.\nStarted to modify isntaller for data redirection to a secure location.\n"
    },
    {
      "commit": "9066cfe9886ac131c34d59ed0e2d287b0e3c0087",
      "tree": "d88beb88001f2482911e3d28e43833b50e4b4e97",
      "parents": [
        "d83a98f4ce9cfa908f5c54bbd70f03eec07e7553"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 19:31:44 2009 -0800"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 19:31:44 2009 -0800"
      },
      "message": "auto import from //depot/cupcake/@135843\n"
    },
    {
      "commit": "d83a98f4ce9cfa908f5c54bbd70f03eec07e7553",
      "tree": "4b825dc642cb6eb9a060e54bf8d69288fbee4904",
      "parents": [
        "076357b8567458d4b6dfdcf839ef751634cd2bfb"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 18:28:45 2009 -0800"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 18:28:45 2009 -0800"
      },
      "message": "auto import from //depot/cupcake/@135843\n"
    },
    {
      "commit": "d24b8183b93e781080b2c16c487e60d51c12da31",
      "tree": "fbb89154858984eb8e41556da7e9433040d55cd4",
      "parents": [
        "f1e484acb594a726fb57ad0ae4cfe902c7f35858"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Feb 10 15:44:00 2009 -0800"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Feb 10 15:44:00 2009 -0800"
      },
      "message": "auto import from //branches/cupcake/...@130745\n"
    },
    {
      "commit": "f1e484acb594a726fb57ad0ae4cfe902c7f35858",
      "tree": "99d2b34512f0dc2ae67666e756c1cfcd331e5fe3",
      "parents": [
        "22f7dfd23490a3de2f21ff96949ba47003aac8f8"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Thu Jan 22 00:13:42 2009 -0800"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Thu Jan 22 00:13:42 2009 -0800"
      },
      "message": "auto import from //branches/cupcake/...@127436\n"
    },
    {
      "commit": "54b6cfa9a9e5b861a9930af873580d6dc20f773c",
      "tree": "35051494d2af230dce54d6b31c6af8fc24091316",
      "parents": [],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Oct 21 07:00:00 2008 -0700"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Oct 21 07:00:00 2008 -0700"
      },
      "message": "Initial Contribution\n"
    }
  ]
}
