classification
Title: Rewrite import machinery to work with unicode paths
Type: Stage:
Components: Interpreter Core, Unicode Versions: Python 3.2
process
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: Nosy List: Arfrever, Romme, amaury.forgeotdarc, eric.araujo, ezio.melotti, flox, haypo, kristjan.jonsson, pitrou
Priority: normal Keywords: buildbot, patch

Created on 2010-07-30 00:13 by haypo, last changed 2010-10-19 01:02 by haypo. This issue is now closed.

Messages (58)
msg112026 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2010-07-30 00:13
Python (2 and 3) is unable to load a module installed in a directory containing characters not encodable to the locale encoding. And Python doesn't work if it's installed in non-ASCII directory on Windows or with a locale encoding different than UTF-8. On Windows, the locale encoding is "mbcs", which is a small charset, unable to mix different languages, whereas the file system is fully unicode compatible (it uses UTF-16). Python should work with unicode strings (wchar_t*, Py_UNICODE* or PyUnicodeObject) instead of byte strings (char* or PyBytesObject), especially while loading a Python module.

It's not an easy task because it requires to change a lot of code, especially in Python/import.c. I am working on this topic since some months and I have now a working patch. It's now possible to run Python from the source tree containing a non-ASCII character in C locale (ASCII encoding). Except just a minor bug in test_gdb, all tests of the test suite pass.

I posted the whole patch on Rietveld for a review:
http://codereview.appspot.com/1874048

The patch is huge because it fixes different things:

 a) import machinery (import.c, getpath.c, importdl.c, ...)
 b) many error handlers using filenames (compile.c, errors.c, _warnings.c, sysmodule.c, ...)
 c) functions using filenames, especially Python full path: log the filename (eg. Lib/distutils/file_util.py), filename written to a program output (eg. Lib/platform.py)
 d) tests (Lib/test/test_*.py)

(b), (c) and (d) can be fixed before/without (a). But (a) requires other parts to work correctly.

If it's not possible to review the patch, I can try to split it in smaller parts.

--

Related issues:

 #3080: Full unicode import system
 #4352: imp.find_module() fails with a UnicodeDecodeError 
        when called with non-ASCII search paths
 #8611: Python3 doesn't support locale different than utf8 
        and an non-ASCII path (POSIX)
 #8988: import + coding = failure (3.1.2/win32)

--

See also my email sent to python-dev for more information:
http://mail.python.org/pipermail/python-dev/2010-July/101619.html
msg112027 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2010-07-30 00:18
Oh, I forgot to say that I created an svn branch including my work: import_unicode.
http://svn.python.org/view/python/branches/import_unicode/

You can try it if you prefer svn to an huge patch.

I created a branch so you can follow my work commit by commit using svn history.

--

The patch is not completly done. There are still remaining FIXMEs. Some FIXME are not bugs, but improvments. The most important FIXME is to restore the support of bytes path in sys.path. I removed it temporary, because it was easier for me.
msg112032 - (view) Author: Ezio Melotti (ezio.melotti) * (Python committer) Date: 2010-07-30 00:42
I wrote a few minor comments on codereview.
The patch should also include more tests.
msg112038 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2010-07-30 02:23
> The patch should also include more tests.

Which kind of test? Run the test suite in a non-ASCII directory with encoding different than utf-8 is enough. If the patch is accepted, the solution is maybe a specific buildbot.
msg112039 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2010-07-30 03:25
Another important TODO: use weak references for the code objects list.

--

I tested my patch on Windows. I fixes #8988 because non-ASCII characters are now correctly decoded with mbcs and not UTF-8. But it doesn't work with characters not encodable to mbcs. It looks like there are some remaining code using byte string. I fixed some of them in import_unicode branch, but it's not enough.

It is not easy to investigate because Visual Studio refuse to compile the project if the project directory contains a character not encodable to mbcs. And it is unable to debug python if the project directory is renamed after the compilation. I will maybe retry with Cygwin or with the old school "printf" method.

It looks like few Windows applications support characters not encodable to mbcs (locale encoding): MinGW and WinSCP do neither support such characters.
msg112213 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2010-07-31 21:51
After some tests on Windows, I realized that my patch is not enough to be fully unicode compliant (on Windows). Some functions are still using PyUnicode_DecodeFSDefault() or PyUnicode_EncodeFSDefault(). Until all functions are patched to use unicode strings, Python3 will not be fully unicode compliant *on Windows*. The problem is specific to Windows, because Python uses mbcs codec which doesn't support surrogateescape error handler.

I think that this patch is already huge and complex, and it will be difficult to fix all issues at the same time. This patch does improve the situation: with the patch, Python is fully unicode compliant (except on Windows), and it fixes at least one issue on Windows (#8988, it now uses the right encoding).
msg113164 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2010-08-07 10:49
The patch is too huge to be commited at once. I will split it again into smaller parts.

First related commit: r83778 fixes tests for not encodable filenames.
msg113165 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2010-08-07 10:57
r83779 creates run_command(), it's just a refactorization.
msg113255 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2010-08-08 12:49
_Py_wchar2char.patch: create _Py_wchar2char() private function, and _wstat() and _wfopen() use it. _Py_wchar2char() function has been improved since the previous version posted to Rietveld: it now computes the exact length of the output buffer, instead of using wcslen(text)*10+1.

Alone, this patch isn't really useful, but it prepares the code for next patches.
msg113256 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2010-08-08 12:50
r83783 creates run_file() subfunction.
msg113259 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2010-08-08 13:16
pyerr_warnformat.patch: create PyErr_WarnFormat() function, and use it in PyType_Ready() and PyUnicode_AsEncodedString(). The patch fixes also setup_context(): work on the unicode filename, not the encoded (bytes) filename. It does fix a bug because len is a number of characters, not a number of bytes: the number of bytes is bigger than the number of characters if the filename contains a non-ASCII character.

Advantages of PyErr_WarnFormat() over PyOS_snprintf() + PyErr_WarnEx():
 - it avoids the create a temporary byte buffer: use directly an unicode buffer,
 - it accepts Python (unicode) formatters like %U,
 - it avoids the usage of a fixed size buffer allocated on the stack (which may be too big).

Differences with Rietveld's version: rename PyErr_WarnUnicode() to warn_unicode() (it's now a static function) and document PyErr_WarnFormat().
msg113261 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2010-08-08 13:29
nullimporter_unicode.patch: patch NullImporter_init():
 - use GetFileAttributesW() instead of GetFileAttributesA() for the Windows version to be fully Unicode compliant
 - use "O&" format with PyUnicode_FSConverter instead of "es" with Py_FileSystemDefaultEncoding to accept also bytes filenames and support str with surrogates (PEP 383)
msg113308 - (view) Author: Antoine Pitrou (pitrou) * (Python committer) Date: 2010-08-08 20:13
It looks like you are a fixing a bug in setup_context() at the same time as you introduce PyErr_WarnFormat(). Both changes should probably go in separately.

The PyErr_WarnFormat() doc needs a "versionadded" tag.
msg113342 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2010-08-08 22:19
pitrou> It looks like you are a fixing a bug in setup_context() 
pitrou> at the same time as you introduce PyErr_WarnFormat(). 
pitrou> Both changes should probably go in separately.

Right. r83860 fixes the bug, and I attached a new version of the patch (with :versionadded:).
msg113347 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2010-08-08 22:25
gutworth's comment about r83860: "Test?"
msg113351 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2010-08-08 23:29
Py_UNICODE_strrchr.patch: Create Py_UNICODE_strrchr() function. It will be used for zipimport to work on unicode paths instead of bytes paths.

Antoine noticed that the input string is const whereas the output string is not const, which is unusual. I copy/pasted Py_UNICODE_strchr() prototype.

I suppose that const input and non const input is required to be able to use the function on const strings. The GNU libc uses the same strchr() prototype in its C version of string.h. In the C++ version of the header, it defines the strchr() twice: once with const input and output, once with non const input and ouput. The right solution is the C++ way, but C doesn't support polymophism.
msg113353 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2010-08-08 23:57
I created a separated issue, #9542, to add the new function PyUnicode_FSDecoder().
msg113354 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2010-08-09 00:39
_Py_stat.patch: create _Py_stat() function. It will be used in import.c and zipimport.c.

I added the function to import.c because, initially, I only used it there. But it's maybe not the best place for such function. posixmodule.c doesn't fit because it is not part of the bootstrap process.

I created this function to get full unicode support on Windows (don't fallback to bytes using the evil mbcs encoding).

In import.c and zipimport.c, it is used to check if the path is a regular file or if the path is a directory. That's why _Py_stat() only fills st_mode attribute (it's just enough).

A better API would be maybe functions checking directly these properties? Maybe Py_isdir() (as os.path.isdir()) and Py_isreg()? Or if you prefer longer names: Py_is_directory() ad Py_is_regular_file()? Such functions can be implemented differently, eg. use GetFileAttributesW on Windows. I say that because of a comment found in NullImporter_init():

    /* see issue1293 and issue3677:
     * stat() on Windows doesn't recognise paths like
     * "e:\\shared\\" and "\\\\whiterab-c2znlh\\shared" as dirs.
     */
msg113355 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2010-08-09 01:00
r83870 creates load_builtin() subfunction in import.c to prepare and simplify the big patch.
msg113546 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2010-08-10 16:38
I commited Py_UNICODE_strrchr.patch as r83933 after removing the useless start variable.
msg113548 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2010-08-10 16:56
_PyFile_FromFdUnicode.patch: create _PyFile_FromFdUnicode() function. It will be used in import.c to open a file using an unicode filename.

For _PyFile_FromFd(), I kept the previous behaviour: clear the exception on PyUnicode_DecodeFSDefault() error.

For fileobject.h: I used the same style than unicodeobject.h, one argument per line with their name. I prefer to write the argument name because the header can be used as a quick documentation.

As _PyFile_FromFd(), name is optional (can be NULL) for _PyFile_FromFdUnicode().
msg113598 - (view) Author: Antoine Pitrou (pitrou) * (Python committer) Date: 2010-08-11 10:10
Actually, I'm not sure there's much point since the "name" attribute is currently read-only:

>>> f = open(1, "wb")
>>> f.name = "foo"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: attribute 'name' of '_io.BufferedWriter' objects is not writable
>>> 
>>> g = open(1, "w")
>>> g.name = "bar"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: attribute 'name' of '_io.TextIOWrapper' objects is not writable
msg113726 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2010-08-13 00:44
(About PyFile_FromFd)
pitrou> Actually, I'm not sure there's much point since the "name"
pitrou>  attribute is currently read-only: (...)

Oh, it remembers me #4762. I closed this issue with the message "The last problem occurs with imp.find_module(). But imp.find_module() also returns a "filename" argument, so I don't think that the issue really matters. Let's close it ;-)".

Even if it would be possible to set f(.buffer).raw.name, the solution is maybe just to ignore the argument (don't set any name attribute). Can we change such public function?
msg113761 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2010-08-13 13:02
r83971 enables test.support.TESTFN_UNDECODEABLE on non-Windows OSes.
msg113764 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2010-08-13 13:08
I commited nullimporter_unicode.patch with an unit test as r83972.
msg113771 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2010-08-13 13:36
r83973 ignores the name argument of PyFile_FromFd() because it was already ignored (it did always produce an error) and it avoids my complex _PyFile_FromFdUnicode.patch. Thanks Antoine to having notice that name was ignored.
msg113785 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2010-08-13 15:22
Note about _Py_wchar2char(): it is possible to convert character by character (instead of working on substrings) because the input string doesn't contain surrogate pairs. _Py_char2wchar() ensures the the output string doens't contain surrogate pairs: if a byte sequence produces a surrogate pairs, the byte sequence is encoded using the surrogateescape error handler (U+DC00..U+DCFF range). I should add this note in _Py_wchar2char() comment.
msg113795 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2010-08-13 16:39
r83981 closes #9560: avoid the filename in _syscmd_file() to fix a bug with non encodable filenames in platform.architecture().
msg113796 - (view) Author: Antoine Pitrou (pitrou) * (Python committer) Date: 2010-08-13 16:58
About wchar2char:
- PEP 383 says “With this PEP, non-decodable bytes >= 128 will be represented as lone surrogate codes U+DC80..U+DCFF. Bytes below 128 will produce exceptions”. Your patch accepts bytes below 128.
- I don't understand why you decrement `size` in the second pass. Perhaps you want to add `assert size == 0` at the end?
msg113834 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2010-08-13 21:27
New version of the patch _Py_wchar2char-2.patch:
 - _Py_wchar2char() only escapes characters in range U+DC80..U+DCFF (instead of U+DC00..U+DCFF)
 - add a comment to _Py_char2wchar()

> I don't understand why you decrement `size` in the second pass.

Because I would like to avoid buffer overflow when calling wcstombs(). wcstombs() might write more bytes at the second step, even if I don't think that it would be possible.
msg113835 - (view) Author: Éric Araujo (eric.araujo) * (Python committer) Date: 2010-08-13 21:29
I know this is not introduced by your patch, just moved, but couldn’t
the typo in UNDECODEABLE be fixed? (extraneous e)
msg113843 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2010-08-13 22:24
> I know this is not introduced by your patch, just moved, but couldn’t
> the typo in UNDECODEABLE be fixed? (extraneous e)

I wasn't sure that it was a typo, so I kept it unchanged. It's now fixed by 
r83987.
msg113852 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2010-08-13 23:30
r83989 creates _Py_wchar2char() function (_Py_wchar2char-2.patch).
msg113855 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2010-08-14 00:01
r83990 closes #9542 by creating the PyUnicode_FSDecoder() PyArg_ParseTuple parser.
msg113859 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2010-08-14 01:04
r83976 adds PyErr_WarnFormat() (pyerr_warnformat-2.patch).
msg113862 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2010-08-14 01:22
I created #9599: Add PySys_FormatStdout and PySys_FormatStderr functions.
msg113903 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2010-08-14 14:52
r84012 creates _Py_stat(). It is a little bit different than the attached patch (_Py_stat.patch): it doesn't clear Python exception on unicode conversion error.
msg113904 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2010-08-14 14:55
r84012 patchs zipimporter_init() to use the new PyUnicode_FSDecoder() and use Py_UNICODE* (unicode) strings instead of char* (byte) strings.
msg113913 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2010-08-14 17:07
r84030 creates _Py_fopen() for PyUnicodeObject path.
msg113915 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2010-08-14 17:13
zipimport_read_directory.patch: patch for read_directory() function of the zipimport module to support unencodable filenames. This patch requires #9599 (PySys_FormatStderr). The patch changes the encoding of the name: decode name byte string using the file system encoding (and the PEP 383 on POSIX) instead of the utf-8 in strict mode.
msg113955 - (view) Author: Florent Xicluna (flox) * (Python committer) Date: 2010-08-15 13:01
r83972 breaks OS X buildbots: support.TESTFN_UNENCODABLE is not defined if sys.platform == 'darwin'.

  File "/Users/db3l/buildarea/3.x.bolen-tiger/build/Lib/test/test_imp.py", line 309, in <module>
    class NullImporterTests(unittest.TestCase):
  File "/Users/db3l/buildarea/3.x.bolen-tiger/build/Lib/test/test_imp.py", line 310, in NullImporterTests
    @unittest.skipIf(support.TESTFN_UNENCODABLE is None,
AttributeError: 'module' object has no attribute 'TESTFN_UNENCODABLE'
msg113956 - (view) Author: Florent Xicluna (flox) * (Python committer) Date: 2010-08-15 13:07
It breaks test_unicode_file on OS X, too:

  File "/Users/db3l/buildarea/3.x.bolen-tiger/build/Lib/test/test_unicode_file.py", line 8, in <module>
    from test.support import (run_unittest, rmtree,
ImportError: cannot import name TESTFN_UNENCODABLE
msg114002 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2010-08-15 19:30
I tried to fix Mac OS X (TESTFN_UNENCODABLE) with r84035, but I don't have access to Mac OS X to test and my patch was not correct. It should now be ok with r84080.
msg114059 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2010-08-16 17:55
zipimport_read_directory.patch commited as r84095.
msg114062 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2010-08-16 18:43
Py_UNICODE_strncmp.patch: create Py_UNICODE_strncmp() function.
msg114078 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2010-08-16 21:39
Py_UNICODE_strncmp.patch was wrong for n=0. New version based on libiberty/strncmp.c source code.
msg114080 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2010-08-16 22:04
Py_UNICODE_strncmp-2.patch commited as r84111.
msg114087 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2010-08-16 23:49
r84120: get_data() function of zipimport uses an unicode path.
msg114089 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2010-08-17 00:05
r84121: repr() method zipimporter object uses unicode.
msg114090 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2010-08-17 00:43
r84122 saves/restores the exception around "filename = _PyUnicode_AsString(co->co_filename);" because it raises an unicode error on unencodable filename.
msg114192 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2010-08-17 23:48
r84168 creates PyModule_GetFilenameObject().

I created a separated issue for the patch reencoding all filenames when setting the filesystem encoding: #9630.
msg114819 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2010-08-24 20:36
See also #1552880.
msg114827 - (view) Author: Kristján Valur Jónsson (kristjan.jonsson) * (Python committer) Date: 2010-08-24 21:04
Yes.  in #1552880 I tried to make as minimal a change as possible.  This particular patch is still in use in EVE Online, which is installed in various strange and exotic paths in the orient..

The trick I employed there was to encode everything to utf-8 at the earliest oppertunity (current working directory, any unicode members in sys.path, etc.) and let the import.c machinery crunch that utf-8 code.  This works because path separators and other such stuff doesn't change under the utf-8 encoding.  As a final step, the utf8 encoded working string is converted back to unicode and native unicode API calls (on windows) are used to stat() and open() files.

A similar trick could be used on unix by converting from utf-8 to whatever native encoding the stat() and open() calls expect.

My patch never got accepted because I didn't have the time to put in the extra effort to make it cross platform.
msg114944 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2010-08-25 22:58
> r84012 patchs zipimporter_init() to use the new PyUnicode_FSDecoder() 
> and use Py_UNICODE* (unicode) strings instead of char* (byte) strings.

oops, it's r84013 (not r84012)
msg115180 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2010-08-29 16:04
Py_UNICODE_strcat.patch: create Py_UNICODE_strcat() function.

Py_UNICODE_strdup.patch: create Py_UNICODE_strdup() function.
msg115343 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2010-09-01 23:45
r84429 creates Py_UNICODE_strcat() (change with the patch: return the right value).

r84430 creates PyUnicode_strdup() (change with the patch: rename the function from Py_UNICODE_strdup() to PyUnicode_strdup() and mangle the function name).
msg117630 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2010-09-29 16:42
r85115 closes #9630: an important patch for #9425, redecode all filenames when setting the filesystem encoding.

Next tasks (maybe not in this order):
 - merge getpath.c
 - redecode argv[0] used by PySys_SetArgvEx() to feed sys.path (encode argv[0] with the locale encoding and then decode it using the filesystem encoding): it is required if PYTHONFSENCODING environment variable is used
 - merge import.c (in small patchs if it's possible)
 - and other things that I forgot
msg119097 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2010-10-19 01:02
Starting at r85691, the full test suite of Python 3.2 pass with ASCII, ISO-8859-1 and UTF-8 locale encodings in a non-ascii directory. The work on this issue is done.
History
Date User Action Args
2010-10-19 01:02:36hayposetstatus: open -> closed
resolution: fixed
messages: + msg119097
2010-10-13 16:48:24brett.cannonlinkissue10081 superseder
2010-09-29 16:42:21hayposetmessages: + msg117630
2010-09-01 23:46:11hayposetfiles: - Py_UNICODE_strcat.patch
2010-09-01 23:46:05hayposetfiles: - Py_UNICODE_strdup.patch
2010-09-01 23:45:56hayposetmessages: + msg115343
2010-08-29 16:04:09hayposetfiles: + Py_UNICODE_strdup.patch

messages: + msg115180
2010-08-29 16:01:39hayposetfiles: + Py_UNICODE_strcat.patch
2010-08-25 22:58:08hayposetmessages: + msg114944
2010-08-24 21:04:32kristjan.jonssonsetnosy: + kristjan.jonsson
messages: + msg114827
2010-08-24 20:36:11hayposetmessages: + msg114819
2010-08-22 23:11:55Rommesetnosy: + Romme
2010-08-17 23:48:59hayposetmessages: + msg114192
2010-08-17 00:43:02hayposetmessages: + msg114090
2010-08-17 00:05:32hayposetmessages: + msg114089
2010-08-16 23:49:18hayposetmessages: + msg114087
2010-08-16 22:04:49hayposetfiles: - Py_UNICODE_strncmp-2.patch
2010-08-16 22:04:16hayposetmessages: + msg114080
2010-08-16 21:54:11hayposetfiles: - Py_UNICODE_strncmp.patch
2010-08-16 21:39:12hayposetfiles: + Py_UNICODE_strncmp-2.patch

messages: + msg114078
2010-08-16 18:43:11hayposetfiles: + Py_UNICODE_strncmp.patch

messages: + msg114062
2010-08-16 17:55:17hayposetfiles: - zipimport_read_directory.patch
2010-08-16 17:55:10hayposetmessages: + msg114059
2010-08-15 19:30:04hayposetmessages: + msg114002
2010-08-15 13:07:59floxsetmessages: + msg113956
2010-08-15 13:01:39floxsetkeywords: + buildbot
nosy: + flox
messages: + msg113955

2010-08-14 17:13:42hayposetfiles: + zipimport_read_directory.patch

messages: + msg113915
2010-08-14 17:07:11hayposetmessages: + msg113913
2010-08-14 14:55:08hayposetmessages: + msg113904
2010-08-14 14:52:12hayposetfiles: - _Py_stat.patch
2010-08-14 14:52:07hayposetmessages: + msg113903
2010-08-14 01:22:15hayposetmessages: + msg113862
2010-08-14 01:04:42hayposetmessages: + msg113859
2010-08-14 00:01:18hayposetmessages: + msg113855
2010-08-13 23:31:26hayposetfiles: - _Py_wchar2char-2.patch
2010-08-13 23:30:56hayposetmessages: + msg113852
2010-08-13 22:24:10hayposetmessages: + msg113843
2010-08-13 21:29:53eric.araujosetmessages: + msg113835
2010-08-13 21:27:36hayposetfiles: - _Py_wchar2char.patch
2010-08-13 21:27:23hayposetfiles: + _Py_wchar2char-2.patch

messages: + msg113834
2010-08-13 16:58:14pitrousetmessages: + msg113796
2010-08-13 16:39:19hayposetmessages: + msg113795
2010-08-13 15:22:42hayposetmessages: + msg113785
2010-08-13 14:15:25hayposetfiles: - pyerr_warnformat-2.patch
2010-08-13 13:36:12hayposetmessages: + msg113771
2010-08-13 13:35:06hayposetfiles: - _PyFile_FromFdUnicode.patch
2010-08-13 13:08:16hayposetfiles: - nullimporter_unicode.patch
2010-08-13 13:08:08hayposetmessages: + msg113764
2010-08-13 13:02:32hayposetmessages: + msg113761
2010-08-13 00:44:28hayposetmessages: + msg113726
2010-08-11 10:10:06pitrousetmessages: + msg113598
2010-08-10 16:56:35hayposetfiles: + _PyFile_FromFdUnicode.patch

messages: + msg113548
2010-08-10 16:38:20hayposetfiles: - Py_UNICODE_strrchr.patch
2010-08-10 16:38:09hayposetmessages: + msg113546
2010-08-09 01:00:29hayposetmessages: + msg113355
2010-08-09 00:39:32hayposetfiles: + _Py_stat.patch

messages: + msg113354
2010-08-08 23:57:38hayposetmessages: + msg113353
2010-08-08 23:29:46hayposetfiles: + Py_UNICODE_strrchr.patch

messages: + msg113351
2010-08-08 22:25:31hayposetmessages: + msg113347
2010-08-08 22:19:48hayposetfiles: - pyerr_warnformat.patch
2010-08-08 22:19:38hayposetfiles: + pyerr_warnformat-2.patch

messages: + msg113342
2010-08-08 20:13:06pitrousetmessages: + msg113308
2010-08-08 13:29:05hayposetfiles: + nullimporter_unicode.patch

messages: + msg113261
2010-08-08 13:16:14hayposetfiles: + pyerr_warnformat.patch
nosy: + amaury.forgeotdarc, pitrou, eric.araujo
messages: + msg113259

2010-08-08 12:50:35hayposetmessages: + msg113256
2010-08-08 12:49:37hayposetfiles: + _Py_wchar2char.patch
keywords: + patch
messages: + msg113255
2010-08-07 10:57:41hayposetmessages: + msg113165
2010-08-07 10:49:53hayposetmessages: + msg113164
2010-07-31 21:51:56hayposetmessages: + msg112213
2010-07-31 07:55:45georg.brandllinkissue8611 dependencies
2010-07-30 03:25:19hayposetmessages: + msg112039
2010-07-30 02:23:44hayposetmessages: + msg112038
2010-07-30 01:03:46Arfreversetnosy: + Arfrever
2010-07-30 00:42:11ezio.melottisetnosy: + ezio.melotti
messages: + msg112032
2010-07-30 00:18:16hayposetmessages: + msg112027
2010-07-30 00:13:32haypocreate