)]}'
{
  "log": [
    {
      "commit": "d67a4abc647d5ed7235ff7ee1695b31340e63a1c",
      "tree": "e51e4b59dc3524c13a99236c12f3ed70cc45e1b3",
      "parents": [
        "8b1d526a72c1e6705b03f4b3267ee02fe84ce765"
      ],
      "author": {
        "name": "Wei Wang",
        "email": "wvw@google.com",
        "time": "Wed Nov 16 12:08:30 2016 -0800"
      },
      "committer": {
        "name": "Wei Wang",
        "email": "wvw@google.com",
        "time": "Wed Nov 16 15:46:19 2016 -0800"
      },
      "message": "init: fix undefined behavior in ExecuteCommand\n\nExecuteCommand may change command_ vector which leads undefined behavior\nThis bug is found when adding logs in ExecuteCommand printing our Command class fields\n\nBug: 32838381\nTest: on emulator\nChange-Id: I96468bd2192ca80013871a3a6ac4132149363fff\n"
    },
    {
      "commit": "8b1d526a72c1e6705b03f4b3267ee02fe84ce765",
      "tree": "e1b67d9bcc147a18da8136b9c85a6fa8eff4c335",
      "parents": [
        "0673412bb962a2c92830e903acf442506d092ebc"
      ],
      "author": {
        "name": "Wei Wang",
        "email": "wvw@google.com",
        "time": "Tue Nov 15 23:58:55 2016 -0800"
      },
      "committer": {
        "name": "Wei Wang",
        "email": "wvw@google.com",
        "time": "Tue Nov 15 23:58:55 2016 -0800"
      },
      "message": "Revert \"Revert \"init: warn slow action\"\"\n\nThis reverts commit 1802d11cc766f04e75e93c7f98dcf52fb2e64149.\n\nTest: grep init log\nBug: 32712851\n"
    },
    {
      "commit": "9b1d5e15ef4bc51cb79ec6504cbd8cd62d7a30bc",
      "tree": "093b45629595a949c8b56673ebe566b58047c785",
      "parents": [
        "431c4895689814f791dfcce4fe716d64dab55e98",
        "69b9b36c114680c87251ab0f140fd5d6b61e1fa9"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Nov 15 17:23:56 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Nov 15 17:23:56 2016 +0000"
      },
      "message": "Merge \"init: fix BuildTriggersString for empty string\""
    },
    {
      "commit": "69b9b36c114680c87251ab0f140fd5d6b61e1fa9",
      "tree": "5b8a5c1832d2d6a767298aaa54ac7baf4f261164",
      "parents": [
        "557359863c0d1fcda9a85e3b7fb275cb12a3eb70"
      ],
      "author": {
        "name": "Wei Wang",
        "email": "wvw@google.com",
        "time": "Mon Nov 14 20:05:21 2016 -0800"
      },
      "committer": {
        "name": "Wei Wang",
        "email": "wvw@google.com",
        "time": "Mon Nov 14 20:20:48 2016 -0800"
      },
      "message": "init: fix BuildTriggersString for empty string\n\nbehavior is undefined if pop_back() on empty std::string\n\nTest: grep init log\nBug: 32712851\nBug: 32838381\nChange-Id: I5bfac2fb275036abd0158b78df14019d2e82716d\n"
    },
    {
      "commit": "1802d11cc766f04e75e93c7f98dcf52fb2e64149",
      "tree": "53fa12f29de5a07f486bd1e219e49ba1d70fd601",
      "parents": [
        "b1a309ac1f08df9864ba2c364225a6bb172fd003"
      ],
      "author": {
        "name": "Nick Desaulniers",
        "email": "ndesaulniers@google.com",
        "time": "Tue Nov 15 00:53:00 2016 +0000"
      },
      "committer": {
        "name": "Nick Desaulniers",
        "email": "ndesaulniers@google.com",
        "time": "Tue Nov 15 00:53:00 2016 +0000"
      },
      "message": "Revert \"init: warn slow action\"\n\nThis reverts commit b1a309ac1f08df9864ba2c364225a6bb172fd003.\n\nBug: 32712851\nBug: 32838381\nChange-Id: Ib4c47de5ea5b0bad765a43cbff9f73d9978729d4\n"
    },
    {
      "commit": "b1a309ac1f08df9864ba2c364225a6bb172fd003",
      "tree": "08461465b9b26bfff8cf8ae6e62c352d20fa2b39",
      "parents": [
        "2422d55d2b57e999324d6ea6a344e2bc25af1978"
      ],
      "author": {
        "name": "Wei Wang",
        "email": "wvw@google.com",
        "time": "Wed Nov 09 15:17:38 2016 -0800"
      },
      "committer": {
        "name": "Wei Wang",
        "email": "wvw@google.com",
        "time": "Wed Nov 09 15:19:11 2016 -0800"
      },
      "message": "init: warn slow action\n\nSlow action that takes longer than 50ms will be warned to user\n\nTest: grep init log\nBug: 32712851\nChange-Id: I3a6a881a8dee1807270343b511a47c76dd230392\n"
    },
    {
      "commit": "7bc87a5a780361928bd1aeed9d2f22233fe05407",
      "tree": "e51894a0ac4a46c26931c24dc5df63cd4ac39bd3",
      "parents": [
        "5b7e3b9a2a703642de18dcb4869c58ac93be3205"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Aug 04 16:09:39 2016 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Aug 04 16:09:39 2016 -0700"
      },
      "message": "Move init\u0027s kernel logging into libbase.\n\nThis will let other stuff (such as adbd and recovery) use it too.\n\nBug: http://b/28467098\nChange-Id: Idab51f438ed3edd6fe65a56c4b396eaff5f3833e\n"
    },
    {
      "commit": "35f5d04620a3221b9f57194ab0239c7c7ba5a726",
      "tree": "eaebe09b53c2aa953f33cb511ccffaf748412099",
      "parents": [
        "00a4ee0f46d36aff90fa120619f4dc6f4a837930"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jul 26 09:32:33 2016 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jul 26 09:32:33 2016 -0700"
      },
      "message": "Fix early init logging.\n\nRemove the /dev/__kmsg__ workarounds (which can then be removed\nfrom sepolicy), and fix confusion in the translation between\nandroid-base logging and kernel logging priorities (in particular,\nwhere \u0027notice\u0027 comes in the hierarchy).\n\nBug: http://b/30317429\nChange-Id: I6eaf9919904b6b55bc402c20bf1a4ae269014bc7\nTest: adb shell dmesg | grep init\n"
    },
    {
      "commit": "f86b5a6b90619e02d1d034ef7b0adc3b439f4abb",
      "tree": "1348657947a4a875d740dc1df134ae9150ef53d6",
      "parents": [
        "90db709a2fbccefcee82e54289cd517cd8cb99b5"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jun 24 15:12:21 2016 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jun 27 08:11:31 2016 -0700"
      },
      "message": "Move init to libbase logging.\n\nChange-Id: Ibfbefeff587a69e948978a037c555fd12a5ade6a\n"
    },
    {
      "commit": "1c563d96f000876d77b2d33fbfb03c241bc503e1",
      "tree": "2b4938eda86ade588cc77bbee202075d3f659bb4",
      "parents": [
        "3abd03232efd53bb3a73d1e76f6f72754457e18d"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Fri Apr 29 15:44:04 2016 -0700"
      },
      "committer": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Fri Apr 29 15:44:04 2016 -0700"
      },
      "message": "Fix google-explicit-constructor warnings.\n\nBug: 28341362\nChange-Id: I4504e98a8db31e0edcbe63c23f9af43eb13e9d86\n"
    },
    {
      "commit": "4f71319df011d796a60a43fc1bc68e16fbf7d321",
      "tree": "5e9b64a97edcda3dbb1d40c617bdd9b179deb259",
      "parents": [
        "1efab7acc5d5b69dced70b6d04070d36f7c9632d"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Dec 04 22:00:26 2015 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Dec 04 22:00:26 2015 -0800"
      },
      "message": "Track rename of base/ to android-base/.\n\nChange-Id: Idf9444fece4aa89c93e15640de59a91f6e758ccf\n"
    },
    {
      "commit": "b7349902a945903f9e36a569051f5131beb0bc24",
      "tree": "8553bcebe434b7d6fe178fbb2c2ef2433773c8f2",
      "parents": [
        "e13fd9aa231b117b03be6b84b7fb0debe6cb620d"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Aug 26 11:43:36 2015 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Sep 01 12:26:02 2015 -0700"
      },
      "message": "init: Use classes for parsing and clean up memory allocations\n\nCreate a Parser class that uses multiple SectionParser interfaces to\nhandle parsing the different sections of an init rc.\n\nCreate an ActionParser and ServiceParser that implement SectionParser\nand parse the sections corresponding to Action and Service\nclasses.\n\nRemove the legacy keyword structure and replace it with std::map\u0027s\nthat map keyword -\u003e (minimum args, maximum args, function pointer) for\nCommands and Service Options.\n\nCreate an ImportParser that implements SectionParser and handles the\nimport \u0027section\u0027.\n\nClean up the unsafe memory handling of the Action class by using\nstd::unique_ptr.\n\nChange-Id: Ic5ea5510cb956dbc3f78745a35096ca7d6da7085\n"
    },
    {
      "commit": "cb716f976b078dff72aa3a61f9435d45e4beb9f5",
      "tree": "360466a1c1251a77cf48e0c08d23fc55fdc9de09",
      "parents": [
        "20391b1de5aaa49657d625fe18a36d4484c6ac31"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Aug 11 12:34:22 2015 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri Aug 21 10:14:43 2015 -0700"
      },
      "message": "init: Queue Triggers instead of Actions\n\nWhen init queues a trigger, it actually enqueues all of the Actions\nthat match with that given trigger.  This works currently because\nall init scripts are loaded and therefore all Actions are available\nbefore init starts queueing any triggers.\n\nTo support loading init scripts after init has started queueing\ntriggers, this change enqueues Trigger objects instead of their\nmatching Actions.  Each Trigger object then matches its associated\nActions during its execution.\n\nAdditionally, this makes a few cosmetic clean ups related to triggers.\n\nBug: 23186545\nChange-Id: I5d177458e6df1c4b32b1072cf77e87ef952c87e4\n"
    },
    {
      "commit": "96f67316a22bc9236aed70b198e91a5406389e5b",
      "tree": "f168868b586356de56460b67ddfb10ab00e13e6d",
      "parents": [
        "cf4dba5ab315493531fff5a4867698a3659b0526"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu Jul 30 13:52:55 2015 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri Jul 31 16:02:12 2015 -0700"
      },
      "message": "init: use std::vector\u003cstd::string\u003e for argument passing\n\nChange-Id: Ie7a64e65de3a20d0c7f7d8efc0f7c1ba121d07fe\n"
    },
    {
      "commit": "fa0c21c94ccb98bfa5cf3cc7a6b220be4a5fa378",
      "tree": "db32b026384bc809486ef7bba9bf74131a8d9be5",
      "parents": [
        "fac3bf35af412292e1a955510095c4234dc0fd53"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu Jul 23 17:53:11 2015 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu Jul 30 13:37:23 2015 -0700"
      },
      "message": "init: Create classes for Action and Command\n\nThis creates the concept of \u0027event_trigger\u0027 vs \u0027property_trigger\u0027\n\nPreviously these were merged into one, such that \u0027on property:a\u003db \u0026\u0026\nproperty:b\u003dc\u0027 is triggered when properties a\u003db and b\u003dc as expected,\nhowever combinations such as \u0027on early-boot \u0026\u0026 boot\u0027 would trigger\nduring both early-boot and boot.  Similarly, \u0027on early-boot \u0026\u0026\nproperty:a\u003db\u0027 would trigger on both early-boot and again when property\na equals b.\n\nThe event trigger distinction ensures that the first example fails to\nparse and the second example only triggers on early-boot if\nproperty a equals b.\n\nThis coalesces Actions with the same triggers into a single Action object\n\nChange-Id: I8f661d96e8a2d40236f252301bfe10979d663ea6\n"
    }
  ]
}
