Wow! Thanks for the detailed analysis. I will have a look through all the
findings and fix as you listed. I did not know there were python specific
tests and packager available for me to use.

To answer your question: I don't know if the original manpage typos patch
was sent upstream but I will send my updated one along with the python
messages you found.

When I re-build, should it still be -1 until it actually gets uploaded or
should I increment to -2, -3, etc. each time?

I also found that upstream has alpha3 out as was detected by the watch
file. I will look into changes in there and packaging that release instead.


On Mon, Jun 17, 2013 at 11:12 AM, Jakub Wilk <jw...@debian.org> wrote:

> * Jakub Wilk <jw...@debian.org>, 2013-06-16, 22:31:
>
>> http://mentors.debian.net/**debian/pool/main/s/s3cmd/**
>> s3cmd_1.5.0~alpha1-1.dsc<http://mentors.debian.net/debian/pool/main/s/s3cmd/s3cmd_1.5.0~alpha1-1.dsc>
>>
>
> s3cmd.1 reads "Copyright \(co 2007,2008,2009,2010,2011,2012"**, but
> d/copyright has only "Copyright: 2007-2011".
>
> The new dependency (python-tz) is not documented in the changelog.
>
> Do you know if fix-manpage-typos.patch has been forwarded upstream?
>
> Lintian emits:
> I: s3cmd source: vcs-field-not-canonical svn://svn.debian.org/svn/**
> python-apps/packages/s3cmd/**trunk<http://svn.debian.org/svn/python-apps/packages/s3cmd/trunk>svn://
> anonscm.debian.org/**python-apps/packages/s3cmd/**trunk<http://anonscm.debian.org/python-apps/packages/s3cmd/trunk>
> W: s3cmd source: out-of-date-standards-version 3.9.3 (current is 3.9.4)
> P: s3cmd: no-upstream-changelog
>
> vcs-field-not-canonical has been already fixed in the DPMT repository.
> Upstream provides a NEWS file which you could install as changelog.
>
>
> Now let's take a look at the upstream part...
>
> lintian4python emits:
> x: s3cmd: except-without-exception-type usr/share/s3cmd/S3/CloudFront.**
> py:454
> x: s3cmd: except-without-exception-type usr/share/s3cmd/S3/CloudFront.**
> py:756
> x: s3cmd: except-without-exception-type usr/share/s3cmd/S3/HashCache.**
> py:19
> x: s3cmd: except-without-exception-type usr/share/s3cmd/S3/SortedDict.**
> py:60
> x: s3cmd: except-without-exception-type usr/share/s3cmd/S3/SortedDict.**
> py:88
> x: s3cmd: except-without-exception-type usr/share/s3cmd/s3cmd:818
> x: s3cmd: except-without-exception-type usr/share/s3cmd/s3cmd:831
> x: s3cmd: except-without-exception-type usr/share/s3cmd/s3cmd:836
> x: s3cmd: except-without-exception-type usr/share/s3cmd/s3cmd:843
> x: s3cmd: except-without-exception-type usr/share/s3cmd/s3cmd:1660
> e: s3cmd: pyflakes-undefined-name usr/share/s3cmd/S3/Utils.py:**380: ex
> e: s3cmd: pyflakes-undefined-name usr/share/s3cmd/S3/Progress.**py:82:
> selfself
>
> pyflakes-undefined-name are in this case obvious bugs that'll cause
> NameError exceptions.
> You can read more about except-without-exception-type here:
> http://docs.python.org/2/**howto/doanddont.html#except<http://docs.python.org/2/howto/doanddont.html#except>
>
> Timezones is a tricky business, and in my experience almost everybody gets
> it wrong. This package is not an exception! :P
>
> | def dateS3toPython(date):
> |     date = re.compile("(\.\d*)?Z").sub(".**000Z", date)
> |     return time.strptime(date, "%Y-%m-%dT%H:%M:%S.000Z")
> | __all__.append("**dateS3toPython")
> |
> | def dateS3toUnix(date):
> |     ## FIXME: This should be timezone-aware.
> |     ## Currently the argument to strptime() is GMT but mktime()
> |     ## treats it as "localtime". Anyway...
> |     return time.mktime(dateS3toPython(**date))
> | __all__.append("dateS3toUnix")
>
> Yeah, as the FIXME says, this is not right. Fortunately, it's also easy to
> fix: just replace "time.mktime" with "calendar.timegm".
>
>
> | def dateRFC822toPython(date):
> |     return rfc822.parsedate(date)
> | __all__.append("**dateRFC822toPython")
> |
> | def dateRFC822toUnix(date):
> |     return time.mktime(**dateRFC822toPython(date))
> | __all__.append("**dateRFC822toUnix")
>
> So dateRFC822toUnix() takes an RFC-822 date, throws away timezone
> information, then re-interprets the result as local time. This is obviously
> incorrect. Oh, and the rfc822 module is deprecated.
> This is how you can reimplement it correctly:
>
> def dateRFC822toUnix(date):
>     parsed_date = email.utils.parsedate_tz(date)
>     return email.utils.mktime_tz(parsed_**date)
>
>
> This function is buggy, too:
> | def formatDateTime(s3timestamp):
> |     try:
> |         import pytz
> |         timezone = pytz.timezone(os.environ.get('**TZ', 'UTC'))
> |         utc_dt = datetime.datetime(***dateS3toPython(s3timestamp)[0:**6],
> tzinfo=pytz.timezone('UTC'))
> |         dt_object = utc_dt.astimezone(timezone)
> |     except ImportError:
> |         dt_object = datetime.datetime(***dateS3toPython(s3timestamp)[0:*
> *6])
> |     return dt_object.strftime("%Y-%m-%d %H:%M")
> | __all__.append("**formatDateTime")
>
> If TZ is unset, the default should be the timezone from /etc/localtime,
> not UTC.
>
> But anyway, once dateS3toUnix is fixed, formatDateTime can be trivially
> reimplemented without pytz as:
>
> def formatDateTime(s3timestamp):
>     unix_timestamp = dateS3toUnix(s3timestamp)
>     return time.strftime("%Y-%m-%d %H:%M", time.localtime(unix_timestamp)*
> *)
>
>
> Please inform upstream about these problems.
>
>
> --
> Jakub Wilk
>
>
> --
> To UNSUBSCRIBE, email to 
> debian-mentors-REQUEST@lists.**debian.org<debian-mentors-requ...@lists.debian.org>
> with a subject of "unsubscribe". Trouble? Contact
> listmas...@lists.debian.org
> Archive: 
> http://lists.debian.org/**20130617151224.GA1457@jwilk.**net<http://lists.debian.org/20130617151224.ga1...@jwilk.net>
>
>

Reply via email to