)]}'
{
  "log": [
    {
      "commit": "10fe0ff3d8aa50e983cb6609c7f4dd701319ce67",
      "tree": "2959b99b3dd37c88ec28ae7407e50e8d079916d8",
      "parents": [
        "9680c4b727a03e317d6aaad2335d5cdd7ad07ff7"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Thu Jun 25 13:07:02 2020 -0500"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Thu Jun 25 13:10:31 2020 -0500"
      },
      "message": "discoverer: Stop warnings about update_service\n\nThis adds a stub update_service method. It\u0027s debatable if we\u0027ll need this method\nat all, but zeroconf is going to be making it mandatory soon, so we\u0027ll add a\nstub.\n\nChange-Id: Ied177430f8a16b3ba89bf9f32063d87bbea8d162\n"
    },
    {
      "commit": "9680c4b727a03e317d6aaad2335d5cdd7ad07ff7",
      "tree": "92680d475650dd41aa981b85fa8d996d6988a7b2",
      "parents": [
        "028a4f8363adf0c3a085bd9547fc5c9160c549b7"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Thu May 28 17:54:18 2020 -0400"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Thu May 28 17:54:18 2020 -0400"
      },
      "message": "mdt: Ensure we build wheels\n\nbdist doesn\u0027t actually build something that twine can upload for binaries.\n\nChange-Id: I64bbf96166fe0fedc4d8a3ee6cc1fd436810b09b\n"
    },
    {
      "commit": "028a4f8363adf0c3a085bd9547fc5c9160c549b7",
      "tree": "efbd42943cafe5af79b5db8c1700cd8fc54703dc",
      "parents": [
        "d3b2e886a9212f0084ea55d24863bf04b61ccd92"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Thu May 28 17:15:15 2020 -0400"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Thu May 28 17:37:09 2020 -0400"
      },
      "message": "discoverer: Remove use of deprecated API\n\nzeroconf supports giving us a parsed (stringified) version of the IP address for\na given mDNS announcement. Use that instead of the deprecated address member.\n\nChange-Id: Ie2f1b4103064ea6eb080e2566da9538094515012\n"
    },
    {
      "commit": "d3b2e886a9212f0084ea55d24863bf04b61ccd92",
      "tree": "ad237fae9b868941f9f56d35d4c6b74fe677c4a3",
      "parents": [
        "60475ed8feeb492292d979b4f823a904cf9d1b73"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Thu Oct 17 14:20:02 2019 -0500"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Thu Oct 17 14:20:02 2019 -0500"
      },
      "message": "wheel: Stop using bdist_wheel\n\nApparently somewhere along the line this got deprecated and renamed to just\n\"bdist\".\n\nChange-Id: I5e1100e1de9f2686bf070b4917d5ee5695dc98ce\n"
    },
    {
      "commit": "60475ed8feeb492292d979b4f823a904cf9d1b73",
      "tree": "ecf6a024b7d7f73c09b5bef000428cae497c0893",
      "parents": [
        "6b8a433c6d1bff6918f33084fd09ca35a71c46c3"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Thu Oct 17 13:46:57 2019 -0500"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Thu Oct 17 13:46:57 2019 -0500"
      },
      "message": "mdt: Bump version and prep for the next release\n\nChange-Id: Ia8cb5679fc628ebf112807408eadb268311cd498\n"
    },
    {
      "commit": "6b8a433c6d1bff6918f33084fd09ca35a71c46c3",
      "tree": "416be6aefedd5deaf47289064f6781704303288a",
      "parents": [
        "875f46d44886cc6265bdbec0ddd97db9eaf8b98d"
      ],
      "author": {
        "name": "Henry Herman",
        "email": "henryherman@google.com",
        "time": "Tue Aug 27 17:17:18 2019 -0700"
      },
      "committer": {
        "name": "Henry Herman",
        "email": "henryherman@google.com",
        "time": "Tue Aug 27 17:18:02 2019 -0700"
      },
      "message": "Allow mdt to connect to device matching 192.168.10X.XXX.\n\nChange-Id: Ie5231df5aabcc8215f4a2cb81bc410ec15381a81\n"
    },
    {
      "commit": "875f46d44886cc6265bdbec0ddd97db9eaf8b98d",
      "tree": "cf6e4f18fb7835570094509d0eb9668a11eb510d",
      "parents": [
        "90c31a928910936046954d9ccfdf53ebc27551f4"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue Jul 09 16:11:33 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue Jul 09 16:13:12 2019 -0700"
      },
      "message": "sshclient: Use the dumb terminal definition by default\n\nThis is the least common denominator for all three platforms.\n\nChange-Id: I2b2539363cb315180488afbb78857549bb22bec8\n"
    },
    {
      "commit": "90c31a928910936046954d9ccfdf53ebc27551f4",
      "tree": "b7f748c760e19f120ddb9053db086a2d7a00eb5b",
      "parents": [
        "e5ec57368ad894146f6a713f4c8624582b3e62cc"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue Jul 09 15:57:11 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue Jul 09 15:57:11 2019 -0700"
      },
      "message": "packaging: Bump to version 1.4\n\nChange-Id: I783a17e484dccf77c30050301f98985845d47d5e\n"
    },
    {
      "commit": "e5ec57368ad894146f6a713f4c8624582b3e62cc",
      "tree": "2f84b6ca040dd77e8118306ec09156107e621ce0",
      "parents": [
        "acc22199372e61054a1fea0a55285a078c4e5d8d"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue Jul 09 15:50:09 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue Jul 09 15:50:09 2019 -0700"
      },
      "message": "windows: Make WindowsConsole actually work\n\nThere were some definitions missing, and sys.stdin.read doesn\u0027t quite work right\non Windows consoles.\n\nChange-Id: I857483ac20a7dafbcd221cce18119b95722931bd\n"
    },
    {
      "commit": "acc22199372e61054a1fea0a55285a078c4e5d8d",
      "tree": "86792077e1c0c5f03d7f7d21ce8552cbc4c5b637",
      "parents": [
        "224baf65a59b64ee99812ab438942f6ec943327c"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Thu May 23 13:27:41 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Thu May 23 13:27:41 2019 -0700"
      },
      "message": "mdt: Bump the version for release.\n\nChange-Id: Ibc3dad695e20acb29759652382d07c429cefd7e6\n"
    },
    {
      "commit": "224baf65a59b64ee99812ab438942f6ec943327c",
      "tree": "90a2009efbb51dfc62b59d8108cdca2e8e6407b3",
      "parents": [
        "c51ce95d37196d265a21a9f0ca77b4793212a155"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Wed May 15 14:35:52 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Wed May 15 14:47:28 2019 -0700"
      },
      "message": "pull: Mirror behavior with push\n\nIf a directory is specified, pull will mirror the contents locally, into the\ndestination specified by walking the entire subtree.\n\nChange-Id: Iec3541e052bdec26b535216a8baf27714d2df373\n"
    },
    {
      "commit": "c51ce95d37196d265a21a9f0ca77b4793212a155",
      "tree": "94a9fa31c8b9f055114b1c275d20559d8e560a68",
      "parents": [
        "929e84c355bf10d481b1186a53584465b715ca2b"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Wed May 15 12:57:09 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Wed May 15 12:57:09 2019 -0700"
      },
      "message": "push: Adjust to handle relative destination paths\n\nThis does some checks on the arguments passed in *before* it attempts a\nconnection, and then also adds in support for paths relative to /home/mendel\nwhen pushing.\n\nChange-Id: I8f07af5ea6e916d9b462d487cb8f5dc1a86ab1e9\n"
    },
    {
      "commit": "929e84c355bf10d481b1186a53584465b715ca2b",
      "tree": "d66d07d48c69ccb4c1fc50dd49d2b6d1f53bf32f",
      "parents": [
        "f3cc1097ab90ba5713eb3f1769f8c34265ade2fa"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue May 14 15:08:29 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue May 14 15:18:57 2019 -0700"
      },
      "message": "push: Update push to handle files in a more cohesive way\n\nPush now can handle a series of files and directory paths and will assume the\nlast argument provided is a remote path. If the argument exists, it will assume\nall files and directories will be pushed to /home/mendel by default.\n\nChange-Id: I87260f73b156648972d62118765cb7295e8a38cf\n"
    },
    {
      "commit": "f3cc1097ab90ba5713eb3f1769f8c34265ade2fa",
      "tree": "eaca1a31bbda86d53f3236f36dbbfcb772c25d37",
      "parents": [
        "3ce24d93afa0ffe342ba23c44a4c8e36f30e58f4"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Wed Apr 17 09:51:30 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Wed Apr 17 09:51:30 2019 -0700"
      },
      "message": "setup: Bump version for the next release\n\nChange-Id: Id7ccc707298c492ed2b6d666737af3550d14f0ef\n"
    },
    {
      "commit": "3ce24d93afa0ffe342ba23c44a4c8e36f30e58f4",
      "tree": "d755d65428ba5b1ed3671a718559c4023e9dc326",
      "parents": [
        "a0e89070e8f3ab59aea962fef78258601b668f16"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue Apr 16 11:26:04 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue Apr 16 11:26:04 2019 -0700"
      },
      "message": "pushkey: Fix comparisions for private keys\n\nThe original pushkey code was broken when it came to comparisons for the private\nkey comparision.\n\nChange-Id: I7facddfbdeb4fdc0991a877f7ecbdc826f3c5a6d\n"
    },
    {
      "commit": "a0e89070e8f3ab59aea962fef78258601b668f16",
      "tree": "4972e9b2f7fc80d7f4f466ae6e134051b6b71b05",
      "parents": [
        "267893c2874cdd21deb2598779872a6418a079b4"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Mon Apr 15 17:04:50 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Mon Apr 15 17:04:50 2019 -0700"
      },
      "message": "get: Make get actually dump all the variables like the docs say\n\nBefore get would simply dump its usage information to the terminal. Not all that\nhelpful. :D\n\nChange-Id: I28cbcd57b09832b63f659333e67334885d86fe59\n"
    },
    {
      "commit": "267893c2874cdd21deb2598779872a6418a079b4",
      "tree": "88f986b1e8a01ef2d48feb2fbf4bf37487daaec0",
      "parents": [
        "5c3592e0ce1ad9f77747fcecd73e8a72f92dd734"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue Apr 09 11:20:09 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue Apr 09 11:20:09 2019 -0700"
      },
      "message": "genkey: Add a warning and confirmation prompt\n\nUsers were running genkey and getting confused when it overwrote their keys and\nthen couldn\u0027t login to their devices anymore. This adds a confirmation prompt\nand some additional text on what to do to rotate a key. This will have to do\nuntil we have a \"rotatekeys\" subcommand.\n\nChange-Id: Id7f48085a6bf31bd5cbbbf47ca3efaa6f3f4b556\n"
    },
    {
      "commit": "5c3592e0ce1ad9f77747fcecd73e8a72f92dd734",
      "tree": "040458b7de19df9833ed421d74d18d41ea524c19",
      "parents": [
        "27590dad329a5ff62545caa6dd3575dc77dc6b15"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Mon Apr 08 17:05:18 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Mon Apr 08 17:05:18 2019 -0700"
      },
      "message": "sshclient: Update the error message when a key push fails\n\nSince we use the inotify functionality to monitor the authorized_keys file,\nusing systemctl restart to restart mdt-keymaster is irrelevant.\n\nChange-Id: I4e131425b29d3c9fbffcdc02879d7671525af5c8\n"
    },
    {
      "commit": "27590dad329a5ff62545caa6dd3575dc77dc6b15",
      "tree": "6af0506832fd2d60d06ce75c32c0d1db48c2d100",
      "parents": [
        "ea66c3eb0d7d4601d65e2f5fc96d2f9de9099a56"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Mon Apr 08 16:51:40 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Mon Apr 08 16:51:40 2019 -0700"
      },
      "message": "setup: Update the version for the package\n\nChange-Id: I7c06c31797b953571c3323eabfe97e71f43b0590\n"
    },
    {
      "commit": "ea66c3eb0d7d4601d65e2f5fc96d2f9de9099a56",
      "tree": "b11d10feb351dfe1a12a77984b5b07bf61d2dffd",
      "parents": [
        "1ba999761d9a1bd9a543fb2db937ca93433e578c"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Mon Apr 08 16:02:30 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Mon Apr 08 23:40:40 2019 +0000"
      },
      "message": "changelog: Bump the version for the next release\n\nChange-Id: Id5f368d6d66e55cd4864a91bb1e1f46e9e02d744\n"
    },
    {
      "commit": "1ba999761d9a1bd9a543fb2db937ca93433e578c",
      "tree": "5b0b2d90c635291eb9768ed7ab9aeeea2e044cfd",
      "parents": [
        "5d2cc9916d5c02c94503f450b65e9715a9600940"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Fri Apr 05 15:09:50 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Mon Apr 08 16:03:02 2019 -0700"
      },
      "message": "keys: Allow for pushing of Paramiko PEM format keys\n\nEnd users don\u0027t really have a good way of using MDT if they can\u0027t push\nadditional MDT public keys. This adds functionality to generate a public key\nline in a generic way and push Paramiko keys to the boards in the same way\nOpenSSH public keys are pushed.\n\nChange-Id: Ifdec1f4cea1d2934c07afa00e0b19c25962d368b\n"
    },
    {
      "commit": "5d2cc9916d5c02c94503f450b65e9715a9600940",
      "tree": "80d9bec42aa0a2ef74df753a9c800ce898e84f98",
      "parents": [
        "dba9d97e9a51bf554cbf486b7c1d10a0c01a1de6"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Fri Apr 05 15:11:45 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Fri Apr 05 15:11:45 2019 -0700"
      },
      "message": "help: Make help verify the subcommand is actually a real subcommand\n\nChange-Id: Ib2bca732bc9f9ef01248e8425ae4aa02f716774d\n"
    },
    {
      "commit": "dba9d97e9a51bf554cbf486b7c1d10a0c01a1de6",
      "tree": "783597685392f56839a4eca9d1029b7108adea8b",
      "parents": [
        "78f3a84931efabec8191aa732b41fe28bb8891e3"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Fri Apr 05 12:17:06 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Fri Apr 05 12:17:06 2019 -0700"
      },
      "message": "console: Fix a bug with a missing self\n\nChange-Id: I04693d9976ee628bc1be055a0ea1b33c53f62749\n"
    },
    {
      "commit": "78f3a84931efabec8191aa732b41fe28bb8891e3",
      "tree": "d40457afed537a70ab95a5de8fcfc7a10d4d0566",
      "parents": [
        "b5ddcadc713b7727d5d5f8025e6c79e83cd10b71"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Thu Apr 04 16:21:32 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Thu Apr 04 16:21:32 2019 -0700"
      },
      "message": "console: Update socket timeout functionality for Macs\n\nThis adjusts the original timeout code to use getsockopt(..., SO_NWRITE) to get\nthe number of sent but not acknowledged bytes. This is supported on all\nBSD-derived/POSIX compliant systems since 4.3 BSD, but apparently Linux is the\nsole outlier and only supports the fcntl() method.\n\nChange-Id: I6ad4cb8d3f5e04d70bfbfa855de133674087814b\n"
    },
    {
      "commit": "b5ddcadc713b7727d5d5f8025e6c79e83cd10b71",
      "tree": "f0f81125260b6a48ab1aa76424f62ef5b7d10c65",
      "parents": [
        "1291c83cd0e7c3b1aa37845322260ef6383e527e"
      ],
      "author": {
        "name": "Jonas Larsson",
        "email": "ljonas@google.com",
        "time": "Mon Apr 01 18:05:45 2019 -0700"
      },
      "committer": {
        "name": "Jonas Larsson",
        "email": "ljonas@google.com",
        "time": "Thu Apr 04 23:04:22 2019 +0000"
      },
      "message": "HACK: Workaround weird paramiko socket behaviour\n\nWhen the far side disappears, such as on reboot, mdt shell can get\nstuck 20 minutes. If we enable keepalive messages and add a timeout\nto select() we can detect that tx of keepalives aren\u0027t progressing\nand emulate a timeout after a more reasonable 20 seconds.\n\nChange-Id: Icdaf51825fcf7c779afa6776b0f4f78f087f8864\n"
    },
    {
      "commit": "1291c83cd0e7c3b1aa37845322260ef6383e527e",
      "tree": "540e81a3b04c21174ae3b4de106bdb9dd997c713",
      "parents": [
        "9d5a0724bad7b4ea0d18bb6c90d8fa7ffe88f90e"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Thu Apr 04 14:10:24 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Thu Apr 04 14:10:24 2019 -0700"
      },
      "message": "readme: Add in a note about how to install and use from pip\n\nChange-Id: Ie4986fff449dfc6eb8471c1ae30eed16e70d200e\n"
    },
    {
      "commit": "9d5a0724bad7b4ea0d18bb6c90d8fa7ffe88f90e",
      "tree": "50cbd9ca76f642500d87714149eb5b37b6804eaf",
      "parents": [
        "e423a47b95f8f3a8fa1d8b39820741f059e4aa46"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Mon Apr 01 15:59:15 2019 -0700"
      },
      "committer": {
        "name": "Alex Van Damme",
        "email": "atv@google.com",
        "time": "Mon Apr 01 23:05:23 2019 +0000"
      },
      "message": "pushkey: Fix argument names\n\nApparently I copypasta\u0027d the original pushkey code in the wrong way.\n\nChange-Id: I3bcbb30c63bab263a9801000cf79794a2798e539\n"
    },
    {
      "commit": "e423a47b95f8f3a8fa1d8b39820741f059e4aa46",
      "tree": "d5efeb28778a2bfb2c903582caa73a8107d34191",
      "parents": [
        "2b52903e887fa821e06ac7c1e29938d298716153"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Mon Apr 01 13:36:00 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Mon Apr 01 13:36:00 2019 -0700"
      },
      "message": "discoverer: Check to make sure info is real before using\n\nThis fixes a related issue in discovery when a removal occurs before the\nannouncement is complete.\n\nChange-Id: I1c2dc2c4bfd29ef9e7a7225c39b0377f5d43d691\n"
    },
    {
      "commit": "2b52903e887fa821e06ac7c1e29938d298716153",
      "tree": "0f62351ac7c0b691185a5b03ea18b93370d3a81d",
      "parents": [
        "aa9880c8225427ae4221f6ba96bc03209c3b7d7f"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Mon Apr 01 13:11:17 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Mon Apr 01 13:11:17 2019 -0700"
      },
      "message": "deb: Fix the build rules to actually build right\n\nPrior rules configs weren\u0027t actually producing anything useful for the deb.\n\nChange-Id: Id9722349798b098096c6aef636fef7e4ef4a427e\n"
    },
    {
      "commit": "aa9880c8225427ae4221f6ba96bc03209c3b7d7f",
      "tree": "9b67f974c6022a27d69b66616f16bece4690747b",
      "parents": [
        "28a184984513926097dafb1f4d452d53a51c8f8b"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Fri Mar 29 15:08:52 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Fri Mar 29 15:14:23 2019 -0700"
      },
      "message": "make: Add a simple makefile to make distribution easier\n\nAlso clean up a few other mdt usages.\n\nChange-Id: I5afb08bcbbd17283d262fd0c50d154a03b42cc79\n"
    },
    {
      "commit": "28a184984513926097dafb1f4d452d53a51c8f8b",
      "tree": "977ae6b44936d68a88396cb67edcddf756b404ca",
      "parents": [
        "4fc95eea42cc789046dc3c3de7aebf14f4c774bf"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Fri Mar 29 14:58:45 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Fri Mar 29 22:06:45 2019 +0000"
      },
      "message": "Add build and dist to the ignore list\n\nChange-Id: I7107c6aa086b48b2adc1145a9c0656a0850d7f9b\n"
    },
    {
      "commit": "4fc95eea42cc789046dc3c3de7aebf14f4c774bf",
      "tree": "2a2ab020c4501b9637f0aa0a594954eb3d652610",
      "parents": [
        "358bf65dd2800fd8977bb9962a1994dfc5105d6d"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Fri Mar 29 14:57:54 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Fri Mar 29 15:04:59 2019 -0700"
      },
      "message": "package: Rename the package so we don\u0027t collide with others\n\nChange-Id: Ifead2b1bdb73e95d6836c8e95963c5d95b67a0e3\n"
    },
    {
      "commit": "358bf65dd2800fd8977bb9962a1994dfc5105d6d",
      "tree": "0813775ef27ac61b61e908183689193af7e4811c",
      "parents": [
        "a30fb30acd8bc7c415d193ad8b88460d9985ce09"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Fri Mar 29 14:49:03 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Fri Mar 29 14:49:03 2019 -0700"
      },
      "message": "setup: Fix the license\n\nChange-Id: I09d829d815d580a73254f04549f33ba46b9921d2\n"
    },
    {
      "commit": "a30fb30acd8bc7c415d193ad8b88460d9985ce09",
      "tree": "a31d0eb7f49b33e81dc75ef7c53aa12f097d41f1",
      "parents": [
        "56a6f0493e4f0ea8c43be00dfa4d4900f49c1fb6"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Fri Mar 29 13:27:54 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Fri Mar 29 21:25:35 2019 +0000"
      },
      "message": "manpage: Update to include resetkeys and version\n\nChange-Id: I27e061e2b8aab78c8b63e10d477b2b7e36c1d255\n"
    },
    {
      "commit": "56a6f0493e4f0ea8c43be00dfa4d4900f49c1fb6",
      "tree": "ee5b73b4fabe25f9109224393cd03e66d739890d",
      "parents": [
        "f5651ecde1f96d479483fddea828189a77225973"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Fri Mar 29 14:02:51 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Fri Mar 29 14:02:51 2019 -0700"
      },
      "message": "changelog: Prep for release to stable\n\nChange-Id: I37a8bf17475c1637e0f23d23f75d657720440d07\n"
    },
    {
      "commit": "f5651ecde1f96d479483fddea828189a77225973",
      "tree": "8cbe57fb2647f34836c750a968f4ffb3a14097c3",
      "parents": [
        "4d88a9a7b125ec3e24d5b7c506fed4db1ec33e33"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Fri Mar 29 13:11:48 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Fri Mar 29 20:24:03 2019 +0000"
      },
      "message": "command: Don\u0027t be silly in our error messages\n\nWithout this, if there are no devices on the local segment, mdt will error out\nwith \"Unable to find any devices called None on your local network segment.\"\nSilly. :P\n\nChange-Id: I2c144a8a6c9925517065cd695e88ee7e50dabab2\n"
    },
    {
      "commit": "4d88a9a7b125ec3e24d5b7c506fed4db1ec33e33",
      "tree": "6d6815669c4a0f3fb6aeef8a078cbd9c5c68c43f",
      "parents": [
        "d890bd7f139d90a65f99a8304ea72441466783eb"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Fri Mar 29 13:17:31 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Fri Mar 29 13:17:31 2019 -0700"
      },
      "message": "main: Turn off more silly deprecation warnings\n\nWe can\u0027t fix Paramiko, and these warnings just create tons of confusion. Turn\nthem off.\n\nChange-Id: I907107f904e3a76555da43c8b624c5d50601b4b9\n"
    },
    {
      "commit": "d890bd7f139d90a65f99a8304ea72441466783eb",
      "tree": "fb43ed8446899a25848bfaa4a82d04e0f3dff309",
      "parents": [
        "f04ef4fe261a9a19ef9643ec98eff2e1e8e4daf3"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Thu Mar 28 13:55:46 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Thu Mar 28 21:05:16 2019 +0000"
      },
      "message": "resetkeys: Add a new command to remove MDT keys and start keymaster\n\nThis gives us a way to return a board with previously-pushed MDT keys on it back\nto factory defaults, with mdt-keymaster running again.\n\nChange-Id: Ife3b71526c9905365426ecca553ef32504692105\n"
    },
    {
      "commit": "f04ef4fe261a9a19ef9643ec98eff2e1e8e4daf3",
      "tree": "40f4a1e4ce8455556caa6464b7ceb10b030cc02d",
      "parents": [
        "33c313989f90f23db9981512d42b850e52bb3d8b"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Thu Mar 28 12:08:46 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Thu Mar 28 12:08:46 2019 -0700"
      },
      "message": "discovery: Detect cases where the user specifies a nonexistant name\n\nThis prevents a stack trace from being thrown when the user specifies a device\nname that simply doesn\u0027t exist.\n\nChange-Id: I5c37c03767db5f7d5ed7fc5b3653c9b844e754a4\n"
    },
    {
      "commit": "33c313989f90f23db9981512d42b850e52bb3d8b",
      "tree": "0598532286fb98af6a511d2cd462417c0c9125c6",
      "parents": [
        "e56a2519a2724598e1bea53bed24b56d224c413b"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue Mar 26 16:44:47 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Thu Mar 28 17:49:52 2019 +0000"
      },
      "message": "version: Add a version command\n\nThis will help in debugging issues.\n\nChange-Id: Ic136d90144d2a85b8f3ec512a7c498680683fb07\n"
    },
    {
      "commit": "e56a2519a2724598e1bea53bed24b56d224c413b",
      "tree": "8ca3a41705866e967c3b1ca850c21386dff6d1d4",
      "parents": [
        "a56ee45fd243f8bafda4ba4d35c6526c71e835eb"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue Mar 26 16:51:04 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue Mar 26 16:51:04 2019 -0700"
      },
      "message": "pull: Fix the usage and help text\n\nChange-Id: I6ed6dfc1267f6bb05b3e5fc9fe8310b0d5329066\n"
    },
    {
      "commit": "a56ee45fd243f8bafda4ba4d35c6526c71e835eb",
      "tree": "fb6ab4f84f0895acbff25b1af2fa1dd8c37c3521",
      "parents": [
        "71723e2461d552dad822bff1b630b91acef15c49"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue Mar 26 16:17:26 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue Mar 26 16:17:26 2019 -0700"
      },
      "message": "errors: Provide some helpful information when keypushes fail\n\nThis gives the user some actionable methods for resolving the problem.\n\nChange-Id: I08ce95767b978d8dff1274038060d8958cb5c20c\n"
    },
    {
      "commit": "71723e2461d552dad822bff1b630b91acef15c49",
      "tree": "85e9ed68956d4355d26f326734f45108fc3dadf2",
      "parents": [
        "9f7a9d88afe46b0e58fffccb40993d2c7d13dd84"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue Mar 26 15:01:29 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue Mar 26 22:16:21 2019 +0000"
      },
      "message": "main: Disable warnings from Paramiko\u0027s usage of deprecated methods\n\nThese warnings are content-free, so let\u0027s not confuse the users.\n\nChange-Id: Ic114ca796711b8de0e377e311a25e9a34a1b8a97\n"
    },
    {
      "commit": "9f7a9d88afe46b0e58fffccb40993d2c7d13dd84",
      "tree": "ddfda9715c41798c071189eeaeca73f644085dc9",
      "parents": [
        "317afdd4568cc153846a73e29edd75f1973e1ced"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue Mar 26 15:01:04 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue Mar 26 15:01:04 2019 -0700"
      },
      "message": "changelog: Update package version to match MDT version\n\nChange-Id: Iffc41332ebb014d8f08cc1a59187d1a878cf47f0\n"
    },
    {
      "commit": "317afdd4568cc153846a73e29edd75f1973e1ced",
      "tree": "497f924fadd74b9787c1acaa97cff97dc19c190e",
      "parents": [
        "c2f7fa005b4412b36300bc7e392b06d17c6b7ac5"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue Mar 26 14:13:48 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue Mar 26 14:13:48 2019 -0700"
      },
      "message": "discoverer: Rework how discoveries are done\n\nThis implements a backoff timer that waits an additional second every time an\nannouncement is done. This should allow us to discover all the devices on a\nlocal segment fully.\n\nChange-Id: I0443e44fd80cf494a5bb010b260fce5537f770b4\n"
    },
    {
      "commit": "c2f7fa005b4412b36300bc7e392b06d17c6b7ac5",
      "tree": "dec2a6485481816f2a410956beca82b187ddb4a7",
      "parents": [
        "c269b3e0e49012fee51e747de8b3aae41005101a"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Mon Mar 25 16:13:59 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Mon Mar 25 23:50:36 2019 +0000"
      },
      "message": "shell: Make specified device names and IP addresses work properly\n\nThe shell command failed to use the preConnectRun method to pre-set the device\nnames, which would cause the shell command to simply retain its default behavior\nof connecting to whichever device it found first.\n\nChange-Id: I0ffc5340ddc395e550c779a41c47120be18b1ef2\n"
    },
    {
      "commit": "c269b3e0e49012fee51e747de8b3aae41005101a",
      "tree": "6da4f255df2110a708911e7dcc28d62219ff3e9a",
      "parents": [
        "413d7b640088bff04ce9e38934b73864e0d95f8d"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Mon Mar 25 16:12:21 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Mon Mar 25 16:12:34 2019 -0700"
      },
      "message": "ignore: Ignore egg-info files\n\nChange-Id: I491f80f4c34f6c86b78df68670103944ad84581e\n"
    },
    {
      "commit": "413d7b640088bff04ce9e38934b73864e0d95f8d",
      "tree": "1182ba9e510a8de6bd40e5aeb8e2367bd6076d43",
      "parents": [
        "8f8125ee42e496851494fe28caf29c588ef87214"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Mon Mar 25 15:25:27 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Mon Mar 25 15:30:10 2019 -0700"
      },
      "message": "discoverer: Stop trying to scan for devices after construction\n\nThe zeroconf ServiceBrowser has a nasty habit of starting to scan the minute it\nhas been constructed. Unfortunately, since we construct all of our command\ninstances in main, this was starting N instances of the ServiceBrowser,\ncontaminating the results very badly.\n\nChange-Id: I8448091a7d562244ee81892ad4ef6e34754f2fb3\n"
    },
    {
      "commit": "8f8125ee42e496851494fe28caf29c588ef87214",
      "tree": "ff4cd50485773d4a12de3dc1303a6e8202a12fc4",
      "parents": [
        "9c1e925e7a618e7ea33d172758650dc18f87cc11"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Mon Mar 25 14:35:06 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Mon Mar 25 14:35:06 2019 -0700"
      },
      "message": "help: Update the command list to include new commands\n\nChange-Id: Iabee0a8fe65817c31d564b4b944fa4bfbcf1361a\n"
    },
    {
      "commit": "9c1e925e7a618e7ea33d172758650dc18f87cc11",
      "tree": "5706e89e463c13182fc0f0716d139324ac693a76",
      "parents": [
        "ecbc4f95555f5d24233c1b9e26839ff878c5d863"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Fri Mar 22 16:58:30 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Fri Mar 22 16:58:30 2019 -0700"
      },
      "message": "keys: Add in pushkey and setkey to help with key management\n\npushkey allows someone to push their OpenSSH public key into a device\u0027s\n~/.ssh/authorized_keys file, and setkey allows one to import their PEM-format\nOpenSSH private key into MDT\u0027s keyfile.\n\nChange-Id: I5301c6d8fb6365e6ac60d396aba2225e861cee66\n"
    },
    {
      "commit": "ecbc4f95555f5d24233c1b9e26839ff878c5d863",
      "tree": "f81e3cfda9f7ef974e13011ab2733e87c6840396",
      "parents": [
        "76ca9f600e7404c3ec563993c6f8ac7131d84a2e"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Fri Mar 22 12:31:53 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Fri Mar 22 19:54:10 2019 +0000"
      },
      "message": "keys: Add a setkey command to allow for importing of private keys\n\nThis allows users to use their private keys already generated in .ssh for\nconnecting to the boards if they need.\n\nChange-Id: I1534c21ab549f7e1e0d739a0f489e6dd253bd890\n"
    },
    {
      "commit": "76ca9f600e7404c3ec563993c6f8ac7131d84a2e",
      "tree": "c5f60c52ecb9ba61f7986a16f02cfb8367218f04",
      "parents": [
        "3221ae591be868588b1210749e2a5a77b9500176"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Fri Mar 22 12:16:25 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Fri Mar 22 12:16:25 2019 -0700"
      },
      "message": "sshclient: Stop disabling password auth\n\nChange-Id: I938b56350dbbf7cce0d78b7f8abd247b683e9e7f\n"
    },
    {
      "commit": "3221ae591be868588b1210749e2a5a77b9500176",
      "tree": "249ca0ea5bc62b0331a1c083be48338fc9c57f93",
      "parents": [
        "154ec12c48a2ee8a8df081c40607b2652be8e50e"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Thu Mar 21 14:27:36 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Thu Mar 21 14:31:39 2019 -0700"
      },
      "message": "manpage: Add a section about the typical user workflow\n\nChange-Id: I89b3ae730798254c87b6b4e6dbca8f75d8a48aa4\n"
    },
    {
      "commit": "154ec12c48a2ee8a8df081c40607b2652be8e50e",
      "tree": "64c4cd72a5cc1da5167b788df61d5250a2868c5a",
      "parents": [
        "d5b37aa3c97daf3e29b0aeacfce1c5d3beb1dff8"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Thu Mar 21 10:58:25 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Thu Mar 21 10:58:25 2019 -0700"
      },
      "message": "distribution: Fix a bunch of distribution information\n\nThis is needed before we release publicly.\n\nChange-Id: I4786fc9d845b933627423c63cdc5ffdfea5ae088\n"
    },
    {
      "commit": "d5b37aa3c97daf3e29b0aeacfce1c5d3beb1dff8",
      "tree": "b759e282d90003f40812a6fe67c22311848adafb",
      "parents": [
        "2a8662c7dd78718203ae37b658f793f3a8491851"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Mon Mar 18 12:13:11 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Mon Mar 18 12:14:30 2019 -0700"
      },
      "message": "console: Add in SIGWINCH support\n\nThis allows us to resize the TTY on the remote side when the local terminal\nwindow size changes. Significant quality of life improvement.\n\nChange-Id: If610f7daea98bc601a4c7a22d705651e897cc3ef\n"
    },
    {
      "commit": "2a8662c7dd78718203ae37b658f793f3a8491851",
      "tree": "9c05c9e18bcbab16dee3f01b69acd58c36e570d2",
      "parents": [
        "6a22664c655438f3effeab16f333f6095060ca92"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Thu Mar 14 15:58:23 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Thu Mar 14 15:58:23 2019 -0700"
      },
      "message": "sshclient: Fix the iteration through the environment\n\nChange-Id: I53e54561ec9ce8a999bac0fcf8451e3462352402\n"
    },
    {
      "commit": "6a22664c655438f3effeab16f333f6095060ca92",
      "tree": "93cc92ecf4de6202caa117aef83c76a4044f2504",
      "parents": [
        "085760350accbcd69b7b8dbb20199ad043e473de"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Thu Mar 14 14:08:59 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Thu Mar 14 14:24:22 2019 -0700"
      },
      "message": "environment: Add in preliminary support for a whitelisted env\n\nThis provides initial support for a whitelisted environment using globbing\nsimilar to the way ssh is configured.\n\nChange-Id: I2d5a70f5fa42522509abd1dd45ac9ec7a1fc17ff\n"
    },
    {
      "commit": "085760350accbcd69b7b8dbb20199ad043e473de",
      "tree": "521450aeec707e369857aea20a0ff05ed0f78ed8",
      "parents": [
        "d9e10acf381379699dafc625553baf445646de56"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Thu Mar 14 14:06:37 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Thu Mar 14 14:06:37 2019 -0700"
      },
      "message": "setup: Fix paramiko version to 2.x.x and above\n\nUnfortunately we can\u0027t fix this to version 2.1.x and above simply because it\u0027s\nnot available on currently shipping Debian distributions. Using 2.1.x would\nallow us to set environment variables, however.\n\nChange-Id: I9428f87d80fd6c5b504e6e62ffa2c4f4593a4a8d\n"
    },
    {
      "commit": "d9e10acf381379699dafc625553baf445646de56",
      "tree": "46684a88be795ab7d664f1b98a8b1b5546aee12d",
      "parents": [
        "b890d95395c182a6f6e9c77071be8540cfe96035"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Thu Mar 14 12:49:43 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Thu Mar 14 12:49:43 2019 -0700"
      },
      "message": "console: Be more pythonic in length checks\n\nChecking the length of a string is not very idiomatic.\n\nChange-Id: I653144032985567433ee971774201634a854a760\n"
    },
    {
      "commit": "b890d95395c182a6f6e9c77071be8540cfe96035",
      "tree": "6ced42eb668cfb71124f7b2935d6d011b245ee62",
      "parents": [
        "bb70e538a8428e86cfa936352ccc6218634ddd4c"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Wed Mar 13 17:18:17 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Thu Mar 14 00:49:53 2019 +0000"
      },
      "message": "mdt: Fix the windows console classes.\n\nInner classes have strange behaviors in python. This makes things a bit more\nclearer.\n\nChange-Id: Icf3cd47a276e70425363d19d49e1f686bc7bcd39\n"
    },
    {
      "commit": "bb70e538a8428e86cfa936352ccc6218634ddd4c",
      "tree": "ccc1886402e636e87bb882fc4d951af4b280f0e2",
      "parents": [
        "936b6b616c908d7923bfa575ae7a6e29412b84e8"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue Mar 12 16:50:55 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue Mar 12 16:50:55 2019 -0700"
      },
      "message": "Fix the support name\n\nChange-Id: I3efbd88cf0ec2f1abe1bbb039500b323ab03fb10\n"
    },
    {
      "commit": "936b6b616c908d7923bfa575ae7a6e29412b84e8",
      "tree": "5f4518decda614fe45aa8febb22139ad6e23df5a",
      "parents": [
        "0e2ff1d9a28c30133282661a5ec8a852e6d23b14"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue Mar 12 16:27:23 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue Mar 12 16:27:23 2019 -0700"
      },
      "message": "Fix the support email address\n\nChange-Id: Ifccd55330f67000385b4b9ecd93565e6e406869d\n"
    },
    {
      "commit": "0e2ff1d9a28c30133282661a5ec8a852e6d23b14",
      "tree": "b532073d806affa34ac9da426c596758d2c6f361",
      "parents": [
        "5e10ae6cef96a042d0ad4f728fdc3d98e5b1169c"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Mon Mar 11 17:34:47 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue Mar 12 18:18:59 2019 +0000"
      },
      "message": "documentation: Add in a fully qualified man page.\n\nChange-Id: Ief34784a7e873b08111b1f18b7e7c21ac2e24477\n"
    },
    {
      "commit": "5e10ae6cef96a042d0ad4f728fdc3d98e5b1169c",
      "tree": "ef41dc6127cbc06bdad803e8e33df3c4ad0909a7",
      "parents": [
        "53a54dd5d6d685855b636530912bb5804ed4f6e5"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Mon Mar 11 17:06:23 2019 -0700"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Mon Mar 11 17:18:03 2019 -0700"
      },
      "message": "docs: Add in helpful docstrings for commands that were missing help.\n\nChange-Id: I851befabbd5dc7c643e7144aa819d1e9440a558d\n"
    },
    {
      "commit": "53a54dd5d6d685855b636530912bb5804ed4f6e5",
      "tree": "913a866b19a54e5cb27f83e863d2dd1c2d602d0f",
      "parents": [
        "409cb5591a6819d01cf5f126d2e1a3c8a952f20f"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Thu Mar 07 14:13:54 2019 -0800"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Fri Mar 08 18:49:03 2019 +0000"
      },
      "message": "config: Make get work properly\n\nThe get command was broken, mis-processing the number of arguments it was\nreceiving.\n\nChange-Id: I67f60909508ae29fafac20d1da2e830999cd6a92\n"
    },
    {
      "commit": "409cb5591a6819d01cf5f126d2e1a3c8a952f20f",
      "tree": "e309a8d95692b1fbbc3a01eb659999525d946334",
      "parents": [
        "1a7df53c8f53f8705d460d778375eb657542393f"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Thu Mar 07 14:11:42 2019 -0800"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Thu Mar 07 14:11:42 2019 -0800"
      },
      "message": "sshclient: Add default login keypushing as a fallback\n\nThis allows older installs of Mendel that don\u0027t run mdt-keymaster the ability to\nstill receive keys using a default username/password combo.\n\nChange-Id: I066ff4f8ee116a9249e5fcc10607dfff819b095c\n"
    },
    {
      "commit": "1a7df53c8f53f8705d460d778375eb657542393f",
      "tree": "89b8e195d10c4eba83251900e54a766634b4a020",
      "parents": [
        "a736263846cd9d26b68ae4f274fbebc7ce224577"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Thu Mar 07 12:59:55 2019 -0800"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Thu Mar 07 12:59:55 2019 -0800"
      },
      "message": "command: Add in support for IP address-based connections\n\nThis allows our users to set preferred-device to an IP address and bypass the\navahi discovery routines.\n\nChange-Id: Ib17d1eac940ba4412c5a0a9889bb9f51540be368\n"
    },
    {
      "commit": "a736263846cd9d26b68ae4f274fbebc7ce224577",
      "tree": "e8dc9b33da3f8777d63d5b151c9d5c36570e8f77",
      "parents": [
        "d52e621cb461230031f83f1af3b4cef2dc602a5b"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Mon Mar 04 17:12:26 2019 -0800"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue Mar 05 02:13:52 2019 +0000"
      },
      "message": "sshclient: Push keys via the mdt-keymaster instead of ssh\n\nThis updates the push method to use mdt-keymaster rather than using the default\nlogins for ssh. This is predicated on the fact that mdt-keymaster only binds to\nthe usb0 interface, thus creating a secure point-to-point communications channel\nwhich we can use for initial control of the board.\n\nChange-Id: I32cb0cf7c5cb2efd2d7de460d6a18b01ec556926\n"
    },
    {
      "commit": "d52e621cb461230031f83f1af3b4cef2dc602a5b",
      "tree": "4c348c847eaeccdc747e979ede5682eefe26aedf",
      "parents": [
        "95447337addc9c0d43187ae2ddebfa0fc75ae367"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Mon Mar 04 16:50:38 2019 -0800"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Mon Mar 04 16:51:12 2019 -0800"
      },
      "message": "console: Add in an escape to quit with\n\nChange-Id: I245f7dcde7f50e05e7049e54810e82bdab368d48\n"
    },
    {
      "commit": "95447337addc9c0d43187ae2ddebfa0fc75ae367",
      "tree": "266a628a6722e6e7ec5cdec2234ed7e7c0e6b7dd",
      "parents": [
        "ad3620aec24f728d9c97aafcda422158a265ad76"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Fri Feb 22 16:31:06 2019 -0800"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Fri Feb 22 16:31:06 2019 -0800"
      },
      "message": "formatting: Fix a few error codes and the progress bar\n\nChange-Id: I52945ddf8dae6cf50a34e74cee28fbb62f5d95d4\n"
    },
    {
      "commit": "ad3620aec24f728d9c97aafcda422158a265ad76",
      "tree": "aedb754b2757e00b4f52b838c650e8d3d0534737",
      "parents": [
        "b9863f4b9c181184ed93bb9ba1877b5b1b930c4e"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Thu Feb 21 16:11:46 2019 -0800"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Fri Feb 22 14:41:44 2019 -0800"
      },
      "message": "passwordauth: Disable password authentication once a key is pushed\n\nChange-Id: I4714fa655d1f2c36bc97d6b7eb867062c202c34e\n"
    },
    {
      "commit": "b9863f4b9c181184ed93bb9ba1877b5b1b930c4e",
      "tree": "fa0127d9efbdfd64eb2fedf1e88eab16d43cd4c3",
      "parents": [
        "ffc883bea089cf42cf726da4062120f630c39003"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Fri Feb 15 15:39:23 2019 -0800"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Fri Feb 15 15:39:23 2019 -0800"
      },
      "message": "discoverer: Fix a bug in multiple removals\n\nIf we get notifications that a host has been lost twice, we can crash out.\n\nChange-Id: Ifeef72d3c41707187d8f9f95674bbd0997b1e7fe\n"
    },
    {
      "commit": "ffc883bea089cf42cf726da4062120f630c39003",
      "tree": "81b10d98dd10e9c4b1afe4f185ef41a3df0f8268",
      "parents": [
        "dc0f09f7630066cd1a509566fed99278da9e7da8"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Thu Feb 14 13:41:41 2019 -0800"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Thu Feb 14 21:43:02 2019 +0000"
      },
      "message": "style: Follow pep8 style, according to pycodestyle\n\nChange-Id: Ie67bf4536d68621164ec6409893bd6b2c0271000\n"
    },
    {
      "commit": "dc0f09f7630066cd1a509566fed99278da9e7da8",
      "tree": "5bf79c481f7b2e574d6a88283f9d47b158e84cd8",
      "parents": [
        "92dad09af8c2926023d8752cdf73240955c14d17"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Thu Feb 14 13:26:59 2019 -0800"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Thu Feb 14 13:26:59 2019 -0800"
      },
      "message": "discoverer: stop waiting for mDNS entries after we found one\n\nContinually scanning runs into crashing problems.\n\nChange-Id: Ieeccf4c6c9720e29be4eb44d771936fc33ab12f0\n"
    },
    {
      "commit": "92dad09af8c2926023d8752cdf73240955c14d17",
      "tree": "6869f366f3337fdbbe6f90dc70eb3c53899ea13b",
      "parents": [
        "8991dfa9888e75c0391b754d5d120050def125c7"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Wed Feb 13 12:23:11 2019 -0800"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Wed Feb 13 12:23:11 2019 -0800"
      },
      "message": "console: Fix handling of high-bit input and escapes\n\nPython\u0027s standard file I/O for stdin runs it through numerous translations which\nseriously breaks reading high-bit and escape characters. Stop using Python\u0027s I/O\nroutines and use standard syscalls for reading bytes instead.\n\nChange-Id: Ib687388efef7a6897d742d4cd897ad78dd2970f5\n"
    },
    {
      "commit": "8991dfa9888e75c0391b754d5d120050def125c7",
      "tree": "21cc2239ab14866dabcc8dc52ca451337a3f6ba6",
      "parents": [
        "53a69dc8891dbcb75a0293a0c439e4e8269c3d40"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue Feb 12 14:52:19 2019 -0800"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue Feb 12 14:52:19 2019 -0800"
      },
      "message": "oss-releasing: Adding in everything OSS releasing requires\n\nThis finalizes the Apache 2.0 license in every file, adds a code of conduct, and\nthe CLA stuff we usually expect at Google.\n\nChange-Id: Id3ee0242724c91cb5ecce568808b1ac443f11aa7\n"
    },
    {
      "commit": "53a69dc8891dbcb75a0293a0c439e4e8269c3d40",
      "tree": "a285a79e0e8b45b4fe6ffc405b482cea184f3a97",
      "parents": [
        "0c184cf24643574ac10b0da9525554de9a09529c"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Mon Feb 11 14:14:19 2019 -0800"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Mon Feb 11 14:14:19 2019 -0800"
      },
      "message": "mdns: Fix the service name to make it compatible with the mDNS RFCs\n\nAlso, update the changelong -- we never released.\n\nChange-Id: I00d5118e8d9afea60d6d24399d0cc72c3c2e4cc9\n"
    },
    {
      "commit": "0c184cf24643574ac10b0da9525554de9a09529c",
      "tree": "603ca1a8ff058dd8106b4af5f097fcf093aca905",
      "parents": [
        "a26695c99078f1ff0874b91224686f45fe50f2aa"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Mon Feb 11 12:01:16 2019 -0800"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Mon Feb 11 12:01:40 2019 -0800"
      },
      "message": "main: Add in some dependency checks\n\nThis prevents nasty tracebacks from firing if we can\u0027t load paramiko or\nzeroconf.\n\nChange-Id: If075ab46af462a18552a6da8ba7ffdfe1f3e7f63\n"
    },
    {
      "commit": "a26695c99078f1ff0874b91224686f45fe50f2aa",
      "tree": "2ba7f22cfaf677d9aae4eece4eaf62ab1797975f",
      "parents": [
        "c245fa130e10c974588d9a71a4a84ffc100fa908"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Fri Feb 08 17:30:00 2019 -0800"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Mon Feb 11 11:45:06 2019 -0800"
      },
      "message": "mdt: Major functionality changes\n\nThe big things that occured in this change was the addition of the install,\npush, pull, and exec commands. Past this change, we\u0027re actually functionally\nequivalent to the board.sh utility in the Mendel tree.\n\nThings that changed in order of biggest to smallest:\n\n  - Added the install, push, and pull commands. They\u0027re brittle at the moment --\n    refinements to come.\n  - Refactored most of the command classes to use NetworkCommand which handles\n    discovery of connected devices based upon user preferences and what is\n    available.\n  - Migrated most of the SSH code into its own class called SshClient.\n  - Made ConnectionClosedErrors actually store exit codes so we can return those\n    to the host-side shell.\n  - Made Console track exit codes from the given Channels.\n  - Made Console work with non-PTY shells so we can suck down the output to the\n    terminal\n  - Added the exec command to run a command without a shell.\n  - Fixed a command sanitization check in config\n\nApologies for the gigantic diff. O.o\n\nChange-Id: I08a2ce18e777b9c047503ad3225083eb0ceab053\n"
    },
    {
      "commit": "c245fa130e10c974588d9a71a4a84ffc100fa908",
      "tree": "088d1e75448badcffbbfa62ade791e6ecc0221f9",
      "parents": [
        "81237cee9a9268ac9ad350f9690404a824406b3d"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Wed Feb 06 15:21:48 2019 -0800"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Wed Feb 06 15:29:55 2019 -0800"
      },
      "message": "help: help make help great again!\n\nThis adds a whole bunch of help docstrings to the various commands that get run.\n\nChange-Id: Ifa4321eb64624d77d63ac7982e14ed871374132a\n"
    },
    {
      "commit": "81237cee9a9268ac9ad350f9690404a824406b3d",
      "tree": "b8a0354936d878440733e93124d5d9f055c2cd14",
      "parents": [
        "53725eea56cf44ba4717843c056f7df7ee5135d4"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Wed Feb 06 14:55:40 2019 -0800"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Wed Feb 06 14:57:23 2019 -0800"
      },
      "message": "python: Fix my broken modules\n\nThis retools a bunch of the settings in setup.py and the rest of the python code\nto make the python modules sane so that it can be run when actually installed.\n\nChange-Id: Id132381a7c02b97259309ab9e0a4685cace43c2e\n"
    },
    {
      "commit": "53725eea56cf44ba4717843c056f7df7ee5135d4",
      "tree": "8ed412c91e8f652c3a3c1f7ad81141b6e4068dd2",
      "parents": [
        "15b0cdb7fb83b8f311547f1de1f4bfc8781a71fc"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Wed Feb 06 14:18:58 2019 -0800"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Wed Feb 06 14:24:33 2019 -0800"
      },
      "message": "help: Make the help subcommand actually useful\n\nThis provides the framework for making this useful using class docstrings.\nShould be easier to maintain the documentation for this tool that way, rather\nthan using man pages.\n\nChange-Id: Iad9cdebae8e2a8bb903cbda902f55d4a3ff67ff7\n"
    },
    {
      "commit": "15b0cdb7fb83b8f311547f1de1f4bfc8781a71fc",
      "tree": "cfd788af22edbd75e732bae9bdcabe712c37a9f0",
      "parents": [
        "8b47788c0087498d7bb70b77d203c1b6bf5682d1"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Wed Feb 06 13:54:12 2019 -0800"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Wed Feb 06 13:57:44 2019 -0800"
      },
      "message": "shell: Split console handling to a separate class\n\nThis splits out the console handling routines into their own classes, uses\nexceptions to great effect, and also provides preliminary Windows console\nsupport via multithreading.\n\nChange-Id: I46d4b227cc62208d9698339957c9f348ed01a8b7\n"
    },
    {
      "commit": "8b47788c0087498d7bb70b77d203c1b6bf5682d1",
      "tree": "0f369b60c995e8b59302ad450b1326f637d9870d",
      "parents": [
        "37f232383de995da7496687bdbf5cb29ce991278"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue Feb 05 19:18:04 2019 -0800"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Wed Feb 06 13:11:23 2019 -0800"
      },
      "message": "shell: Add in a functional shell command\n\nCurrently this only works on UNIX-like systems due to the use of termios, so it\nwill break on Windows.\n\nChange-Id: Ia114fab90198f310a8b58117c0c53c9347353b6f\n"
    },
    {
      "commit": "37f232383de995da7496687bdbf5cb29ce991278",
      "tree": "04382f457af48d2cc1cdb5a47c8179407ce819d4",
      "parents": [
        "6f4de9e84559f93a998e5f00387233ed2376d0ed"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue Feb 05 19:19:47 2019 -0800"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue Feb 05 19:19:47 2019 -0800"
      },
      "message": "packaging: Remove the dependency on spur\n\nSpur turned out to be far too simple for our needs. We\u0027ll use paramiko instead.\n\nChange-Id: If4f7726b04f19c10e51d3edcba4866ec523cff95\n"
    },
    {
      "commit": "6f4de9e84559f93a998e5f00387233ed2376d0ed",
      "tree": "d30b9d92b0d9c82e221a9e158663445e3dfbd9bb",
      "parents": [
        "6344b0e1d16596097565a67183eb015471f98ec0"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue Feb 05 15:20:44 2019 -0800"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue Feb 05 23:29:56 2019 +0000"
      },
      "message": "shell: Add in a shell command\n\nThis just gives us a simple way to execvp ssh and have a normal, bog-standard\nterminal. Very similar to the board.sh shell command.\n\nChange-Id: I50fb7b96abae737a3d01481e8cc27ac9accd3b57\n"
    },
    {
      "commit": "6344b0e1d16596097565a67183eb015471f98ec0",
      "tree": "44a427adca5edc5bccaad9071c7e2492e5a27379",
      "parents": [
        "08c5ea60657b18d1064e5b0967600c596db313f1"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue Feb 05 15:19:33 2019 -0800"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue Feb 05 15:19:33 2019 -0800"
      },
      "message": "keygen: Update the cached vars after a keygen\n\nThis makes sure we can just re-use the same keystore without having to\nreinitialize it.\n\nChange-Id: I15e54030a54c0176dc755d8a6704bd51ae90104a\n"
    },
    {
      "commit": "08c5ea60657b18d1064e5b0967600c596db313f1",
      "tree": "409ad33038ff518102b6f0f026d8b6515d599d15",
      "parents": [
        "e1517430d2f9421b5fe3112b865697f9536b259e"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue Feb 05 15:15:49 2019 -0800"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue Feb 05 15:17:47 2019 -0800"
      },
      "message": "config: Add in default support\n\nThis allows us to have default attributes unless the user has specified one\nalready for that attribute. Useful to make MDT a bit more general.\n\nChange-Id: I4225b540ecf32bd5a50145b0752d40f469e8f80f\n"
    },
    {
      "commit": "e1517430d2f9421b5fe3112b865697f9536b259e",
      "tree": "3cce18c3c2a7576cde218bd04e2b1d3f8c1e3758",
      "parents": [
        "a2d930bd36b416e7ccd2754b969e187d6aea2277"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue Feb 05 13:53:55 2019 -0800"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue Feb 05 22:49:01 2019 +0000"
      },
      "message": "keys: Add a keystore class and the genkey subcommand\n\nThis allows us to manage a public/private ssh key in our own private directory,\nand also allows the user to regenerate it if necessary.\n\nChange-Id: I5fcf1668991f79343e6279f16edb97b8fdbb9ffa\n"
    },
    {
      "commit": "a2d930bd36b416e7ccd2754b969e187d6aea2277",
      "tree": "6d0ff29e5b0dc30c0b045bb51089bcf903dbb3cd",
      "parents": [
        "b968e839032d26aecbdd59080d156a411b5624b9"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue Feb 05 13:53:23 2019 -0800"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue Feb 05 22:48:49 2019 +0000"
      },
      "message": "config: Add support for storing SSH keys\n\nChange-Id: Icb249d2979dd171a0ce07b8f0aeac5f27438df57\n"
    },
    {
      "commit": "b968e839032d26aecbdd59080d156a411b5624b9",
      "tree": "156e93c17dc221012045106e8834df8dd8436281",
      "parents": [
        "fdb04e206b4478b73934462227cb3e7840ff57b9"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue Feb 05 13:54:57 2019 -0800"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue Feb 05 13:54:57 2019 -0800"
      },
      "message": "devices: Minor formatting fix\n\nChange-Id: If17deb507295046647947bb6567fd821e70c77ae\n"
    },
    {
      "commit": "fdb04e206b4478b73934462227cb3e7840ff57b9",
      "tree": "0b4cea919477408f90150cab570f60983f4f96c8",
      "parents": [
        "5033406f274fa578335a5d5c7b1ae0b6e1a57c2d"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue Feb 05 13:03:03 2019 -0800"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue Feb 05 13:03:03 2019 -0800"
      },
      "message": "mdt: Stop the stupid python tracebacks on SIGINT\n\nWe really don\u0027t need to know. :D\n\nChange-Id: If82f67e8f8791df6c1c6145e4fc862f54e243823\n"
    },
    {
      "commit": "5033406f274fa578335a5d5c7b1ae0b6e1a57c2d",
      "tree": "e62d36400104599c3e9c03d44769ca2975e8c372",
      "parents": [
        "5daa4972a798d242fcc629b4ea7c9c3d981124d9"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue Feb 05 13:01:40 2019 -0800"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue Feb 05 13:01:40 2019 -0800"
      },
      "message": "config: Adding in storage for configuration options\n\nThis basically gives us a key-value store on disk that we can use to store/load\nprivate keys and various config options with. It also exposes it via the get,\nset, and clear subcommands.\n\nChange-Id: Id7a4036180d1c5ef54fc20f62828b3f1c0e9c520\n"
    },
    {
      "commit": "5daa4972a798d242fcc629b4ea7c9c3d981124d9",
      "tree": "7bbacbcdf357485d0e6f71da2623fed8d907d320",
      "parents": [
        "4a3ed823a11fefb84ef106a644df2a49afbe07e8"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue Feb 05 11:47:15 2019 -0800"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue Feb 05 11:47:15 2019 -0800"
      },
      "message": "discovery: Make discovery more robust and faster\n\nThis migrates toward a simplified listener interface so that commands can do\ntheir work more efficiently.\n\nChange-Id: I5e6fd7bcd6fa511b8af116d6efe3f72ef0aed0d5\n"
    },
    {
      "commit": "4a3ed823a11fefb84ef106a644df2a49afbe07e8",
      "tree": "688ce99b8168d8b3ce63e7be03831b0831bfa5a8",
      "parents": [
        "90ccacf65fb1108568483e6116d2fa5c8bb0ca0c"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue Feb 05 11:19:36 2019 -0800"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue Feb 05 11:32:00 2019 -0800"
      },
      "message": "devices: Add a wait-for-device command\n\nIt\u0027s kinda a pain to have to constantly run devices repeatedly until we get some\ndevices. Let\u0027s do a wait-for-device command to help with this.\n\nChange-Id: Iae8c00109a0405235518533f30b9a94a95190dba\n"
    },
    {
      "commit": "90ccacf65fb1108568483e6116d2fa5c8bb0ca0c",
      "tree": "e9ab1b4513d9544fdf486e1eed623f2dec79c9cc",
      "parents": [
        "0fd18c14c1bb3250978b95228e6ebfba70e2d4f4"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue Feb 05 11:19:02 2019 -0800"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Tue Feb 05 11:19:02 2019 -0800"
      },
      "message": "discoverer: Fix a missing import\n\nChange-Id: Iad485a2f4834aacf1d2e44519d796d0329810761\n"
    },
    {
      "commit": "0fd18c14c1bb3250978b95228e6ebfba70e2d4f4",
      "tree": "f07115c43cc98a2a1fa127fbea31eefbcc2ee2f4",
      "parents": [
        "b56ecb2ffbc158b34807143591b701ddd624b3ef"
      ],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Thu Dec 27 14:20:13 2018 -0800"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Thu Dec 27 14:22:18 2018 -0800"
      },
      "message": "packaging: Make a deb, adjust the setuptools scripts\n\nThis makes the source into a proper Debian package, and also creates the\negg-info, as well as a skeleton man page.\n\nChange-Id: Ifeb490f42d7472d56d720f13ff814930ab5917d4\n"
    },
    {
      "commit": "b56ecb2ffbc158b34807143591b701ddd624b3ef",
      "tree": "998702de8ee9a614c0e93e81be4de70b3a65e2e7",
      "parents": [],
      "author": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Thu Dec 20 16:08:42 2018 -0800"
      },
      "committer": {
        "name": "June Tate-Gans",
        "email": "jtgans@google.com",
        "time": "Thu Dec 20 16:08:42 2018 -0800"
      },
      "message": "prototype: Initial barebones prototype\n\nThis implements a bare-bones mdt command that can be used as a pip package and\ninstalled on a host system. Currently it implements a bare skeleton for command\nline processing and also handles mDNS discovery of specific devices advertising\nthe \"_google._mdt._tcp\" service.\n"
    }
  ]
}
