)]}'
{
  "log": [
    {
      "commit": "5616182052227b951e76d9c9b79a616c608bd91b",
      "tree": "00093c8dd1b99ed7a244b84698ff06a04f43f45c",
      "parents": [
        "a5f5a4cb21955cbd12a2da69ab9209659db3db30",
        "77a4076c35063cd6f05bfd6d1896eebcc3b94b84"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Sat Jan 11 00:44:58 2020 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jan 11 00:44:58 2020 +0000"
      },
      "message": "Merge pull request #332 from peachfinance/Fstat-stat-options\n\nAdded a ClientOption to determine whetehr to use Fstat or Stat when File.WriteTo is being called to support strange behaviour on some servers"
    },
    {
      "commit": "a5f5a4cb21955cbd12a2da69ab9209659db3db30",
      "tree": "2862df3423c333ec13de41f3e5c7e938641bd561",
      "parents": [
        "e6f382575afa865cbe4f161763aebd44007f6326",
        "1bc3ea14d16cf347183690af0c07707fc5c3bbb2"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Sat Jan 11 00:44:14 2020 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jan 11 00:44:14 2020 +0000"
      },
      "message": "Merge pull request #330 from pkg/issue-295-corrupt-resumes\n\nIssue 295 corrupt resumes"
    },
    {
      "commit": "e6f382575afa865cbe4f161763aebd44007f6326",
      "tree": "f9066c1640ab0d0b43f5b9bff3df5483f892cdf1",
      "parents": [
        "f3d13089efbcc2a1a77239f5cd519642f6e705a6",
        "0277caa990e36f7f2c313b1fa94b5591b91aeea5"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Sat Jan 11 00:43:47 2020 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jan 11 00:43:47 2020 +0000"
      },
      "message": "Merge pull request #329 from pkg/issue-291-ifmt-platform-fix\n\nfix S_IFMT value on windows, plan9 and js/wasm"
    },
    {
      "commit": "77a4076c35063cd6f05bfd6d1896eebcc3b94b84",
      "tree": "753bc5b08172cd520605bfd146c69f941f038f81",
      "parents": [
        "09f03e7bff7c927325abf0e6cd2f8ec4961a296d"
      ],
      "author": {
        "name": "Eran Sandler",
        "email": "eran@sandler.co.il",
        "time": "Mon Jan 06 14:54:28 2020 -0800"
      },
      "committer": {
        "name": "Eran Sandler",
        "email": "eran@sandler.co.il",
        "time": "Mon Jan 06 14:54:28 2020 -0800"
      },
      "message": "fixes based on comments + minor test added\n"
    },
    {
      "commit": "1bc3ea14d16cf347183690af0c07707fc5c3bbb2",
      "tree": "57b3b50848a2cc1a1bb66929b9eb180f976bbd2f",
      "parents": [
        "3c6b3a4ff1f28e790c8df9f74665446de2acf89f"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Thu Jan 02 14:33:58 2020 -0800"
      },
      "committer": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Sun Jan 05 14:23:49 2020 -0800"
      },
      "message": "fix issue with file put resume/append\n\nFixes issue with append uploads. Was opening the file with O_APPEND, but\nit uses WriteAt() to write the data which doesn\u0027t work with a file\nopened in append mode. Removing the append flag fixes the issue as the\nclient is sending the offsets anyways.\n\nAlso added a note to the Request server\u0027s FileWriter interface on\nhandling append flags.\n"
    },
    {
      "commit": "3c6b3a4ff1f28e790c8df9f74665446de2acf89f",
      "tree": "5f2dca6d6f02e5cf0df8e8492329c3a4fa659079",
      "parents": [
        "f3d13089efbcc2a1a77239f5cd519642f6e705a6"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Thu Jan 02 14:30:36 2020 -0800"
      },
      "committer": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Fri Jan 03 12:44:31 2020 -0800"
      },
      "message": "add test to exercise file upload resume\n\nSimulates resuming a file upload where more data is appended to the same\nfile (eg. network error, uploading log files, etc). Currently broken in\nthe server as it uses O_APPEND + WriteAt() which don\u0027t work together.\n"
    },
    {
      "commit": "09f03e7bff7c927325abf0e6cd2f8ec4961a296d",
      "tree": "3efbd12095a0ed2c2319823c855cc2a10ddc8683",
      "parents": [
        "f3d13089efbcc2a1a77239f5cd519642f6e705a6"
      ],
      "author": {
        "name": "Eran Sandler",
        "email": "eran@sandler.co.il",
        "time": "Fri Jan 03 11:29:41 2020 -0800"
      },
      "committer": {
        "name": "Eran Sandler",
        "email": "eran@sandler.co.il",
        "time": "Fri Jan 03 11:29:41 2020 -0800"
      },
      "message": "Added a ClientOption to determine whetehr to use Fstat or Stat when File.WriteTo is being called to support strange behaviour on some servers\n"
    },
    {
      "commit": "f3d13089efbcc2a1a77239f5cd519642f6e705a6",
      "tree": "44b71ee4d9c75b4cc6f6de2f4796bba1e7e7ed37",
      "parents": [
        "939a6934bccd1dea0311a9e9b3ee57ae86197ba1"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Thu Jan 02 14:49:23 2020 -0800"
      },
      "committer": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Thu Jan 02 14:49:23 2020 -0800"
      },
      "message": "add makefile to simplify running integration tests\n"
    },
    {
      "commit": "0277caa990e36f7f2c313b1fa94b5591b91aeea5",
      "tree": "6f967ac89ac5e7709d6a068dfbf7b490f4f97ed6",
      "parents": [
        "939a6934bccd1dea0311a9e9b3ee57ae86197ba1"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Mon Dec 30 15:36:04 2019 -0800"
      },
      "committer": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Thu Jan 02 12:59:24 2020 -0800"
      },
      "message": "fix S_IFMT value on windows and plan9\n\nGo defines S_IFMT on windows, plan9 and js/wasm as 0x1f000 instead of\n0xf000. None of the the other S_IFxyz values (even on those mentioned)\ninclude the \"1\" (in 0x1f000) which prevents them from matching the\nbitmask.\n\nThis fixes that by overriding the S_IFMT value on the effected platforms\nto be 0xf000, as it it on all others.\n"
    },
    {
      "commit": "939a6934bccd1dea0311a9e9b3ee57ae86197ba1",
      "tree": "cb087c83099377b13965f0a29140df4cf6a82797",
      "parents": [
        "8488d36edee795c85c0f878ef8df4c6e5175b34a",
        "f94839fd59d0f139631cf4c8125d4d85fd5e506a"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Mon Dec 30 12:17:42 2019 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Dec 30 12:17:42 2019 -0800"
      },
      "message": "Merge pull request #328 from vansante/fix-empty-attributes-panicking\n\nFix panics when attempting to get file attributes from too small byte slices"
    },
    {
      "commit": "f94839fd59d0f139631cf4c8125d4d85fd5e506a",
      "tree": "cb087c83099377b13965f0a29140df4cf6a82797",
      "parents": [
        "1bb2f2849b1ceb4f26b7b136cf12df211aad6fc1"
      ],
      "author": {
        "name": "Paul van Santen",
        "email": "pvansanten@transip.nl",
        "time": "Fri Dec 27 10:56:42 2019 +0100"
      },
      "committer": {
        "name": "Paul van Santen",
        "email": "pvansanten@transip.nl",
        "time": "Fri Dec 27 10:56:42 2019 +0100"
      },
      "message": "Add const for all attribute flags and add missing newline\n"
    },
    {
      "commit": "1bb2f2849b1ceb4f26b7b136cf12df211aad6fc1",
      "tree": "8a563bfa759c9d040a1687a06be2749d463d0e52",
      "parents": [
        "8488d36edee795c85c0f878ef8df4c6e5175b34a"
      ],
      "author": {
        "name": "Paul van Santen",
        "email": "pvansanten@transip.nl",
        "time": "Tue Dec 24 09:37:32 2019 +0100"
      },
      "committer": {
        "name": "Paul van Santen",
        "email": "pvansanten@transip.nl",
        "time": "Tue Dec 24 09:37:32 2019 +0100"
      },
      "message": "Fix panics when attempting to get file attributes from too small byte slice\n"
    },
    {
      "commit": "8488d36edee795c85c0f878ef8df4c6e5175b34a",
      "tree": "2030d104964f4e831f42aa0cc332a2c279ce241b",
      "parents": [
        "6d50bf4a212284f807ebc3c91fde3e1509ae09bd",
        "429ee173fb879a8d85aaa50704c5c8f48aa6ba1d"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Mon Nov 11 15:44:05 2019 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Nov 11 15:44:05 2019 -0800"
      },
      "message": "Merge pull request #315 from drakkan/extensions\n\nmake SFTP extensions configurable\r\n\r\nThanks @drakkan"
    },
    {
      "commit": "429ee173fb879a8d85aaa50704c5c8f48aa6ba1d",
      "tree": "e596ba3bfa4b5eb884ef25acd62940e50acf29b7",
      "parents": [
        "515578a967841e8b3c0ca3a720c77dd0ec171d78"
      ],
      "author": {
        "name": "Nicola Murino",
        "email": "nicola.murino@gmail.com",
        "time": "Mon Nov 11 18:04:56 2019 +0100"
      },
      "committer": {
        "name": "Nicola Murino",
        "email": "nicola.murino@gmail.com",
        "time": "Mon Nov 11 18:04:56 2019 +0100"
      },
      "message": "make SFTP extensions configurable\n"
    },
    {
      "commit": "6d50bf4a212284f807ebc3c91fde3e1509ae09bd",
      "tree": "50038c35c0fb3ba2e518841ae40593bf2f5da0bb",
      "parents": [
        "4033788e3d542ca125a23e0b8d997149bdd643fa",
        "f9e61c9b8f360e5c986d8acdc36e8df59e75c75c"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Sat Nov 02 14:07:27 2019 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Nov 02 14:07:27 2019 -0700"
      },
      "message": "Merge pull request #316 from drakkan/posixrename\n\nFix posixrename and add a test case"
    },
    {
      "commit": "4033788e3d542ca125a23e0b8d997149bdd643fa",
      "tree": "fb1ac6db2e8e22f9adbf79cd882da49ec8ae6407",
      "parents": [
        "73241350c511195039d485ae4fb3def11e0f112f",
        "5a3a7572f5c60f47f5458ca72d2b0057d6c05899"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Sat Nov 02 14:05:18 2019 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Nov 02 14:05:18 2019 -0700"
      },
      "message": "Merge pull request #317 from pkg/revert-313-master\n\nRevert \"Bug: windows specific issue on request-server.go\""
    },
    {
      "commit": "5a3a7572f5c60f47f5458ca72d2b0057d6c05899",
      "tree": "fb1ac6db2e8e22f9adbf79cd882da49ec8ae6407",
      "parents": [
        "73241350c511195039d485ae4fb3def11e0f112f"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Sat Nov 02 21:04:45 2019 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Nov 02 21:04:45 2019 +0000"
      },
      "message": "Revert \"Bug: windows specific issue on request-server.go\"\n"
    },
    {
      "commit": "73241350c511195039d485ae4fb3def11e0f112f",
      "tree": "fb2c0af9e6905d9dab27501579565514d8898922",
      "parents": [
        "515578a967841e8b3c0ca3a720c77dd0ec171d78",
        "313f3c181d22a206acfbc205481f4267d7932cc7"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Sat Nov 02 14:03:59 2019 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Nov 02 14:03:59 2019 -0700"
      },
      "message": "Merge pull request #313 from danfletcher1/master\n\nBug: windows specific issue on request-server.go"
    },
    {
      "commit": "f9e61c9b8f360e5c986d8acdc36e8df59e75c75c",
      "tree": "50038c35c0fb3ba2e518841ae40593bf2f5da0bb",
      "parents": [
        "5df8e92923a95c6734a383b41bcbfd786090e3ff"
      ],
      "author": {
        "name": "Nicola Murino",
        "email": "nicola.murino@gmail.com",
        "time": "Mon Oct 28 10:34:49 2019 +0100"
      },
      "committer": {
        "name": "Nicola Murino",
        "email": "nicola.murino@gmail.com",
        "time": "Mon Oct 28 10:34:49 2019 +0100"
      },
      "message": "request-server: add test case for posixrename\n"
    },
    {
      "commit": "5df8e92923a95c6734a383b41bcbfd786090e3ff",
      "tree": "114a603becfab72523ffff23975c0c6a678987b6",
      "parents": [
        "515578a967841e8b3c0ca3a720c77dd0ec171d78"
      ],
      "author": {
        "name": "Daniel Fletcher",
        "email": "Daniel.Fletcher@gamma.co.uk",
        "time": "Sun Oct 27 06:59:47 2019 +0100"
      },
      "committer": {
        "name": "Nicola Murino",
        "email": "nicola.murino@gmail.com",
        "time": "Sun Oct 27 06:59:47 2019 +0100"
      },
      "message": "request-server: fix posixrename\n"
    },
    {
      "commit": "313f3c181d22a206acfbc205481f4267d7932cc7",
      "tree": "71fa12c7619798b8f22aa874ba53b79a3bbbaaf6",
      "parents": [
        "26d6af7a594d961fd2a7c2329c12e6dccea2786b"
      ],
      "author": {
        "name": "Daniel Fletcher",
        "email": "Daniel.Fletcher@gamma.co.uk",
        "time": "Wed Oct 23 10:45:52 2019 +0100"
      },
      "committer": {
        "name": "Daniel Fletcher",
        "email": "Daniel.Fletcher@gamma.co.uk",
        "time": "Wed Oct 23 10:45:52 2019 +0100"
      },
      "message": "Bug: InMemoryHandler() mimics a linux file system. When build for\nwindows filepath.Dir(), more specifically the clean function preforms\nincorrectly in our situation. As the filesystem is constant we can do a\nsimplified dir() function to resolve the issue.\n"
    },
    {
      "commit": "26d6af7a594d961fd2a7c2329c12e6dccea2786b",
      "tree": "c38f287610385419d300a60543848b43a9a23f74",
      "parents": [
        "e9514f49675dfc1c0da939b8c5595d37e09040cc"
      ],
      "author": {
        "name": "Daniel Fletcher",
        "email": "Daniel.Fletcher@gamma.co.uk",
        "time": "Wed Oct 23 10:42:02 2019 +0100"
      },
      "committer": {
        "name": "Daniel Fletcher",
        "email": "Daniel.Fletcher@gamma.co.uk",
        "time": "Wed Oct 23 10:42:02 2019 +0100"
      },
      "message": "Bug: Rename function wasn\u0027t working for me, the type was not being\nselected. I am unsure if this is the final solution as it will undo a\nprevious update that may resolve a differen issue.\n"
    },
    {
      "commit": "515578a967841e8b3c0ca3a720c77dd0ec171d78",
      "tree": "fb1ac6db2e8e22f9adbf79cd882da49ec8ae6407",
      "parents": [
        "4350932b9896f732f2f2c1c998b7471d42bfb497",
        "e9514f49675dfc1c0da939b8c5595d37e09040cc"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Mon Oct 21 22:40:01 2019 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 21 22:40:01 2019 -0700"
      },
      "message": "Merge pull request #311 from danfletcher1/master\n\nBug with sub folders/files of a renamed/removed path"
    },
    {
      "commit": "e9514f49675dfc1c0da939b8c5595d37e09040cc",
      "tree": "fa74262c06862143ccd764c58ec4c9adf86b6000",
      "parents": [
        "4adf56b4e483bd7870061bd47a902c97d612ff5e"
      ],
      "author": {
        "name": "Daniel Fletcher",
        "email": "Daniel.Fletcher@gamma.co.uk",
        "time": "Mon Oct 21 12:43:45 2019 +0100"
      },
      "committer": {
        "name": "Daniel Fletcher",
        "email": "Daniel.Fletcher@gamma.co.uk",
        "time": "Mon Oct 21 12:43:45 2019 +0100"
      },
      "message": "Removed some unnecessary logging, and previous merge duplicated some code\n"
    },
    {
      "commit": "4adf56b4e483bd7870061bd47a902c97d612ff5e",
      "tree": "96ee8ae8cb7b3f71487652a5ebd0f836191eb4b6",
      "parents": [
        "67f906c100220e3935a943405fb0cb2d5aadef82",
        "b4e1be7c5db2de33afd68469b6d29b957504398f"
      ],
      "author": {
        "name": "Daniel Fletcher",
        "email": "Daniel.Fletcher@gamma.co.uk",
        "time": "Mon Oct 21 11:54:57 2019 +0100"
      },
      "committer": {
        "name": "Daniel Fletcher",
        "email": "Daniel.Fletcher@gamma.co.uk",
        "time": "Mon Oct 21 11:54:57 2019 +0100"
      },
      "message": "Merge branch \u0027master\u0027 of https://github.com/danfletcher1/sftp\n"
    },
    {
      "commit": "67f906c100220e3935a943405fb0cb2d5aadef82",
      "tree": "04abcbd9f11f8d1704a70675824a2599bef95e1f",
      "parents": [
        "84e65273929835ce454631aa17b8bdb8bfa7c163"
      ],
      "author": {
        "name": "Daniel Fletcher",
        "email": "Daniel.Fletcher@gamma.co.uk",
        "time": "Wed Oct 09 16:40:31 2019 +0100"
      },
      "committer": {
        "name": "Daniel Fletcher",
        "email": "Daniel.Fletcher@gamma.co.uk",
        "time": "Mon Oct 21 11:52:48 2019 +0100"
      },
      "message": "When removing or renaming a folder, subfiles/folders of the path was not being updated\n"
    },
    {
      "commit": "4350932b9896f732f2f2c1c998b7471d42bfb497",
      "tree": "d0d37317fe68f3d7229106b0dc43c91e56e29ab3",
      "parents": [
        "463bb932d3438799dcac5fb40cadbc74b4aac636",
        "3f23d5935f77802522c4db72a30fe17f3773ff55"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Sun Oct 13 20:02:35 2019 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 13 20:02:35 2019 -0700"
      },
      "message": "Merge pull request #312 from LeeEirc/bugfix_request\n\nfix nil panic error"
    },
    {
      "commit": "463bb932d3438799dcac5fb40cadbc74b4aac636",
      "tree": "829453357883108c326f90fde47ca837e3ba19da",
      "parents": [
        "84e65273929835ce454631aa17b8bdb8bfa7c163",
        "c732bf9952f31833088221d304961351b17071cd"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Sun Oct 13 19:30:09 2019 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 13 19:30:09 2019 -0700"
      },
      "message": "Merge pull request #310 from pkg/issue-305-client-write\n\nIssue 305 client write\r\n\r\nFixes #305"
    },
    {
      "commit": "c732bf9952f31833088221d304961351b17071cd",
      "tree": "829453357883108c326f90fde47ca837e3ba19da",
      "parents": [
        "80676379624b3911398743032a5fc40b6bc9d627"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Sun Oct 06 16:49:46 2019 -0700"
      },
      "committer": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Sun Oct 13 19:18:35 2019 -0700"
      },
      "message": "add method to get fxerr value for StatusError code\n\nNeed to get StatusError.Code (uint32) converted to fxerr type so you can\ncompare it to public (exported) ErrSSHFx[..] error types. This adds a\nnew method, FxCode(), to the StatusError objects to handle this case.\n\nDid this vs trying to change types of existing fields to not break\nbackwards compatibility.\n"
    },
    {
      "commit": "80676379624b3911398743032a5fc40b6bc9d627",
      "tree": "cfdc41b9c7d0f66e63d0297079c235189f7271f9",
      "parents": [
        "84e65273929835ce454631aa17b8bdb8bfa7c163"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Sun Oct 06 16:49:31 2019 -0700"
      },
      "committer": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Sun Oct 13 19:18:30 2019 -0700"
      },
      "message": "add note in Create() docs about AWS + O_RDWR\n"
    },
    {
      "commit": "3f23d5935f77802522c4db72a30fe17f3773ff55",
      "tree": "3acca092924f03b6a3ffef6b817d08a4bb5e95d9",
      "parents": [
        "84e65273929835ce454631aa17b8bdb8bfa7c163"
      ],
      "author": {
        "name": "Eric",
        "email": "xplzv@126.com",
        "time": "Fri Oct 11 14:31:08 2019 +0800"
      },
      "committer": {
        "name": "Eric",
        "email": "xplzv@126.com",
        "time": "Fri Oct 11 14:31:08 2019 +0800"
      },
      "message": "fix nil panic error when sshFxpExtendedPacket could not UnmarshalBinary ExtendedRequest\n"
    },
    {
      "commit": "b4e1be7c5db2de33afd68469b6d29b957504398f",
      "tree": "4aeef952f3bc865a36e0affde62dfe698a436ec2",
      "parents": [
        "84e65273929835ce454631aa17b8bdb8bfa7c163"
      ],
      "author": {
        "name": "Daniel Fletcher",
        "email": "Daniel.Fletcher@gamma.co.uk",
        "time": "Wed Oct 09 16:40:31 2019 +0100"
      },
      "committer": {
        "name": "Daniel Fletcher",
        "email": "Daniel.Fletcher@gamma.co.uk",
        "time": "Wed Oct 09 16:40:31 2019 +0100"
      },
      "message": "When removing or renaming a folder, subfiles/folders of the path was not being updated\n"
    },
    {
      "commit": "84e65273929835ce454631aa17b8bdb8bfa7c163",
      "tree": "b5b2cb3efb155e101ccd045cf50c67fecf59d6c7",
      "parents": [
        "0852dbaaaf12e18941c240d4f9634bdf7d98abe0",
        "cfce8a5728bd636cc4b58325a84302b77d46f2d3"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Sun Sep 29 14:37:50 2019 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Sep 29 14:37:50 2019 -0700"
      },
      "message": "Merge pull request #309 from wutz/master\n\nfix: received packet too long"
    },
    {
      "commit": "0852dbaaaf12e18941c240d4f9634bdf7d98abe0",
      "tree": "b49240d7ba2432b3dc66dd3a68ec11d5e3a33b62",
      "parents": [
        "dcef9e0d4ab634fede2d5e625cadac1bfc91516b"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Sun Sep 29 14:00:25 2019 -0700"
      },
      "committer": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Sun Sep 29 14:00:25 2019 -0700"
      },
      "message": "update go versions in travis\n"
    },
    {
      "commit": "dcef9e0d4ab634fede2d5e625cadac1bfc91516b",
      "tree": "e4727e88d0d9452a1f03939f86a5ce2d169d6cee",
      "parents": [
        "8fc59612f2b0bbd784120cdea44aebc999b17c1d",
        "b4ea0fd6f6e43a951beb3211fcb2a7e221e9a437"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Sun Sep 29 13:12:10 2019 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Sep 29 13:12:10 2019 -0700"
      },
      "message": "Merge pull request #304 from drakkan/lint\n\nfix lint issues and update to be more idiomatic"
    },
    {
      "commit": "cfce8a5728bd636cc4b58325a84302b77d46f2d3",
      "tree": "6a90526cb9b22483f80fc122c1a988fa02235135",
      "parents": [
        "8fc59612f2b0bbd784120cdea44aebc999b17c1d"
      ],
      "author": {
        "name": "Taizeng Wu",
        "email": "wutaizeng@gmail.com",
        "time": "Sun Sep 29 14:39:33 2019 +0800"
      },
      "committer": {
        "name": "Taizeng Wu",
        "email": "wutaizeng@gmail.com",
        "time": "Sun Sep 29 14:39:33 2019 +0800"
      },
      "message": "fix: received packet too long\n\nClose #308\n"
    },
    {
      "commit": "8fc59612f2b0bbd784120cdea44aebc999b17c1d",
      "tree": "c368ece75ea23e1f7f9f4b85c5288cda4f819b6f",
      "parents": [
        "43a60a90f4c04c4af20e86b9f3be04fa3f06a9e8",
        "c5d967b3f61de11cd0c90c38e9888f43251bd7af"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Thu Sep 12 18:11:39 2019 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 12 18:11:39 2019 -0700"
      },
      "message": "Merge pull request #307 from drakkan/transfer_errors\n\nnotify errors to readerAt and writerAt"
    },
    {
      "commit": "c5d967b3f61de11cd0c90c38e9888f43251bd7af",
      "tree": "c368ece75ea23e1f7f9f4b85c5288cda4f819b6f",
      "parents": [
        "43a60a90f4c04c4af20e86b9f3be04fa3f06a9e8"
      ],
      "author": {
        "name": "Nicola Murino",
        "email": "nicola.murino@gmail.com",
        "time": "Thu Sep 12 08:17:32 2019 +0200"
      },
      "committer": {
        "name": "Nicola Murino",
        "email": "nicola.murino@gmail.com",
        "time": "Thu Sep 12 08:17:32 2019 +0200"
      },
      "message": "notify errors to readerAt and writerAt\n\nAdd an optional interface that readerAt and writerAt can implement\nto be notified about the error causing Serve() to exit with the\nrequest still open.\n\nImplement the TransferError interface in request-example.\nThis way we can run the request server example in debug mode, for example:\n\ncd examples/request-server\ngo run -tags debug main.go\n\nsimulate a connection error killing an sftp client while uploading/downloading\nand see the debug log that shows that the error is correctly notifyed\n\nFixes #306\n"
    },
    {
      "commit": "b4ea0fd6f6e43a951beb3211fcb2a7e221e9a437",
      "tree": "94e56f85bb342383fb4d939ea6f06d0b500e5753",
      "parents": [
        "43a60a90f4c04c4af20e86b9f3be04fa3f06a9e8"
      ],
      "author": {
        "name": "Nicola Murino",
        "email": "nicola.murino@gmail.com",
        "time": "Fri Aug 30 17:04:37 2019 +0200"
      },
      "committer": {
        "name": "Nicola Murino",
        "email": "nicola.murino@gmail.com",
        "time": "Fri Aug 30 17:04:37 2019 +0200"
      },
      "message": "fix lint issues\n\nThese lint issues remain:\n\n- request-errors.go, aliases for new error types\n- request-attrs.go, UidGid. Changing this will break compatibility\n"
    },
    {
      "commit": "43a60a90f4c04c4af20e86b9f3be04fa3f06a9e8",
      "tree": "6d0d07361bdd076d97d159b603efa1566fd2fd93",
      "parents": [
        "a760e7925ef7c53311d68246962ae008f21dfc53",
        "b519cb8db98b9693d30c3d5f19aaa80fcf806941"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Thu Aug 29 14:10:45 2019 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 29 14:10:45 2019 -0700"
      },
      "message": "Merge pull request #303 from drakkan/extensions\n\ndefine supported extensions in one place and use for both server and …"
    },
    {
      "commit": "b519cb8db98b9693d30c3d5f19aaa80fcf806941",
      "tree": "6d0d07361bdd076d97d159b603efa1566fd2fd93",
      "parents": [
        "a760e7925ef7c53311d68246962ae008f21dfc53"
      ],
      "author": {
        "name": "Nicola Murino",
        "email": "nicola.murino@gmail.com",
        "time": "Tue Aug 27 09:18:15 2019 +0200"
      },
      "committer": {
        "name": "Nicola Murino",
        "email": "nicola.murino@gmail.com",
        "time": "Tue Aug 27 09:18:15 2019 +0200"
      },
      "message": "define supported extensions in one place and use for both server and request-server\n"
    },
    {
      "commit": "a760e7925ef7c53311d68246962ae008f21dfc53",
      "tree": "dbe14bdee9b6a102aea3baa7752d022e297ff35a",
      "parents": [
        "554cbc556f25c73723c070e523e85ce6b6618740",
        "687cea6a445c26a5d7e3863f652bd73da4ec4521"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Tue Aug 27 02:21:13 2019 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 27 02:21:13 2019 +0000"
      },
      "message": "Merge pull request #302 from tommie/announce-posix-rename\n\nAnnounce the posix-rename extension in the server."
    },
    {
      "commit": "687cea6a445c26a5d7e3863f652bd73da4ec4521",
      "tree": "dbe14bdee9b6a102aea3baa7752d022e297ff35a",
      "parents": [
        "554cbc556f25c73723c070e523e85ce6b6618740"
      ],
      "author": {
        "name": "Tommie Gannert",
        "email": "tommie.gh@gannert.se",
        "time": "Mon Aug 26 08:57:23 2019 +0200"
      },
      "committer": {
        "name": "Tommie Gannert",
        "email": "tommie.gh@gannert.se",
        "time": "Mon Aug 26 09:02:10 2019 +0200"
      },
      "message": "Announce the posix-rename extension in the server.\n"
    },
    {
      "commit": "554cbc556f25c73723c070e523e85ce6b6618740",
      "tree": "5a5dcb264698a04a9bebba76963176a01a411571",
      "parents": [
        "5a2fe52342aca62abe20a5eb76e3847df76843c4"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Sun Aug 25 20:59:02 2019 -0700"
      },
      "committer": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Sun Aug 25 20:59:02 2019 -0700"
      },
      "message": "update versions to ignore on macOS\n"
    },
    {
      "commit": "5a2fe52342aca62abe20a5eb76e3847df76843c4",
      "tree": "fc20db77851b6b94161a42d056243f49c18b0be4",
      "parents": [
        "5d724974df79f5cb50201f01811e26b163183647",
        "55133952b5b0ef546b4ce032b2da25a204322909"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Sun Aug 25 20:32:04 2019 -0700"
      },
      "committer": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Sun Aug 25 20:32:04 2019 -0700"
      },
      "message": "Merge branch \u0027soopsio-master\u0027 into test\n"
    },
    {
      "commit": "5d724974df79f5cb50201f01811e26b163183647",
      "tree": "2d76c939aa0e8fef98865afe3fa70444b249afe7",
      "parents": [
        "b6b7dd88b0a3f534f617ae67549e69122798c63e",
        "e5ded3a9d1698c9c653b7e262edd51c23b7e51a4"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Sun Aug 25 20:24:06 2019 -0700"
      },
      "committer": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Sun Aug 25 20:24:06 2019 -0700"
      },
      "message": "Merge branch \u0027kardianos-kardianos-server-ext\u0027 into test\n"
    },
    {
      "commit": "b6b7dd88b0a3f534f617ae67549e69122798c63e",
      "tree": "9e63772ce216035f38d8cf6230af576218784532",
      "parents": [
        "3edd153f213d8d4191a0ee4577c61cca19436632",
        "2c24eaad1ca5ed563cb1eed5adfa04609c373b2e"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Sun Aug 25 20:22:54 2019 -0700"
      },
      "committer": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Sun Aug 25 20:22:54 2019 -0700"
      },
      "message": "Merge branch \u0027tommie-hardlink\u0027 into test\n"
    },
    {
      "commit": "55133952b5b0ef546b4ce032b2da25a204322909",
      "tree": "aa47805f9b55d9f7b4e629e3f281c51dbd3a5bbe",
      "parents": [
        "3edd153f213d8d4191a0ee4577c61cca19436632"
      ],
      "author": {
        "name": "soopsio",
        "email": "admin@soops.io",
        "time": "Fri Aug 09 21:48:13 2019 +0800"
      },
      "committer": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Sun Aug 25 20:19:45 2019 -0700"
      },
      "message": "gracefully handle unknown extended packets\n\nFixed a problem that caused secureFX to crash when\nerrUnknownExtendedPacket in SFTP server mode\n"
    },
    {
      "commit": "e5ded3a9d1698c9c653b7e262edd51c23b7e51a4",
      "tree": "0c5ad48059033d81f87a09aa32cb4cfcb1a1a663",
      "parents": [
        "3edd153f213d8d4191a0ee4577c61cca19436632"
      ],
      "author": {
        "name": "Daniel Theophanes",
        "email": "danielt@sembit.com",
        "time": "Mon Aug 19 12:57:53 2019 -0700"
      },
      "committer": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Sun Aug 25 20:17:08 2019 -0700"
      },
      "message": "sftp: support rename extension for server\n\nPreviously if a client makes an unsupported operation,\nlike a POSIX rename, it would exit the server.\n\nBoth support POSIX rename, and do not abort the connection\nif there is an unsupported operation is made by the client.\n"
    },
    {
      "commit": "2c24eaad1ca5ed563cb1eed5adfa04609c373b2e",
      "tree": "9e63772ce216035f38d8cf6230af576218784532",
      "parents": [
        "3edd153f213d8d4191a0ee4577c61cca19436632"
      ],
      "author": {
        "name": "Tommie Gannert",
        "email": "tommie@gannert.se",
        "time": "Fri May 24 21:23:18 2019 +0200"
      },
      "committer": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Sun Aug 25 20:16:37 2019 -0700"
      },
      "message": "Implement the hardlink@openssh.com extension.\n\nBoth client and server. This is documented in\n\n  https://github.com/openssh/openssh-portable/blob/master/PROTOCOL\n\nDraft 7 of SFTP added support for SSH_FXP_LINK which supports both\nsymlinks and hardlinks, but unfortunately OpenSSH doesn\u0027t support\nthat:\n\n  https://tools.ietf.org/html/draft-ietf-secsh-filexfer-07#section-7.7\n\nAdding support for this as an option would be a nice extension to\nthis.\n"
    },
    {
      "commit": "3edd153f213d8d4191a0ee4577c61cca19436632",
      "tree": "598edc8d8127bf19c4d442790793b8eb36b1114f",
      "parents": [
        "d4a0cecfdc51dfca949ebc1100e616d2d2720e8d"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Sun Aug 25 18:35:08 2019 -0700"
      },
      "committer": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Sun Aug 25 18:40:38 2019 -0700"
      },
      "message": "update to use go modules\n"
    },
    {
      "commit": "d4a0cecfdc51dfca949ebc1100e616d2d2720e8d",
      "tree": "586e73b4d371c34b8124bebb06eb734409d5a9e3",
      "parents": [
        "79ae07e7783e194ec8f46029774d8c4966a79ff4"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Sun Aug 25 18:21:33 2019 -0700"
      },
      "committer": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Sun Aug 25 18:21:33 2019 -0700"
      },
      "message": "remove unstandard error\n\nAll unmarshall calls return the same errShortPacket except this one for\nno reason. Fix that.\n"
    },
    {
      "commit": "79ae07e7783e194ec8f46029774d8c4966a79ff4",
      "tree": "c8e2b73be592fb7fceb6f3accd90a16dd85a8cf8",
      "parents": [
        "7843b1d16416b38c2028f2cb7f7c406cc8f14aa1",
        "2b53636545449a7276b97e594d2de9bc8c38054d"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Thu Jun 13 09:30:56 2019 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 13 09:30:56 2019 -0700"
      },
      "message": "Merge pull request #293 from tommie/fixes\n\nAllow -sftp to work in server_integration_test"
    },
    {
      "commit": "2b53636545449a7276b97e594d2de9bc8c38054d",
      "tree": "c8e2b73be592fb7fceb6f3accd90a16dd85a8cf8",
      "parents": [
        "7843b1d16416b38c2028f2cb7f7c406cc8f14aa1"
      ],
      "author": {
        "name": "Tommie Gannert",
        "email": "tommie@gannert.se",
        "time": "Wed Jun 12 09:20:07 2019 +0200"
      },
      "committer": {
        "name": "Tommie Gannert",
        "email": "tommie@gannert.se",
        "time": "Wed Jun 12 09:20:07 2019 +0200"
      },
      "message": "Allow -sftp to work in server_integration_test.\n"
    },
    {
      "commit": "7843b1d16416b38c2028f2cb7f7c406cc8f14aa1",
      "tree": "c95b8c42d1e897a42f5234ca0f420de92298aad2",
      "parents": [
        "e98a7bef68290b4608f688f291b79e150e1d9da0",
        "bef7f048438ce4d3ff9c75d1fe0f2e3ecfb9e86f"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Wed Jun 05 14:37:45 2019 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 05 14:37:45 2019 -0700"
      },
      "message": "Merge pull request #292 from sekky0905/remove-travis-sudo-setting\n\nRemove sudo setting from travis.yml"
    },
    {
      "commit": "bef7f048438ce4d3ff9c75d1fe0f2e3ecfb9e86f",
      "tree": "c95b8c42d1e897a42f5234ca0f420de92298aad2",
      "parents": [
        "e98a7bef68290b4608f688f291b79e150e1d9da0"
      ],
      "author": {
        "name": "sekky0905",
        "email": "ks.dev.sekky0905@gmail.com",
        "time": "Tue Jun 04 16:50:16 2019 +0900"
      },
      "committer": {
        "name": "sekky0905",
        "email": "ks.dev.sekky0905@gmail.com",
        "time": "Tue Jun 04 16:50:16 2019 +0900"
      },
      "message": "Remove sudo setting from travis.yml\n"
    },
    {
      "commit": "e98a7bef68290b4608f688f291b79e150e1d9da0",
      "tree": "b306acde776745cbed2228eb85f9779c010bdd32",
      "parents": [
        "5bcd86d72480cb6de4bc5804f832e27855ba033f",
        "48c87f62c99e72517ec6919ee5e606835a38d402"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Wed May 22 19:58:18 2019 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 22 19:58:18 2019 -0700"
      },
      "message": "Merge pull request #289 from ncw/fix-288\n\nUse Stat rather than Fstat in File.WriteTo to work around server bugs"
    },
    {
      "commit": "48c87f62c99e72517ec6919ee5e606835a38d402",
      "tree": "b306acde776745cbed2228eb85f9779c010bdd32",
      "parents": [
        "5bcd86d72480cb6de4bc5804f832e27855ba033f"
      ],
      "author": {
        "name": "Nick Craig-Wood",
        "email": "nick@craig-wood.com",
        "time": "Tue May 21 11:56:37 2019 +0100"
      },
      "committer": {
        "name": "Nick Craig-Wood",
        "email": "nick@craig-wood.com",
        "time": "Tue May 21 12:02:15 2019 +0100"
      },
      "message": "Use Stat rather than Fstat in File.WriteTo to work around server bugs\n\nBefore this change in File.WriteTo() we used Fstat to discover the\nlength of the file being transferred.  It appears that some SFTP\nservers do not implement this properly perhaps because it is a seldom\nused call.\n\nAfter this change we replace the Fstat on the file handle with a Stat\nof the path.  Stat is commonly used function and implemented correctly\nin both the servers that had the problem with Fstat, thus working\naround the problem.\n\nThe code before and after uses the same number of SFTP roundtrips so\nperformance should be identical.\n\nFixes #288\n"
    },
    {
      "commit": "5bcd86d72480cb6de4bc5804f832e27855ba033f",
      "tree": "c70534db87b3cbff45d467573aa58d2cc93213b4",
      "parents": [
        "a713b07e6d90e1831d7fefcb69f1310edb3783ae"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Sun Apr 07 12:57:05 2019 -0700"
      },
      "committer": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Sun Apr 07 12:57:05 2019 -0700"
      },
      "message": "bump versions in travis config\n"
    },
    {
      "commit": "a713b07e6d90e1831d7fefcb69f1310edb3783ae",
      "tree": "9f486030be1a2c600646da4f53983f78afbd8568",
      "parents": [
        "c35a03098c325b35d4e878ae76f5401ffac1bead",
        "5cd7f324f964e99f4f6aa4e0e54e9834e88fd2d3"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Tue Feb 05 12:56:04 2019 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Feb 05 12:56:04 2019 -0800"
      },
      "message": "Merge pull request #279 from wutzx/client-conn-wait\n\nAdd Wait method to detect underlying SFTP connection closed"
    },
    {
      "commit": "c35a03098c325b35d4e878ae76f5401ffac1bead",
      "tree": "dfc7563e3c47af191fb1b67c4b0ffa41c6afa0fb",
      "parents": [
        "e6f3261c6b04345b9c5b0122c12815384d332022",
        "d8ec5de5ee3491c45e3225ae70e8158447dfea50"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Tue Feb 05 12:26:05 2019 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Feb 05 12:26:05 2019 -0800"
      },
      "message": "Merge pull request #282 from kardianos/kardianos-fixup-tests\n\nsftp: update tests to finish and not panic on windows"
    },
    {
      "commit": "e6f3261c6b04345b9c5b0122c12815384d332022",
      "tree": "615a6517b164a2a3a353fca86fd8e69126950ac7",
      "parents": [
        "a741a7f1d5229e82ed07b9ff00167a2e990bea71",
        "05f7f0a92cdc5e71256ef62c5411efa631609cb2"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Mon Feb 04 19:07:29 2019 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Feb 04 19:07:29 2019 -0800"
      },
      "message": "Merge pull request #283 from pkg/open-on-open\n\nInitialize opening of files/directories upon receiving open packets"
    },
    {
      "commit": "05f7f0a92cdc5e71256ef62c5411efa631609cb2",
      "tree": "615a6517b164a2a3a353fca86fd8e69126950ac7",
      "parents": [
        "fdad088de88aeb217b25542d3d909318dfc2cdb8"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Mon Feb 04 13:22:46 2019 -0800"
      },
      "committer": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Mon Feb 04 13:22:46 2019 -0800"
      },
      "message": "add comment about purpose of context use in example/tests\n"
    },
    {
      "commit": "fdad088de88aeb217b25542d3d909318dfc2cdb8",
      "tree": "546c8c73cde2a730e9d67def9448067fbcb10cfe",
      "parents": [
        "7f106a3327618e9d64d54576852c921c178149e1"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Mon Feb 04 13:20:01 2019 -0800"
      },
      "committer": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Mon Feb 04 13:21:47 2019 -0800"
      },
      "message": "small fixes suggested in code review\n\nneedless use of empty byte slice (left over from earlier work)\nplus a couple tweaks to tests/asserts\n\nthanks @puellanivis for the review\n"
    },
    {
      "commit": "7f106a3327618e9d64d54576852c921c178149e1",
      "tree": "7240e616cbe1ee3cbbeef9e607ea9eace6038878",
      "parents": [
        "c71cbb17d337cdf8572ca6eca05061364e3b9870"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Mon Jan 28 18:23:54 2019 -0800"
      },
      "committer": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Tue Jan 29 14:49:22 2019 -0800"
      },
      "message": "change fstat to not reuse request object\n\nWhen fstat is called it now uses the handle to get the opened request,\npulls the filepath from that and creates a new request for the fstat\ncall. This eliminates the need to change the Method on the request\nobject and furthers the goal of eliminating post-creation mutation of\nthe request object to open up the possibility to eliminate or at least\nreduce the use of the global request lock.\n"
    },
    {
      "commit": "c71cbb17d337cdf8572ca6eca05061364e3b9870",
      "tree": "06c9b96dd62187874e30d9b3a6a1070d2fec543e",
      "parents": [
        "0a96e0de8a32fc14f685be6c70d312e33a29b2c0"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Mon Jan 28 18:20:55 2019 -0800"
      },
      "committer": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Tue Jan 29 14:49:22 2019 -0800"
      },
      "message": "\u0027open\u0027 directory on opendir packet\n\nJust like with files, the call to the hander to create the Lister is\ndone when the OPENDIR packet is received. This eliminates the need for\nthe lock in the filelist() method and opens the path for eliminating\nmore locks.\n"
    },
    {
      "commit": "0a96e0de8a32fc14f685be6c70d312e33a29b2c0",
      "tree": "390922ccc3c238aad34bccf4ff1395c1ce7cebb3",
      "parents": [
        "91a21603c963c46c983be7b8d867bc83d230f93d"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Tue Nov 20 16:34:41 2018 -0800"
      },
      "committer": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Tue Jan 29 14:49:22 2019 -0800"
      },
      "message": "initial test of opening \u0027file\u0027 on open packet\n\nTesting feasibility of creating the reader/writer when first receiving\nthe Open packet instead of waiting for the Get/Put.\n\nThis work is meant to make the Request locks easier to manage and\nultimately reducing/eliminating them as much as possible.\n"
    },
    {
      "commit": "91a21603c963c46c983be7b8d867bc83d230f93d",
      "tree": "9927a94fb6b776cb26e38662e7d69e90dc1580ad",
      "parents": [
        "a741a7f1d5229e82ed07b9ff00167a2e990bea71"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Tue Jan 29 14:45:31 2019 -0800"
      },
      "committer": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Tue Jan 29 14:49:05 2019 -0800"
      },
      "message": "add WithContext() calls to each test handler\n\nWant to catch issues with using Context objects in tests. Instigated by\na deadlock bug (#280) when calling WithContext(). This triggers that\nbug.\n"
    },
    {
      "commit": "d8ec5de5ee3491c45e3225ae70e8158447dfea50",
      "tree": "1cb00191bb89d95188a509fc96e4d2311f437827",
      "parents": [
        "08de04f133f27844173471167014e1a753655ac8"
      ],
      "author": {
        "name": "Daniel Theophanes",
        "email": "kardianos@gmail.com",
        "time": "Fri Jan 18 15:59:30 2019 -0800"
      },
      "committer": {
        "name": "Daniel Theophanes",
        "email": "kardianos@gmail.com",
        "time": "Fri Jan 18 16:29:07 2019 -0800"
      },
      "message": "sftp: update tests to finish and not panic on windows\n\nMany Unix assuptions have been made when testing.\nPreviously running tests on windows threw a panic\npart way through the tests. After these changes\nmany more tests pass when the fix was isolated\nto the test itself, and none panic.\n\nSome tests are skipped because they do make sense\non windows (chmod, chown), while others are skipped\njust to how the test was implemented.\n\nLastly, some of the external executables were hard coded.\nChange these to look paths in TestMain first. This is done\nto better support windows, where openssh may be installed and\nsftp and sftp-server may both be in the PATH.\n"
    },
    {
      "commit": "5cd7f324f964e99f4f6aa4e0e54e9834e88fd2d3",
      "tree": "177ab231a95cd539903d8d342f375fcfff34deff",
      "parents": [
        "3a53acc96bf988b162d8e722e7d68b865b9831a0"
      ],
      "author": {
        "name": "Taizeng Wu",
        "email": "wutaizeng@gmail.com",
        "time": "Wed Dec 05 16:30:09 2018 +0800"
      },
      "committer": {
        "name": "Taizeng Wu",
        "email": "wutaizeng@gmail.com",
        "time": "Wed Dec 05 16:30:09 2018 +0800"
      },
      "message": "Use channel to implement a simple way to wait\n"
    },
    {
      "commit": "3a53acc96bf988b162d8e722e7d68b865b9831a0",
      "tree": "7ce7cafb050273d3016faaf4a9f11e36a71f7ca8",
      "parents": [
        "fbf9e05c668ec1b50b5c368e3158e5e13801730e"
      ],
      "author": {
        "name": "Taizeng Wu",
        "email": "wutaizeng@gmail.com",
        "time": "Wed Dec 05 14:47:03 2018 +0800"
      },
      "committer": {
        "name": "Taizeng Wu",
        "email": "wutaizeng@gmail.com",
        "time": "Wed Dec 05 14:47:03 2018 +0800"
      },
      "message": "Reimplement Wait method to make it can be called concurrently from multiple goroutines\n"
    },
    {
      "commit": "fbf9e05c668ec1b50b5c368e3158e5e13801730e",
      "tree": "b47b0ba1e77daf95f00b3f735fd28b2762ca54cd",
      "parents": [
        "08de04f133f27844173471167014e1a753655ac8"
      ],
      "author": {
        "name": "Taizeng Wu",
        "email": "wutaizeng@gmail.com",
        "time": "Mon Dec 03 17:46:45 2018 +0800"
      },
      "committer": {
        "name": "Taizeng Wu",
        "email": "wutaizeng@gmail.com",
        "time": "Mon Dec 03 17:46:45 2018 +0800"
      },
      "message": "Add Wait method to detect underlying SFTP connection closed\n\nCloses #278\n"
    },
    {
      "commit": "a741a7f1d5229e82ed07b9ff00167a2e990bea71",
      "tree": "45bafb8fac1ebd8c947244de468b7aba657d48a9",
      "parents": [
        "08de04f133f27844173471167014e1a753655ac8"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Tue Nov 20 16:02:25 2018 -0800"
      },
      "committer": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Tue Nov 20 16:35:28 2018 -0800"
      },
      "message": "prevent memory leaks in slice buffer\n\nRemove reference to packets from packet ordering slices to prevent\nsmall memory leak. The leak is bounded and temporary, but this is a good\npractice.\n"
    },
    {
      "commit": "08de04f133f27844173471167014e1a753655ac8",
      "tree": "09705ec6df92e7bbcdb06c52144f794ca94dfd68",
      "parents": [
        "b9345f483dc30f2e9d44786ee1a7e5700bb2341b",
        "c9d56c81086ef621f2daf0d8ea7887941cc6422d"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Mon Sep 17 15:22:55 2018 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 17 15:22:55 2018 -0700"
      },
      "message": "Merge pull request #272 from pkg/271-alt\n\nfix race condition in fileget/fileput"
    },
    {
      "commit": "c9d56c81086ef621f2daf0d8ea7887941cc6422d",
      "tree": "09705ec6df92e7bbcdb06c52144f794ca94dfd68",
      "parents": [
        "b9345f483dc30f2e9d44786ee1a7e5700bb2341b"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Fri Sep 14 14:10:32 2018 -0700"
      },
      "committer": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Mon Sep 17 11:44:35 2018 -0700"
      },
      "message": "fix race condition in fileget/fileput\n\nThis fixes the concurrent access/locking race in both fileget and\nfileput when accessing the saved readerAt/writerAt. It eliminates the\ndedicated functions and moves the access/locking inline where they were\ncalled to make it clearer.\n\nThanks to Marshall Brekka (@marshallbrekka) for the original bug report\nand outline for the fix.\n"
    },
    {
      "commit": "b9345f483dc30f2e9d44786ee1a7e5700bb2341b",
      "tree": "4f1f2a7b4599bb6ac7bda9bda82d41df1f73593c",
      "parents": [
        "5e39e376f37a090f9612bdc2ac66dd72c1eeff84",
        "fbf066c9de0d33b3d424ba6bafbbf5ecaa515e7f"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Fri Aug 24 15:50:03 2018 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 24 15:50:03 2018 -0700"
      },
      "message": "Merge pull request #248 from perkeep/packetwrite\n\nWrite packet length header \u0026 payload together on the wire."
    },
    {
      "commit": "5e39e376f37a090f9612bdc2ac66dd72c1eeff84",
      "tree": "3c32de57ce23a00e4f1ae8116f6e0cbf7e4886f1",
      "parents": [
        "718e6477175d68cfcef67eb0a19ddcb74563a777"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Fri Aug 24 15:42:24 2018 -0700"
      },
      "committer": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Fri Aug 24 15:42:24 2018 -0700"
      },
      "message": "update travis tests for new go version\n"
    },
    {
      "commit": "718e6477175d68cfcef67eb0a19ddcb74563a777",
      "tree": "ce006ffba3e377c861b4357324f4189de7be6d2f",
      "parents": [
        "fe93131e0a925a116ad9296296bb40c3373d69eb",
        "b0f20f999fc77694512444077c6bbf70e34160a9"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Wed Aug 22 13:21:50 2018 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 22 13:21:50 2018 -0700"
      },
      "message": "Merge pull request #266 from pkg/issue265\n\nfix race w/ open packet and stat"
    },
    {
      "commit": "b0f20f999fc77694512444077c6bbf70e34160a9",
      "tree": "ce006ffba3e377c861b4357324f4189de7be6d2f",
      "parents": [
        "fe93131e0a925a116ad9296296bb40c3373d69eb"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Mon Aug 20 12:39:58 2018 -0700"
      },
      "committer": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Wed Aug 22 13:11:00 2018 -0700"
      },
      "message": "fix race w/ open packet and stat\n\nAn Open packet would trigger the use of a worker pool, then the Stat\npacket would come in go to the pool and return faster than the Open\n(returning a file-not-found error). This fixes that be eliminating the\npool/non-pool state switching.\n\nThe include test doesn\u0027t really exercise it fully as it cannot inject\na delay in the right place to trigger the race. I plan on adding a means\nto inject some logic into the packet handling in the future once I\nrewrite the old filesystem server code as a request-server backend.\n\nFixes #265\n"
    },
    {
      "commit": "fe93131e0a925a116ad9296296bb40c3373d69eb",
      "tree": "d10ccfc1aee79c1b6568e17da082e63f2750e98d",
      "parents": [
        "6b9fa10dea25176501bd80eb8a45a46d2afc97ad"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Fri Aug 17 11:59:53 2018 -0700"
      },
      "committer": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Fri Aug 17 11:59:53 2018 -0700"
      },
      "message": "fix example request filesystem\u0027s file renaming\n\nalso added a test for the issue\n\nFixes #264\n"
    },
    {
      "commit": "6b9fa10dea25176501bd80eb8a45a46d2afc97ad",
      "tree": "77eaa47cbc0b2809e1516f7fb5d430ab2919eb9b",
      "parents": [
        "7ef932ecefe2aab09dfd57699795edfac4562096",
        "7f7e75b40d7b9ec6eb81c1d0dcacbadec0444470"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Wed Aug 01 13:35:24 2018 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 01 13:35:24 2018 -0700"
      },
      "message": "Merge pull request #263 from pkg/packet-embedded-in-ordered\n\nensure packet responses in same order as requests\r\n\r\nFixes #260"
    },
    {
      "commit": "7f7e75b40d7b9ec6eb81c1d0dcacbadec0444470",
      "tree": "77eaa47cbc0b2809e1516f7fb5d430ab2919eb9b",
      "parents": [
        "7ef932ecefe2aab09dfd57699795edfac4562096"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Wed Jul 25 16:03:30 2018 -0700"
      },
      "committer": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Wed Aug 01 13:18:57 2018 -0700"
      },
      "message": "ensure packet responses in same order as requests\n\nPrevious code used the request ids to do ordering. This worked until a\nclient came along that used un-ordered request ids. This reworks the\nordering to use an internal counter (per session) to order all packets\nensuring that responses are sent in the same order as the requests were\nreceived.\n\nFixes #260\n"
    },
    {
      "commit": "7ef932ecefe2aab09dfd57699795edfac4562096",
      "tree": "3227ef4535453b8f10abb88ef0a0159e717d9e91",
      "parents": [
        "1afc1d9a7850373c208051c5e4a3c04f13f4fd02",
        "ed3a8b631545ce5116b4204e3315c212fb762865"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Fri Jul 27 13:50:50 2018 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 27 13:50:50 2018 -0700"
      },
      "message": "Merge pull request #262 from ghafoors/aix_compatibility\n\nadded build tags required for gcc-go on AIX"
    },
    {
      "commit": "ed3a8b631545ce5116b4204e3315c212fb762865",
      "tree": "996a271d5051121793ac48619823d7c2ec846984",
      "parents": [
        "57673e38ea946592a59c26592b7e6fbda646975b"
      ],
      "author": {
        "name": "Abdulla Kaleem",
        "email": "kaleem@bml.com.mv",
        "time": "Thu Jul 26 16:04:57 2018 +0500"
      },
      "committer": {
        "name": "Abdulla Kaleem",
        "email": "kaleem@bml.com.mv",
        "time": "Thu Jul 26 16:04:57 2018 +0500"
      },
      "message": "added build tags required for gcc-go on AIX\n\n"
    },
    {
      "commit": "1afc1d9a7850373c208051c5e4a3c04f13f4fd02",
      "tree": "0d340289662f0dddb8be026a46f705308702635a",
      "parents": [
        "b50b1f9eafcd989465125cd5fd2b5eda3e392f2a"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Wed Jul 25 14:54:02 2018 -0700"
      },
      "committer": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Wed Jul 25 15:01:43 2018 -0700"
      },
      "message": "refactor server response to allow for extending\n\nInstead of sendPacket/sendError being sprayed all over the place, this\nchange has all those places instead return a responsePacket (eventually)\nback to the main handling function which then calls sendPacket in one\nplace.\n\nBehaviour of the code should remain exactly the same.\n\nThis makes it much easier to work with the response packets (eg. for the\npacket ordering issue I\u0027m working on).\n"
    },
    {
      "commit": "b50b1f9eafcd989465125cd5fd2b5eda3e392f2a",
      "tree": "fcf12403146a245811f64ab4c75a62a704986c92",
      "parents": [
        "523bded012413afa467d8e1662f0f2505aba4950"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Mon Jul 23 16:53:51 2018 -0700"
      },
      "committer": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Mon Jul 23 16:53:51 2018 -0700"
      },
      "message": "fix sendError usage to match packet type signature\n\nsendError takes a requestPacket but was simplifying it to an ider\ninterface. Future work needed it to be requestPacket but I wanted to fix\ndidn\u0027t up type usage in its own commit.\n"
    },
    {
      "commit": "523bded012413afa467d8e1662f0f2505aba4950",
      "tree": "0bf624ef09cef3566c648144428da0a86b4f6a5c",
      "parents": [
        "048358fb969c0f478d5269c099102632a5f3c1a5"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Mon Jul 23 16:38:21 2018 -0700"
      },
      "committer": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Mon Jul 23 16:38:21 2018 -0700"
      },
      "message": "replace interface{} with more specific type\n"
    },
    {
      "commit": "048358fb969c0f478d5269c099102632a5f3c1a5",
      "tree": "7b636b2ecebc6ab1cc5518886e9b14ef68c18f88",
      "parents": [
        "4cad28be4316890ac4db546fe614c70cfbeaf09f"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Mon Jul 23 15:34:43 2018 -0700"
      },
      "committer": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Mon Jul 23 15:53:41 2018 -0700"
      },
      "message": "use correct param type instead of asserting\n\nInstead of accepting a more general type and then asserting it to the\nproper type, just take the proper type as the argument.\nAlso clean up some of the use of it where it checked old direct sending\ncode\u0027s return error (error is now always nil).\n"
    },
    {
      "commit": "4cad28be4316890ac4db546fe614c70cfbeaf09f",
      "tree": "9a042ef3e57c57fa7acbbbd3051a9fbe7f000b1e",
      "parents": [
        "d0a1c8098b3a8977c0a244106dd758572c81b408"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Mon Jul 23 14:49:12 2018 -0700"
      },
      "committer": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Mon Jul 23 14:49:12 2018 -0700"
      },
      "message": "eliminate bare values in composite literals\n\nUsing key-value pairs is much more future proof.\n"
    },
    {
      "commit": "d0a1c8098b3a8977c0a244106dd758572c81b408",
      "tree": "6f963e6898fd14f3734438b2b7621673fcffe370",
      "parents": [
        "57673e38ea946592a59c26592b7e6fbda646975b"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Mon Jul 23 12:18:00 2018 -0700"
      },
      "committer": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Mon Jul 23 12:18:00 2018 -0700"
      },
      "message": "remove unnecessary type\n\nAdded to shorten code text, but not used enough to be worth the extra type.\n"
    },
    {
      "commit": "57673e38ea946592a59c26592b7e6fbda646975b",
      "tree": "74fd476512084ef1d94aad3815c5ee45258f9b24",
      "parents": [
        "1de5f77cfaab9f7258cd802449a0b1eb53998e7e"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Sun Jun 10 18:16:20 2018 -0700"
      },
      "committer": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Sun Jun 10 18:16:20 2018 -0700"
      },
      "message": "no longer need new request after opendir stat\n\nPR #257 fixes the issue with running Stat and Readdir on the same\nRequest. Thus we no longer need to close and recreate the Request\nwhen handling an Opendir call.\n"
    },
    {
      "commit": "1de5f77cfaab9f7258cd802449a0b1eb53998e7e",
      "tree": "1bcd3eae275e680985744a393605e0de6c1c9858",
      "parents": [
        "6227cfc71f4b02132d300b6d0bdd809c6b63a6d4",
        "54893da9f3ee0a5199e06f0cd09ed77171e27d60"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Sun Jun 10 17:45:10 2018 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jun 10 17:45:10 2018 -0700"
      },
      "message": "Merge pull request #257 from pkg/issue256\n\nfix issue with reusing opendir file handle\r\n\r\nFixes #256"
    },
    {
      "commit": "54893da9f3ee0a5199e06f0cd09ed77171e27d60",
      "tree": "1bcd3eae275e680985744a393605e0de6c1c9858",
      "parents": [
        "59287c7bbc52e084b0740c3c9a87805fa9b84586"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Tue Jun 05 18:34:17 2018 -0700"
      },
      "committer": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Tue Jun 05 18:34:17 2018 -0700"
      },
      "message": "fix issue with reusing opendir file handle\n\nMethods (Stat, Readlink) that only work on sigle file no longer keep any\nlist state. Only the List method now keeps the list progress state.\n\nFixes #256\n"
    },
    {
      "commit": "59287c7bbc52e084b0740c3c9a87805fa9b84586",
      "tree": "e99d428233039e84acb21095236765baec770672",
      "parents": [
        "6227cfc71f4b02132d300b6d0bdd809c6b63a6d4"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Tue Jun 05 18:34:07 2018 -0700"
      },
      "committer": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Tue Jun 05 18:34:07 2018 -0700"
      },
      "message": "test case to trigger error on opendir handle reuse\n"
    },
    {
      "commit": "6227cfc71f4b02132d300b6d0bdd809c6b63a6d4",
      "tree": "c89155a4f00bc6d2c454a22602782f474b375b26",
      "parents": [
        "2737d0e96ee4bc0bdaae02ff89b94f3459e6a79e"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Tue Jun 05 16:35:42 2018 -0700"
      },
      "committer": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Tue Jun 05 16:35:42 2018 -0700"
      },
      "message": "organization of some tests didn\u0027t make sense\n"
    },
    {
      "commit": "2737d0e96ee4bc0bdaae02ff89b94f3459e6a79e",
      "tree": "042c5327f99679216c34a4005c7a93bb366c518e",
      "parents": [
        "0f2875a7d36c6b7a252488987731b89ede1b47f4",
        "218c0d4148bb1b53ecb42134d32a432750772b88"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Thu May 31 13:33:33 2018 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 31 13:33:33 2018 -0700"
      },
      "message": "Merge pull request #255 from pkg/issue253\n\nOpendir should return an error status when not found"
    },
    {
      "commit": "0f2875a7d36c6b7a252488987731b89ede1b47f4",
      "tree": "eb697c09bc3734986dacf303cda7c14b7da428dd",
      "parents": [
        "f01c3557dc9c06caf7c71e0e8b468fe1b5f0b981",
        "f9330fc78c007416e5ee971121a804dfcd7b499c"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Mon May 28 13:05:41 2018 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 28 13:05:41 2018 -0700"
      },
      "message": "Merge pull request #254 from sggms/master\n\nAllow to configure maxConcurrentRequests in client"
    },
    {
      "commit": "f9330fc78c007416e5ee971121a804dfcd7b499c",
      "tree": "221568bff5420a2d2735482c64c0f995740650a0",
      "parents": [
        "1073df2ac4911691d021e2d094630e7642073a6b"
      ],
      "author": {
        "name": "gm42",
        "email": "gm42@users.noreply.github.com",
        "time": "Fri May 25 15:43:09 2018 +0200"
      },
      "committer": {
        "name": "gm42",
        "email": "gm42@users.noreply.github.com",
        "time": "Mon May 28 09:44:19 2018 +0200"
      },
      "message": "Allow to configure maxConcurrentRequests\n"
    },
    {
      "commit": "218c0d4148bb1b53ecb42134d32a432750772b88",
      "tree": "267546346f725804fa7daf6aa48bab2553062e17",
      "parents": [
        "f01c3557dc9c06caf7c71e0e8b468fe1b5f0b981"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Fri May 25 21:47:30 2018 -0700"
      },
      "committer": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Sat May 26 13:59:55 2018 -0700"
      },
      "message": "Opendir return an error status when not found\n\nThe initial Opendir packet is supposed to repond with an error status if\nthe directory wasn\u0027t found. It was just returning a handle without\nchecking, now it does a Stat on the path and only returns the handle if\nthe Stat is successful and it indicates it is a directory, otherwise it\nreturns an error.\n"
    },
    {
      "commit": "f01c3557dc9c06caf7c71e0e8b468fe1b5f0b981",
      "tree": "3170ba47ac76d77aceb5b78240abfedbe5c1552b",
      "parents": [
        "0f45c1c8bcd972bc6d873dba8f09a9be937a89af"
      ],
      "author": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Sat May 26 13:55:29 2018 -0700"
      },
      "committer": {
        "name": "John Eikenberry",
        "email": "jae@zhar.net",
        "time": "Sat May 26 13:55:29 2018 -0700"
      },
      "message": "Be sure to cancel context when Close is called.\n\nWhen I moved the context below the close calls to fix the issue with\ncancel interfering with file finalizing, I didn\u0027t take into account\nthe returns. The context cancel needed to be done regardless which this\ndoes by moving it into a defer.\n"
    }
  ],
  "next": "0f45c1c8bcd972bc6d873dba8f09a9be937a89af"
}
