)]}'
{
  "commit": "ee93ad28ff2fd3bc0a99dfbe1d1393d092f46d7b",
  "tree": "bc1dc2bc521d0f0f1104a428925737931870fd92",
  "parents": [
    "7e77dbb1be8a4fae4fc846035ef7715200a518e3"
  ],
  "author": {
    "name": "Makoto Onuki",
    "email": "omakoto@google.com",
    "time": "Thu Oct 18 16:24:13 2018 -0700"
  },
  "committer": {
    "name": "Makoto Onuki",
    "email": "omakoto@google.com",
    "time": "Wed Oct 24 08:34:04 2018 -0700"
  },
  "message": "DB Wipe detection\n\n- Create a check file for each database in order to detect\n1) an unexpected DB file removal\n2) DB wipe caused by a DB corruption.\n\n- Either case, do a WTF to collect information on APR.\n\n- Also print file timestamps in \"dumpsys dbinfo\". Example:\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nDatabase files in /data/system:\n  locksettings.db                            20480b ctime\u003d2018-10-23T22:48:35Z mtime\u003d2018-10-23T22:48:35Z atime\u003d2018-10-23T18:54:12Z\n  locksettings.db-wipecheck                      0b ctime\u003d2018-10-23T18:54:12Z mtime\u003d2018-10-23T18:54:12Z atime\u003d2018-10-23T18:54:12Z\n  notification_log.db                        45056b ctime\u003d2018-10-23T22:48:08Z mtime\u003d2018-10-23T22:48:08Z atime\u003d2018-10-23T18:54:13Z\n    :\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nChange-Id: I77fbeb0bb635c787aba797412f116475fecbe41c\nFixes: 117886381\nTest: manual test\n\nTest 1: corruption\n1. Stop CP2 process (adb shell killall android.process.acore)\n2. shell \u0027echo abc \u003e /data/user/0/com.android.providers.contacts/databases/contacts2.db\u0027\n3. Launch the contacts app.\n\nTest 2: Unexpected file removal\n1. Stop CP2 process (adb shell killall android.process.acore)\n2. shell \u0027rm -f /data/user/0/com.android.providers.contacts/databases/contacts2.db\u0027\n3. Launch the contacts app.\n\nIn both cases, logcat shows a client side stacktrace and also a WTF. (am_wtf)\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "9d3c5c6417afedd75502ee439fe9d5df9689d7a0",
      "old_mode": 33188,
      "old_path": "core/java/android/app/ActivityThread.java",
      "new_id": "4756bf40bad3b107676f481852427fec86557e70",
      "new_mode": 33188,
      "new_path": "core/java/android/app/ActivityThread.java"
    },
    {
      "type": "modify",
      "old_id": "599c2d2d35941b4c88f354b320876bcd4cfb9e63",
      "old_mode": 33188,
      "old_path": "core/java/android/content/ContentResolver.java",
      "new_id": "a2a6b9b4a7624c6764d819bfd539cbb12d725d5d",
      "new_mode": 33188,
      "new_path": "core/java/android/content/ContentResolver.java"
    },
    {
      "type": "modify",
      "old_id": "a55dd31f265fa91064ed66aa3d113b909ed0689d",
      "old_mode": 33188,
      "old_path": "core/java/android/content/IContentService.aidl",
      "new_id": "1d0237502812371ccc75fabe7a0c1c4e236f2b13",
      "new_mode": 33188,
      "new_path": "core/java/android/content/IContentService.aidl"
    },
    {
      "type": "modify",
      "old_id": "7fa2b409c59dfac7bb08a168882a666593011a19",
      "old_mode": 33261,
      "old_path": "core/java/android/database/DefaultDatabaseErrorHandler.java",
      "new_id": "cf019e134bc21fb692918af6447b5e84717e208f",
      "new_mode": 33261,
      "new_path": "core/java/android/database/DefaultDatabaseErrorHandler.java"
    },
    {
      "type": "modify",
      "old_id": "5c4f16a7cf3db88020cb3cc3222dd0bd1a5c29f0",
      "old_mode": 33188,
      "old_path": "core/java/android/database/sqlite/SQLiteConnection.java",
      "new_id": "20505ca803dc770162f1dfe9938f4d66187d1672",
      "new_mode": 33188,
      "new_path": "core/java/android/database/sqlite/SQLiteConnection.java"
    },
    {
      "type": "modify",
      "old_id": "3ee348ba48650072538ca7ee13e0bfa1b0dbd48f",
      "old_mode": 33188,
      "old_path": "core/java/android/database/sqlite/SQLiteConnectionPool.java",
      "new_id": "dbc176614daf78c20557e1dcb694973aa8fc8758",
      "new_mode": 33188,
      "new_path": "core/java/android/database/sqlite/SQLiteConnectionPool.java"
    },
    {
      "type": "modify",
      "old_id": "eb5c720d63099f23e3938f466db2a224a195c27f",
      "old_mode": 33188,
      "old_path": "core/java/android/database/sqlite/SQLiteDatabase.java",
      "new_id": "f9c2c3e2c983ceb53e695448cdff752a7bf0b636",
      "new_mode": 33188,
      "new_path": "core/java/android/database/sqlite/SQLiteDatabase.java"
    },
    {
      "type": "modify",
      "old_id": "1c6620467b7c5f05932ea300fecbbfe74f463c42",
      "old_mode": 33188,
      "old_path": "core/java/android/database/sqlite/SQLiteDebug.java",
      "new_id": "f220205b5f26b0400f0befd2b4bb1fac17ab5e9a",
      "new_mode": 33188,
      "new_path": "core/java/android/database/sqlite/SQLiteDebug.java"
    },
    {
      "type": "modify",
      "old_id": "67e5f65d5a1f809684c8ebaa13e5c26e97afc5f1",
      "old_mode": 33188,
      "old_path": "core/java/android/database/sqlite/SQLiteGlobal.java",
      "new_id": "ff286fdb42df286236fd7518620b94ba542d2b26",
      "new_mode": 33188,
      "new_path": "core/java/android/database/sqlite/SQLiteGlobal.java"
    },
    {
      "type": "modify",
      "old_id": "5698fdf439a8c10ac8152317518ff331dbe927aa",
      "old_mode": 33188,
      "old_path": "services/core/java/com/android/server/content/ContentService.java",
      "new_id": "5ed626342d31c4ef652a0072ac42ddee59f9b716",
      "new_mode": 33188,
      "new_path": "services/core/java/com/android/server/content/ContentService.java"
    }
  ]
}
