)]}'
{
  "log": [
    {
      "commit": "d3044e6a0bfb3fd7cdcfeb59f5852e0be539dfde",
      "tree": "01edee1bfb6b521469e4dbfb368da0c23589f4e2",
      "parents": [
        "c160a6edb9fe365905a1ec1d2ef3afbbe593c165"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 20 13:18:22 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 20 13:18:22 2015 -0700"
      },
      "message": "Fix lseek argument order.\n\nChange-Id: I12feed2de8a4e0782f90609254a3e2ec66d7d98e\n"
    },
    {
      "commit": "c160a6edb9fe365905a1ec1d2ef3afbbe593c165",
      "tree": "07882589e6ad98e30d1f4997b5e669ed303a39b2",
      "parents": [
        "3285c233b2c7d5e5ab205908a71c695d34b089ea",
        "028e15959e3c4fa8e87e16cea6311f0505296906"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Oct 19 18:52:59 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Oct 19 18:52:59 2015 +0000"
      },
      "message": "Merge \"adb: win32: Improve Winsock error code mappings and strings\""
    },
    {
      "commit": "028e15959e3c4fa8e87e16cea6311f0505296906",
      "tree": "07882589e6ad98e30d1f4997b5e669ed303a39b2",
      "parents": [
        "3285c233b2c7d5e5ab205908a71c695d34b089ea"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Sun Oct 18 16:45:09 2015 -0700"
      },
      "committer": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Sun Oct 18 16:45:09 2015 -0700"
      },
      "message": "adb: win32: Improve Winsock error code mappings and strings\n\nImproved mapping of Winsock error codes to POSIX error codes, especially\nWSAECONNABORTED to EPIPE (which WriteFdExactly() looks for) when sending\nto a closed socket and WSAECONNRESET to ECONNRESET when the peer resets\nthe connection.\n\nUse a macro to map strerror() to adb_strerror() which handles these\nPOSIX error codes that the Windows C Runtime doesn\u0027t recognize.\n\nAlso:\n\n* Unittest for adb_strerror().\n\n* Don\u0027t trace when send() returns WSAEWOULDBLOCK because that is\n  expected.\n\nChange-Id: If46aeb7b36de3eebfbbccf5478ff5b1bb087714b\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "3285c233b2c7d5e5ab205908a71c695d34b089ea",
      "tree": "1c4e48deccf2ffdc06e2c22bf9a5a12862ea6cba",
      "parents": [
        "edbc20fc84d6ffb6455e2a2dd0ae471bdd87607b",
        "3fe11f6bb3a4bf130bf35f1abcedbe51da73f622"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Thu Oct 15 21:37:02 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Oct 15 21:37:02 2015 +0000"
      },
      "message": "Merge \"adb: non-interactive shell stdin.\""
    },
    {
      "commit": "3fe11f6bb3a4bf130bf35f1abcedbe51da73f622",
      "tree": "1c4e48deccf2ffdc06e2c22bf9a5a12862ea6cba",
      "parents": [
        "edbc20fc84d6ffb6455e2a2dd0ae471bdd87607b"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Tue Oct 06 15:30:03 2015 -0700"
      },
      "committer": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Thu Oct 15 09:44:54 2015 -0700"
      },
      "message": "adb: non-interactive shell stdin.\n\nNon-interactive `adb shell` previously only read from the remote shell,\nbut we want it to write as well so interactive and non-interactive\nshells can both send data. With this CL, we can now do:\n  $ echo foo | adb shell cat\n  foo\n\nThis is primarily usable with newer devices that support the shell_v2\nfeatures. Older devices will receive stdin but the shell will still\nhang after all input has been sent, requiring user Ctrl+C. This seems\nbetter than closing communication altogether which could potentially\nmiss an unpredictable amount of return data by closing too early.\n\nKnown issue: non-interactive stdin to a PTY shell isn\u0027t reliable.\nHowever I don\u0027t think this is a common case as ssh doesn\u0027t seem to\nhandle it properly either. Examples:\n  * echo \u0027echo foo\u0027 | adb shell\n  * echo \u0027foo\u0027 | adb shell -t cat\n\nBug: http://b/24565284\nChange-Id: I5b017fd12d8478765bb6e8400ea76d535c24ce42\n"
    },
    {
      "commit": "edbc20fc84d6ffb6455e2a2dd0ae471bdd87607b",
      "tree": "6cc51d1b9af93bb3e2410cbb941acd4cccc9e5d3",
      "parents": [
        "4a66d9c6b3aa08516818dd4296b7a60f7831379b",
        "f1500ca322da6f0b2e55383e0db63f0e3c4cce95"
      ],
      "author": {
        "name": "Badhri Jagan Sridharan",
        "email": "badhri@google.com",
        "time": "Wed Oct 14 17:28:53 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Oct 14 17:28:53 2015 +0000"
      },
      "message": "Merge \"adbd: Add os descriptor support for adb.\""
    },
    {
      "commit": "4a66d9c6b3aa08516818dd4296b7a60f7831379b",
      "tree": "f83372d69a901031b44d501dfa5d1b57cb6e8eea",
      "parents": [
        "17b5d9cb74fcd240bac793eec7b7ee860d3188b0",
        "8595283cec8608cd7bc383e6ffe5203772975d94"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 07 23:54:17 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Oct 07 23:54:17 2015 +0000"
      },
      "message": "Merge \"Use const auto\u0026/auto\u0026\u0026 in adb.\""
    },
    {
      "commit": "8595283cec8608cd7bc383e6ffe5203772975d94",
      "tree": "f83372d69a901031b44d501dfa5d1b57cb6e8eea",
      "parents": [
        "17b5d9cb74fcd240bac793eec7b7ee860d3188b0"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 07 15:59:35 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 07 16:11:17 2015 -0700"
      },
      "message": "Use const auto\u0026/auto\u0026\u0026 in adb.\n\nChange-Id: I74a7e511302e15e207906f572d181634e0ed5604\n"
    },
    {
      "commit": "17b5d9cb74fcd240bac793eec7b7ee860d3188b0",
      "tree": "f7e1ea04863bf999632b7c91d73c2e6043dad279",
      "parents": [
        "60d892402da7d04d41cea426d46509e773c40313",
        "67943d11b76d7693d817eb5898736c38abd7a44a"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 07 22:38:50 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Oct 07 22:38:50 2015 +0000"
      },
      "message": "Merge \"Fix adb -d/-e error reporting.\""
    },
    {
      "commit": "67943d11b76d7693d817eb5898736c38abd7a44a",
      "tree": "47bb24231f7277f45afa1b3c98a773b0e982a94d",
      "parents": [
        "de01c94f969f6c59926bc7ace48c3ed0a707a670"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 07 14:55:10 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 07 15:35:18 2015 -0700"
      },
      "message": "Fix adb -d/-e error reporting.\n\nIf -d/-e fail, get-serialno and friends will now report an error\nand return a failure status code on exit.\n\nAlso fix the behavior of -d/-e with $ANDROID_SERIAL --- -d/-e\nshould override $ANDROID_SERIAL, not the other way round.\n\nI\u0027m deleting my own comment here about always returning \"unknown\"\nfor scripts. I can\u0027t find any evidence that there are scripts\nrelying on that, so I think my comment meant \"I fear that there\nare scripts doing so\".\n\nBug: http://b/24403699\nChange-Id: Ie13a751f1137abcfe0cc6c46a0630ba5e02db676\n"
    },
    {
      "commit": "f1500ca322da6f0b2e55383e0db63f0e3c4cce95",
      "tree": "79882f5ded6bf52237f799ed1062b28258aa7f32",
      "parents": [
        "60d892402da7d04d41cea426d46509e773c40313"
      ],
      "author": {
        "name": "Badhri Jagan Sridharan",
        "email": "Badhri@google.com",
        "time": "Mon Oct 05 13:04:03 2015 -0700"
      },
      "committer": {
        "name": "Badhri Jagan Sridharan",
        "email": "badhri@google.com",
        "time": "Wed Oct 07 06:04:00 2015 +0000"
      },
      "message": "adbd: Add os descriptor support for adb.\n\nEventhough windows does not rely on extended os\ndescriptor for adbd, when android usb device is\nconfigures as a composite device such as mtp+adb,\nwindows discards the extended os descriptor even\nif one of the USB function fails to send\nthe extended compat descriptor. This results in automatic\ninstall of MTP driverto fail when Android device is in\n\"File Transfer\" mode with adb enabled.\n\nhttps://msdn.microsoft.com/en-us/library/windows/hardware/gg463179.aspx\n\nBUG\u003d24583401\nBUG\u003dchromium:43409\n\nChange-Id: I87341683a9337848cac66daf9055b0d05cedd3d3\n"
    },
    {
      "commit": "60d892402da7d04d41cea426d46509e773c40313",
      "tree": "229c68cd70a7ec87b681bdfb3faad85b3d163877",
      "parents": [
        "de01c94f969f6c59926bc7ace48c3ed0a707a670",
        "5fc22317b7ad03a3b72e746e614f97921ccdfbfb"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Oct 06 23:28:36 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Oct 06 23:28:36 2015 +0000"
      },
      "message": "Merge \"adb: keep file flags in fdevent_install.\""
    },
    {
      "commit": "5fc22317b7ad03a3b72e746e614f97921ccdfbfb",
      "tree": "229c68cd70a7ec87b681bdfb3faad85b3d163877",
      "parents": [
        "de01c94f969f6c59926bc7ace48c3ed0a707a670"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Oct 06 15:10:05 2015 -0700"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Oct 06 16:15:30 2015 -0700"
      },
      "message": "adb: keep file flags in fdevent_install.\n\nBug: 24615098\nChange-Id: Ia791ecbe612f09aca3bbd5787513f121fae54da5\n"
    },
    {
      "commit": "de01c94f969f6c59926bc7ace48c3ed0a707a670",
      "tree": "a9173671d1b8db9736d5cb25e24eceb70c0aec8b",
      "parents": [
        "5c3dcb5bb9fd2bfd02b3381ca6fb4686b67eb59a",
        "bfe3cf51857b47e59b246ce149cc1bb36fea9754"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Oct 05 19:48:00 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Oct 05 19:48:00 2015 +0000"
      },
      "message": "am bfe3cf51: Merge \"Speed up adb sync.\"\n\n* commit \u0027bfe3cf51857b47e59b246ce149cc1bb36fea9754\u0027:\n  Speed up adb sync.\n"
    },
    {
      "commit": "bfe3cf51857b47e59b246ce149cc1bb36fea9754",
      "tree": "877f37c60e7f2d34abbcd9a65b5a1349f79d142c",
      "parents": [
        "a352f91adec025922c117d7627035bd1a5cef49d",
        "dde00be9c404ba97034ae74cc8a244efa6add851"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Oct 05 19:42:03 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Oct 05 19:42:03 2015 +0000"
      },
      "message": "Merge \"Speed up adb sync.\""
    },
    {
      "commit": "5c3dcb5bb9fd2bfd02b3381ca6fb4686b67eb59a",
      "tree": "fb38d4dcb5d68b9e896cde82fc3607a2e622d62a",
      "parents": [
        "f1e2c6c4b9c4e6cd6bc464c350fdfceb7440cde8",
        "a352f91adec025922c117d7627035bd1a5cef49d"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sat Oct 03 03:09:08 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Sat Oct 03 03:09:08 2015 +0000"
      },
      "message": "am a352f91a: Merge \"adb: win32: specify socket protocol\"\n\n* commit \u0027a352f91adec025922c117d7627035bd1a5cef49d\u0027:\n  adb: win32: specify socket protocol\n"
    },
    {
      "commit": "f1e2c6c4b9c4e6cd6bc464c350fdfceb7440cde8",
      "tree": "408d2d74884be2abca8d041114e0eea8e943ad3a",
      "parents": [
        "d95c4c092b883a63e42f250a5fa9cb9cd0c299a3",
        "7a3c33f3f994968c44bb0721458366d3fb47ed3c"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sat Oct 03 03:09:07 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Sat Oct 03 03:09:07 2015 +0000"
      },
      "message": "am 7a3c33f3: Merge \"Explain adb client/server version mismatch better.\"\n\n* commit \u00277a3c33f3f994968c44bb0721458366d3fb47ed3c\u0027:\n  Explain adb client/server version mismatch better.\n"
    },
    {
      "commit": "a352f91adec025922c117d7627035bd1a5cef49d",
      "tree": "9a455a88b54084a35729ea4b0cae22983d5e7f56",
      "parents": [
        "7a3c33f3f994968c44bb0721458366d3fb47ed3c",
        "c7c45611f624c9c04a43ca74c5c17a3d4b2b123c"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sat Oct 03 03:06:24 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sat Oct 03 03:06:24 2015 +0000"
      },
      "message": "Merge \"adb: win32: specify socket protocol\""
    },
    {
      "commit": "7a3c33f3f994968c44bb0721458366d3fb47ed3c",
      "tree": "f06eecc94b1cb16277d3681400a425a712968ec0",
      "parents": [
        "6346e5a09b6ba76b57b65541953c9f484d8b033a",
        "a1452aba496cfa0e5a174ad2bdc2ff9e2e4254b1"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sat Oct 03 03:03:17 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sat Oct 03 03:03:17 2015 +0000"
      },
      "message": "Merge \"Explain adb client/server version mismatch better.\""
    },
    {
      "commit": "a1452aba496cfa0e5a174ad2bdc2ff9e2e4254b1",
      "tree": "f06eecc94b1cb16277d3681400a425a712968ec0",
      "parents": [
        "6346e5a09b6ba76b57b65541953c9f484d8b033a"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Oct 02 19:49:10 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Oct 02 19:49:10 2015 -0700"
      },
      "message": "Explain adb client/server version mismatch better.\n\n\"Out of date\" is only probably true. You might equally well have an older\nclient talking to a newer server. So tell the truth and include the actual\nversion numbers.\n\nChange-Id: I821de88f5baf65bf2623363129c60c496b407bff\n"
    },
    {
      "commit": "dde00be9c404ba97034ae74cc8a244efa6add851",
      "tree": "e1dfab936a6c607d7478b09e3b2a95ce5567b260",
      "parents": [
        "468978294e130807cc37ed295115863c2d7bacaa"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sun Sep 27 12:55:37 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Oct 02 14:48:58 2015 -0700"
      },
      "message": "Speed up adb sync.\n\nSending the SEND/DATA/DONE packets all in one write makes small file and\nsymbolic link transfer orders of magnitude faster. Transferring all the\nsymbolic links in /system/bin or all the cacerts in /system/etc goes down\nfrom about 6s in each case to less than 0.5s.\n\nChange-Id: Ia1706cef25535d0b685d3744241a0557a52b22ff\n"
    },
    {
      "commit": "d95c4c092b883a63e42f250a5fa9cb9cd0c299a3",
      "tree": "9f77332915666f66935904b755c7b92340ec56ea",
      "parents": [
        "ad6bbed6d858a58b0c17949b50581a23ce04ac88",
        "6346e5a09b6ba76b57b65541953c9f484d8b033a"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu Oct 01 18:57:59 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Oct 01 18:57:59 2015 +0000"
      },
      "message": "am 7377398b: Merge \"adb: fdevent fixes\"\n\n* commit \u00277377398be81a9a8a4256b4c11e7ed25b059c32bb\u0027:\n  adb: fdevent fixes\n"
    },
    {
      "commit": "6346e5a09b6ba76b57b65541953c9f484d8b033a",
      "tree": "a8051b72379b5334caa8b7c81cf52dc255d4dbfb",
      "parents": [
        "56033284f415e9f61cf74e22fabe357bfab717b6"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Tue Sep 29 18:33:38 2015 -0700"
      },
      "committer": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Wed Sep 30 23:29:25 2015 -0700"
      },
      "message": "adb: fdevent fixes\n\n* fdevent_{set,add,del}()\n\n  * CHECK() that the fdevent is FDE_ACTIVE, otherwise the caller would\n    be waiting for events that will never arrive.\n\n  * Remove ~ from \"fde-\u003eevents \u0026\u003d ~events\" to keep desired bits instead\n    of turning off desired bits.\n\n* fdevent_call_fdfunc()\n\n  * CHECK(FDE_PENDING) since it should always be true if the fdevent was\n    on the pending list, or if fdevent_subproc_event_func() is faking\n    things. The goal is to try to avoid losing events.\n\nChange-Id: I979c2fffa0b3d6b635488cde11dc544691193018\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "ad6bbed6d858a58b0c17949b50581a23ce04ac88",
      "tree": "c9d88e0dc8188ab6a1313bf7e0bbbfeacdd4e48e",
      "parents": [
        "a7c747c09ee91d1cfe4157867709f9d848c3c391",
        "56033284f415e9f61cf74e22fabe357bfab717b6"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu Oct 01 00:10:00 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Oct 01 00:10:00 2015 +0000"
      },
      "message": "am 56033284: Merge \"adb: detect sockets in CLOSE_WAIT state to prevent socket leak on linux.\"\n\n* commit \u002756033284f415e9f61cf74e22fabe357bfab717b6\u0027:\n  adb: detect sockets in CLOSE_WAIT state to prevent socket leak on linux.\n"
    },
    {
      "commit": "56033284f415e9f61cf74e22fabe357bfab717b6",
      "tree": "b129ecab47381bc0405ef7410038db7612084adf",
      "parents": [
        "22fc5e99f10567cfe2c64a4426dc2c06c968b615",
        "ec2e7d8ef5bf6ff66aa882ce586c62bec090cb07"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu Oct 01 00:03:50 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Oct 01 00:03:50 2015 +0000"
      },
      "message": "Merge \"adb: detect sockets in CLOSE_WAIT state to prevent socket leak on linux.\""
    },
    {
      "commit": "a7c747c09ee91d1cfe4157867709f9d848c3c391",
      "tree": "254db357b9190165e936ed77c09fa02b0579303a",
      "parents": [
        "60364bacf2f824c09d28a7cf3baaf2e68d6cb911",
        "22fc5e99f10567cfe2c64a4426dc2c06c968b615"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Wed Sep 30 23:44:31 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Sep 30 23:44:31 2015 +0000"
      },
      "message": "am fd18d9e2: Merge \"adb: put legacy shell: service back in.\"\n\n* commit \u0027fd18d9e254874557aa44d42bd6d6bdf4352b0e36\u0027:\n  adb: put legacy shell: service back in.\n"
    },
    {
      "commit": "22fc5e99f10567cfe2c64a4426dc2c06c968b615",
      "tree": "5671a74ce54040916cb3e51eaa9d0a717aa9b819",
      "parents": [
        "5f32b962de5830768db9fafeb561960bf60440b9"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Wed Sep 30 13:35:42 2015 -0700"
      },
      "committer": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Wed Sep 30 15:40:09 2015 -0700"
      },
      "message": "adb: put legacy shell: service back in.\n\nddmlib does not use the ADB client, but instead connects directly to\nthe adb server. This breaks some of the assumptions I previously made\nwhen enabling the shell protocol.\n\nTo fix this, the adb server now defaults to no protocol for the\nstandalone command, and the shell protocol must be explicitly requested\nby the client. For example:\n  shell:echo foo     -- no shell protocol\n  shell,v2:echo foo  -- shell protocol\n\nAs long as I was touching the shell service arguments I also changed\nthem to no longer duplicate the command-line arguments. This allows\nmore flexibility to change the adb client CLI if necessary and makes\nthe code more readable.\n\nBug: http://b/24148636\nChange-Id: I28d5ae578cf18cbe79347dc89cea1750ff4571a8\n"
    },
    {
      "commit": "ec2e7d8ef5bf6ff66aa882ce586c62bec090cb07",
      "tree": "492d6ba3cd380cb177b15dce89fca31f61cbc579",
      "parents": [
        "5f32b962de5830768db9fafeb561960bf60440b9"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Sep 29 12:25:33 2015 -0700"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Wed Sep 30 15:03:26 2015 -0700"
      },
      "message": "adb: detect sockets in CLOSE_WAIT state to prevent socket leak on linux.\n\nIt is possible that the adb server on host has many sockets in\nCLOSE_WAIT state. To prevent socket leak, always enable POLLRDHUP\nin fdevent.cpp to detect sockets in CLOSE_WAIT state.\n\nUpdate LocalSocketTest unit tests:\nChange half_close_with_packet to read_from_closing_socket, as reading\nfrom a SHUT_WR socket is not needed in adb.\nChange close_with_no_events_installed to close_socket_in_CLOSE_WAIT_state,\nas the latter is more close to the real situation in use.\n\nBug: 23314034\n\nChange-Id: Ice4f4036624e5584eab6ba5848e7f169c92f037f\n"
    },
    {
      "commit": "c7c45611f624c9c04a43ca74c5c17a3d4b2b123c",
      "tree": "b25c44e2467481efafeae1c0062723d1190fdc5f",
      "parents": [
        "5f32b962de5830768db9fafeb561960bf60440b9"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Tue Sep 29 15:05:29 2015 -0700"
      },
      "committer": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Tue Sep 29 15:05:29 2015 -0700"
      },
      "message": "adb: win32: specify socket protocol\n\nInstead of using socket(..., 0), pass IPPROTO_TCP or IPPROTO_UDP. Using\nzero wasn\u0027t buying us anything and was different than popular apps like\nChrome. We should stick to what everyone else does so that we don\u0027t go\ndown different code-paths and potentially hit Winsock service provider\nissues that everyone else is (accidentally) avoiding.\n\nAlso CHECK() if send() returns an erroneous value as described in the\nChromium source.\n\nAlso add comment about socket buffer sizing and Windows Vista.\n\nChange-Id: I63db8f6de352fe1e9525cbc9cfc040eb02a4b9cd\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "60364bacf2f824c09d28a7cf3baaf2e68d6cb911",
      "tree": "c3e3a411c4ccf609312c62d7e6f85f30cfb0b38e",
      "parents": [
        "656361950f93ecf53affc1b5a6929f9daab6cec8",
        "5f32b962de5830768db9fafeb561960bf60440b9"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Mon Sep 28 16:06:24 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Sep 28 16:06:24 2015 +0000"
      },
      "message": "am 5f32b962: Merge \"adb: bump server version to prevent feature mismatch.\"\n\n* commit \u00275f32b962de5830768db9fafeb561960bf60440b9\u0027:\n  adb: bump server version to prevent feature mismatch.\n"
    },
    {
      "commit": "656361950f93ecf53affc1b5a6929f9daab6cec8",
      "tree": "45db6e06eeb8f6fc2978dd78440b90e1a734a254",
      "parents": [
        "6b045f2bd5253ca2619b768036c2b7f3f50bff36",
        "3d9072bfe6e85b479575bd9600c6b5c04e5499c9"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Mon Sep 28 16:06:22 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Sep 28 16:06:22 2015 +0000"
      },
      "message": "am 002f9d5c: Merge \"adb: fix adbd feature parsing for no features.\"\n\n* commit \u0027002f9d5c70058e8db78a61d65384fd9510cf4ffd\u0027:\n  adb: fix adbd feature parsing for no features.\n"
    },
    {
      "commit": "5f32b962de5830768db9fafeb561960bf60440b9",
      "tree": "9bff40f1ec0b2d8c15cdf21e11abce633e502b62",
      "parents": [
        "3d9072bfe6e85b479575bd9600c6b5c04e5499c9",
        "6d5fad3fd225f1aecb407730c2d24eb339c0d6e6"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Mon Sep 28 16:03:21 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Sep 28 16:03:21 2015 +0000"
      },
      "message": "Merge \"adb: bump server version to prevent feature mismatch.\""
    },
    {
      "commit": "3d9072bfe6e85b479575bd9600c6b5c04e5499c9",
      "tree": "a6083574db28238bf6bd6502308ac1e5dc570eee",
      "parents": [
        "19bec5b329fe202795688bfb76d77f4560adf2c6"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Fri Sep 25 13:04:21 2015 -0700"
      },
      "committer": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Fri Sep 25 13:10:17 2015 -0700"
      },
      "message": "adb: fix adbd feature parsing for no features.\n\nPreviously the transport features list was only overwritten if a\nnew feature list was found. However, adbd can reuse the same atransport\nobject even if the adb server is killed and restarted, so the feature\nlist was not cleared properly if the newly started adb server didn\u0027t\nprovide one.\n\nThis CL fixes the bug by clearing the transport features list whenever\na connection banner is parsed.\n\nBug: http://b/24405971\nChange-Id: Ia6ee6c9a46a621534681f6d4d7df77156b885eb9\n"
    },
    {
      "commit": "6d5fad3fd225f1aecb407730c2d24eb339c0d6e6",
      "tree": "7d0cd186ed324a40c4f441b8139d4aefa3101436",
      "parents": [
        "19bec5b329fe202795688bfb76d77f4560adf2c6"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Fri Sep 25 08:37:13 2015 -0700"
      },
      "committer": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Fri Sep 25 09:59:31 2015 -0700"
      },
      "message": "adb: bump server version to prevent feature mismatch.\n\nDevices get a list of supported features from the adb server, not the\nclient, so a mismatch between client and server features can cause the\ndevice to use an incorrect feature set.\n\nBumping the server version is the easiest way to make sure the client\nand server features match and seems like the best solution at the\nmoment.\n\nA more automated fix could be to compare client/server features on each\nconnection and restart if they don\u0027t match. This requires an extra\nclient \u003c-\u003e server round-trip per command, but removes the need to\nmanually bump the server version number on feature change. Unless the\nfeature set changes often it didn\u0027t seem worth the extra overhead.\n\nBug: http://b/24370690\nChange-Id: I4e43825d1c15c61e5d924fc8d4110b467debde37\n"
    },
    {
      "commit": "6b045f2bd5253ca2619b768036c2b7f3f50bff36",
      "tree": "fc261800edf1fb7adb9623a6a7d361731099e32f",
      "parents": [
        "ba376f582e777c7c6b256d1c175687e364047bac",
        "19bec5b329fe202795688bfb76d77f4560adf2c6"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Wed Sep 23 23:00:18 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Sep 23 23:00:18 2015 +0000"
      },
      "message": "am e4975da3: Merge \"Adb: use VLOG() to replace D() for verbose logging.\"\n\n* commit \u0027e4975da33326295885f4c606288516d73459c68e\u0027:\n  Adb: use VLOG() to replace D() for verbose logging.\n"
    },
    {
      "commit": "19bec5b329fe202795688bfb76d77f4560adf2c6",
      "tree": "e046660c0f6fcf1038982323810cb15e0326d591",
      "parents": [
        "468978294e130807cc37ed295115863c2d7bacaa"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Sep 22 15:52:57 2015 -0700"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Wed Sep 23 12:53:38 2015 -0700"
      },
      "message": "Adb: use VLOG() to replace D() for verbose logging.\n\nAs there are too many D(), we can keep both VLOG() and D() now, and get\nrid of D() gradually.\n\nChange-Id: I2f1cb70bcab3e82c99fed939341d03f6b2216076\n"
    },
    {
      "commit": "ba376f582e777c7c6b256d1c175687e364047bac",
      "tree": "4aae7281a00627a38576b4a6175d1629ecf7fb76",
      "parents": [
        "1c7be9c5753c0dce5d9f82ce1fae5b97a2c2d9a2",
        "468978294e130807cc37ed295115863c2d7bacaa"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Tue Sep 22 20:31:25 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Sep 22 20:31:25 2015 +0000"
      },
      "message": "am 46897829: Merge \"adb: add -Tt options to `adb shell`.\"\n\n* commit \u0027468978294e130807cc37ed295115863c2d7bacaa\u0027:\n  adb: add -Tt options to `adb shell`.\n"
    },
    {
      "commit": "468978294e130807cc37ed295115863c2d7bacaa",
      "tree": "a54f3408c9166dbe9b73b51e16f7b021405bc717",
      "parents": [
        "b3db0b3fcde060299eb88b6a911f19b3922a0851",
        "a07dbad65fd9f2644876b6a0448bad66a5a29387"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Tue Sep 22 20:23:57 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Sep 22 20:23:57 2015 +0000"
      },
      "message": "Merge \"adb: add -Tt options to `adb shell`.\""
    },
    {
      "commit": "a07dbad65fd9f2644876b6a0448bad66a5a29387",
      "tree": "a54f3408c9166dbe9b73b51e16f7b021405bc717",
      "parents": [
        "b3db0b3fcde060299eb88b6a911f19b3922a0851"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Tue Sep 22 10:43:08 2015 -0700"
      },
      "committer": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Tue Sep 22 12:50:11 2015 -0700"
      },
      "message": "adb: add -Tt options to `adb shell`.\n\nAdds -T (no PTY) and -t (force PTY) options to `adb shell` to mimic\nssh options. Small cleanup to send an entire FeatureSet to the adb\nclient at once to avoid multiple round-trips when querying multiple\nfeatures.\n\nKnown issue: humans using `adb shell -T` to start a non-PTY interactive\nsession may experience problems since neither side will have PTY\nfeatures like echoing or newline translation. This is probably OK for\nnow as the -Tt options are primarily useful for scripting.\n\nBug: http://b/23825231\nChange-Id: I4d0df300db0abd1f7410bab59dd4d5b991babda7\n"
    },
    {
      "commit": "1c7be9c5753c0dce5d9f82ce1fae5b97a2c2d9a2",
      "tree": "86d559d72f62c0b39720aa8f60e7f733139e39cb",
      "parents": [
        "6c5294031a4aa4d87127a7fd81bd167f6e1046d0",
        "b3db0b3fcde060299eb88b6a911f19b3922a0851"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Mon Sep 21 20:04:54 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Sep 21 20:04:54 2015 +0000"
      },
      "message": "am b3db0b3f: Merge \"base logging: fix errno restoring, severity conditionality, dangling ifs\"\n\n* commit \u0027b3db0b3fcde060299eb88b6a911f19b3922a0851\u0027:\n  base logging: fix errno restoring, severity conditionality, dangling ifs\n"
    },
    {
      "commit": "b3db0b3fcde060299eb88b6a911f19b3922a0851",
      "tree": "8f986140a2c73983aaeff4dfef54f529e9095951",
      "parents": [
        "a63cbef743d358d09dd474472952258a0a0205a0",
        "7e90c0d962c9a7bbad6b6948766281cba53b9d65"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Mon Sep 21 19:56:52 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Sep 21 19:56:52 2015 +0000"
      },
      "message": "Merge \"base logging: fix errno restoring, severity conditionality, dangling ifs\""
    },
    {
      "commit": "7e90c0d962c9a7bbad6b6948766281cba53b9d65",
      "tree": "510512bac280b454a6f12f2a09dea2af204d3c14",
      "parents": [
        "9a99924c97d6ca9f8ec74bc094340b7bb9c7466b"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Thu Sep 17 19:36:10 2015 -0700"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Mon Sep 21 12:46:12 2015 -0700"
      },
      "message": "base logging: fix errno restoring, severity conditionality, dangling ifs\n\nFix LOG() to properly save and restore errno. Test this properly.\n\nOnly do logging if severity is \u003e\u003d the minimum.\n\nFix dangling if statements in CHECK(), CHECK_STR{EQ,NE}(). Test this\nproperly.\n\nFix base logging tests on Windows. All libbase_tests now pass on\nWindows.\n\nChange place to lock, so the lock can protect logging of all data in\nLogMessage.\n\nChange-Id: I7ff531c67ae10a99ef0a2bbfe279aa77282d5ae9\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "6c5294031a4aa4d87127a7fd81bd167f6e1046d0",
      "tree": "335167a46e03409161f9d5bc12ff8ba00b57dca2",
      "parents": [
        "3589de4860121852d89bf467e2a768f321f3f031",
        "a63cbef743d358d09dd474472952258a0a0205a0"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Mon Sep 21 17:34:29 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Sep 21 17:34:29 2015 +0000"
      },
      "message": "am 71f878f8: Merge \"Move python-adb to development/python-packages.\"\n\n* commit \u002771f878f89b6bc6df960e857836467a059802c61e\u0027:\n  Move python-adb to development/python-packages.\n"
    },
    {
      "commit": "a63cbef743d358d09dd474472952258a0a0205a0",
      "tree": "b2a436b09f4bcf5fe97c0f9b3345f216b7172c63",
      "parents": [
        "9a99924c97d6ca9f8ec74bc094340b7bb9c7466b"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Fri Sep 18 12:37:07 2015 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Fri Sep 18 13:39:13 2015 -0700"
      },
      "message": "Move python-adb to development/python-packages.\n\nWe want to be able to use this in the NDK without having to pull in\nall of system core.\n\nAlso, this clarifies the separation of adb and its python interface.\n\nBug: http://b/22881740\nChange-Id: I0b437d9bf621e371d4698d7f8e8828072c7ff347\n"
    },
    {
      "commit": "3589de4860121852d89bf467e2a768f321f3f031",
      "tree": "d52e070ea6485e2108394cb7a5c1788630fa7837",
      "parents": [
        "a016819f21e0bf7cf436e1458e47801719256759",
        "9a99924c97d6ca9f8ec74bc094340b7bb9c7466b"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Sep 17 22:08:42 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Sep 17 22:08:42 2015 +0000"
      },
      "message": "am a951a82d: Merge \"adb unittest for win32 handle inheritance\"\n\n* commit \u0027a951a82dcc9cbefb4162a048d5d668dcb855cbf5\u0027:\n  adb unittest for win32 handle inheritance\n"
    },
    {
      "commit": "9a99924c97d6ca9f8ec74bc094340b7bb9c7466b",
      "tree": "5151e5556f77a9febc55073d089a2147d4dde5e5",
      "parents": [
        "af0e48ba4e2967fdd08860823ff9432bb3d201d8"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Wed Sep 16 20:45:53 2015 -0700"
      },
      "committer": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Wed Sep 16 20:50:53 2015 -0700"
      },
      "message": "adb unittest for win32 handle inheritance\n\nadb.cpp: launch_server() has a long comment about how\nstdin/stdout/stderr handles have to be made non-inheritable to prevent\nhangs in callers to adb.exe.\n\nIt would be disastrous to do this wrong, and I\u0027ve modified this code, so\nhere\u0027s a unittest to verify that I\u0027m doing it right.\n\nThe test also runs fine on unix.\n\nChange-Id: I3672c3066bc7498635c19212f9e5c50757942439\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "a016819f21e0bf7cf436e1458e47801719256759",
      "tree": "f811d75917ae90c6d4b5cd03d4f736eae47b499f",
      "parents": [
        "e5d75da9bd3b30ab4600f7a9c3924713b5750207",
        "af0e48ba4e2967fdd08860823ff9432bb3d201d8"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Sep 17 03:10:54 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Sep 17 03:10:54 2015 +0000"
      },
      "message": "am af0e48ba: Merge \"adb unittest: make test_sync properly cleanup after itself\"\n\n* commit \u0027af0e48ba4e2967fdd08860823ff9432bb3d201d8\u0027:\n  adb unittest: make test_sync properly cleanup after itself\n"
    },
    {
      "commit": "af0e48ba4e2967fdd08860823ff9432bb3d201d8",
      "tree": "86bfb4ee088d1841adf93681f8f00eb795b5a692",
      "parents": [
        "18d2a864a30caf9393968105522aebf4affd50bb",
        "2c426c920030590892e4ed7a853226b972f4ccea"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Sep 17 03:03:31 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Sep 17 03:03:31 2015 +0000"
      },
      "message": "Merge \"adb unittest: make test_sync properly cleanup after itself\""
    },
    {
      "commit": "e5d75da9bd3b30ab4600f7a9c3924713b5750207",
      "tree": "7e402a446ba078955471e3c1885953cb76cbc1cd",
      "parents": [
        "7c784be1879517cb051f75680f893aac81fc4d23",
        "18d2a864a30caf9393968105522aebf4affd50bb"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu Sep 17 02:38:45 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Sep 17 02:38:45 2015 +0000"
      },
      "message": "am 18d2a864: Merge \"Add unit tests for local socket.\"\n\n* commit \u002718d2a864a30caf9393968105522aebf4affd50bb\u0027:\n  Add unit tests for local socket.\n"
    },
    {
      "commit": "18d2a864a30caf9393968105522aebf4affd50bb",
      "tree": "6ff407840b92e3ed068611779c21b21c83a1d77d",
      "parents": [
        "b77fc72a5fd45b78c161d324b05895207bfee83c",
        "2ce9d5611924f64fa7dadace825d2805373aba64"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu Sep 17 02:32:12 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Sep 17 02:32:12 2015 +0000"
      },
      "message": "Merge \"Add unit tests for local socket.\""
    },
    {
      "commit": "7c784be1879517cb051f75680f893aac81fc4d23",
      "tree": "9bf69150a98176b0a619a2bfe67880aa2014090d",
      "parents": [
        "58f0e82fb07e70045188e76eb57a07bde2deb793",
        "b77fc72a5fd45b78c161d324b05895207bfee83c"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Sep 17 00:08:43 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Sep 17 00:08:43 2015 +0000"
      },
      "message": "am d17cf08e: Merge \"adb: win32: fix regression on older versions of Windows\"\n\n* commit \u0027d17cf08eca500a96f4808744b8a0a34664291de8\u0027:\n  adb: win32: fix regression on older versions of Windows\n"
    },
    {
      "commit": "b77fc72a5fd45b78c161d324b05895207bfee83c",
      "tree": "b6feba1ffae67695187f0533388c187ee6fdf78a",
      "parents": [
        "4d4961f418cec8639a90ed23ada89f84eff5c6ec"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Wed Sep 16 16:40:06 2015 -0700"
      },
      "committer": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Wed Sep 16 16:40:06 2015 -0700"
      },
      "message": "adb: win32: fix regression on older versions of Windows\n\nOn Windows 7, GetStdHandle() may return console pseudo-handles. If you\ncall SetHandleInformation(h, HANDLE_FLAG_INHERIT, 0) on such a handle,\nit will fail. These failures should be ignored like the old code.\n\nNewer versions of Windows return real handles that don\u0027t have this\nissue. Console pseudo-handles can apparently be identified by the values\n3, 7, 11.\n\nThis is a regression from 2bbb3a9fa2fa2b331e04b2c296ed9a10c0b55669.\n\nhttps://code.google.com/p/android/issues/detail?id\u003d186599\n\nChange-Id: I287a74a81d37e0ebe62d673a3f5651ee5439c0d2\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "2ce9d5611924f64fa7dadace825d2805373aba64",
      "tree": "78c34b929c2959c5471dc504423ca244d1b764c5",
      "parents": [
        "4d4961f418cec8639a90ed23ada89f84eff5c6ec"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Sep 15 16:27:09 2015 -0700"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Wed Sep 16 15:00:59 2015 -0700"
      },
      "message": "Add unit tests for local socket.\n\nAdd has_write_error flag in asocket, so it will not wait on local_socket_closing_list\nto write pending packets in local_socket_close(). Although it doesn\u0027t fix any problem,\nit helps to make the code more stable.\nAdd a missing put_apacket() in error handling.\nAdd a check when adding local socket in local_socket_closing_list.\n\nBug: 23314034\n\nChange-Id: I75b07ba8ee59b7f277fba2fb919db63065b291be\n"
    },
    {
      "commit": "58f0e82fb07e70045188e76eb57a07bde2deb793",
      "tree": "65f9e410bbc4a5ecd343162d29dbfc95de85bcbf",
      "parents": [
        "0f6201c9403f0c7530edbb8ff77f26c6d99b5366",
        "4d4961f418cec8639a90ed23ada89f84eff5c6ec"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Sep 15 20:05:02 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Sep 15 20:05:02 2015 +0000"
      },
      "message": "am 4d4961f4: Merge \"adb: move adb to poll.\"\n\n* commit \u00274d4961f418cec8639a90ed23ada89f84eff5c6ec\u0027:\n  adb: move adb to poll.\n"
    },
    {
      "commit": "0f6201c9403f0c7530edbb8ff77f26c6d99b5366",
      "tree": "298e9159b34be035fa16c091854c42b3d0d20079",
      "parents": [
        "b4ad8c85d792dad53d56cd0673a56c91fc070640",
        "73427a425448581e3699d9e8d05ebbd1c91fd900"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Tue Sep 15 20:04:58 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Sep 15 20:04:58 2015 +0000"
      },
      "message": "am 73427a42: Merge \"adb: Kill subprocess when the client exits.\"\n\n* commit \u002773427a425448581e3699d9e8d05ebbd1c91fd900\u0027:\n  adb: Kill subprocess when the client exits.\n"
    },
    {
      "commit": "4d4961f418cec8639a90ed23ada89f84eff5c6ec",
      "tree": "3980890a4fce8f4f6016ed0896c849ce055a219a",
      "parents": [
        "73427a425448581e3699d9e8d05ebbd1c91fd900",
        "56112549d23be0b6857be9fcc6c50c616f783152"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Sep 15 18:40:51 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Sep 15 18:40:51 2015 +0000"
      },
      "message": "Merge \"adb: move adb to poll.\""
    },
    {
      "commit": "73427a425448581e3699d9e8d05ebbd1c91fd900",
      "tree": "7acdd937fa8676439f49fe04b12d47132f3cf8a4",
      "parents": [
        "e570b98a90a5bf0814415db15f03e4927194a0e7",
        "2b8d4a4affa22a18882e209b5c683ba83d89ef1c"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Tue Sep 15 18:27:33 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Sep 15 18:27:33 2015 +0000"
      },
      "message": "Merge \"adb: Kill subprocess when the client exits.\""
    },
    {
      "commit": "2b8d4a4affa22a18882e209b5c683ba83d89ef1c",
      "tree": "7acdd937fa8676439f49fe04b12d47132f3cf8a4",
      "parents": [
        "e570b98a90a5bf0814415db15f03e4927194a0e7"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Mon Sep 14 15:36:26 2015 -0700"
      },
      "committer": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Tue Sep 15 10:16:24 2015 -0700"
      },
      "message": "adb: Kill subprocess when the client exits.\n\nWhen the client exits (e.g. with Ctrl+C) the subprocess should be\nnotified as well so it can cleanup if needed.\n\nBug: http://b/23825725\nChange-Id: Idb771710b293e0a9f7bebc9e2814b3a816e2c50e\n"
    },
    {
      "commit": "56112549d23be0b6857be9fcc6c50c616f783152",
      "tree": "7ec2a8d4a09a25b9bf241604cee1b1f14a01d578",
      "parents": [
        "8e31ae230b52ec37b6998b93988d3d2595ae50b4"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Fri Sep 04 16:19:56 2015 -0700"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Sep 15 10:12:31 2015 -0700"
      },
      "message": "adb: move adb to poll.\n\nIt is reported that the registered fd can be bigger than FD_SETSIZE, and can\u0027t be\nhandled by select(). By moving to poll(), we can remove the limitation.\nAlthough we can\u0027t ignore the possibility that there is a fd leak, but we can\nstill make the potential bug more explicit by moving to poll().\nWe didn\u0027t move to epoll() because it is not supported on mac.\n\nBug: 23820751\n\nChange-Id: Icb39329c4984f1fef749472c9e088682ee8c3444\n"
    },
    {
      "commit": "b4ad8c85d792dad53d56cd0673a56c91fc070640",
      "tree": "cec4be5cb8a30009f470db92bea9a9d1f8772c8c",
      "parents": [
        "88f8be4a47352e106b3fe3e26a306a1f6401d753",
        "e570b98a90a5bf0814415db15f03e4927194a0e7"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Tue Sep 15 15:12:33 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Sep 15 15:12:33 2015 +0000"
      },
      "message": "am 0af19a0e: Merge \"adb: Fix missing shell protocol usage.\"\n\n* commit \u00270af19a0e82d7808678f3b92a8c5b4b8cb80ee216\u0027:\n  adb: Fix missing shell protocol usage.\n"
    },
    {
      "commit": "2c426c920030590892e4ed7a853226b972f4ccea",
      "tree": "148bf5ba1a766d09e04a49c7aef675d60a1d80be",
      "parents": [
        "8e31ae230b52ec37b6998b93988d3d2595ae50b4"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Mon Sep 14 18:50:13 2015 -0700"
      },
      "committer": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Mon Sep 14 18:53:25 2015 -0700"
      },
      "message": "adb unittest: make test_sync properly cleanup after itself\n\nIt wasn\u0027t deleting the tempfile.mkdtemp() dir that it made.\n\nChange-Id: I59c5f98aa8297c7b28d38799dd21ffe9566f2145\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "e570b98a90a5bf0814415db15f03e4927194a0e7",
      "tree": "056e6f1a4b200cf160d896bdc5dcb767169b00cd",
      "parents": [
        "8e31ae230b52ec37b6998b93988d3d2595ae50b4"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Mon Sep 14 15:33:50 2015 -0700"
      },
      "committer": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Mon Sep 14 15:33:50 2015 -0700"
      },
      "message": "adb: Fix missing shell protocol usage.\n\nSome adb commands use the shell service but weren\u0027t using the\nshell protocol, causing a protocol mismatch between the client and\nthe device. This CL uses the shell protocol whenever possible.\n\nChange-Id: I4c9c75b7fd1d5bf3dc1f73900711840270527682\n"
    },
    {
      "commit": "88f8be4a47352e106b3fe3e26a306a1f6401d753",
      "tree": "8ed4ffb8e62c59f833e78250c3dcce6772eb9ff2",
      "parents": [
        "1badad8018ffcabfa2e7f68038c0e64fcde587b5",
        "8e31ae230b52ec37b6998b93988d3d2595ae50b4"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Mon Sep 14 18:45:34 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Sep 14 18:45:34 2015 +0000"
      },
      "message": "am 8e31ae23: Merge changes from topic \\\u0027adb_shell\\\u0027\n\n* commit \u00278e31ae230b52ec37b6998b93988d3d2595ae50b4\u0027:\n  adb: add client side shell protocol and enable.\n  adb: implement shell protocol.\n"
    },
    {
      "commit": "8e31ae230b52ec37b6998b93988d3d2595ae50b4",
      "tree": "9311f0216fd5cffad090512629592c1213816746",
      "parents": [
        "6a9b166f303ffff0f03e335fe74c9dd8c375bc01",
        "8a5a5aa9ebd5c5e840b33102777028ef0f5b7ebe"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Mon Sep 14 18:39:37 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Sep 14 18:39:37 2015 +0000"
      },
      "message": "Merge changes from topic \u0027adb_shell\u0027\n\n* changes:\n  adb: add client side shell protocol and enable.\n  adb: implement shell protocol.\n"
    },
    {
      "commit": "1badad8018ffcabfa2e7f68038c0e64fcde587b5",
      "tree": "24a5b3154e41c2fc3cfd81ef70d0b68ce4951638",
      "parents": [
        "14a167e1dd1328270e8d3bf3c1922e9ad0105c5f",
        "6a9b166f303ffff0f03e335fe74c9dd8c375bc01"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Sat Sep 12 01:37:50 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Sat Sep 12 01:37:50 2015 +0000"
      },
      "message": "am 6a9b166f: Merge \"adb: fix shell_service_protocol_test for Windows.\"\n\n* commit \u00276a9b166f303ffff0f03e335fe74c9dd8c375bc01\u0027:\n  adb: fix shell_service_protocol_test for Windows.\n"
    },
    {
      "commit": "6a9b166f303ffff0f03e335fe74c9dd8c375bc01",
      "tree": "a0100f88a1b5aaa6cb15678906d97149046a7f0e",
      "parents": [
        "5c235102e68dcc7daca16a873e50e0d1261f50ed",
        "7616ae1c1462fd4d442e845bed856b1bfcd4135f"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Sat Sep 12 01:30:20 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sat Sep 12 01:30:20 2015 +0000"
      },
      "message": "Merge \"adb: fix shell_service_protocol_test for Windows.\""
    },
    {
      "commit": "7616ae1c1462fd4d442e845bed856b1bfcd4135f",
      "tree": "a0100f88a1b5aaa6cb15678906d97149046a7f0e",
      "parents": [
        "5c235102e68dcc7daca16a873e50e0d1261f50ed"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Fri Sep 11 16:06:59 2015 -0700"
      },
      "committer": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Fri Sep 11 18:28:27 2015 -0700"
      },
      "message": "adb: fix shell_service_protocol_test for Windows.\n\nAdds missing #ifdef guards to shell_service_protocol_test.cpp so the\ntest compiles on Windows.\n\nAlso fixes a bug in Windows socketpair write implementation. Previously\nit was only checking for a closed pipe if the write happened to block.\nThis adds an additional pre-check to exit immediately on a closed pipe.\n\nThese two changes allow the test to compile and pass on Windows.\n\nChange-Id: Ib8853ed72f015fc0d623da47c32982cb3ffa4a3d\n"
    },
    {
      "commit": "14a167e1dd1328270e8d3bf3c1922e9ad0105c5f",
      "tree": "a5a03834df9f53cdaa2a3cfc13f2858ce27c9e0c",
      "parents": [
        "cee4c3aa46d3be39dfc23e9af45ed64ce158b109",
        "5c235102e68dcc7daca16a873e50e0d1261f50ed"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Sep 11 23:23:52 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Sep 11 23:23:52 2015 +0000"
      },
      "message": "am 5c235102: Merge \"Fix (Windows) build.\"\n\n* commit \u00275c235102e68dcc7daca16a873e50e0d1261f50ed\u0027:\n  Fix (Windows) build.\n"
    },
    {
      "commit": "cee4c3aa46d3be39dfc23e9af45ed64ce158b109",
      "tree": "2a3be38b62d6d885f8ed3d1a3bf3f763c0b8e808",
      "parents": [
        "8c5fb220b9d4dc45ee277844c9a478dbb206c366",
        "f56cdacae8d5dab1b74f79bf7b7342a4e831f3cb"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Sep 11 23:23:50 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Sep 11 23:23:50 2015 +0000"
      },
      "message": "am f56cdaca: Merge \"fix adb_test Windows build\"\n\n* commit \u0027f56cdacae8d5dab1b74f79bf7b7342a4e831f3cb\u0027:\n  fix adb_test Windows build\n"
    },
    {
      "commit": "5c235102e68dcc7daca16a873e50e0d1261f50ed",
      "tree": "2154a8f2197b4b680c6ef933c650a9e20a2bf7ee",
      "parents": [
        "f56cdacae8d5dab1b74f79bf7b7342a4e831f3cb",
        "1b34cd258492dde81b1f8506df85bbcd8f980757"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Sep 11 23:18:48 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Sep 11 23:18:48 2015 +0000"
      },
      "message": "Merge \"Fix (Windows) build.\""
    },
    {
      "commit": "1b34cd258492dde81b1f8506df85bbcd8f980757",
      "tree": "2154a8f2197b4b680c6ef933c650a9e20a2bf7ee",
      "parents": [
        "f56cdacae8d5dab1b74f79bf7b7342a4e831f3cb"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Sep 11 16:16:53 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Sep 11 16:18:24 2015 -0700"
      },
      "message": "Fix (Windows) build.\n\nChange-Id: Ib9afd101d255d748ba6c15ed8075f3d10338c95c\n"
    },
    {
      "commit": "f56cdacae8d5dab1b74f79bf7b7342a4e831f3cb",
      "tree": "aa1c7327abf786302659e9ea76c2db58a475a5b3",
      "parents": [
        "50740f56162807f9e88d36249e7d466d8ce5a282",
        "639cea4ae15afaaee1be9d484fa13aae08cd3a53"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Sep 11 23:13:40 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Sep 11 23:13:40 2015 +0000"
      },
      "message": "Merge \"fix adb_test Windows build\""
    },
    {
      "commit": "8c5fb220b9d4dc45ee277844c9a478dbb206c366",
      "tree": "4a5b5c2beba59f2276d7384dd1aacb8987226c33",
      "parents": [
        "ba8e748e37773be32eec2d9b6a2e5e6a61fcc453",
        "50740f56162807f9e88d36249e7d466d8ce5a282"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Sep 11 23:05:02 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Sep 11 23:05:02 2015 +0000"
      },
      "message": "am ee46239c: Merge \"adb: win32: make adb_getenv() case-insensitive\"\n\n* commit \u0027ee46239c358fac90813128fccbcb49292f8b04f3\u0027:\n  adb: win32: make adb_getenv() case-insensitive\n"
    },
    {
      "commit": "50740f56162807f9e88d36249e7d466d8ce5a282",
      "tree": "6cb4130833d3bb7c40f5bfa38f2c707c66b7dc1a",
      "parents": [
        "f31b3b23eaa262e478f28868ce8fb1bb014f41df"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Tue Sep 08 17:13:04 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Sep 11 15:53:08 2015 -0700"
      },
      "message": "adb: win32: make adb_getenv() case-insensitive\n\nadb_getenv() should be case-insensitive just like the real getenv() on\nWindows.\n\nAdded a unittest for adb_getenv(). In the process, made adb_test link\nwith -municode so that the environment block is Unicode.\n\nMove wmain() from main.cpp to sysdeps_win32.cpp so that adb_test could\nalso use it.\n\nBecause wmain() moved, it wasn\u0027t as easy to do the runtime check to\nverify that -municode was used, so do that check in _ensure_env_setup()\nsince adb_getenv() is called early in adb anyway.\n\nAdded a utility ToLower() which is good enough for env vars whose keys\nare probably always ASCII to begin with.\n\nChange-Id: I082f7fdee9dfe2c7f76b878528d2f7863df6d8d1\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "639cea4ae15afaaee1be9d484fa13aae08cd3a53",
      "tree": "33d543b9eb9d7c3bf28eacae7b86a9faf72f297c",
      "parents": [
        "f31b3b23eaa262e478f28868ce8fb1bb014f41df"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Mon Sep 07 23:39:02 2015 -0700"
      },
      "committer": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Fri Sep 11 15:47:20 2015 -0700"
      },
      "message": "fix adb_test Windows build\n\nadb/Android.mk: adb_test should build on Windows (and Darwin), so add to\nthe whitelist.\n\nChange-Id: I778f6a7dff4caec92c48e0957591abf32f86ab1b\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "ba8e748e37773be32eec2d9b6a2e5e6a61fcc453",
      "tree": "b490d3600c76b2e1bd0c7193b10737be5297b371",
      "parents": [
        "26edc8e97843273ed2fd1ab0b2728a91379b4733",
        "f31b3b23eaa262e478f28868ce8fb1bb014f41df"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Fri Sep 11 22:14:17 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Sep 11 22:14:17 2015 +0000"
      },
      "message": "am f31b3b23: Merge \"adb: create shell protocol class (take 2).\"\n\n* commit \u0027f31b3b23eaa262e478f28868ce8fb1bb014f41df\u0027:\n  adb: create shell protocol class (take 2).\n"
    },
    {
      "commit": "8a5a5aa9ebd5c5e840b33102777028ef0f5b7ebe",
      "tree": "d2b11a16a2003a5bdeec5bc1f2e8d6fd6e629c3e",
      "parents": [
        "8da19a4b7952376f81b74177f80411210c49a9c6"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Tue Sep 08 17:17:02 2015 -0700"
      },
      "committer": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Fri Sep 11 13:02:17 2015 -0700"
      },
      "message": "adb: add client side shell protocol and enable.\n\nAdds the shell protocol functionality to the client side and enables it\nif the transport supports the feature.\n\nBug:http://b/23031026\nChange-Id: I9abe1c8b1d39f8dd09666321b1c761ad708a8854\n"
    },
    {
      "commit": "8da19a4b7952376f81b74177f80411210c49a9c6",
      "tree": "0db5b47f7c09702433226e54a7fd140df99819b6",
      "parents": [
        "f31b3b23eaa262e478f28868ce8fb1bb014f41df"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Mon Aug 31 10:42:13 2015 -0700"
      },
      "committer": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Fri Sep 11 11:27:50 2015 -0700"
      },
      "message": "adb: implement shell protocol.\n\nAdds functionality for handling stdin/stdout/stderr streams and exit\ncodes using the shell protocol.\n\nThis CL just contains implementation for adbd which will not yet be\nenabled. Once we have the ability to query transport features from the\nadb client, another CL will add the implementation for the client side\nand update the feature list to turn this on.\n\nNote: this CL must be submitted together with a minadbd CL to update\nthe service_to_fd() function signature.\n\nBug: http://b/23030641\n\nChange-Id: Ibed55e9c1946d8a35190696163ff63e8fb880238\n"
    },
    {
      "commit": "f31b3b23eaa262e478f28868ce8fb1bb014f41df",
      "tree": "d4a4c266c1aead7994551d3764ec977ee76e9af5",
      "parents": [
        "b3d84bdbb27112fed750b7ee6d3741ed4a0cd426",
        "d0df2dd4ff3457e4ab75c672056840d0d3dd02e0"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Fri Sep 11 18:17:55 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Sep 11 18:17:55 2015 +0000"
      },
      "message": "Merge \"adb: create shell protocol class (take 2).\""
    },
    {
      "commit": "26edc8e97843273ed2fd1ab0b2728a91379b4733",
      "tree": "c07c74ec9a7ae6195665c90d215900f8419ee1c1",
      "parents": [
        "bc61d1fe839f14fe06c369c2d18a139baa18d3b1",
        "b3d84bdbb27112fed750b7ee6d3741ed4a0cd426"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed Sep 09 18:19:15 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Sep 09 18:19:15 2015 +0000"
      },
      "message": "am b3d84bdb: Merge \"Remove HOST_OS\u003d\u003dwindows check\"\n\n* commit \u0027b3d84bdbb27112fed750b7ee6d3741ed4a0cd426\u0027:\n  Remove HOST_OS\u003d\u003dwindows check\n"
    },
    {
      "commit": "b3d84bdbb27112fed750b7ee6d3741ed4a0cd426",
      "tree": "0300704d8f225197a70d6ce1279294a85510a8ac",
      "parents": [
        "29932368592ca6f5dc4a478437f121876bf23fd5",
        "74e85684b5f0312f9233a12aaed430a0b2851080"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed Sep 09 18:13:22 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Sep 09 18:13:22 2015 +0000"
      },
      "message": "Merge \"Remove HOST_OS\u003d\u003dwindows check\""
    },
    {
      "commit": "bc61d1fe839f14fe06c369c2d18a139baa18d3b1",
      "tree": "04c84498e5155c2fc2104bf0effa4eb4d69f9462",
      "parents": [
        "78333a5bc90930aa4f649f3679c60a39597f20e0",
        "29932368592ca6f5dc4a478437f121876bf23fd5"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Wed Sep 09 17:57:36 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Sep 09 17:57:36 2015 +0000"
      },
      "message": "am 29932368: Merge \"adb: remove unnecessary dependencies of liblog.\"\n\n* commit \u002729932368592ca6f5dc4a478437f121876bf23fd5\u0027:\n  adb: remove unnecessary dependencies of liblog.\n"
    },
    {
      "commit": "78333a5bc90930aa4f649f3679c60a39597f20e0",
      "tree": "0ea44b8ec0aa5feaa3648a17b419345bf6e39e5b",
      "parents": [
        "97d3b0f7490ed72788ec2af33db81c5c08e340e9",
        "e98825e827267a4afa40f13c32d5aa24f3c100d5"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Wed Sep 09 17:57:34 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Sep 09 17:57:34 2015 +0000"
      },
      "message": "am 0df24ea2: Merge \"adb: refactor _is_valid_ack_reply_fd\"\n\n* commit \u00270df24ea234fcfb9ac57ed94701868426a41d8642\u0027:\n  adb: refactor _is_valid_ack_reply_fd\n"
    },
    {
      "commit": "29932368592ca6f5dc4a478437f121876bf23fd5",
      "tree": "553f096676cb2a348e0c09ed532fb304e408eec6",
      "parents": [
        "e98825e827267a4afa40f13c32d5aa24f3c100d5",
        "9980e66d3e0523e9eff41f295365dddb788b0ead"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Wed Sep 09 17:38:31 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Sep 09 17:38:31 2015 +0000"
      },
      "message": "Merge \"adb: remove unnecessary dependencies of liblog.\""
    },
    {
      "commit": "9980e66d3e0523e9eff41f295365dddb788b0ead",
      "tree": "703d5658518739865f978f7ac2ff6b69ec6ccf29",
      "parents": [
        "38e289fa08f56a84267132266f7c2a8ea81830cc"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Sep 08 18:27:10 2015 -0700"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Sep 08 18:27:10 2015 -0700"
      },
      "message": "adb: remove unnecessary dependencies of liblog.\n\nChange-Id: I1aaa9e6c1b47a70f8daf91745f6aec13c92b789f\n"
    },
    {
      "commit": "d0df2dd4ff3457e4ab75c672056840d0d3dd02e0",
      "tree": "4f9f859d8cc702e62e593fdcf3ba1473f5affcf6",
      "parents": [
        "38e289fa08f56a84267132266f7c2a8ea81830cc"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Mon Aug 31 15:36:18 2015 -0700"
      },
      "committer": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Tue Sep 08 10:04:10 2015 -0700"
      },
      "message": "adb: create shell protocol class (take 2).\n\nAdds a new class ShellProtocol to help read and write data with\n`adb shell`. This will allow splitting streams and sending out-of-band\ndata such as exit codes.\n\nNothing uses the new class yet except the unit tests.\n\nThis is the second attempt at this CL, the first is at\nhttp://r.android.com/169600. The problems was using sighandler_t\nwhich is not available on mac. sig_t is used instead which is available\ndue to _GNU_SOURCE being defined in Android.mk, which causes\n_BSD_SOURCE -\u003e __USE_BSD -\u003e sig_t to be defined. Nothing else has been\nchanged from the original CL.\n\nBug: http://b/23030641\nChange-Id: I7bd7f5a82ad811fbca7a3eee1236d2c55ae57c48\n"
    },
    {
      "commit": "e98825e827267a4afa40f13c32d5aa24f3c100d5",
      "tree": "b885c045f4b94d2874ab393c1c8d598ace68c4a4",
      "parents": [
        "38e289fa08f56a84267132266f7c2a8ea81830cc"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Mon Sep 07 16:20:13 2015 -0700"
      },
      "committer": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Mon Sep 07 16:20:13 2015 -0700"
      },
      "message": "adb: refactor _is_valid_ack_reply_fd\n\nVisual Studio\u0027s \u0027jump to reference\u0027 feature couldn\u0027t parse\nadb_commandline() because I used an #ifdef in the middle of an if\nstatement, so this refactors the code into a separate helper function. I\njust copied the code and inverted the comparisons.\n\nNo need for sysdeps since this is pretty minor.\n\nChange-Id: Ifd5c62b0b505080ada6db5cc19739c6f07b94de9\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "97d3b0f7490ed72788ec2af33db81c5c08e340e9",
      "tree": "bdf377428facb5fde52def6ba043e1f5bf354b7b",
      "parents": [
        "0d3479a2e0b0e7791c7def4b037edbeefa5e8c7f",
        "38e289fa08f56a84267132266f7c2a8ea81830cc"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Sun Sep 06 02:38:35 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Sun Sep 06 02:38:35 2015 +0000"
      },
      "message": "am 38e289fa: Merge \"Revert \"adb: create shell protocol class.\"\"\n\n* commit \u002738e289fa08f56a84267132266f7c2a8ea81830cc\u0027:\n  Revert \"adb: create shell protocol class.\"\n"
    },
    {
      "commit": "38e289fa08f56a84267132266f7c2a8ea81830cc",
      "tree": "0b2187f0b261ef947071c62c62f0d8963611edf2",
      "parents": [
        "0daf6e4c97d6c6cb2241b2aefc204544c5611b3b",
        "4ef32190e8708ec8c640225dada95f187653cd9c"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Sun Sep 06 02:34:02 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sun Sep 06 02:34:02 2015 +0000"
      },
      "message": "Merge \"Revert \"adb: create shell protocol class.\"\""
    },
    {
      "commit": "4ef32190e8708ec8c640225dada95f187653cd9c",
      "tree": "43b32b14332091d10728ee0a211af2c04d67ca69",
      "parents": [
        "5aba4b04a36f508106beedd7ee7c922b8d2af6e6"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Sun Sep 06 01:18:47 2015 +0000"
      },
      "committer": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Sun Sep 06 01:18:47 2015 +0000"
      },
      "message": "Revert \"adb: create shell protocol class.\"\n\nThis CL broke the mac build. I\u0027ll revert for now and take a look at how to get it working next week.\n\nThis reverts commit 5aba4b04a36f508106beedd7ee7c922b8d2af6e6.\n\nChange-Id: Icb3e015250bcbbc69a45675a1358699ebe01e77b\n"
    },
    {
      "commit": "0d3479a2e0b0e7791c7def4b037edbeefa5e8c7f",
      "tree": "b8b51b0f6338dab650683697edad7e29e6650622",
      "parents": [
        "553481dee42ca67134b3a86095e30066d2614304",
        "0daf6e4c97d6c6cb2241b2aefc204544c5611b3b"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Sat Sep 05 00:07:54 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Sat Sep 05 00:07:54 2015 +0000"
      },
      "message": "am 0daf6e4c: Merge \"adb: `features` passes transport features.\"\n\n* commit \u00270daf6e4c97d6c6cb2241b2aefc204544c5611b3b\u0027:\n  adb: `features` passes transport features.\n"
    },
    {
      "commit": "0daf6e4c97d6c6cb2241b2aefc204544c5611b3b",
      "tree": "b30affecc7f3996c8259cd25a1f3357cac737c4c",
      "parents": [
        "98d7ea3dc7b5d15f6350abb4d2c34108fc7bfb55",
        "2e9f0327cd3b7cdc52788653e7b0a216e20b2616"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Sat Sep 05 00:01:27 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sat Sep 05 00:01:27 2015 +0000"
      },
      "message": "Merge \"adb: `features` passes transport features.\""
    },
    {
      "commit": "553481dee42ca67134b3a86095e30066d2614304",
      "tree": "d849612b2d311e453f6bac694b3ae27257ebd927",
      "parents": [
        "96fae9122fdbf902d6c888af6bbf6a8a30ccbfa2",
        "98d7ea3dc7b5d15f6350abb4d2c34108fc7bfb55"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Sat Sep 05 00:01:02 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Sat Sep 05 00:01:02 2015 +0000"
      },
      "message": "am 98d7ea3d: Merge changes from topic \\\u0027adb_shell_prework\\\u0027\n\n* commit \u002798d7ea3dc7b5d15f6350abb4d2c34108fc7bfb55\u0027:\n  adb: create shell protocol class.\n  adb: refactor subprocess code.\n  adb: move shell service to a separate file.\n"
    },
    {
      "commit": "98d7ea3dc7b5d15f6350abb4d2c34108fc7bfb55",
      "tree": "44eebfaebf5d57a4218239c6811dea88e2afeaf3",
      "parents": [
        "40602c60eba2de7ec81dc874a83b27ec75f40465",
        "5aba4b04a36f508106beedd7ee7c922b8d2af6e6"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Fri Sep 04 23:54:19 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Sep 04 23:54:19 2015 +0000"
      },
      "message": "Merge changes from topic \u0027adb_shell_prework\u0027\n\n* changes:\n  adb: create shell protocol class.\n  adb: refactor subprocess code.\n  adb: move shell service to a separate file.\n"
    },
    {
      "commit": "2e9f0327cd3b7cdc52788653e7b0a216e20b2616",
      "tree": "8ec740f0850696524f29e4a854525649a33711cd",
      "parents": [
        "c5d51620cf959101a335f659998ee1b3141aa2d7"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Fri Sep 04 16:40:30 2015 -0700"
      },
      "committer": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Fri Sep 04 16:47:21 2015 -0700"
      },
      "message": "adb: `features` passes transport features.\n\n`adb features` previously returned a list of host features which was\nnot terribly useful. This CL changes functionality to return the\ntransport features instead using the standard targeting args:\n  $ adb features  # default target.\n  $ adb -e features\n  $ adb -s 123456 features\n\nAlso adds a \"check-feature\" service which is currently unused but will\nallow the adb client to easily check for a specific feature.\n\nBug: http://b/23824036\nChange-Id: Ibc0c420c75f73d363f3bba7705af616ba2059348\n"
    },
    {
      "commit": "74e85684b5f0312f9233a12aaed430a0b2851080",
      "tree": "68427e94cb8fbe4144c0a990b9ae6cad218600a4",
      "parents": [
        "40602c60eba2de7ec81dc874a83b27ec75f40465"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Thu Sep 03 20:29:56 2015 -0700"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Fri Sep 04 14:05:19 2015 -0700"
      },
      "message": "Remove HOST_OS\u003d\u003dwindows check\n\nWith the HOST_CROSS_OS build system change, LOCAL_MULTILIB :\u003d first now\nbehaves the same way.\n\nChange-Id: I03294403e5a106a53d4a0d48b176434221284901\n"
    },
    {
      "commit": "5aba4b04a36f508106beedd7ee7c922b8d2af6e6",
      "tree": "44ba9f2198982840b3397efef11faea12c9d4876",
      "parents": [
        "917dcfa6aa439183d10fc74371e26149a9f472a6"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Mon Aug 31 15:36:18 2015 -0700"
      },
      "committer": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Fri Sep 04 11:30:11 2015 -0700"
      },
      "message": "adb: create shell protocol class.\n\nAdds a new class ShellProtocol to help read and write data with\n`adb shell`. This will allow splitting streams and sending out-of-band\ndata such as exit codes.\n\nNothing uses the new class yet except the unit tests.\n\nBug: http://b/23030641\n\nChange-Id: Ieb02e127095c6dda25b7cb188a2e599173fd97e6\n"
    },
    {
      "commit": "917dcfa6aa439183d10fc74371e26149a9f472a6",
      "tree": "43b32b14332091d10728ee0a211af2c04d67ca69",
      "parents": [
        "4f344bb156137ee7d5824b72e5d96f8aa93cde55"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Fri Aug 28 18:31:29 2015 -0700"
      },
      "committer": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Fri Sep 04 11:18:51 2015 -0700"
      },
      "message": "adb: refactor subprocess code.\n\nRefactor shell_service.cpp to remove dependencies on service.cpp and\ncombine some common logic between PTY and raw subprocesses.\n\nThis will make it easier to add additional common code paths for\nthe upcoming shell protocol.\n\nChange-Id: I497d30dd388de61b6e68d9086dce38f33dd92876\n"
    },
    {
      "commit": "96fae9122fdbf902d6c888af6bbf6a8a30ccbfa2",
      "tree": "c9736fb49ed6e94bbcc72b95a402816e1d2ff3fa",
      "parents": [
        "b3c1fd5236e3c2f3f7995c2f2abb35d9450156a4",
        "40602c60eba2de7ec81dc874a83b27ec75f40465"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri Sep 04 17:56:25 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Sep 04 17:56:25 2015 +0000"
      },
      "message": "am e8b0fcec: Merge \"combine adbd.rc with init.usb.rc\"\n\n* commit \u0027e8b0fcecf4a17cf37b5fefbcceef0920788f776e\u0027:\n  combine adbd.rc with init.usb.rc\n"
    },
    {
      "commit": "4f344bb156137ee7d5824b72e5d96f8aa93cde55",
      "tree": "26d946edf2cce0d259e03039abcafbf251804fc0",
      "parents": [
        "c5d51620cf959101a335f659998ee1b3141aa2d7"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Fri Aug 28 15:08:49 2015 -0700"
      },
      "committer": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Fri Sep 04 08:52:35 2015 -0700"
      },
      "message": "adb: move shell service to a separate file.\n\nUpcoming changes to the shell will require significant additions to\nthe subprocess code, and it will be cleaner if it\u0027s in a separate file.\n\nThe only functional change here is a new debug tag specifically for\nthe shell service. Everything else has been copied exactly as-is in\norder to make it easier to determine what\u0027s changing in upcoming CLs.\n\nChange-Id: I13bd4294059051ee10e0d0c6a06affd8eca62967\n"
    }
  ],
  "next": "40602c60eba2de7ec81dc874a83b27ec75f40465"
}
