== What ==
issue732 is only one example of a buggy behaviour, but there are in fact many
intricated cases. For example:
( "o" contains an alive version of the tracked file, "x" does not)
tip - o - o - x - o - o - x ...
\
o - o - o - o - x ...
\ /
o - o
This repository contains at least two instances of the tracked file, but
when calling "hg log -f file" only the latest one (the one alive in tip)
matters to us.
== How ==
We must extract from the filelog the history of the file instance we're
interested in and discard changes related to other instances of that file.
We see that we're only interested in ancestors(node), and that all
other nodes in the filelog should not be considered.
Since py3k doesn't have a "file" builtin and, consequently, doesn't support
inheriting from it, this patch refactors the httpsendfile class to wrap the
objects returned by the builtin "open" function while adding the necessary
methods (__len__ for constructing the Content-Length header and read, write,
close and seek for the file-like interface).
Prior to version 2.7, calling locale.getpreferredencoding() would
always return 'mac-roman' on Mac OS X. Previously, this was handled by
a call to locale.setlocale(). Unfortunately, Python 2.6.5 and older
have a bug where isspace() would incorrectly report True for 0x85 and
0xa0 after such a call.
In order to fix this, we replace the previous _encodingfixup mapping
to an _encodingfixers mapping. Rather than mapping encodings to their
replacement, it maps them to a function returning the
replacement. This allows us to provide an simplified implementation of
getpreferredencoding() which extracts the expected encoding and
restores the locale.
This fix is based on a patch originally submitted by Martijn Pieters
as well as feedback from Brodie Rao.
On Python 2.6.6 (and patched 2.6.5 on certain Linux distros),
the change that caused issue2255 was also applied to non-digest
authentication; this change extends the 3405cb92c120 fix
accordingly.
Changeset 372e3cb2c9bf (from 2008) introduced a hack to handle the
very long values of $TMPDIR typically seen on Mac OS X. This hack
expected continuation lines to begin with a tab. However, as a result
of a change in Python 2.7, changeset 025d0ea4305a made it so
continuation lines began with a tab. Since then, `test-notify' has
been broken on Mac OS X.
Merely replacing the tab in the regular expression with a space will
not work: not only do tab continuations still occur in the message, but
other lines -- in the body of the message -- also start with a
space. Luckily, all broken up lines appear to end with either a colon
or an n, so we can match those, and reinsert them in the replacement.
In py3k, a bytes object __getitem__ will return an int instead of a
one-character bytes object. This has negative consequences when we want to
ord(), like in the following example:
>>> b'foo'[0]
102
>>> ord(b'foo'[0])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: ord() expected string of length 1, but int found
This patch overrides the default ord() implementation to just return an int
that's what is passed as an argument for ord(). Making the above call succeed:
>>> ord(b'foo'[0])
102