)]}'
{
  "log": [
    {
      "commit": "9d2f0eabcfe0f4f9f63ddd075d6152eb6bf660b0",
      "tree": "5152de8e2124d83a68a6676c379b2fbc05b07270",
      "parents": [
        "44d5f72cede24b08361b2733e945403c0f832bc4"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Apr 11 22:13:10 2014"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Apr 11 22:13:10 2014"
      },
      "message": "update copyright + HISTORY\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1262 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "44d5f72cede24b08361b2733e945403c0f832bc4",
      "tree": "7a300ca38f5c77412bc870dafa671686ebf34fdb",
      "parents": [
        "d3ca2c7c5039cd4d15cc9eab7d0b4f2a0a7eb85e"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Apr 11 22:08:12 2014"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Apr 11 22:08:12 2014"
      },
      "message": "update INSTALL, version and setup.py\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1261 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "d3ca2c7c5039cd4d15cc9eab7d0b4f2a0a7eb85e",
      "tree": "3e076b968631f4a065389b5fa54a4d7fbee4ccac",
      "parents": [
        "96ffe07c853f1b18a431c1fccb93ff599951dd5f"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Apr 11 21:12:11 2014"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Apr 11 21:12:11 2014"
      },
      "message": "fix issue 282: add /dev/poll support for solaris\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1260 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "96ffe07c853f1b18a431c1fccb93ff599951dd5f",
      "tree": "73753e3fd33c14379339cd5f57456e813d6d6015",
      "parents": [
        "84be5946de793cb45bf2c2cb1601aa59db8fba5c"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Apr 11 19:17:13 2014"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Apr 11 19:17:13 2014"
      },
      "message": "lower INTERRUPTED_TRANSF_SIZE to try avoiding false positives + provide alias for deprecate unittest method\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1259 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "84be5946de793cb45bf2c2cb1601aa59db8fba5c",
      "tree": "72220929a4453147fd2731d036f3b1d88c0024da",
      "parents": [
        "b12ecde7816329f95375b427b243650d5dbe5e68"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Apr 11 19:12:29 2014"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Apr 11 19:12:29 2014"
      },
      "message": "lower FTP server data channel\u0027s buffer size so that we (hopefully) get less false positives\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1258 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "b12ecde7816329f95375b427b243650d5dbe5e68",
      "tree": "c6227d8bea90c09be8551fece32cb804bf553dac",
      "parents": [
        "6593280aa0166d8bec71551e0799d482f7609f4c"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Apr 11 19:01:19 2014"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Apr 11 19:01:19 2014"
      },
      "message": "issue 285: take advantage of unittest2\u0027s addCleanup()\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1257 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "6593280aa0166d8bec71551e0799d482f7609f4c",
      "tree": "6e6315ccc7a3df4a3b8665e20843bb00a40a222d",
      "parents": [
        "8678907248f64fd82e9ae3511fc447baadfb9905"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Apr 11 18:44:09 2014"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Apr 11 18:44:09 2014"
      },
      "message": "assertRaisesRegexp was deprecated in favour or assertRaisesRegex\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1256 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "8678907248f64fd82e9ae3511fc447baadfb9905",
      "tree": "76261bac43e8787f4374c2d06fdbb2b0079d0e5a",
      "parents": [
        "e5d3bebc47dee040b6a72c4893f331edf2c1bf7d"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Apr 11 18:39:23 2014"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Apr 11 18:39:23 2014"
      },
      "message": "fix 285: unittest2 migration\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1255 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "e5d3bebc47dee040b6a72c4893f331edf2c1bf7d",
      "tree": "d6eeb449c96339f02ec494f2f5008311a25de5cc",
      "parents": [
        "8ace29264f73fd6420cc35c21d1ef316e7a1b529"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Apr 11 18:19:27 2014"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Apr 11 18:19:27 2014"
      },
      "message": "tests: provide better error messages when comparing file data\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1254 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "8ace29264f73fd6420cc35c21d1ef316e7a1b529",
      "tree": "05de2fa4ddc279169586bebb25688ba111560499",
      "parents": [
        "fdfc1cffad79d75b797c85132745dc2ab6aa21fc"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Apr 11 17:27:14 2014"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Apr 11 17:27:14 2014"
      },
      "message": "give the right CREDITS\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1253 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "fdfc1cffad79d75b797c85132745dc2ab6aa21fc",
      "tree": "e4b051cf7205eb5abb37159fc8c05083c29e8118",
      "parents": [
        "75b23aaca51b95763ba8611028f1a239045244b6"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Apr 11 17:11:38 2014"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Apr 11 17:11:38 2014"
      },
      "message": "FTPS: add ability to load a certificate chain file\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1252 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "75b23aaca51b95763ba8611028f1a239045244b6",
      "tree": "1bf90dac574a3ee97a4fab64dc742a42a66318ee",
      "parents": [
        "8218961c614eba3889a43f87e7d2043ab1817cb9"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Apr 11 17:00:22 2014"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Apr 11 17:00:22 2014"
      },
      "message": "recofingure logging level during tests\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1251 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "8218961c614eba3889a43f87e7d2043ab1817cb9",
      "tree": "85220480b3fd79d562434b88fefadaded28b527f",
      "parents": [
        "b34952fa92722765126b70fc983636ceb4490d94"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Apr 04 13:10:40 2014"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Apr 04 13:10:40 2014"
      },
      "message": "fix issue 283: always use a single \u0027pyftpdlib\u0027 logger\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1250 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "b34952fa92722765126b70fc983636ceb4490d94",
      "tree": "3d4ab7acd3c2d52aaa6be694aace68bb9a98acd8",
      "parents": [
        "ec6f8b0d0f29472ff367956a887dc3fef27e2a0b"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Thu Feb 06 02:38:15 2014"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Thu Feb 06 02:38:15 2014"
      },
      "message": "update HISTORY\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1248 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "ec6f8b0d0f29472ff367956a887dc3fef27e2a0b",
      "tree": "aafce19f44501c8054c5ec6e562b301a25f3673f",
      "parents": [
        "6654e98c7b302078f64498826ebf1b53376ceae5"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Tue Feb 04 22:32:54 2014"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Tue Feb 04 22:32:54 2014"
      },
      "message": "Fix issue 280: (Python 2) unable to complete directory listing with invalid UTF8 characters. (patch by dn@devicenull.org)\n\n\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1245 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "6654e98c7b302078f64498826ebf1b53376ceae5",
      "tree": "788230c71ea29509f29c8e91a04575d2784bcdab",
      "parents": [
        "84370472b2a5274d3578abfd5d60d22fd9f8166c"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Sun Jan 19 11:44:10 2014"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Sun Jan 19 11:44:10 2014"
      },
      "message": "fix typo\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1244 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "84370472b2a5274d3578abfd5d60d22fd9f8166c",
      "tree": "ae593afee4aeeb74b1cb1a8aed6d5f0c5919ebda",
      "parents": [
        "6fa2ab72e8c538741da2d056eafbc8d87e85487e"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Mon Dec 30 11:46:07 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Mon Dec 30 11:46:07 2013"
      },
      "message": "Fix issue 261: TLS shutdown does not properly work on Windows.\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1243 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "6fa2ab72e8c538741da2d056eafbc8d87e85487e",
      "tree": "d347047ac30ff4662b51ae6c660da5dd5297e25c",
      "parents": [
        "e1d14fdce2639c2250ba6b3f908ea662ad660f74"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Mon Dec 30 11:33:10 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Mon Dec 30 11:33:10 2013"
      },
      "message": "pep8 + pyflakes\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1242 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "e1d14fdce2639c2250ba6b3f908ea662ad660f74",
      "tree": "3a6cf013a97c42d39e66553e474ce09b61300cec",
      "parents": [
        "db8ef72ddadafde3ad4fff04e2122139f85b9e82"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Mon Dec 30 11:14:47 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Mon Dec 30 11:14:47 2013"
      },
      "message": "Fix issue 277: provide a make file also for Windows.\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1241 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "db8ef72ddadafde3ad4fff04e2122139f85b9e82",
      "tree": "41d0d4fbc9f8546729ab2260e16ee2538a41fd67",
      "parents": [
        "2bb3374a05fbf49ae8e123d41ef814441b3b1bf0"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Mon Dec 30 10:45:50 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Mon Dec 30 10:45:50 2013"
      },
      "message": "add makefile\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1240 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "2bb3374a05fbf49ae8e123d41ef814441b3b1bf0",
      "tree": "0c73bcd4b9adf51560a4d81a2624fb1b1ea878a5",
      "parents": [
        "48b617c53169707c68ad59ff48d8c082f808bd2c"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Sun Dec 08 21:40:25 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Sun Dec 08 21:40:25 2013"
      },
      "message": "pep8ify\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1239 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "48b617c53169707c68ad59ff48d8c082f808bd2c",
      "tree": "b38d6d5d0f1251208ba7714753740be025870415",
      "parents": [
        "806f6cd1790ab0c7960bb630101c3c5eb2278c27"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Tue Nov 26 15:27:59 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Tue Nov 26 15:27:59 2013"
      },
      "message": "pep8ify\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1238 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "806f6cd1790ab0c7960bb630101c3c5eb2278c27",
      "tree": "2a0321c5f483a14e48ae50bdf71591e5e83c5040",
      "parents": [
        "b7611116c4996186a680f945bf85b3ffde1d0408"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Tue Nov 26 14:11:59 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Tue Nov 26 14:11:59 2013"
      },
      "message": "pep8ify\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1237 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "b7611116c4996186a680f945bf85b3ffde1d0408",
      "tree": "68513d2528b8a6ea5ee68fca9bb7a57be4f02829",
      "parents": [
        "4694da984affdfad1c5a4ca64f03ab90a6dfbbb9"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Thu Nov 07 22:17:19 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Thu Nov 07 22:17:19 2013"
      },
      "message": "update version\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1236 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "4694da984affdfad1c5a4ca64f03ab90a6dfbbb9",
      "tree": "348c178a77a96f57c13cd791f10cb896de6ca7c2",
      "parents": [
        "44cea0777f467f4e7a3fb2a1f54d6d3a93dc86d0"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Wed Nov 06 20:29:00 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Wed Nov 06 20:29:00 2013"
      },
      "message": "update HISTORY\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1235 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "44cea0777f467f4e7a3fb2a1f54d6d3a93dc86d0",
      "tree": "96d371153280a3a8df4993def428765bd69e6d67",
      "parents": [
        "65b95b67c3eb95877046507d187c0a3710baeba3"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Wed Nov 06 20:25:02 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Wed Nov 06 20:25:02 2013"
      },
      "message": "fix issue 273: IOLoop.fileno() on BSD riases AttributeError\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1234 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "65b95b67c3eb95877046507d187c0a3710baeba3",
      "tree": "e4c2585663f3d2e0c891cb2f10c068cc6676283e",
      "parents": [
        "e11b85f11e3992c64f56eeda3e35a05efa6691a1"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Sat Aug 24 17:48:45 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Sat Aug 24 17:48:45 2013"
      },
      "message": "fix issue 270: add a new \u0027--verbose\u0027 cmdline option which enables debug logging\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1232 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "e11b85f11e3992c64f56eeda3e35a05efa6691a1",
      "tree": "6fb6bdbd1fbadac056dec42c630d47babeb8e457",
      "parents": [
        "8ab5745a72f35f773d6e3f2c9d323442e1f04048"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Tue Jul 16 16:15:16 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Tue Jul 16 16:15:16 2013"
      },
      "message": "update HISTORY\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1231 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "8ab5745a72f35f773d6e3f2c9d323442e1f04048",
      "tree": "3e815679f7c24a5d792e4b8fdb6a86e83273c13e",
      "parents": [
        "937cd82adceee9592c2f5c4be171a8f6593f2e5b"
      ],
      "author": {
        "name": "btimby",
        "email": "btimby@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Tue Jul 16 16:07:08 2013"
      },
      "committer": {
        "name": "btimby",
        "email": "btimby@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Tue Jul 16 16:07:08 2013"
      },
      "message": "Fix for issue #265. Ensure the passed object has a callable listen() method. This test should pass for socket.socket and socket._socket objects. Otherwise treat it as an address/port tuple (the old behavior).\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1230 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "937cd82adceee9592c2f5c4be171a8f6593f2e5b",
      "tree": "465f4c2c447c292c411837387dc459d7f0e38464",
      "parents": [
        "c9a7011345079d696fb43b038b7999e94f1d8f0c"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Tue Jul 16 14:29:49 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Tue Jul 16 14:29:49 2013"
      },
      "message": "Fix issue 263: MultiprocessFTPServer leaks memory and file descriptors.  (patch by Juan J. Martinez)\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1229 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "c9a7011345079d696fb43b038b7999e94f1d8f0c",
      "tree": "878e8ed2767b157f6acb1f19f3a25483239e2670",
      "parents": [
        "9822fb0a599c5c31e535befbe0d307a1b7f463aa"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Sat Apr 27 17:21:05 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Sat Apr 27 17:21:05 2013"
      },
      "message": "small refactoring\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1228 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "9822fb0a599c5c31e535befbe0d307a1b7f463aa",
      "tree": "a4a4f1bc76d7d69e0967ae3e69389d6b64817777",
      "parents": [
        "f6e7939509aa41d0dbc2e4789de88b8cfaf48d8c"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Sat Apr 27 17:17:04 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Sat Apr 27 17:17:04 2013"
      },
      "message": "small refactoring\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1227 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "f6e7939509aa41d0dbc2e4789de88b8cfaf48d8c",
      "tree": "a9515944f8d20cd01e29c579fe5d9d0f5b43af4e",
      "parents": [
        "ffff7c4bb107591bb7c6109d9b216cb6bbacd196"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Wed Apr 24 21:44:53 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Wed Apr 24 21:44:53 2013"
      },
      "message": "ignore me\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1226 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "ffff7c4bb107591bb7c6109d9b216cb6bbacd196",
      "tree": "c3057e40ba727951d3f4118d5f0f067a9c7fae96",
      "parents": [
        "b172d33c30574002e80b661f960ee67acff74bb7"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Wed Apr 24 21:43:31 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Wed Apr 24 21:43:31 2013"
      },
      "message": "Fix issue 254: port bench.py script to python 3\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1225 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "b172d33c30574002e80b661f960ee67acff74bb7",
      "tree": "1a761683f8a3131305cf6c44a57131ebcb61293f",
      "parents": [
        "f00f59a720d196fed5854eddbf5f869ade2c7e01"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Wed Apr 24 21:24:31 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Wed Apr 24 21:24:31 2013"
      },
      "message": "fix issue 253: bench.py --timeout option\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1224 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "f00f59a720d196fed5854eddbf5f869ade2c7e01",
      "tree": "e8ef5b894f273a416443cac381432f2f8a849d7c",
      "parents": [
        "5e4e2b94bc2b25672b639b9c01f1ec80901864cf"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Mon Apr 22 14:47:16 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Mon Apr 22 14:47:16 2013"
      },
      "message": "update version to 1.2.0\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1220 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "5e4e2b94bc2b25672b639b9c01f1ec80901864cf",
      "tree": "a92c788fb9860beffb478bbba0131d6e5a2f5982",
      "parents": [
        "73b6af979adbabbd5b46f9c0729a65d8f6eb1543"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Apr 19 14:35:41 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Apr 19 14:35:41 2013"
      },
      "message": "Fix issue 252: FTPServer\u0027s address parameter can also be a socket object\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1219 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "73b6af979adbabbd5b46f9c0729a65d8f6eb1543",
      "tree": "e3f5bd5822e82af6d68f125e72ec61397a945e2d",
      "parents": [
        "99899a163b169f976b4067e99f968573859f02e4"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Apr 19 01:48:39 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Apr 19 01:48:39 2013"
      },
      "message": "Fix issue 250: add FTPServer\u0027s backlog kwarg controlling the queue of accepted connections.\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1218 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "99899a163b169f976b4067e99f968573859f02e4",
      "tree": "cb6d85640332d4f2905daaa30df4813ccf577ee8",
      "parents": [
        "3710f0b9e75ee7403a49e56976e8440aac45dac0"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Thu Apr 18 18:21:44 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Thu Apr 18 18:21:44 2013"
      },
      "message": "Fix issue 251: provide a fileno() method for epoll() and kqueue() IO pollers\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1217 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "3710f0b9e75ee7403a49e56976e8440aac45dac0",
      "tree": "aaeb9d243ba99f0a5b2f91674867fed3da623d1c",
      "parents": [
        "ceb0a8805c88337798504c7c7c5316b9376a65ee"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Thu Apr 18 00:58:41 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Thu Apr 18 00:58:41 2013"
      },
      "message": "use a set() while building up FEAT response so that we\u0027re sure features are not listed twice\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1216 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "ceb0a8805c88337798504c7c7c5316b9376a65ee",
      "tree": "c63cdbc5ebb1e2ceed52d24fd3140e2a9b930b1f",
      "parents": [
        "19c85c33595e7f370a14bc2c44346d9f8b16ea87"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Wed Apr 17 18:03:39 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Wed Apr 17 18:03:39 2013"
      },
      "message": "Attempt to fix issue #245 (again): de-localize socket_map and tasks vars: they are copies and any change via setattr() is not reflected back to the original object they are referring to\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1215 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "19c85c33595e7f370a14bc2c44346d9f8b16ea87",
      "tree": "9e8fdf9709c0a1c5edfd180ccfd28c47cf40880b",
      "parents": [
        "81c90d495c955679bfb7c8c1ad472cbfa4f2f317"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Tue Apr 09 15:48:31 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Tue Apr 09 15:48:31 2013"
      },
      "message": "update HISTORY\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1210 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "81c90d495c955679bfb7c8c1ad472cbfa4f2f317",
      "tree": "c9f559953740340e124cfff2bccd0d3d010caaad",
      "parents": [
        "f3fa309808a0baa6a96f16f3f7d78dd88f52eec7"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Tue Apr 09 15:36:23 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Tue Apr 09 15:36:23 2013"
      },
      "message": "fix AttributeError on FreeBSD\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1209 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "f3fa309808a0baa6a96f16f3f7d78dd88f52eec7",
      "tree": "eaffef38dc8c4d6d67c4bfc3aa9867f99299897b",
      "parents": [
        "26179bda7a4ea52840172d97b6fccd88571862fe"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Tue Apr 09 15:27:02 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Tue Apr 09 15:27:02 2013"
      },
      "message": "update version\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1208 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "26179bda7a4ea52840172d97b6fccd88571862fe",
      "tree": "3c5ded3c098c5624668cf75ad1e8c65c035b8821",
      "parents": [
        "9bfb2fa39e967443868c3f644e650db86d8302b0"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Mon Apr 08 01:18:24 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Mon Apr 08 01:18:24 2013"
      },
      "message": "Fix issue 247: whenever available (PY \u003e\u003d 3.3) use time.monotonic() instead of time.time()\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1207 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "9bfb2fa39e967443868c3f644e650db86d8302b0",
      "tree": "f9d1dbd3e469a59f0ffb6664eed2a2af715f65a7",
      "parents": [
        "370f0a4d1e11c15d34c9f14baa3c936c5b09ca44"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Sat Apr 06 15:26:00 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Sat Apr 06 15:26:00 2013"
      },
      "message": "fix issue 246: ThrottledDTPHandler was broken; also reintroduce and readapt the old tests which were removed as of r904\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1206 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "370f0a4d1e11c15d34c9f14baa3c936c5b09ca44",
      "tree": "628e854cc1724b0dc21a568e6ab8ad0fad513038",
      "parents": [
        "d15fa81ad52315158061ab3f73f2a8c7514dad96"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Apr 05 12:47:43 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Apr 05 12:47:43 2013"
      },
      "message": "renew HISTORY format\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1205 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "d15fa81ad52315158061ab3f73f2a8c7514dad96",
      "tree": "c2bd55332b8c3f65703f851328b008a51eadebb0",
      "parents": [
        "833dfa9af343cf75a16a959bacde83b1dca56c7e"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Apr 05 12:26:45 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Apr 05 12:26:45 2013"
      },
      "message": "renew HISTORY format\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1204 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "833dfa9af343cf75a16a959bacde83b1dca56c7e",
      "tree": "7baeb6fcde440f507d377bfbcc704dd5be45996b",
      "parents": [
        "4b1e240f3ddbe1e572996d4fbe3b5257a1ad51a9"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Apr 05 11:54:58 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Apr 05 11:54:58 2013"
      },
      "message": "Fix issue 245: ThreadedFTPServer hogs all CPU resources after a client connects.\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1203 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "4b1e240f3ddbe1e572996d4fbe3b5257a1ad51a9",
      "tree": "ef615433bbea03d5173a339cd43d4c436b6eee89",
      "parents": [
        "19296f764cf7d74928d035497183621409bacc89"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Thu Apr 04 16:23:09 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Thu Apr 04 16:23:09 2013"
      },
      "message": "calculate memory consumption as (rss - shared) as opposed to just \u0027rss\u0027\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1202 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "19296f764cf7d74928d035497183621409bacc89",
      "tree": "ff01320ba84b13ae08015b39b6ff751cc594a6e9",
      "parents": [
        "2fac8681a17df06fe1b702549922fa516a33ceca"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Thu Apr 04 16:03:13 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Thu Apr 04 16:03:13 2013"
      },
      "message": "log PID on start\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1199 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "2fac8681a17df06fe1b702549922fa516a33ceca",
      "tree": "741b05fbe5d81281819a32d6fca258b70dff37aa",
      "parents": [
        "71ddf05fe281559cd3084dbbabb174a71e2b9525"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Mar 22 11:07:40 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Mar 22 11:07:40 2013"
      },
      "message": "Fix issue 244: on python \u003e\u003d 3.3 use os.sendfile() instead of pysendfile third-party module\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1198 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "71ddf05fe281559cd3084dbbabb174a71e2b9525",
      "tree": "6103d496d1e6992ecc1218d756d5866f0216e9db",
      "parents": [
        "75fdcf3953e8508565e9e63b7ecae372f9844249"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Thu Mar 21 15:03:49 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Thu Mar 21 15:03:49 2013"
      },
      "message": "Fix issue 243: an erroneous error message is given in case the address passed to bind() is already in use.\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1197 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "75fdcf3953e8508565e9e63b7ecae372f9844249",
      "tree": "0bca24a37e0f96daaaf1ed168f030c376953745f",
      "parents": [
        "4eb5a36b0b5d19be1eda38a1ef607cdf04850ee6"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Tue Mar 12 15:05:39 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Tue Mar 12 15:05:39 2013"
      },
      "message": "(e)poll() poller: localize variable access to minimize overhead\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1196 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "4eb5a36b0b5d19be1eda38a1ef607cdf04850ee6",
      "tree": "864fa01e4d86618447913aaed1298c7a0384127b",
      "parents": [
        "9ff7f58517497d179ee185ef0295bc1ee7537afe"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Mon Mar 11 20:19:00 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Mon Mar 11 20:19:00 2013"
      },
      "message": "fix issue 241: allow empty passwords\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1195 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "9ff7f58517497d179ee185ef0295bc1ee7537afe",
      "tree": "70ba07704f2b9ea2304fa59fa42abd643d69a965",
      "parents": [
        "f2b6161df4492b4cbd7ca4c467c9baa8ed5398a1"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Mon Mar 11 19:00:38 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Mon Mar 11 19:00:38 2013"
      },
      "message": "Cmdline usage: by default assume the default interface passed to getaddrifo() is None instead of \"\" (which is wrong, as that\u0027s the alias intended for bind()).\n\nThis has an important consequence in that the FTP server won\u0027t make any DNS query during the startup. As such it won\u0027t wait and eventually fail if the DNS is down.\n\n\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1194 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "f2b6161df4492b4cbd7ca4c467c9baa8ed5398a1",
      "tree": "63ca3b7397b41f60a28c9d1b8f6f2504663641cc",
      "parents": [
        "cb455948a8cff8e502eff35d5851ec31e4d8d4b4"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Mon Mar 11 15:29:35 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Mon Mar 11 15:29:35 2013"
      },
      "message": "fix tests broken after previous commit\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1192 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "cb455948a8cff8e502eff35d5851ec31e4d8d4b4",
      "tree": "f204146efb67859ef055fa6923197ff677b20386",
      "parents": [
        "7fee36276ac6c3415a8b4f0a125b05c1bb97a033"
      ],
      "author": {
        "name": "g.rodola@gmail.com",
        "email": "g.rodola@gmail.com@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Mon Mar 11 12:13:11 2013"
      },
      "committer": {
        "name": "g.rodola@gmail.com",
        "email": "g.rodola@gmail.com@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Mon Mar 11 12:13:11 2013"
      },
      "message": "Fix issue 238: username is not logged in case of failed authentication. (patch by tlockert)\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1191 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "7fee36276ac6c3415a8b4f0a125b05c1bb97a033",
      "tree": "be0e897bd26ff7b982d830fcd2e1de4d35dfe624",
      "parents": [
        "c4097beff743605da585d0810420350089af87b1"
      ],
      "author": {
        "name": "g.rodola@gmail.com",
        "email": "g.rodola@gmail.com@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Sun Mar 10 13:03:33 2013"
      },
      "committer": {
        "name": "g.rodola@gmail.com",
        "email": "g.rodola@gmail.com@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Sun Mar 10 13:03:33 2013"
      },
      "message": "Fix issue 240: enable \u0027python -m pyftpdlib\u0027 cmdline syntax\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1190 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "c4097beff743605da585d0810420350089af87b1",
      "tree": "7f6657c23e9504683b03f42572f7b286d1eb74c9",
      "parents": [
        "ad7135d75a9fb1a88a7179a2c93c0d1a63edef77"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Tue Mar 05 23:33:41 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Tue Mar 05 23:33:41 2013"
      },
      "message": "fix deprecation warnings due to assertEquals being deprecated in favor of self.assertEqual (thanks Arfrever)\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1189 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "ad7135d75a9fb1a88a7179a2c93c0d1a63edef77",
      "tree": "66475da97e1f1cdbe36d60977c690036a09a65ef",
      "parents": [
        "4a5aa9edeb0b7f0fd3d3632c7be59532c8740941"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Tue Mar 05 23:15:13 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Tue Mar 05 23:15:13 2013"
      },
      "message": "fix some ResourceWarnings found with Python\u0027s -Wa cmdline option plus fix NameError exception being raised on Python 3.1 due to callable() builtin not being available.  (thanks Arfrever)\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1188 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "4a5aa9edeb0b7f0fd3d3632c7be59532c8740941",
      "tree": "9e7a562facd8e67868170012022ac5e38038a524",
      "parents": [
        "97e9dd3b5c6b69e68c9e9cb6324623e14ff0fdb0"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Tue Mar 05 22:57:30 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Tue Mar 05 22:57:30 2013"
      },
      "message": "fix issue 239: make test suite return exit status code !\u003d 0 in case of test failures (patch by Arfrever.FTA)\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1187 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "97e9dd3b5c6b69e68c9e9cb6324623e14ff0fdb0",
      "tree": "9a996b29c4bedba31f52040ad533ac30d97cf65b",
      "parents": [
        "ee8f5b8645cf4c379d2f96aff456d9cc8b0c4cd5"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Tue Mar 05 22:49:28 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Tue Mar 05 22:49:28 2013"
      },
      "message": "fix deprecation warnings caused by assertRaisesRegexp\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1186 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "ee8f5b8645cf4c379d2f96aff456d9cc8b0c4cd5",
      "tree": "3af041ba1159e25d60e842164a9f5644b1f8c5fe",
      "parents": [
        "e938fcdc9c2f68bf5b4ddc6f95a35a41b4b82bef"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Feb 22 19:40:08 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Feb 22 19:40:08 2013"
      },
      "message": "update version and date\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1184 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "e938fcdc9c2f68bf5b4ddc6f95a35a41b4b82bef",
      "tree": "a0052dd1aed0ed2b8119dd355dd6612a686e57f6",
      "parents": [
        "1c9894dbb296993615af87b40026997e5c825320"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Feb 22 19:07:12 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Feb 22 19:07:12 2013"
      },
      "message": "test suite: introduce assertRaisesRegexp in order to check responses actually sent by server\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1183 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "1c9894dbb296993615af87b40026997e5c825320",
      "tree": "2de67827ca57e54ab19cbe36eb3f581300585cd3",
      "parents": [
        "623bab44194f7ba5a294015f68bc0e8b8bfe6574"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Feb 22 18:43:14 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Feb 22 18:43:14 2013"
      },
      "message": "test suite: introduce assertRaisesRegexp in order to check responses actually send by server\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1182 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "623bab44194f7ba5a294015f68bc0e8b8bfe6574",
      "tree": "0b98db31b3214af2a0612af2e5f2e96b2334f4dd",
      "parents": [
        "2ac0e15728b89cd7d77a0aa6905170632ff9ce80"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Feb 22 17:48:37 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Feb 22 17:48:37 2013"
      },
      "message": "fix issue 236: MultiprocessFTPServer and ThreadedFTPServer hanging in case of failed authentication\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1181 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "2ac0e15728b89cd7d77a0aa6905170632ff9ce80",
      "tree": "0326a5cb1f8734f870782740b3f13dbcf931bf91",
      "parents": [
        "0d5f2ce2742cb105081b8e6b937806297ccc70ca"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Feb 22 16:22:14 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Feb 22 16:22:14 2013"
      },
      "message": "test suite: set FTP server logging level to WARNING so that warning messages don\u0027t go unnoticed. Also, provide a decorator to ignore warning messages for certain tests which legitimately cause warnings.\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1180 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "0d5f2ce2742cb105081b8e6b937806297ccc70ca",
      "tree": "f30a976fc72512695b94840484e1940e8529c94d",
      "parents": [
        "fd82204df8888ef67a9d3b25ee967e17987f899f"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Feb 22 03:47:31 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Feb 22 03:47:31 2013"
      },
      "message": "max connections test: use ftplib\u0027s quit() method instead of close() so that client and server are more synchronized\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1179 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "fd82204df8888ef67a9d3b25ee967e17987f899f",
      "tree": "dce20efa6b60ec9a0811292823b5e2adcc894ca5",
      "parents": [
        "7700b993741d3491b3c1ee067158e5c46813e975"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Tue Feb 19 11:40:35 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Tue Feb 19 11:40:35 2013"
      },
      "message": "add a MANIFEST.in file which tells \u0027python setup.py sdist\u0027 what files to include in the tarball\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1175 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "7700b993741d3491b3c1ee067158e5c46813e975",
      "tree": "b35748afa373e835f163751315c5cfe753eb013d",
      "parents": [
        "559dbdc4ebf1703992a05fd67c77e90955b6e238"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Tue Feb 19 11:25:49 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Tue Feb 19 11:25:49 2013"
      },
      "message": "set +x flags against demo scripts\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1174 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "559dbdc4ebf1703992a05fd67c77e90955b6e238",
      "tree": "ee26e94dce7920f72ffd18f70be65371a640a3ec",
      "parents": [
        "cffc13f985e4dc9eee23901c941fc45a3b5d6699"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Tue Feb 19 11:13:14 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Tue Feb 19 11:13:14 2013"
      },
      "message": "Fix ThrottledDTPHandler which was broken\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1173 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "cffc13f985e4dc9eee23901c941fc45a3b5d6699",
      "tree": "76e299f266147c688319ec989d561dbe8d4b5fed",
      "parents": [
        "04a8fe3375906154358e2cea982e637282cb689e"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Tue Feb 19 10:34:22 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Tue Feb 19 10:34:22 2013"
      },
      "message": "fix \u0027dict changed size during iteration\u0027 error on Windows plus update date in HISTORY file\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1172 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "04a8fe3375906154358e2cea982e637282cb689e",
      "tree": "ded5aee5ead57a14faabb4034c87ea5bfe3c55e2",
      "parents": [
        "4d84deb0c8b6045cd585572eadbbab578eb97d46"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Tue Feb 19 10:13:09 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Tue Feb 19 10:13:09 2013"
      },
      "message": "update copyright banner; update docstring; disable unicode tests which are not relieable\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1171 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "4d84deb0c8b6045cd585572eadbbab578eb97d46",
      "tree": "fca543d60819f2e66d56bac992a7804bc85e7ce1",
      "parents": [
        "196b36c510563a9ee8a02dd13ca98e0fed802149"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Thu Feb 14 12:59:29 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Thu Feb 14 12:59:29 2013"
      },
      "message": "win/unix authorizers: get rid of [] as the default for \u0027allowed_users\u0027 and \u0027rejected_users\u0027 arguments. Also add a test for __repr__.\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1170 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "196b36c510563a9ee8a02dd13ca98e0fed802149",
      "tree": "cefed24e40fe52ddf8eb338db6d72184144ac87a",
      "parents": [
        "dbb550ee8a75e9257d951d7f6445f645c9f6c84d"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Thu Feb 14 12:27:50 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Thu Feb 14 12:27:50 2013"
      },
      "message": "pycharm run\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1169 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "dbb550ee8a75e9257d951d7f6445f645c9f6c84d",
      "tree": "b1e99e9a9e328f712f22cfc12448b6e9021d5770",
      "parents": [
        "55014f50551cda854f7d9ce2a1f2b119710eb21e"
      ],
      "author": {
        "name": "g.rodola@gmail.com",
        "email": "g.rodola@gmail.com@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Sun Feb 10 19:33:26 2013"
      },
      "committer": {
        "name": "g.rodola@gmail.com",
        "email": "g.rodola@gmail.com@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Sun Feb 10 19:33:26 2013"
      },
      "message": "logging: check whether using colors when configuring  logs (as opposed to import time)\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1168 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "55014f50551cda854f7d9ce2a1f2b119710eb21e",
      "tree": "7966d5e63a8a9453752b315fd4c46f3984c75d76",
      "parents": [
        "d85fc24aac3a5bebc4c248854c33a6de8b4a0adb"
      ],
      "author": {
        "name": "g.rodola@gmail.com",
        "email": "g.rodola@gmail.com@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Sun Feb 10 18:43:44 2013"
      },
      "committer": {
        "name": "g.rodola@gmail.com",
        "email": "g.rodola@gmail.com@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Sun Feb 10 18:43:44 2013"
      },
      "message": "unix_daemon.py script: get rid of python-daemon (http://pypi.python.org/pypi/python-daemon) dependancy as it no longer works (and it is apparently no longer maintained since year 2010). Instead, replace the part which does the actual damonization by taking this recipe as an example http://www.jejik.com/articles/2007/02/a_simple_unix_linux_daemon_in_python/. Also add a \u0027restart\u0027 cmdline option\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1167 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "d85fc24aac3a5bebc4c248854c33a6de8b4a0adb",
      "tree": "c2d216e77441e1ef0e9f611e2539d192612164f4",
      "parents": [
        "b35e045e99ecde8dfaafde77f2616e6251973337"
      ],
      "author": {
        "name": "g.rodola@gmail.com",
        "email": "g.rodola@gmail.com@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Sun Feb 10 11:02:27 2013"
      },
      "committer": {
        "name": "g.rodola@gmail.com",
        "email": "g.rodola@gmail.com@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Sun Feb 10 11:02:27 2013"
      },
      "message": "fix unraised warnings during FTPS tests\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1166 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "b35e045e99ecde8dfaafde77f2616e6251973337",
      "tree": "14584f55b0404ce8657565812ef6647d5c6c221b",
      "parents": [
        "fed6ebc5725272ea529b89be084ea01778793020"
      ],
      "author": {
        "name": "g.rodola@gmail.com",
        "email": "g.rodola@gmail.com@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Sun Feb 10 10:31:29 2013"
      },
      "committer": {
        "name": "g.rodola@gmail.com",
        "email": "g.rodola@gmail.com@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Sun Feb 10 10:31:29 2013"
      },
      "message": "restore compatibility with py \u003c\u003d 2.6\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1165 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "fed6ebc5725272ea529b89be084ea01778793020",
      "tree": "dc9ac32872c9fc43246a27d4c37482b109c08009",
      "parents": [
        "86ad77a53830704131830bd5dbed7dca8babdbff"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Sat Feb 09 19:49:30 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Sat Feb 09 19:49:30 2013"
      },
      "message": "restore compatibility with py 2.6\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1164 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "86ad77a53830704131830bd5dbed7dca8babdbff",
      "tree": "b5734d8e7610a50035c91b4227bec07ee7c0877a",
      "parents": [
        "4678e33b7113621bee1c9b8ed3abef00e8db11f4"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Sat Feb 09 16:39:21 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Sat Feb 09 16:39:21 2013"
      },
      "message": "format_mlsx(): localize variables to minimize overhead\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1163 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "4678e33b7113621bee1c9b8ed3abef00e8db11f4",
      "tree": "435e60125411f84da4b2b2b87c660d21efeda56b",
      "parents": [
        "acf09f052861738ea12c5d7a693d43e54b3cb234"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Thu Feb 07 23:26:11 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Thu Feb 07 23:26:11 2013"
      },
      "message": "Fix some Windows failures.\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1162 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "acf09f052861738ea12c5d7a693d43e54b3cb234",
      "tree": "30d62198d3c9d5d56e117e62e4dbaadba7567e5b",
      "parents": [
        "68fb4ee1ddd0184b63acd084a23b2f35d8ffc545"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Feb 01 17:48:37 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Feb 01 17:48:37 2013"
      },
      "message": "restore compatibility with python \u003c\u003d 2.5\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1161 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "68fb4ee1ddd0184b63acd084a23b2f35d8ffc545",
      "tree": "2a663fe25f945554102841870c2a18b7f4866db6",
      "parents": [
        "606e1745fbd833f73f5e53cd700b65b4f91a6b61"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Feb 01 17:30:30 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Feb 01 17:30:30 2013"
      },
      "message": "big logging refactoring: introduce a new \u0027log_prefix\u0027 attribute to FTPHandler in order to allow customization of every line logged\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1160 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "606e1745fbd833f73f5e53cd700b65b4f91a6b61",
      "tree": "5157a164de4d3b8030ecba7bffcdd7ffd68630c8",
      "parents": [
        "119fbdad313cc3ada7b4851a8ce195e2e9f72ef7"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Feb 01 13:42:48 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Feb 01 13:42:48 2013"
      },
      "message": "logging refactoring (issue 236): move everything into a separate log.py module and provide coloured logs by default\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1159 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "119fbdad313cc3ada7b4851a8ce195e2e9f72ef7",
      "tree": "43feeb62eac8c3c2409cadf775cf1d7da7437c42",
      "parents": [
        "aba6de806b8a3558ace90d5260bfc3e9712be8eb"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Feb 01 02:52:24 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Fri Feb 01 02:52:24 2013"
      },
      "message": "Big logging refactoring (future issue 236).\npyftpdlib logging has always been kind of messy for 2 reasons:\n\n1) it\u0027s very verbose as it logs *all* commands and responses exchanged between client and server on the control channel; this includes commands such as TYPE, OPTS, HELP, SITE etc. which are not very interesting from the admin point of view.\n\n2) it\u0027s repetitive as in case of filesytem related commands, (say DELE) we get *3* lines of logs instead of 1:\n[D] \u003c- DELE somefile.ext\n[D] -\u003e 200 file deleted\n[I] somefile.ext was deleted\n\n\nWith this commit logline() logging is disabled by default and only \u0027useful\u0027 messages such as MKD, RMD, DELE, etc are logged in a single line (as opposed to 3):\n[I] DELE /somefile.txt 250\n\nTo get back to the old behavior user will have to use:\n\n\u003e\u003e\u003e logging.basicConfig(level\u003dlogging.DEBUG)\n\nlogging.DEBUG will be an alias for \u0027enable line logging\u0027.\n\n\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1158 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "aba6de806b8a3558ace90d5260bfc3e9712be8eb",
      "tree": "1af3815eac3c6ab11724ecfa79c124797f212ff4",
      "parents": [
        "e79e3ff44e33e9b9700b14a4ad9413e3e97a52c1"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Thu Jan 31 17:17:13 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Thu Jan 31 17:17:13 2013"
      },
      "message": "restore compatibility with python 2.4\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1157 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "e79e3ff44e33e9b9700b14a4ad9413e3e97a52c1",
      "tree": "6203ff277bb4a869ab6fdcf4056acdbd64ef855d",
      "parents": [
        "41a7ad78c0eecd722bc45350814b51e747dca9b2"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Thu Jan 31 17:07:25 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Thu Jan 31 17:07:25 2013"
      },
      "message": "do not rely on *exact* response string in certain tests\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1156 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "41a7ad78c0eecd722bc45350814b51e747dca9b2",
      "tree": "255b3e4bfe51bcaaf2f8101525bbc2f29c9243e4",
      "parents": [
        "5156ec7873968fbae6829defc5798ff6b3772006"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Sun Jan 27 23:23:47 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Sun Jan 27 23:23:47 2013"
      },
      "message": "update README\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1155 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "5156ec7873968fbae6829defc5798ff6b3772006",
      "tree": "41780f9c04bf46201be14134ac8cfe8faed1d2a2",
      "parents": [
        "456fc863df195b0680144fb5f35f64979453c704"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Sun Jan 27 22:45:58 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Sun Jan 27 22:45:58 2013"
      },
      "message": "remove old comment\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1154 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "456fc863df195b0680144fb5f35f64979453c704",
      "tree": "268a30711a8298b38774ac3126da7d87794ba292",
      "parents": [
        "941d8d198009bde2d1ac5a8fa717fe2a47bf3b04"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Thu Jan 24 17:01:47 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Thu Jan 24 17:01:47 2013"
      },
      "message": "rename variable (ignore me)\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1153 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "941d8d198009bde2d1ac5a8fa717fe2a47bf3b04",
      "tree": "e4b9de0e809039527006c12ee1c520a80b46e87f",
      "parents": [
        "1a7f7d759948513dff0afada6ec326ae486a4e08"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Thu Jan 24 16:57:40 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Thu Jan 24 16:57:40 2013"
      },
      "message": "update HISTORY\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1152 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "1a7f7d759948513dff0afada6ec326ae486a4e08",
      "tree": "3ba7f91ff2c72205b384d04463d3b3edfabffdb9",
      "parents": [
        "a2bf92eb0a16cffbc1c4c9d1483985215e848ce5"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Thu Jan 24 16:37:49 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Thu Jan 24 16:37:49 2013"
      },
      "message": "Fix issue 233: make sure on_logout() is not called if USER was provided but not PASSword (patch by Ben Timby)\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1151 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "a2bf92eb0a16cffbc1c4c9d1483985215e848ce5",
      "tree": "916522855f1e34f5b8f6129ef2a7cee31db462f0",
      "parents": [
        "904ed6f934aaaaa1aa387eb875069a90b27cbf7f"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Wed Jan 16 01:17:35 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Wed Jan 16 01:17:35 2013"
      },
      "message": "catch the right exceptions when polling on select()/epoll()/poll()/kqueue() - also, for kqueue() make sure to also catch EINTR and ignore it as with all other pollers\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1150 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "904ed6f934aaaaa1aa387eb875069a90b27cbf7f",
      "tree": "e688f6c1ef33a9cd371372f0872731486aa2c9e6",
      "parents": [
        "ee77fee8d9767c1b98b2af8eaa41f7396efd652d"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Tue Jan 15 02:01:41 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Tue Jan 15 02:01:41 2013"
      },
      "message": "fix issue 234: provide a nice __repr__ for FTPHandler and DTPHandler\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1149 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "ee77fee8d9767c1b98b2af8eaa41f7396efd652d",
      "tree": "fea7b3a9273841d30dca552cc02ab62f71ca1d88",
      "parents": [
        "be099e51c521f4f901228556262fde151f96064c"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Tue Jan 15 01:06:46 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Tue Jan 15 01:06:46 2013"
      },
      "message": "OSX: fix for IPv4-mapped IPv6 addresses\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1148 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "be099e51c521f4f901228556262fde151f96064c",
      "tree": "7287db4cc3f2d948800c112f362a828f47f7b6e8",
      "parents": [
        "ede0fb2003bc63e683266a6cd8712b5e1f9ee374"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Sat Jan 12 18:35:32 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Sat Jan 12 18:35:32 2013"
      },
      "message": "Multi process FTPd: set a timeout for join() when waiting for threads/subprocesses to terminate. Also, in case of processes, after timeout occurs use SIGKILL against all the children which are still alive.\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1147 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "ede0fb2003bc63e683266a6cd8712b5e1f9ee374",
      "tree": "6121992e5d2275c19064018fed79f35bf2524751",
      "parents": [
        "18dd7b154cf6c153365b0c189a50f19bd3c0f2ed"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Sat Jan 12 17:38:26 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Sat Jan 12 17:38:26 2013"
      },
      "message": "FreeBSD / multi process FTPd: during server shutdown use SIGKILL instead of SIGTERM when killing process children in order to avoid hanging\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1146 18f94993-622a-0410-868e-e94f534f3744\n"
    },
    {
      "commit": "18dd7b154cf6c153365b0c189a50f19bd3c0f2ed",
      "tree": "439a3e622af73af8ba69e933789a4c49b95b9548",
      "parents": [
        "570c87987d85984d434244e4996574f6734f1d30"
      ],
      "author": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Sat Jan 05 17:50:55 2013"
      },
      "committer": {
        "name": "g.rodola",
        "email": "g.rodola@18f94993-622a-0410-868e-e94f534f3744",
        "time": "Sat Jan 05 17:50:55 2013"
      },
      "message": "fix issue 232: hybrid IPv4/IPv6 support is broken.  (patch by Claus Klein - see ml discussion at https://groups.google.com/forum/?fromgroups#!topic/pyftpdlib/imcL4POfO6Y )\n\n\n\ngit-svn-id: http://pyftpdlib.googlecode.com/svn/trunk@1145 18f94993-622a-0410-868e-e94f534f3744\n"
    }
  ],
  "next": "570c87987d85984d434244e4996574f6734f1d30"
}
