tree 13d5163a28c90df3fc04448dcfd453f68adc6088
parent 7c3bccd32f456d77ddf121fb1df2333724541434
author Thomas Wouters <thomas@python.org> 1148757707 +0000
committer Thomas Wouters <thomas@python.org> 1148757707 +0000
HG:extra convert_revision:svn%3A6015fed2-1504-0410-9fe1-9d1591cc4771/python/branches/p3yk%4046491

Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Inherits test_gzip/test_tarfile failures on 64-bit platforms from the trunk,
but I don't want the merge to hang around too long (even though the regular
p3yk-contributors are/have been busy with other things.)

Merged revisions 45621-46490 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r45621 | george.yoshida | 2006-04-21 18:34:17 +0200 (Fri, 21 Apr 2006) | 2 lines

  Correct the grammar
........
  r45622 | tim.peters | 2006-04-21 18:34:54 +0200 (Fri, 21 Apr 2006) | 2 lines

  Whitespace normalization.
........
  r45624 | thomas.heller | 2006-04-21 18:48:56 +0200 (Fri, 21 Apr 2006) | 1 line

  Merge in changes from ctypes 0.9.9.6 upstream version.
........
  r45625 | thomas.heller | 2006-04-21 18:51:04 +0200 (Fri, 21 Apr 2006) | 1 line

  Merge in changes from ctypes 0.9.9.6 upstream version.
........
  r45630 | thomas.heller | 2006-04-21 20:29:17 +0200 (Fri, 21 Apr 2006) | 8 lines

  Documentation for ctypes.
  I think that 'generic operating system services' is the best category.
  Note that the Doc/lib/libctypes.latex file is generated from reST sources.
  You are welcome to make typo fixes, and I'll try to keep the reST sources
  in sync, but markup changes would be lost - they should be fixed in the tool
  that creates the latex file.
  The conversion script is external/ctypes/docs/manual/mkpydoc.py.
........
  r45631 | tim.peters | 2006-04-21 23:18:10 +0200 (Fri, 21 Apr 2006) | 24 lines

  SF bug #1473760 TempFile can hang on Windows.

  Python 2.4 changed ntpath.abspath to do an import
  inside the function.  As a result, due to Python's
  import lock, anything calling abspath on Windows
  (directly, or indirectly like tempfile.TemporaryFile)
  hung when it was called from a thread spawned as a
  side effect of importing a module.

  This is a depressingly frequent problem, and
  deserves a more general fix.  I'm settling for
  a micro-fix here because this specific one accounts
  for a report of Zope Corp's ZEO hanging on Windows,
  and it was an odd way to change abspath to begin
  with (ntpath needs a different implementation
  depending on whether we're actually running on
  Windows, and the _obvious_ way to arrange for that
  is not to bury a possibly-failing import _inside_
  the function).

  Note that if/when other micro-fixes of this kind
  get made, the new Lib/test/threaded_import_hangers.py
  is a convenient place to add tests for them.
........
  r45634 | phillip.eby | 2006-04-21 23:53:37 +0200 (Fri, 21 Apr 2006) | 2 lines

  Guido wrote contextlib, not me, but thanks anyway.  ;)
........
  r45636 | andrew.kuchling | 2006-04-22 03:51:41 +0200 (Sat, 22 Apr 2006) | 1 line

  Typo fixes
........
  r45638 | andrew.kuchling | 2006-04-22 03:58:40 +0200 (Sat, 22 Apr 2006) | 1 line

  Fix comment typo
........
  r45639 | andrew.kuchling | 2006-04-22 04:06:03 +0200 (Sat, 22 Apr 2006) | 8 lines

  Make copy of test_mailbox.py.  We'll still want to check the backward
  compatibility classes in the new mailbox.py that I'll be committing in
  a few minutes.

  One change has been made: the tests use len(mbox) instead of len(mbox.boxes).
  The 'boxes' attribute was never documented and contains some internal state
  that seems unlikely to have been useful.
........
  r45640 | andrew.kuchling | 2006-04-22 04:32:43 +0200 (Sat, 22 Apr 2006) | 16 lines

  Add Gregory K. Johnson's revised version of mailbox.py (funded by
  the 2005 Summer of Code).

  The revision adds a number of new mailbox classes that support adding
  and removing messages; these classes also support mailbox locking and
  default to using email.Message instead of rfc822.Message.

  The old mailbox classes are largely left alone for backward compatibility.
  The exception is the Maildir class, which was present in the old module
  and now inherits from the new classes.  The Maildir class's interface
  is pretty simple, though, so I think it'll be compatible with existing
  code.

  (The change to the NEWS file also adds a missing word to a different
  news item, which unfortunately required rewrapping the line.)
........
  r45641 | tim.peters | 2006-04-22 07:52:59 +0200 (Sat, 22 Apr 2006) | 2 lines

  Whitespace normalization.
........
  r45642 | neal.norwitz | 2006-04-22 08:07:46 +0200 (Sat, 22 Apr 2006) | 1 line

  Add libctypes as a dep
........
  r45643 | martin.v.loewis | 2006-04-22 13:15:41 +0200 (Sat, 22 Apr 2006) | 1 line

  Fix more ssize_t problems.
........
  r45644 | martin.v.loewis | 2006-04-22 13:40:03 +0200 (Sat, 22 Apr 2006) | 1 line

  Fix more ssize_t issues.
........
  r45645 | george.yoshida | 2006-04-22 17:10:49 +0200 (Sat, 22 Apr 2006) | 2 lines

  Typo fixes
........
  r45647 | martin.v.loewis | 2006-04-22 17:19:54 +0200 (Sat, 22 Apr 2006) | 1 line

  Port to Python 2.5. Drop .DEF file. Change output file names to .pyd.
........
  r45648 | george.yoshida | 2006-04-22 17:27:14 +0200 (Sat, 22 Apr 2006) | 3 lines

  - add versionadded tag
  - make arbitrary arguments come last
........
  r45649 | hyeshik.chang | 2006-04-22 17:48:15 +0200 (Sat, 22 Apr 2006) | 3 lines

  Remove $CJKCodecs$ RCS tags.  The CJKCodecs isn't maintained outside
  anymore.
........
  r45654 | greg.ward | 2006-04-23 05:47:58 +0200 (Sun, 23 Apr 2006) | 2 lines

  Update optparse to Optik 1.5.1.
........
  r45658 | george.yoshida | 2006-04-23 11:27:10 +0200 (Sun, 23 Apr 2006) | 2 lines

  wrap SyntaxError with \exception{}
........
  r45660 | ronald.oussoren | 2006-04-23 13:59:25 +0200 (Sun, 23 Apr 2006) | 6 lines

  Patch 1471925 - Weak linking support for OSX

  This patch causes several symbols in the socket and posix module to be weakly
  linked on OSX and disables usage of ftime on OSX. These changes make it possible
  to use a binary build on OSX 10.4 on a 10.3 system.
........
  r45661 | ronald.oussoren | 2006-04-23 14:36:23 +0200 (Sun, 23 Apr 2006) | 5 lines

  Patch 1471761 - test for broken poll at runtime

  This patch checks if poll is broken when the select module is loaded instead
  of doing so at configure-time. This functionality is only active on Mac OS X.
........
  r45662 | nick.coghlan | 2006-04-23 17:13:32 +0200 (Sun, 23 Apr 2006) | 1 line

  Add a Context Types section to parallel the Iterator Types section (uses the same terminology as the 2.5a1 implementation)
........
  r45663 | nick.coghlan | 2006-04-23 17:14:37 +0200 (Sun, 23 Apr 2006) | 1 line

  Update contextlib documentation to use the same terminology as the module implementation
........
  r45664 | gerhard.haering | 2006-04-23 17:24:26 +0200 (Sun, 23 Apr 2006) | 2 lines

  Updated the sqlite3 module to the external pysqlite 2.2.2 version.
........
  r45666 | nick.coghlan | 2006-04-23 17:39:16 +0200 (Sun, 23 Apr 2006) | 1 line

  Update with statement documentation to use same terminology as 2.5a1 implementation
........
  r45667 | nick.coghlan | 2006-04-23 18:05:04 +0200 (Sun, 23 Apr 2006) | 1 line

  Add a (very) brief mention of the with statement to the end of chapter 8
........
  r45668 | nick.coghlan | 2006-04-23 18:35:19 +0200 (Sun, 23 Apr 2006) | 1 line

  Take 2 on mentioning the with statement, this time without inadvertently killing the Unicode examples
........
  r45669 | nick.coghlan | 2006-04-23 19:04:07 +0200 (Sun, 23 Apr 2006) | 1 line

  Backdated NEWS entry to record the implementation of PEP 338 for alpha 1
........
  r45670 | tim.peters | 2006-04-23 20:13:45 +0200 (Sun, 23 Apr 2006) | 2 lines

  Whitespace normalization.
........
  r45671 | skip.montanaro | 2006-04-23 21:14:27 +0200 (Sun, 23 Apr 2006) | 1 line

  first cut at trace module doc
........
  r45672 | skip.montanaro | 2006-04-23 21:26:33 +0200 (Sun, 23 Apr 2006) | 1 line

  minor tweak
........
  r45673 | skip.montanaro | 2006-04-23 21:30:50 +0200 (Sun, 23 Apr 2006) | 1 line

  it's always helpful if the example works...
........
  r45674 | skip.montanaro | 2006-04-23 21:32:14 +0200 (Sun, 23 Apr 2006) | 1 line

  correct example
........
  r45675 | andrew.kuchling | 2006-04-23 23:01:04 +0200 (Sun, 23 Apr 2006) | 1 line

  Edits to the PEP 343 section
........
  r45676 | andrew.kuchling | 2006-04-23 23:51:10 +0200 (Sun, 23 Apr 2006) | 1 line

  Add two items
........
  r45677 | tim.peters | 2006-04-24 04:03:16 +0200 (Mon, 24 Apr 2006) | 5 lines

  Bug #1337990: clarified that `doctest` does not support examples
  requiring both expected output and an exception.

  I'll backport to 2.4 next.
........
  r45679 | nick.coghlan | 2006-04-24 05:04:43 +0200 (Mon, 24 Apr 2006) | 1 line

  Note changes made to PEP 343 related documentation
........
  r45681 | nick.coghlan | 2006-04-24 06:17:02 +0200 (Mon, 24 Apr 2006) | 1 line

  Change PEP 343 related documentation to use the term context specifier instead of context object
........
  r45682 | nick.coghlan | 2006-04-24 06:32:47 +0200 (Mon, 24 Apr 2006) | 1 line

  Add unit tests for the -m and -c command line switches
........
  r45683 | nick.coghlan | 2006-04-24 06:37:15 +0200 (Mon, 24 Apr 2006) | 1 line

  Fix contextlib.nested to cope with exit methods raising and handling exceptions
........
  r45685 | nick.coghlan | 2006-04-24 06:59:28 +0200 (Mon, 24 Apr 2006) | 1 line

  Fix broken contextlib test from last checkin (I'd've sworn I tested that before checking it in. . .)
........
  r45686 | nick.coghlan | 2006-04-24 07:24:26 +0200 (Mon, 24 Apr 2006) | 1 line

  Back out new command line tests (broke buildbot)
........
  r45687 | nick.coghlan | 2006-04-24 07:52:15 +0200 (Mon, 24 Apr 2006) | 1 line

  More reliable version of new command line tests that just checks the exit codes
........
  r45688 | thomas.wouters | 2006-04-24 13:37:13 +0200 (Mon, 24 Apr 2006) | 4 lines


  Stop test_tcl's testLoadTk from leaking the Tk commands 'loadtk' registers.
........
  r45690 | andrew.kuchling | 2006-04-24 16:30:47 +0200 (Mon, 24 Apr 2006) | 2 lines

  Edits, using the new term
  'context specifier' in a few places
........
  r45697 | phillip.eby | 2006-04-24 22:53:13 +0200 (Mon, 24 Apr 2006) | 2 lines

  Revert addition of setuptools
........
  r45698 | tim.peters | 2006-04-25 00:45:13 +0200 (Tue, 25 Apr 2006) | 2 lines

  Whitespace normalization.
........
  r45700 | trent.mick | 2006-04-25 02:34:50 +0200 (Tue, 25 Apr 2006) | 4 lines

  Put break at correct level so *all* root HKEYs acutally get checked for
  an installed VC6. Otherwise only the first such tree gets checked and this
  warning doesn't get displayed.
........
  r45701 | tim.peters | 2006-04-25 05:31:36 +0200 (Tue, 25 Apr 2006) | 3 lines

  Patch #1475231:  add a new SKIP doctest option, thanks to
  Edward Loper.
........
  r45702 | neal.norwitz | 2006-04-25 07:04:35 +0200 (Tue, 25 Apr 2006) | 1 line

  versionadded for SKIP
........
  r45703 | neal.norwitz | 2006-04-25 07:05:03 +0200 (Tue, 25 Apr 2006) | 1 line

  Restore Walters name
........
  r45704 | neal.norwitz | 2006-04-25 07:49:42 +0200 (Tue, 25 Apr 2006) | 1 line

  Revert previous change, SKIP had a versionadded elsewhere
........
  r45706 | nick.coghlan | 2006-04-25 12:56:51 +0200 (Tue, 25 Apr 2006) | 31 lines

  Move the PEP 343 documentation and implementation closer to the
  terminology in the alpha 1 documentation.

   - "context manager" reverts to its alpha 1 definition
   - the term "context specifier" goes away entirely
   - contextlib.GeneratorContextManager is renamed GeneratorContext

  There are still a number of changes relative to alpha 1:

    - the expression in the with statement is explicitly called the
      "context expression" in the language reference
    - the terms 'with statement context', 'context object' or 'with
      statement context' are used in several places instead of a bare
      'context'. The aim of this is to avoid ambiguity in relation to the
      runtime context set up when the block is executed, and the context
      objects that already exist in various application domains (such as
      decimal.Context)
    - contextlib.contextmanager is renamed to contextfactory
      This best reflects the nature of the function resulting from the
      use of that decorator
    - decimal.ContextManager is renamed to WithStatementContext
      Simple dropping the 'Manager' part wasn't possible due to the
      fact that decimal.Context already exists and means something
      different. WithStatementContext is ugly but workable.

  A technically unrelated change snuck into this commit:
  contextlib.closing now avoids the overhead of creating a
  generator, since it's trivial to implement that particular
  context manager directly.
........
  r45707 | nick.coghlan | 2006-04-25 13:05:56 +0200 (Tue, 25 Apr 2006) | 1 line

  Fix latex typo
........
  r45708 | thomas.wouters | 2006-04-25 14:28:56 +0200 (Tue, 25 Apr 2006) | 4 lines


  Fix markup glitch in unittest docs. Will backport.
........
  r45710 | andrew.kuchling | 2006-04-25 14:31:38 +0200 (Tue, 25 Apr 2006) | 1 line

  Add two items; easy_install is now off the table, though pkgutil still is
........
  r45711 | andrew.kuchling | 2006-04-25 14:47:25 +0200 (Tue, 25 Apr 2006) | 1 line

  Rework context terminology
........
  r45712 | thomas.wouters | 2006-04-25 15:53:23 +0200 (Tue, 25 Apr 2006) | 9 lines


  SF bug/patch #1433877: string parameter to ioctl not null terminated

  The new char-array used in ioctl calls wasn't explicitly NUL-terminated;
  quite probably the cause for the test_pty failures on Solaris that we
  circumvented earlier. (I wasn't able to reproduce it with this patch, but it
  has been somewhat elusive to start with.)
........
  r45713 | george.yoshida | 2006-04-25 16:09:58 +0200 (Tue, 25 Apr 2006) | 2 lines

  minor tweak
........
  r45714 | thomas.wouters | 2006-04-25 17:08:10 +0200 (Tue, 25 Apr 2006) | 7 lines


  Fix SF bug #1476111: SystemError in socket sendto. The AF_INET6 and
  AF_PACKET cases in getsockaddrarg were missing their own checks for
  tuple-ness of the address argument, which means a confusing SystemError was
  raised by PyArg_ParseTuple instead.
........
  r45715 | thomas.wouters | 2006-04-25 17:29:46 +0200 (Tue, 25 Apr 2006) | 10 lines


  Define MAXPATHLEN to be at least PATH_MAX, if that's defined. Python uses
  MAXPATHLEN-sized buffers for various output-buffers (like to realpath()),
  and that's correct on BSD platforms, but not Linux (which uses PATH_MAX, and
  does not define MAXPATHLEN.) Cursory googling suggests Linux is following a
  newer standard than BSD, but in cases like this, who knows. Using the
  greater of PATH_MAX and 1024 as a fallback for MAXPATHLEN seems to be the
  most portable solution.
........
  r45717 | thomas.heller | 2006-04-25 20:26:08 +0200 (Tue, 25 Apr 2006) | 3 lines

  Fix compiler warnings on Darwin.
  Patch by Brett Canon, see
  https://sourceforge.net/tracker/?func=detail&atid=532156&aid=1475959&group_id=71702
........
  r45718 | guido.van.rossum | 2006-04-25 22:12:45 +0200 (Tue, 25 Apr 2006) | 4 lines

  Implement MvL's improvement on __context__ in Condition;
  this can just call __context__ on the underlying lock.
  (The same change for Semaphore does *not* work!)
........
  r45721 | tim.peters | 2006-04-26 03:15:53 +0200 (Wed, 26 Apr 2006) | 13 lines

  Rev 45706 renamed stuff in contextlib.py, but didn't rename
  uses of it in test_with.py.  As a result, test_with has been skipped
  (due to failing imports) on all buildbot boxes since.  Alas, that's
  not a test failure -- you have to pay attention to the

      1 skip unexpected on PLATFORM:
          test_with

  kinds of output at the ends of test runs to notice that this got
  broken.

  It's likely that more renaming in test_with.py would be desirable.
........
  r45722 | fred.drake | 2006-04-26 07:15:41 +0200 (Wed, 26 Apr 2006) | 1 line

  markup fixes, cleanup
........
  r45723 | fred.drake | 2006-04-26 07:19:39 +0200 (Wed, 26 Apr 2006) | 1 line

  minor adjustment suggested by Peter Gephardt
........
  r45724 | neal.norwitz | 2006-04-26 07:34:03 +0200 (Wed, 26 Apr 2006) | 10 lines

  Patch from Aldo Cortesi (OpenBSD buildbot owner).

  After the patch (45590) to add extra debug stats to the gc module, Python
  was crashing on OpenBSD due to:
  	Fatal Python error: Interpreter not initialized (version mismatch?)

  This seems to occur due to calling collect() when initialized (in pythonrun.c)
  is set to 0.  Now, the import will occur in the init function which
  shouldn't suffer this problem.
........
  r45725 | neal.norwitz | 2006-04-26 08:26:12 +0200 (Wed, 26 Apr 2006) | 3 lines

  Fix this test on Solaris.  There can be embedded \r, so don't just replace
  the one at the end.
........
  r45727 | nick.coghlan | 2006-04-26 13:50:04 +0200 (Wed, 26 Apr 2006) | 1 line

  Fix an error in the last contextlib.closing example
........
  r45728 | andrew.kuchling | 2006-04-26 14:21:06 +0200 (Wed, 26 Apr 2006) | 1 line

  [Bug #1475080] Fix example
........
  r45729 | andrew.kuchling | 2006-04-26 14:23:39 +0200 (Wed, 26 Apr 2006) | 1 line

  Add labels to all sections
........
  r45730 | thomas.wouters | 2006-04-26 17:53:30 +0200 (Wed, 26 Apr 2006) | 7 lines


  The result of SF patch #1471578: big-memory tests for strings, lists and
  tuples. Lots to be added, still, but this will give big-memory people
  something to play with in 2.5 alpha 2, and hopefully get more people to
  write these tests.
........
  r45731 | tim.peters | 2006-04-26 19:11:16 +0200 (Wed, 26 Apr 2006) | 2 lines

  Whitespace normalization.
........
  r45732 | martin.v.loewis | 2006-04-26 19:19:44 +0200 (Wed, 26 Apr 2006) | 1 line

  Use GS- and bufferoverlowU.lib where appropriate, for AMD64.
........
  r45733 | thomas.wouters | 2006-04-26 20:46:01 +0200 (Wed, 26 Apr 2006) | 5 lines


  Add tests for += and *= on strings, and fix the memory-use estimate for the
  list.extend tests (they were estimating half the actual use.)
........
  r45734 | thomas.wouters | 2006-04-26 21:14:46 +0200 (Wed, 26 Apr 2006) | 5 lines


  Some more test-size-estimate fixes: test_append and test_insert trigger a
  list resize, which overallocates.
........
  r45735 | hyeshik.chang | 2006-04-26 21:20:26 +0200 (Wed, 26 Apr 2006) | 3 lines

  Fix build on MIPS for libffi.  I haven't tested this yet because I
  don't have an access on MIPS machines.  Will be tested by buildbot. :)
........
  r45737 | fred.drake | 2006-04-27 01:40:32 +0200 (Thu, 27 Apr 2006) | 1 line

  one more place to use the current Python version
........
  r45738 | fred.drake | 2006-04-27 02:02:24 +0200 (Thu, 27 Apr 2006) | 3 lines

  - update version numbers in file names again, until we have a better way
  - elaborate instructions for Cygwin support (closes SF #839709)
........
  r45739 | fred.drake | 2006-04-27 02:20:14 +0200 (Thu, 27 Apr 2006) | 1 line

  add missing word
........
  r45740 | anthony.baxter | 2006-04-27 04:11:24 +0200 (Thu, 27 Apr 2006) | 2 lines

  2.5a2
........
  r45741 | anthony.baxter | 2006-04-27 04:13:13 +0200 (Thu, 27 Apr 2006) | 1 line

  2.5a2
........
  r45749 | andrew.kuchling | 2006-04-27 14:22:37 +0200 (Thu, 27 Apr 2006) | 1 line

  Now that 2.5a2 is out, revert to the current date
........
  r45750 | andrew.kuchling | 2006-04-27 14:23:07 +0200 (Thu, 27 Apr 2006) | 1 line

  Bump document version
........
  r45751 | andrew.kuchling | 2006-04-27 14:34:39 +0200 (Thu, 27 Apr 2006) | 6 lines

  [Bug #1477102] Add necessary import to example

  This may be a useful style question for the docs -- should examples show
  the necessary imports, or should it be assumed that the reader will
  figure it out?  In the What's New, I'm not consistent but usually opt
  for omitting the imports.
........
  r45753 | andrew.kuchling | 2006-04-27 14:38:35 +0200 (Thu, 27 Apr 2006) | 1 line

  [Bug #1477140] Import Error base class
........
  r45754 | andrew.kuchling | 2006-04-27 14:42:54 +0200 (Thu, 27 Apr 2006) | 1 line

  Mention the xmlrpclib.Error base class, which is used in one of the examples
........
  r45756 | george.yoshida | 2006-04-27 15:41:07 +0200 (Thu, 27 Apr 2006) | 2 lines

  markup fix
........
  r45757 | thomas.wouters | 2006-04-27 15:46:59 +0200 (Thu, 27 Apr 2006) | 4 lines


  Some more size-estimate fixes, for large-list-tests.
........
  r45758 | thomas.heller | 2006-04-27 17:50:42 +0200 (Thu, 27 Apr 2006) | 3 lines

  Rerun the libffi configuration if any of the files used for that
  are newer then fficonfig.py.
........
  r45766 | thomas.wouters | 2006-04-28 00:37:50 +0200 (Fri, 28 Apr 2006) | 6 lines


  Some style fixes and size-calculation fixes. Also do the small-memory run
  using a prime number, rather than a convenient power-of-2-and-multiple-of-5,
  so incorrect testing algorithms fail more easily.
........
  r45767 | thomas.wouters | 2006-04-28 00:38:32 +0200 (Fri, 28 Apr 2006) | 6 lines


  Do the small-memory run of big-meormy tests using a prime number, rather
  than a convenient power-of-2-and-multiple-of-5, so incorrect testing
  algorithms fail more easily.
........
  r45768 | david.goodger | 2006-04-28 00:53:05 +0200 (Fri, 28 Apr 2006) | 1 line

  Added SVN access for Steven Bethard and Talin, for PEP updating.
........
  r45770 | thomas.wouters | 2006-04-28 01:13:20 +0200 (Fri, 28 Apr 2006) | 16 lines


   - Add new Warning class, ImportWarning

   - Warn-raise ImportWarning when importing would have picked up a directory
     as package, if only it'd had an __init__.py. This swaps two tests (for
     case-ness and __init__-ness), but case-test is not really more expensive,
     and it's not in a speed-critical section.

   - Test for the new warning by importing a common non-package directory on
     sys.path: site-packages

   - In regrtest.py, silence warnings generated by the build-environment
     because Modules/ (which is added to sys.path for Setup-created modules)
     has 'zlib' and '_ctypes' directories without __init__.py's.
........
  r45771 | thomas.wouters | 2006-04-28 01:41:27 +0200 (Fri, 28 Apr 2006) | 6 lines


  Add more ignores of ImportWarnings; these are all just potential triggers
  (since they won't trigger if zlib is already sucessfully imported); they
  were found by grepping .py files, instead of looking at warning output :)
........
  r45773 | neal.norwitz | 2006-04-28 06:32:20 +0200 (Fri, 28 Apr 2006) | 1 line

  Add some whitespace to be more consistent.
........
  r45774 | neal.norwitz | 2006-04-28 06:34:43 +0200 (Fri, 28 Apr 2006) | 5 lines

  Try to really fix the slow buildbots this time.
  Printing to stdout, doesn't mean the data was actually written.
  It depends on the buffering, so we need to flush.  This will hopefully
  really fix the buildbots getting killed due to no output on the slow bots.
........
  r45775 | neal.norwitz | 2006-04-28 07:28:05 +0200 (Fri, 28 Apr 2006) | 1 line

  Fix some warnings on Mac OS X 10.4
........
  r45776 | neal.norwitz | 2006-04-28 07:28:30 +0200 (Fri, 28 Apr 2006) | 1 line

  Fix a warning on alpha
........
  r45777 | neal.norwitz | 2006-04-28 07:28:54 +0200 (Fri, 28 Apr 2006) | 1 line

  Fix a warning on ppc (debian)
........
  r45778 | george.yoshida | 2006-04-28 18:09:45 +0200 (Fri, 28 Apr 2006) | 2 lines

  fix markup glitch
........
  r45780 | georg.brandl | 2006-04-28 18:31:17 +0200 (Fri, 28 Apr 2006) | 3 lines

  Add SeaMonkey to the list of Mozilla browsers.
........
  r45781 | georg.brandl | 2006-04-28 18:36:55 +0200 (Fri, 28 Apr 2006) | 2 lines

  Bug #1475009: clarify ntpath.join behavior with absolute components
........
  r45783 | george.yoshida | 2006-04-28 18:40:14 +0200 (Fri, 28 Apr 2006) | 2 lines

  correct a dead link
........
  r45785 | georg.brandl | 2006-04-28 18:54:25 +0200 (Fri, 28 Apr 2006) | 4 lines

  Bug #1472949: stringify IOErrors in shutil.copytree when appending
  them to the Error errors list.
........
  r45786 | georg.brandl | 2006-04-28 18:58:52 +0200 (Fri, 28 Apr 2006) | 3 lines

  Bug #1478326: don't allow '/' in distutils.util.get_platform machine names
  since this value is used to name the build directory.
........
  r45788 | thomas.heller | 2006-04-28 19:02:18 +0200 (Fri, 28 Apr 2006) | 1 line

  Remove a duplicated test (the same test is in test_incomplete.py).
........
  r45792 | georg.brandl | 2006-04-28 21:09:24 +0200 (Fri, 28 Apr 2006) | 3 lines

  Bug #1478429: make datetime.datetime.fromtimestamp accept every float,
  possibly "rounding up" to the next whole second.
........
  r45796 | george.yoshida | 2006-04-29 04:43:30 +0200 (Sat, 29 Apr 2006) | 2 lines

  grammar fix
........
  r45800 | ronald.oussoren | 2006-04-29 13:31:35 +0200 (Sat, 29 Apr 2006) | 2 lines

  Patch 1471883: --enable-universalsdk on Mac OS X
........
  r45801 | andrew.kuchling | 2006-04-29 13:53:15 +0200 (Sat, 29 Apr 2006) | 1 line

  Add item
........
  r45802 | andrew.kuchling | 2006-04-29 14:10:28 +0200 (Sat, 29 Apr 2006) | 1 line

  Make case of 'ZIP' consistent
........
  r45803 | andrew.kuchling | 2006-04-29 14:10:43 +0200 (Sat, 29 Apr 2006) | 1 line

  Add item
........
  r45808 | martin.v.loewis | 2006-04-29 14:37:25 +0200 (Sat, 29 Apr 2006) | 3 lines

  Further changes for #1471883: Edit Misc/NEWS, and
  add expat_config.h.
........
  r45809 | brett.cannon | 2006-04-29 23:29:50 +0200 (Sat, 29 Apr 2006) | 2 lines

  Fix docstring for contextfactory; mentioned old contextmanager name.
........
  r45810 | gerhard.haering | 2006-04-30 01:12:41 +0200 (Sun, 30 Apr 2006) | 3 lines

  This is the start of documentation for the sqlite3 module. Please feel free to
  find a better place for the link to it than alongside bsddb & friends.
........
  r45811 | andrew.kuchling | 2006-04-30 03:07:09 +0200 (Sun, 30 Apr 2006) | 1 line

  Add two items
........
  r45814 | george.yoshida | 2006-04-30 05:49:56 +0200 (Sun, 30 Apr 2006) | 2 lines

  Use \versionchanged instead of \versionadded for new parameter support.
........
  r45815 | georg.brandl | 2006-04-30 09:06:11 +0200 (Sun, 30 Apr 2006) | 2 lines

  Patch #1470846: fix urllib2 ProxyBasicAuthHandler.
........
  r45817 | georg.brandl | 2006-04-30 10:57:35 +0200 (Sun, 30 Apr 2006) | 3 lines

  In stdlib, use hashlib instead of deprecated md5 and sha modules.
........
  r45819 | georg.brandl | 2006-04-30 11:23:59 +0200 (Sun, 30 Apr 2006) | 3 lines

  Patch #1470976: don't NLST files when retrieving over FTP.
........
  r45821 | georg.brandl | 2006-04-30 13:13:56 +0200 (Sun, 30 Apr 2006) | 6 lines

  Bug #1473625: stop cPickle making float dumps locale dependent in protocol 0.

  On the way, add a decorator to test_support to facilitate running single
  test functions in different locales with automatic cleanup.
........
  r45822 | phillip.eby | 2006-04-30 17:59:26 +0200 (Sun, 30 Apr 2006) | 2 lines

  Fix infinite regress when inspecting <string> or <stdin> frames.
........
  r45824 | georg.brandl | 2006-04-30 19:42:26 +0200 (Sun, 30 Apr 2006) | 3 lines

  Fix another problem in inspect: if the module for an object cannot be found, don't try to give its __dict__ to linecache.
........
  r45825 | georg.brandl | 2006-04-30 20:14:54 +0200 (Sun, 30 Apr 2006) | 3 lines

  Patch #1472854: make the rlcompleter.Completer class usable on non-
  UNIX platforms.
........
  r45826 | georg.brandl | 2006-04-30 21:34:19 +0200 (Sun, 30 Apr 2006) | 3 lines

  Patch #1479438: add \keyword markup for "with".
........
  r45827 | andrew.kuchling | 2006-04-30 23:19:31 +0200 (Sun, 30 Apr 2006) | 1 line

  Add urllib2 HOWTO from Michael Foord
........
  r45828 | andrew.kuchling | 2006-04-30 23:19:49 +0200 (Sun, 30 Apr 2006) | 1 line

  Add item
........
  r45830 | barry.warsaw | 2006-05-01 05:03:02 +0200 (Mon, 01 May 2006) | 11 lines

  Port forward from 2.4 branch:

  Patch #1464708 from William McVey: fixed handling of nested comments in mail
  addresses.  E.g.

  "Foo ((Foo Bar)) <foo@example.com>"

  Fixes for both rfc822.py and email package.  This patch needs to be back
  ported to Python 2.3 for email 2.5.
........
  r45832 | fred.drake | 2006-05-01 08:25:58 +0200 (Mon, 01 May 2006) | 4 lines

  - minor clarification in section title
  - markup adjustments
  (there is clearly much to be done in this section)
........
  r45833 | martin.v.loewis | 2006-05-01 08:28:01 +0200 (Mon, 01 May 2006) | 2 lines

  Work around deadlock risk. Will backport.
........
  r45836 | andrew.kuchling | 2006-05-01 14:45:02 +0200 (Mon, 01 May 2006) | 1 line

  Some ElementTree fixes: import from xml, not xmlcore; fix case of module name; mention list() instead of getchildren()
........
  r45837 | gerhard.haering | 2006-05-01 17:14:48 +0200 (Mon, 01 May 2006) | 3 lines

  Further integration of the documentation for the sqlite3 module. There's still
  quite some content to move over from the pysqlite manual, but it's a start now.
........
  r45838 | martin.v.loewis | 2006-05-01 17:56:03 +0200 (Mon, 01 May 2006) | 2 lines

  Rename uisample to text, drop all non-text tables.
........
  r45839 | martin.v.loewis | 2006-05-01 18:12:44 +0200 (Mon, 01 May 2006) | 2 lines

  Add msilib documentation.
........
  r45840 | martin.v.loewis | 2006-05-01 18:14:16 +0200 (Mon, 01 May 2006) | 4 lines

  Rename parameters to match the documentation (which
  in turn matches Microsoft's documentation).
  Drop unused parameter in CAB.append.
........
  r45841 | fred.drake | 2006-05-01 18:28:54 +0200 (Mon, 01 May 2006) | 1 line

  add dependency
........
  r45842 | andrew.kuchling | 2006-05-01 18:30:25 +0200 (Mon, 01 May 2006) | 1 line

  Markup fixes; add some XXX comments noting problems
........
  r45843 | andrew.kuchling | 2006-05-01 18:32:49 +0200 (Mon, 01 May 2006) | 1 line

  Add item
........
  r45844 | andrew.kuchling | 2006-05-01 19:06:54 +0200 (Mon, 01 May 2006) | 1 line

  Markup fixes
........
  r45850 | neal.norwitz | 2006-05-02 06:43:14 +0200 (Tue, 02 May 2006) | 3 lines

  SF #1479181: split open() and file() from being aliases for each other.
........
  r45852 | neal.norwitz | 2006-05-02 08:23:22 +0200 (Tue, 02 May 2006) | 1 line

  Try to fix breakage caused by patch #1479181, r45850
........
  r45853 | fred.drake | 2006-05-02 08:53:59 +0200 (Tue, 02 May 2006) | 3 lines

  SF #1479988: add methods to allow access to weakrefs for the
  weakref.WeakKeyDictionary and weakref.WeakValueDictionary
........
  r45854 | neal.norwitz | 2006-05-02 09:27:47 +0200 (Tue, 02 May 2006) | 5 lines

  Fix breakage from patch 1471883 (r45800 & r45808) on OSF/1.
  The problem was that pyconfig.h was being included before some system headers
  which caused redefinitions and other breakage.  This moves system headers
  after expat_config.h which includes pyconfig.h.
........
  r45855 | vinay.sajip | 2006-05-02 10:35:36 +0200 (Tue, 02 May 2006) | 1 line

  Replaced my dumb way of calculating seconds to midnight with Tim Peters' much more sensible suggestion. What was I thinking ?!?
........
  r45856 | andrew.kuchling | 2006-05-02 13:30:03 +0200 (Tue, 02 May 2006) | 1 line

  Provide encoding as keyword argument; soften warning paragraph about encodings
........
  r45858 | guido.van.rossum | 2006-05-02 19:36:09 +0200 (Tue, 02 May 2006) | 2 lines

  Fix the formatting of KeyboardInterrupt -- a bad issubclass() call.
........
  r45862 | guido.van.rossum | 2006-05-02 21:47:52 +0200 (Tue, 02 May 2006) | 7 lines

  Get rid of __context__, per the latest changes to PEP 343 and python-dev
  discussion.
  There are two places of documentation that still mention __context__:
  Doc/lib/libstdtypes.tex -- I wasn't quite sure how to rewrite that without
  spending a whole lot of time thinking about it; and whatsnew, which Andrew
  usually likes to change himself.
........
  r45863 | armin.rigo | 2006-05-02 21:52:32 +0200 (Tue, 02 May 2006) | 4 lines

  Documentation bug: PySet_Pop() returns a new reference (because the
  caller becomes the owner of that reference).
........
  r45864 | guido.van.rossum | 2006-05-02 22:47:36 +0200 (Tue, 02 May 2006) | 4 lines

  Hopefully this will fix the spurious failures of test_mailbox.py that I'm
  experiencing.  (This code and mailbox.py itself are full of calls to file()
  that should be calls to open() -- but I'm not fixing those.)
........
  r45865 | andrew.kuchling | 2006-05-02 23:44:33 +0200 (Tue, 02 May 2006) | 1 line

  Use open() instead of file()
........
  r45866 | andrew.kuchling | 2006-05-03 00:47:49 +0200 (Wed, 03 May 2006) | 1 line

  Update context manager section for removal of __context__
........
  r45867 | fred.drake | 2006-05-03 03:46:52 +0200 (Wed, 03 May 2006) | 1 line

  remove unnecessary assignment
........
  r45868 | fred.drake | 2006-05-03 03:48:24 +0200 (Wed, 03 May 2006) | 4 lines

  tell LaTeX2HTML to:
  - use UTF-8 output
  - not mess with the >>> prompt!
........
  r45869 | fred.drake | 2006-05-03 04:04:40 +0200 (Wed, 03 May 2006) | 3 lines

  avoid ugly markup based on the unfortunate conversions of ">>" and "<<" to
  guillemets; no need for magic here
........
  r45870 | fred.drake | 2006-05-03 04:12:47 +0200 (Wed, 03 May 2006) | 1 line

  at least comment on why curly-quotes are not enabled
........
  r45871 | fred.drake | 2006-05-03 04:27:40 +0200 (Wed, 03 May 2006) | 1 line

  one more place to avoid extra markup
........
  r45872 | fred.drake | 2006-05-03 04:29:09 +0200 (Wed, 03 May 2006) | 1 line

  one more place to avoid extra markup (how many will there be?)
........
  r45873 | fred.drake | 2006-05-03 04:29:39 +0200 (Wed, 03 May 2006) | 1 line

  fix up whitespace in prompt strings
........
  r45876 | tim.peters | 2006-05-03 06:46:14 +0200 (Wed, 03 May 2006) | 2 lines

  Whitespace normalization.
........
  r45877 | martin.v.loewis | 2006-05-03 06:52:04 +0200 (Wed, 03 May 2006) | 2 lines

  Correct some formulations, fix XXX comments.
........
  r45879 | georg.brandl | 2006-05-03 07:05:02 +0200 (Wed, 03 May 2006) | 2 lines

  Patch #1480067: don't redirect HTTP digest auth in urllib2
........
  r45881 | georg.brandl | 2006-05-03 07:15:10 +0200 (Wed, 03 May 2006) | 3 lines

  Move network tests from test_urllib2 to test_urllib2net.
........
  r45887 | nick.coghlan | 2006-05-03 15:02:47 +0200 (Wed, 03 May 2006) | 1 line

  Finish bringing SVN into line with latest version of PEP 343 by getting rid of all remaining references to context objects that I could find. Without a __context__() method context objects no longer exist. Also get test_with working again, and adopt a suggestion from Neal for decimal.Context.get_manager()
........
  r45888 | nick.coghlan | 2006-05-03 15:17:49 +0200 (Wed, 03 May 2006) | 1 line

  Get rid of a couple more context object references, fix some markup and clarify what happens when a generator context function swallows an exception.
........
  r45889 | georg.brandl | 2006-05-03 19:46:13 +0200 (Wed, 03 May 2006) | 3 lines

  Add seamonkey to list of Windows browsers too.
........
  r45890 | georg.brandl | 2006-05-03 20:03:22 +0200 (Wed, 03 May 2006) | 3 lines

  RFE #1472176: In httplib, don't encode the netloc and hostname with "idna" if not necessary.
........
  r45891 | georg.brandl | 2006-05-03 20:12:33 +0200 (Wed, 03 May 2006) | 2 lines

  Bug #1472191: convert breakpoint indices to ints before comparing them to ints
........
  r45893 | georg.brandl | 2006-05-03 20:18:32 +0200 (Wed, 03 May 2006) | 3 lines

  Bug #1385040: don't allow "def foo(a=1, b): pass" in the compiler package.
........
  r45894 | thomas.heller | 2006-05-03 20:35:39 +0200 (Wed, 03 May 2006) | 1 line

  Don't fail the tests when libglut.so or libgle.so cannot be loaded.
........
  r45895 | georg.brandl | 2006-05-04 07:08:10 +0200 (Thu, 04 May 2006) | 2 lines

  Bug #1481530: allow "from os.path import ..." with imputil
........
  r45897 | martin.v.loewis | 2006-05-04 07:51:03 +0200 (Thu, 04 May 2006) | 2 lines

  Patch #1475845: Raise IndentationError for unexpected indent.
........
  r45898 | martin.v.loewis | 2006-05-04 12:08:42 +0200 (Thu, 04 May 2006) | 1 line

  Implement os.{chdir,rename,rmdir,remove} using Win32 directly.
........
  r45899 | martin.v.loewis | 2006-05-04 14:04:27 +0200 (Thu, 04 May 2006) | 2 lines

  Drop now-unnecessary arguments to posix_2str.
........
  r45900 | martin.v.loewis | 2006-05-04 16:27:52 +0200 (Thu, 04 May 2006) | 1 line

  Update checks to consider Windows error numbers.
........
  r45913 | thomas.heller | 2006-05-05 20:42:14 +0200 (Fri, 05 May 2006) | 2 lines

  Export the 'free' standard C function for use in the test suite.
........
  r45914 | thomas.heller | 2006-05-05 20:43:24 +0200 (Fri, 05 May 2006) | 3 lines

  Fix memory leaks in the ctypes test suite, reported by valgrind, by
  free()ing the memory we allocate.
........
  r45915 | thomas.heller | 2006-05-05 20:46:27 +0200 (Fri, 05 May 2006) | 1 line

  oops - the function is exported as 'my_free', not 'free'.
........
  r45916 | thomas.heller | 2006-05-05 21:14:24 +0200 (Fri, 05 May 2006) | 2 lines

  Clean up.
........
  r45920 | george.yoshida | 2006-05-06 15:09:45 +0200 (Sat, 06 May 2006) | 2 lines

  describe optional arguments for DocFileSuite
........
  r45924 | george.yoshida | 2006-05-06 16:16:51 +0200 (Sat, 06 May 2006) | 2 lines

  Use \versionchanged for the feature change
........
  r45925 | martin.v.loewis | 2006-05-06 18:32:54 +0200 (Sat, 06 May 2006) | 1 line

  Port access, chmod, parts of getcwdu, mkdir, and utime to direct Win32 API.
........
  r45926 | martin.v.loewis | 2006-05-06 22:04:08 +0200 (Sat, 06 May 2006) | 2 lines

  Handle ERROR_ALREADY_EXISTS.
........
  r45931 | andrew.kuchling | 2006-05-07 19:12:12 +0200 (Sun, 07 May 2006) | 1 line

  [Patch #1479977] Revised version of urllib2 HOWTO, edited by John J. Lee
........
  r45932 | andrew.kuchling | 2006-05-07 19:14:53 +0200 (Sun, 07 May 2006) | 1 line

  Minor language edit
........
  r45934 | georg.brandl | 2006-05-07 22:44:34 +0200 (Sun, 07 May 2006) | 3 lines

  Patch #1483395: add new TLDs to cookielib
........
  r45936 | martin.v.loewis | 2006-05-08 07:25:56 +0200 (Mon, 08 May 2006) | 2 lines

  Add missing PyMem_Free.
........
  r45938 | georg.brandl | 2006-05-08 19:28:47 +0200 (Mon, 08 May 2006) | 3 lines

  Add test for rev. 45934.
........
  r45939 | georg.brandl | 2006-05-08 19:36:08 +0200 (Mon, 08 May 2006) | 3 lines

  Patch #1479302: Make urllib2 digest auth and basic auth play together.
........
  r45940 | georg.brandl | 2006-05-08 19:48:01 +0200 (Mon, 08 May 2006) | 3 lines

  Patch #1478993: take advantage of BaseException/Exception split in cookielib
........
  r45941 | neal.norwitz | 2006-05-09 07:38:56 +0200 (Tue, 09 May 2006) | 5 lines

  Micro optimization.  In the first case, we know that frame->f_exc_type
  is NULL, so there's no reason to do anything with it.  In the second case,
  we know frame->f_exc_type is not NULL, so we can just do an INCREF.
........
  r45943 | thomas.heller | 2006-05-09 22:20:15 +0200 (Tue, 09 May 2006) | 2 lines

  Disable a test that is unreliable.
........
  r45944 | tim.peters | 2006-05-10 04:43:01 +0200 (Wed, 10 May 2006) | 4 lines

  Variant of patch #1478292.  doctest.register_optionflag(name)
  shouldn't create a new flag when `name` is already the name of
  an option flag.
........
  r45947 | neal.norwitz | 2006-05-10 08:57:58 +0200 (Wed, 10 May 2006) | 14 lines

  Fix problems found by Coverity.

  longobject.c: also fix an ssize_t problem
    <a> could have been NULL, so hoist the size calc to not use <a>.

  _ssl.c: under fail: self is DECREF'd, but it would have been NULL.

  _elementtree.c: delete self if there was an error.

  _csv.c: I'm not sure if lineterminator could have been anything other than
  a string.  However, other string method calls are checked, so check this
  one too.
........
  r45948 | thomas.wouters | 2006-05-10 17:04:11 +0200 (Wed, 10 May 2006) | 4 lines


  Ignore reflog.txt, too.
........
  r45949 | georg.brandl | 2006-05-10 17:59:06 +0200 (Wed, 10 May 2006) | 3 lines

  Bug #1482988: indicate more prominently that the Stats class is in the pstats module.
........
  r45950 | georg.brandl | 2006-05-10 18:09:03 +0200 (Wed, 10 May 2006) | 2 lines

  Bug #1485447: subprocess: document that the "cwd" parameter isn't used to find the executable. Misc. other markup fixes.
........
  r45952 | georg.brandl | 2006-05-10 18:11:44 +0200 (Wed, 10 May 2006) | 2 lines

  Bug #1484978: curses.panel: clarify that Panel objects are destroyed on garbage collection.
........
  r45954 | georg.brandl | 2006-05-10 18:26:03 +0200 (Wed, 10 May 2006) | 4 lines

  Patch #1484695: Update the tarfile module to version 0.8. This fixes
  a couple of issues, notably handling of long file names using the
  GNU LONGNAME extension.
........
  r45955 | georg.brandl | 2006-05-10 19:13:20 +0200 (Wed, 10 May 2006) | 4 lines

  Patch #721464: pdb.Pdb instances can now be given explicit stdin and
  stdout arguments, making it possible to redirect input and output
  for remote debugging.
........
  r45956 | andrew.kuchling | 2006-05-10 19:19:04 +0200 (Wed, 10 May 2006) | 1 line

  Clarify description of exception handling
........
  r45957 | georg.brandl | 2006-05-10 22:09:23 +0200 (Wed, 10 May 2006) | 2 lines

  Fix two small errors in argument lists.
........
  r45960 | brett.cannon | 2006-05-11 07:11:33 +0200 (Thu, 11 May 2006) | 5 lines

  Detect if %zd is supported by printf() during configure and sets
  PY_FORMAT_SIZE_T appropriately.  Removes warnings on
  OS X under gcc 4.0.1 when PY_FORMAT_SIZE_T is set to "" instead of "z" as is
  needed.
........
  r45963 | neal.norwitz | 2006-05-11 09:51:59 +0200 (Thu, 11 May 2006) | 1 line

  Don't mask a no memory error with a less meaningful one as discussed on python-checkins
........
  r45964 | martin.v.loewis | 2006-05-11 15:28:43 +0200 (Thu, 11 May 2006) | 3 lines

  Change WindowsError to carry the Win32 error code in winerror,
  and the DOS error code in errno. Revert changes where
  WindowsError catch blocks unnecessarily special-case OSError.
........
  r45965 | george.yoshida | 2006-05-11 17:53:27 +0200 (Thu, 11 May 2006) | 2 lines

  Grammar fix
........
  r45967 | andrew.kuchling | 2006-05-11 18:32:24 +0200 (Thu, 11 May 2006) | 1 line

  typo fix
........
  r45968 | tim.peters | 2006-05-11 18:37:42 +0200 (Thu, 11 May 2006) | 5 lines

  BaseThreadedTestCase.setup():  stop special-casing WindowsError.

  Rev 45964 fiddled with WindowsError, and broke test_bsddb3 on all
  the Windows buildbot slaves as a result.  This should repair it.
........
  r45969 | georg.brandl | 2006-05-11 21:57:09 +0200 (Thu, 11 May 2006) | 2 lines

  Typo fix.
........
  r45970 | tim.peters | 2006-05-12 03:57:59 +0200 (Fri, 12 May 2006) | 5 lines

  SF patch #1473132:  Improve docs for tp_clear and tp_traverse,
  by Collin Winter.

  Bugfix candidate (but I'm not going to bother).
........
  r45974 | martin.v.loewis | 2006-05-12 14:27:28 +0200 (Fri, 12 May 2006) | 4 lines

  Dynamically allocate path name buffer for Unicode
  path name in listdir. Fixes #1431582.
  Stop overallocating MAX_PATH characters for ANSI
  path names. Stop assigning to errno.
........
  r45975 | martin.v.loewis | 2006-05-12 15:57:36 +0200 (Fri, 12 May 2006) | 1 line

  Move icon files into DLLs dir. Fixes #1477968.
........
  r45976 | george.yoshida | 2006-05-12 18:40:11 +0200 (Fri, 12 May 2006) | 2 lines

  At first there were 6 steps, but one was removed after that.
........
  r45977 | martin.v.loewis | 2006-05-12 19:22:04 +0200 (Fri, 12 May 2006) | 1 line

  Fix alignment error on Itanium.
........
  r45978 | george.yoshida | 2006-05-12 19:25:26 +0200 (Fri, 12 May 2006) | 3 lines

  Duplicated description about the illegal continue usage can be found in nearly the same place.
  They are same, so keep the original one and remove the later-added one.
........
  r45980 | thomas.heller | 2006-05-12 20:16:03 +0200 (Fri, 12 May 2006) | 2 lines

  Add missing svn properties.
........
  r45981 | thomas.heller | 2006-05-12 20:47:35 +0200 (Fri, 12 May 2006) | 1 line

  set svn properties
........
  r45982 | thomas.heller | 2006-05-12 21:31:46 +0200 (Fri, 12 May 2006) | 1 line

  add svn:eol-style native svn:keywords Id
........
  r45987 | gerhard.haering | 2006-05-13 01:49:49 +0200 (Sat, 13 May 2006) | 3 lines

  Integrated the rest of the pysqlite reference manual into the Python
  documentation. Ready to be reviewed and improved upon.
........
  r45988 | george.yoshida | 2006-05-13 08:53:31 +0200 (Sat, 13 May 2006) | 2 lines

  Add \exception markup
........
  r45990 | martin.v.loewis | 2006-05-13 15:34:04 +0200 (Sat, 13 May 2006) | 2 lines

  Revert 43315: Printing of %zd must be signed.
........
  r45992 | tim.peters | 2006-05-14 01:28:20 +0200 (Sun, 14 May 2006) | 11 lines

  Teach PyString_FromFormat, PyErr_Format, and PyString_FromFormatV
  about "%u", "%lu" and "%zu" formats.

  Since PyString_FromFormat and PyErr_Format have exactly the same rules
  (both inherited from PyString_FromFormatV), it would be good if someone
  with more LaTeX Fu changed one of them to just point to the other.
  Their docs were way out of synch before this patch, and I just did a
  mass copy+paste to repair that.

  Not a backport candidate (this is a new feature).
........
  r45993 | tim.peters | 2006-05-14 01:31:05 +0200 (Sun, 14 May 2006) | 2 lines

  Typo repair.
........
  r45994 | tim.peters | 2006-05-14 01:33:19 +0200 (Sun, 14 May 2006) | 2 lines

  Remove lie in new comment.
........
  r45995 | ronald.oussoren | 2006-05-14 21:56:34 +0200 (Sun, 14 May 2006) | 11 lines

  Rework the build system for osx applications:

  * Don't use xcodebuild for building PythonLauncher, but use a normal unix
    makefile. This makes it a lot easier to use the same build flags as for the
    rest of python (e.g. make a universal version of python launcher)
  * Convert the mac makefile-s to makefile.in-s and use configure to set makefile
    variables instead of forwarding them as command-line arguments
  * Add a C version of pythonw, that we you can use '#!/usr/local/bin/pythonw'
  * Build IDLE.app using bundlebuilder instead of BuildApplet, that will allow
    easier modification of the bundle contents later on.
........
  r45996 | ronald.oussoren | 2006-05-14 22:35:41 +0200 (Sun, 14 May 2006) | 6 lines

  A first cut at replacing the icons on MacOS X. This replaces all icons by icons
  based on the new python.org logo. These are also the first icons that are
  "proper" OSX icons.

  These icons were created by Jacob Rus.
........
  r45997 | ronald.oussoren | 2006-05-14 23:07:41 +0200 (Sun, 14 May 2006) | 3 lines

  I missed one small detail in my rewrite of the osx build files: the path
  to the Python.app template.
........
  r45998 | martin.v.loewis | 2006-05-15 07:51:36 +0200 (Mon, 15 May 2006) | 2 lines

  Fix memory leak.
........
  r45999 | neal.norwitz | 2006-05-15 08:48:14 +0200 (Mon, 15 May 2006) | 1 line

  Move items implemented after a2 into the new a3 section
........
  r46000 | neal.norwitz | 2006-05-15 09:04:36 +0200 (Mon, 15 May 2006) | 5 lines

  - Bug #1487966: Fix SystemError with conditional expression in assignment

  Most of the test_syntax changes are just updating the numbers.
........
  r46001 | neal.norwitz | 2006-05-15 09:17:23 +0200 (Mon, 15 May 2006) | 1 line

  Patch #1488312, Fix memory alignment problem on SPARC in unicode.  Will backport
........
  r46003 | martin.v.loewis | 2006-05-15 11:22:27 +0200 (Mon, 15 May 2006) | 3 lines

  Remove bogus DECREF of self.
  Change __str__() functions to METH_O.
  Change WindowsError__str__ to use PyTuple_Pack.
........
  r46005 | georg.brandl | 2006-05-15 21:30:35 +0200 (Mon, 15 May 2006) | 3 lines

  [ 1488881 ] tarfile.py: support for file-objects and bz2 (cp. #1488634)
........
  r46007 | tim.peters | 2006-05-15 22:44:10 +0200 (Mon, 15 May 2006) | 9 lines

  ReadDetectFileobjTest:  repair Windows disasters by opening
  the file object in binary mode.

  The Windows buildbot slaves shouldn't swap themselves to death
  anymore.  However, test_tarfile may still fail because of a
  temp directory left behind from a previous failing run.
  Windows buildbot owners may need to remove that directory
  by hand.
........
  r46009 | tim.peters | 2006-05-15 23:32:25 +0200 (Mon, 15 May 2006) | 3 lines

  test_directory():  Remove the leftover temp directory that's making
  the Windows buildbots fail test_tarfile.
........
  r46010 | martin.v.loewis | 2006-05-16 09:05:37 +0200 (Tue, 16 May 2006) | 4 lines

  - Test for sys/statvfs.h before including it, as statvfs is present
    on some OSX installation, but its header file is not.
  Will backport to 2.4
........
  r46012 | georg.brandl | 2006-05-16 09:38:27 +0200 (Tue, 16 May 2006) | 3 lines

  Patch #1435422: zlib's compress and decompress objects now have a
  copy() method.
........
  r46015 | andrew.kuchling | 2006-05-16 18:11:54 +0200 (Tue, 16 May 2006) | 1 line

  Add item
........
  r46016 | andrew.kuchling | 2006-05-16 18:27:31 +0200 (Tue, 16 May 2006) | 3 lines

  PEP 243 has been withdrawn, so don't refer to it any more.
  The PyPI upload material has been moved into the section on PEP314.
........
  r46017 | george.yoshida | 2006-05-16 19:42:16 +0200 (Tue, 16 May 2006) | 2 lines

  Update for 'ImportWarning'
........
  r46018 | george.yoshida | 2006-05-16 20:07:00 +0200 (Tue, 16 May 2006) | 4 lines

  Mention that Exception is now a subclass of BaseException.
  Remove a sentence that says that BaseException inherits from BaseException.
  (I guess this is just a copy & paste mistake.)
........
  r46019 | george.yoshida | 2006-05-16 20:26:10 +0200 (Tue, 16 May 2006) | 2 lines

  Document ImportWarning
........
  r46020 | tim.peters | 2006-05-17 01:22:20 +0200 (Wed, 17 May 2006) | 2 lines

  Whitespace normalization.
........
  r46021 | tim.peters | 2006-05-17 01:24:08 +0200 (Wed, 17 May 2006) | 2 lines

  Text files missing the SVN eol-style property.
........
  r46022 | tim.peters | 2006-05-17 03:30:11 +0200 (Wed, 17 May 2006) | 2 lines

  PyZlib_copy(), PyZlib_uncopy():  Repair leaks on the normal-case path.
........
  r46023 | georg.brandl | 2006-05-17 16:06:07 +0200 (Wed, 17 May 2006) | 3 lines

  Remove misleading comment about type-class unification.
........
  r46024 | georg.brandl | 2006-05-17 16:11:36 +0200 (Wed, 17 May 2006) | 3 lines

  Apply patch #1489784 from Michael Foord.
........
  r46025 | georg.brandl | 2006-05-17 16:18:20 +0200 (Wed, 17 May 2006) | 3 lines

  Fix typo in os.utime docstring (patch #1490189)
........
  r46026 | georg.brandl | 2006-05-17 16:26:50 +0200 (Wed, 17 May 2006) | 3 lines

  Patch #1490224: set time.altzone correctly on Cygwin.
........
  r46027 | georg.brandl | 2006-05-17 16:45:06 +0200 (Wed, 17 May 2006) | 4 lines

  Add global debug flag to cookielib to avoid heavy dependency on the logging module.
  Resolves #1484758.
........
  r46028 | georg.brandl | 2006-05-17 16:56:04 +0200 (Wed, 17 May 2006) | 3 lines

  Patch #1486962: Several bugs in the turtle Tk demo module were fixed
  and several features added, such as speed and geometry control.
........
  r46029 | georg.brandl | 2006-05-17 17:17:00 +0200 (Wed, 17 May 2006) | 4 lines

  Delay-import some large modules to speed up urllib2 import.
  (fixes #1484793).
........
  r46030 | georg.brandl | 2006-05-17 17:51:16 +0200 (Wed, 17 May 2006) | 3 lines

  Patch #1180296: improve locale string formatting functions
........
  r46032 | tim.peters | 2006-05-18 04:06:40 +0200 (Thu, 18 May 2006) | 2 lines

  Whitespace normalization.
........
  r46033 | georg.brandl | 2006-05-18 08:11:19 +0200 (Thu, 18 May 2006) | 3 lines

  Amendments to patch #1484695.
........
  r46034 | georg.brandl | 2006-05-18 08:18:06 +0200 (Thu, 18 May 2006) | 3 lines

  Remove unused import.
........
  r46035 | georg.brandl | 2006-05-18 08:33:27 +0200 (Thu, 18 May 2006) | 3 lines

  Fix test_locale for platforms without a default thousands separator.
........
  r46036 | neal.norwitz | 2006-05-18 08:51:46 +0200 (Thu, 18 May 2006) | 1 line

  Little cleanup
........
  r46037 | georg.brandl | 2006-05-18 09:01:27 +0200 (Thu, 18 May 2006) | 4 lines

  Bug #1462152: file() now checks more thoroughly for invalid mode
  strings and removes a possible "U" before passing the mode to the
  C library function.
........
  r46038 | georg.brandl | 2006-05-18 09:20:05 +0200 (Thu, 18 May 2006) | 3 lines

  Bug #1490688: properly document %e, %f, %g format subtleties.
........
  r46039 | vinay.sajip | 2006-05-18 09:28:58 +0200 (Thu, 18 May 2006) | 1 line

  Changed status from "beta" to "production"; since logging has been part of the stdlib since 2.3, it should be safe to make this assertion ;-)
........
  r46040 | ronald.oussoren | 2006-05-18 11:04:15 +0200 (Thu, 18 May 2006) | 2 lines

  Fix some minor issues with the generated application bundles on MacOSX
........
  r46041 | andrew.kuchling | 2006-05-19 02:03:55 +0200 (Fri, 19 May 2006) | 1 line

  Typo fix; add clarifying word
........
  r46044 | neal.norwitz | 2006-05-19 08:31:23 +0200 (Fri, 19 May 2006) | 3 lines

  Fix #132 from Coverity, retval could have been derefed
  if a continue inside a try failed.
........
  r46045 | neal.norwitz | 2006-05-19 08:43:50 +0200 (Fri, 19 May 2006) | 2 lines

  Fix #1474677, non-keyword argument following keyword.
........
  r46046 | neal.norwitz | 2006-05-19 09:00:58 +0200 (Fri, 19 May 2006) | 4 lines

  Bug/Patch #1481770: Use .so extension for shared libraries on HP-UX for ia64.

  I suppose this could be backported if anyone cares.
........
  r46047 | neal.norwitz | 2006-05-19 09:05:01 +0200 (Fri, 19 May 2006) | 7 lines

  Oops, I forgot to include this file in the last commit (46046):

  Bug/Patch #1481770: Use .so extension for shared libraries on HP-UX for ia64.

  I suppose this could be backported if anyone cares.
........
  r46050 | ronald.oussoren | 2006-05-19 20:17:31 +0200 (Fri, 19 May 2006) | 6 lines

  * Change working directory to the users home
    directory, that makes the file open/save
    dialogs more useable.
  * Don't use argv emulator, its not needed
    for idle.
........
  r46052 | tim.peters | 2006-05-19 21:16:34 +0200 (Fri, 19 May 2006) | 2 lines

  Whitespace normalization.
........
  r46054 | ronald.oussoren | 2006-05-20 08:17:01 +0200 (Sat, 20 May 2006) | 9 lines

  Fix bug #1000914 (again).

  This patches a file that is generated by bgen, however the code is now the
  same as a current copy of bgen would generate.  Without this patch most types
  in the Carbon.CF module are unusable.

  I haven't managed to coax bgen into generating a complete copy of _CFmodule.c
  yet :-(, hence the manual patching.
........
  r46055 | george.yoshida | 2006-05-20 17:36:19 +0200 (Sat, 20 May 2006) | 3 lines

  - markup fix
  - add clarifying words
........
  r46057 | george.yoshida | 2006-05-20 18:29:14 +0200 (Sat, 20 May 2006) | 3 lines

  - Add 'as' and 'with' as new keywords in 2.5.
  - Regenerate keyword lists with reswords.py.
........
  r46058 | george.yoshida | 2006-05-20 20:07:26 +0200 (Sat, 20 May 2006) | 2 lines

  Apply patch #1492147 from Mike Foord.
........
  r46059 | andrew.kuchling | 2006-05-20 21:25:16 +0200 (Sat, 20 May 2006) | 1 line

  Minor edits
........
  r46061 | george.yoshida | 2006-05-21 06:22:59 +0200 (Sun, 21 May 2006) | 2 lines

  Fix the TeX compile error.
........
  r46062 | george.yoshida | 2006-05-21 06:40:32 +0200 (Sun, 21 May 2006) | 2 lines

  Apply patch #1492255 from Mike Foord.
........
  r46063 | martin.v.loewis | 2006-05-22 10:48:14 +0200 (Mon, 22 May 2006) | 1 line

  Patch 1490384: New Icons for the PC build.
........
  r46064 | martin.v.loewis | 2006-05-22 11:15:18 +0200 (Mon, 22 May 2006) | 1 line

  Patch #1492356: Port to Windows CE (patch set 1).
........
  r46065 | tim.peters | 2006-05-22 13:29:41 +0200 (Mon, 22 May 2006) | 4 lines

  Define SIZEOF_{DOUBLE,FLOAT} on Windows.  Else
  Michael Hudson's nice gimmicks for IEEE special
  values (infinities, NaNs) don't work.
........
  r46070 | bob.ippolito | 2006-05-22 16:31:24 +0200 (Mon, 22 May 2006) | 2 lines

  GzipFile.readline performance improvement (~30-40%), patch #1281707
........
  r46071 | bob.ippolito | 2006-05-22 17:22:46 +0200 (Mon, 22 May 2006) | 1 line

  Revert gzip readline performance patch #1281707 until a more generic performance improvement can be found
........
  r46073 | fredrik.lundh | 2006-05-22 17:35:12 +0200 (Mon, 22 May 2006) | 4 lines

  docstring tweaks: count counts non-overlapping substrings, not
  total number of occurences
........
  r46075 | bob.ippolito | 2006-05-22 17:59:12 +0200 (Mon, 22 May 2006) | 1 line

  Apply revised patch for GzipFile.readline performance #1281707
........
  r46076 | fredrik.lundh | 2006-05-22 18:29:30 +0200 (Mon, 22 May 2006) | 3 lines

  needforspeed: speed up unicode repeat, unicode string copy
........
  r46079 | fredrik.lundh | 2006-05-22 19:12:58 +0200 (Mon, 22 May 2006) | 4 lines

  needforspeed: use memcpy for "long" strings; use a better algorithm
  for long repeats.
........
  r46084 | tim.peters | 2006-05-22 21:17:04 +0200 (Mon, 22 May 2006) | 7 lines

  PyUnicode_Join():  Recent code changes introduced new
  compiler warnings on Windows (signed vs unsigned mismatch
  in comparisons).  Cleaned that up by switching more locals
  to Py_ssize_t.  Simplified overflow checking (it can _be_
  simpler because while these things are declared as
  Py_ssize_t, then should in fact never be negative).
........
  r46085 | tim.peters | 2006-05-23 07:47:16 +0200 (Tue, 23 May 2006) | 3 lines

  unicode_repeat():  Change type of local to Py_ssize_t,
  since that's what it should be.
........
  r46094 | fredrik.lundh | 2006-05-23 12:10:57 +0200 (Tue, 23 May 2006) | 3 lines

  needforspeed: check first *and* last character before doing a full memcmp
........
  r46095 | fredrik.lundh | 2006-05-23 12:12:21 +0200 (Tue, 23 May 2006) | 4 lines

  needforspeed: fixed unicode "in" operator to use same implementation
  approach as find/index
........
  r46096 | richard.jones | 2006-05-23 12:37:38 +0200 (Tue, 23 May 2006) | 7 lines

  Merge from rjones-funccall branch.

  Applied patch zombie-frames-2.diff from sf patch 876206 with updates for
  Python 2.5 and also modified to retain the free_list to avoid the 67%
  slow-down in pybench recursion test. 5% speed up in function call pybench.
........
  r46098 | ronald.oussoren | 2006-05-23 13:04:24 +0200 (Tue, 23 May 2006) | 2 lines

  Avoid creating a mess when installing a framework for the second time.
........
  r46101 | georg.brandl | 2006-05-23 13:17:21 +0200 (Tue, 23 May 2006) | 3 lines

  PyErr_NewException now accepts a tuple of base classes as its
  "base" parameter.
........
  r46103 | ronald.oussoren | 2006-05-23 13:47:16 +0200 (Tue, 23 May 2006) | 3 lines

  Disable linking extensions with -lpython2.5 for darwin. This should fix bug
  #1487105.
........
  r46104 | ronald.oussoren | 2006-05-23 14:01:11 +0200 (Tue, 23 May 2006) | 6 lines

  Patch #1488098.

  This patchs makes it possible to create a universal build on OSX 10.4 and use
  the result to build extensions on 10.3. It also makes it possible to override
  the '-arch' and '-isysroot' compiler arguments for specific extensions.
........
  r46108 | andrew.kuchling | 2006-05-23 14:44:36 +0200 (Tue, 23 May 2006) | 1 line

  Add some items; mention the sprint
........
  r46109 | andrew.kuchling | 2006-05-23 14:47:01 +0200 (Tue, 23 May 2006) | 1 line

  Mention string improvements
........
  r46110 | andrew.kuchling | 2006-05-23 14:49:35 +0200 (Tue, 23 May 2006) | 4 lines

  Use 'speed' instead of 'performance', because I agree with the argument
  at http://zestyping.livejournal.com/193260.html that 'erformance' really means
  something more general.
........
  r46113 | ronald.oussoren | 2006-05-23 17:09:57 +0200 (Tue, 23 May 2006) | 2 lines

  An improved script for building the binary distribution on MacOSX.
........
  r46128 | richard.jones | 2006-05-23 20:28:17 +0200 (Tue, 23 May 2006) | 3 lines

  Applied patch 1337051 by Neal Norwitz, saving 4 ints on frame objects.
........
  r46129 | richard.jones | 2006-05-23 20:32:11 +0200 (Tue, 23 May 2006) | 1 line

  fix broken merge
........
  r46130 | bob.ippolito | 2006-05-23 20:41:17 +0200 (Tue, 23 May 2006) | 1 line

  Update Misc/NEWS for gzip patch #1281707
........
  r46131 | bob.ippolito | 2006-05-23 20:43:47 +0200 (Tue, 23 May 2006) | 1 line

  Update Misc/NEWS for gzip patch #1281707
........
  r46132 | fredrik.lundh | 2006-05-23 20:44:25 +0200 (Tue, 23 May 2006) | 7 lines

  needforspeed: use append+reverse for rsplit, use "bloom filters" to
  speed up splitlines and strip with charsets; etc.  rsplit is now as
  fast as split in all our tests (reverse takes no time at all), and
  splitlines() is nearly as fast as a plain split("\n") in our tests.
  and we're not done yet... ;-)
........
  r46133 | tim.peters | 2006-05-23 20:45:30 +0200 (Tue, 23 May 2006) | 38 lines

  Bug #1334662 / patch #1335972:  int(string, base) wrong answers.

  In rare cases of strings specifying true values near sys.maxint,
  and oddball bases (not decimal or a power of 2), int(string, base)
  could deliver insane answers.  This repairs all such problems, and
  also speeds string->int significantly.  On my box, here are %
  speedups for decimal strings of various lengths:

  length speedup
  ------ -------
   1       12.4%
   2       15.7%
   3       20.6%
   4       28.1%
   5       33.2%
   6       37.5%
   7       41.9%
   8       46.3%
   9       51.2%
  10       19.5%
  11       19.9%
  12       23.9%
  13       23.7%
  14       23.3%
  15       24.9%
  16       25.3%
  17       28.3%
  18       27.9%
  19       35.7%

  Note that the difference between 9 and 10 is the difference between
  short and long Python ints on a 32-bit box.  The patch doesn't
  actually do anything to speed conversion to long:  the speedup is
  due to detecting "unsigned long" overflow more quickly.

  This is a bugfix candidate, but it's a non-trivial patch and it
  would be painful to separate the "bug fix" from the "speed up" parts.
........
  r46134 | bob.ippolito | 2006-05-23 20:46:41 +0200 (Tue, 23 May 2006) | 1 line

  Patch #1493701: performance enhancements for struct module.
........
  r46136 | andrew.kuchling | 2006-05-23 21:00:45 +0200 (Tue, 23 May 2006) | 1 line

  Remove duplicate item
........
  r46141 | bob.ippolito | 2006-05-23 21:09:51 +0200 (Tue, 23 May 2006) | 1 line

  revert #1493701
........
  r46142 | bob.ippolito | 2006-05-23 21:11:34 +0200 (Tue, 23 May 2006) | 1 line

  patch #1493701: performance enhancements for struct module
........
  r46144 | bob.ippolito | 2006-05-23 21:12:41 +0200 (Tue, 23 May 2006) | 1 line

  patch #1493701: performance enhancements for struct module
........
  r46148 | bob.ippolito | 2006-05-23 21:25:52 +0200 (Tue, 23 May 2006) | 1 line

  fix linking issue, warnings, in struct
........
  r46149 | andrew.kuchling | 2006-05-23 21:29:38 +0200 (Tue, 23 May 2006) | 1 line

  Add two items
........
  r46150 | bob.ippolito | 2006-05-23 21:31:23 +0200 (Tue, 23 May 2006) | 1 line

  forward declaration for PyStructType
........
  r46151 | bob.ippolito | 2006-05-23 21:32:25 +0200 (Tue, 23 May 2006) | 1 line

  fix typo in _struct
........
  r46152 | andrew.kuchling | 2006-05-23 21:32:35 +0200 (Tue, 23 May 2006) | 1 line

  Add item
........
  r46153 | tim.peters | 2006-05-23 21:34:37 +0200 (Tue, 23 May 2006) | 3 lines

  Get the Windows build working again (recover from
  `struct` module changes).
........
  r46155 | fredrik.lundh | 2006-05-23 21:47:35 +0200 (Tue, 23 May 2006) | 3 lines

  return 0 on misses, not -1.
........
  r46156 | tim.peters | 2006-05-23 23:51:35 +0200 (Tue, 23 May 2006) | 4 lines

  test_struct grew weird behavior under regrtest.py -R,
  due to a module-level cache.  Clearing the cache should
  make it stop showing up in refleak reports.
........
  r46157 | tim.peters | 2006-05-23 23:54:23 +0200 (Tue, 23 May 2006) | 2 lines

  Whitespace normalization.
........
  r46158 | tim.peters | 2006-05-23 23:55:53 +0200 (Tue, 23 May 2006) | 2 lines

  Add missing svn:eol-style property to text files.
........
  r46161 | fredrik.lundh | 2006-05-24 12:20:36 +0200 (Wed, 24 May 2006) | 3 lines

  use Py_ssize_t for string indexes (thanks, neal!)
........
  r46173 | fredrik.lundh | 2006-05-24 16:28:11 +0200 (Wed, 24 May 2006) | 14 lines

  needforspeed: use "fastsearch" for count and findstring helpers.  this
  results in a 2.5x speedup on the stringbench count tests, and a 20x (!)
  speedup on the stringbench search/find/contains test, compared to 2.5a2.

  for more on the algorithm, see:

      http://effbot.org/zone/stringlib.htm

  if you get weird results, you can disable the new algoritm by undefining
  USE_FAST in Objects/unicodeobject.c.

  enjoy /F
........
  r46182 | fredrik.lundh | 2006-05-24 17:11:01 +0200 (Wed, 24 May 2006) | 3 lines

  needforspeedindeed: use fastsearch also for __contains__
........
  r46184 | bob.ippolito | 2006-05-24 17:32:06 +0200 (Wed, 24 May 2006) | 1 line

  refactor unpack, add unpack_from
........
  r46189 | fredrik.lundh | 2006-05-24 18:35:18 +0200 (Wed, 24 May 2006) | 4 lines

  needforspeed: refactored the replace code slightly; special-case
  constant-length changes; use fastsearch to locate the first match.
........
  r46198 | andrew.dalke | 2006-05-24 20:55:37 +0200 (Wed, 24 May 2006) | 10 lines

  Added a slew of test for string replace, based various corner cases from
  the Need For Speed sprint coding.  Includes commented out overflow tests
  which will be uncommented once the code is fixed.

  This test will break the 8-bit string tests because
      "".replace("", "A") == "" when it should == "A"

  We have a fix for it, which should be added tomorrow.
........
  r46200 | tim.peters | 2006-05-24 22:27:18 +0200 (Wed, 24 May 2006) | 2 lines

  We can't leave the checked-in tests broken.
........
  r46201 | tim.peters | 2006-05-24 22:29:44 +0200 (Wed, 24 May 2006) | 2 lines

  Whitespace normalization.
........
  r46202 | tim.peters | 2006-05-24 23:00:45 +0200 (Wed, 24 May 2006) | 4 lines

  Disable the damn empty-string replace test -- it can't
  be make to pass now for unicode if it passes for str, or
  vice versa.
........
  r46203 | tim.peters | 2006-05-24 23:10:40 +0200 (Wed, 24 May 2006) | 58 lines

  Heavily fiddled variant of patch #1442927: PyLong_FromString optimization.

  ``long(str, base)`` is now up to 6x faster for non-power-of-2 bases.  The
  largest speedup is for inputs with about 1000 decimal digits.  Conversion
  from non-power-of-2 bases remains quadratic-time in the number of input
  digits (it was and remains linear-time for bases 2, 4, 8, 16 and 32).

  Speedups at various lengths for decimal inputs, comparing 2.4.3 with
  current trunk.  Note that it's actually a bit slower for 1-digit strings:

    len  speedup
   ----  -------
     1     -4.5%
     2      4.6%
     3      8.3%
     4     12.7%
     5     16.9%
     6     28.6%
     7     35.5%
     8     44.3%
     9     46.6%
    10     55.3%
    11     65.7%
    12     77.7%
    13     73.4%
    14     75.3%
    15     85.2%
    16    103.0%
    17     95.1%
    18    112.8%
    19    117.9%
    20    128.3%
    30    174.5%
    40    209.3%
    50    236.3%
    60    254.3%
    70    262.9%
    80    295.8%
    90    297.3%
   100    324.5%
   200    374.6%
   300    403.1%
   400    391.1%
   500    388.7%
   600    440.6%
   700    468.7%
   800    498.0%
   900    507.2%
  1000    501.2%
  2000    450.2%
  3000    463.2%
  4000    452.5%
  5000    440.6%
  6000    439.6%
  7000    424.8%
  8000    418.1%
  9000    417.7%
........
  r46204 | andrew.kuchling | 2006-05-25 02:23:03 +0200 (Thu, 25 May 2006) | 1 line

  Minor edits; add an item
........
  r46205 | fred.drake | 2006-05-25 04:42:25 +0200 (Thu, 25 May 2006) | 3 lines

  fix broken links in PDF
  (SF patch #1281291, contributed by Rory Yorke)
........
  r46208 | walter.doerwald | 2006-05-25 10:53:28 +0200 (Thu, 25 May 2006) | 2 lines

  Replace tab inside comment with space.
........
  r46209 | thomas.wouters | 2006-05-25 13:25:51 +0200 (Thu, 25 May 2006) | 4 lines


  Fix #1488915, Multiple dots in relative import statement raise SyntaxError.

........
  r46210 | thomas.wouters | 2006-05-25 13:26:25 +0200 (Thu, 25 May 2006) | 5 lines


  Update graminit.c for the fix for #1488915, Multiple dots in relative import
  statement raise SyntaxError, and add testcase.
........
  r46211 | andrew.kuchling | 2006-05-25 14:27:59 +0200 (Thu, 25 May 2006) | 1 line

  Add entry; and fix a typo
........
  r46214 | fredrik.lundh | 2006-05-25 17:22:03 +0200 (Thu, 25 May 2006) | 7 lines

  needforspeed: speed up upper and lower for 8-bit string objects.
  (the unicode versions of these are still 2x faster on windows,
  though...)

  based on work by Andrew Dalke, with tweaks by yours truly.
........
  r46216 | fredrik.lundh | 2006-05-25 17:49:45 +0200 (Thu, 25 May 2006) | 5 lines

  needforspeed: make new upper/lower work properly for single-character
  strings too... (thanks to georg brandl for spotting the exact problem
  faster than anyone else)
........
  r46217 | kristjan.jonsson | 2006-05-25 17:53:30 +0200 (Thu, 25 May 2006) | 1 line

  Added a new macro, Py_IS_FINITE(X).  On windows there is an intrinsic for this and it is more efficient than to use !Py_IS_INFINITE(X) && !Py_IS_NAN(X).  No change on other platforms
........
  r46219 | fredrik.lundh | 2006-05-25 18:10:12 +0200 (Thu, 25 May 2006) | 4 lines

  needforspeed: _toupper/_tolower is a SUSv2 thing; fall back on ISO C
  versions if they're not defined.
........
  r46220 | andrew.kuchling | 2006-05-25 18:23:15 +0200 (Thu, 25 May 2006) | 1 line

  Fix comment typos
........
  r46221 | andrew.dalke | 2006-05-25 18:30:52 +0200 (Thu, 25 May 2006) | 2 lines

  Added tests for implementation error we came up with in the need for speed sprint.
........
  r46222 | andrew.kuchling | 2006-05-25 18:34:54 +0200 (Thu, 25 May 2006) | 1 line

  Fix another typo
........
  r46223 | kristjan.jonsson | 2006-05-25 18:39:27 +0200 (Thu, 25 May 2006) | 1 line

  Fix incorrect documentation for the Py_IS_FINITE(X) macro.
........
  r46224 | fredrik.lundh | 2006-05-25 18:46:54 +0200 (Thu, 25 May 2006) | 3 lines

  needforspeed: check for overflow in replace (from Andrew Dalke)
........
  r46226 | fredrik.lundh | 2006-05-25 19:08:14 +0200 (Thu, 25 May 2006) | 5 lines

  needforspeed: new replace implementation by Andrew Dalke.  replace is
  now about 3x faster on my machine, for the replace tests from string-
  bench.
........
  r46227 | tim.peters | 2006-05-25 19:34:03 +0200 (Thu, 25 May 2006) | 5 lines

  A new table to help string->integer conversion was added yesterday to
  both mystrtoul.c and longobject.c.  Share the table instead.  Also
  cut its size by 64 entries (they had been used for an inscrutable
  trick originally, but the code no longer tries to use that trick).
........
  r46229 | andrew.dalke | 2006-05-25 19:53:00 +0200 (Thu, 25 May 2006) | 11 lines

  Fixed problem identified by Georg.  The special-case in-place code for replace
  made a copy of the string using PyString_FromStringAndSize(s, n) and modify
  the copied string in-place.  However, 1 (and 0) character strings are shared
  from a cache.  This cause "A".replace("A", "a") to change the cached version
  of "A" -- used by everyone.

  Now may the copy with NULL as the string and do the memcpy manually.  I've
  added regression tests to check if this happens in the future.  Perhaps
  there should be a PyString_Copy for this case?
........
  r46230 | fredrik.lundh | 2006-05-25 19:55:31 +0200 (Thu, 25 May 2006) | 4 lines

  needforspeed: use "fastsearch" for count.  this results in a 3x speedup
  for the related stringbench tests.
........
  r46231 | andrew.dalke | 2006-05-25 20:03:25 +0200 (Thu, 25 May 2006) | 4 lines

  Code had returned an ssize_t, upcast to long, then converted with PyInt_FromLong.
  Now using PyInt_FromSsize_t.
........
  r46233 | andrew.kuchling | 2006-05-25 20:11:16 +0200 (Thu, 25 May 2006) | 1 line

  Comment typo
........
  r46234 | andrew.dalke | 2006-05-25 20:18:39 +0200 (Thu, 25 May 2006) | 4 lines

  Added overflow test for adding two (very) large strings where the
  new string is over max Py_ssize_t.  I have no way to test it on my
  box or any box I have access to.  At least it doesn't break anything.
........
  r46235 | bob.ippolito | 2006-05-25 20:20:23 +0200 (Thu, 25 May 2006) | 1 line

  Faster path for PyLong_FromLongLong, using PyLong_FromLong algorithm
........
  r46238 | georg.brandl | 2006-05-25 20:44:09 +0200 (Thu, 25 May 2006) | 3 lines

  Guard the _active.remove() call to avoid errors when there is no _active list.
........
  r46239 | fredrik.lundh | 2006-05-25 20:44:29 +0200 (Thu, 25 May 2006) | 4 lines

  needforspeed: use fastsearch also for find/index and contains.  the
  related tests are now about 10x faster.
........
  r46240 | bob.ippolito | 2006-05-25 20:44:50 +0200 (Thu, 25 May 2006) | 1 line

  Struct now unpacks to PY_LONG_LONG directly when possible, also include #ifdef'ed out code that will return int instead of long when in bounds (not active since it's an API and doc change)
........
  r46241 | jack.diederich | 2006-05-25 20:47:15 +0200 (Thu, 25 May 2006) | 1 line

  * eliminate warning by reverting tmp_s type to 'const char*'
........
  r46242 | bob.ippolito | 2006-05-25 21:03:19 +0200 (Thu, 25 May 2006) | 1 line

  Fix Cygwin compiler issue
........
  r46243 | bob.ippolito | 2006-05-25 21:15:27 +0200 (Thu, 25 May 2006) | 1 line

  fix a struct regression where long would be returned for short unsigned integers
........
  r46244 | georg.brandl | 2006-05-25 21:15:31 +0200 (Thu, 25 May 2006) | 4 lines

  Replace PyObject_CallFunction calls with only object args
  with PyObject_CallFunctionObjArgs, which is 30% faster.
........
  r46245 | fredrik.lundh | 2006-05-25 21:19:05 +0200 (Thu, 25 May 2006) | 3 lines

  needforspeed: use insert+reverse instead of append
........
  r46246 | bob.ippolito | 2006-05-25 21:33:38 +0200 (Thu, 25 May 2006) | 1 line

  Use LONG_MIN and LONG_MAX to check Python integer bounds instead of the incorrect INT_MIN and INT_MAX
........
  r46248 | bob.ippolito | 2006-05-25 21:56:56 +0200 (Thu, 25 May 2006) | 1 line

  Use faster struct pack/unpack functions for the endian table that matches the host's
........
  r46249 | bob.ippolito | 2006-05-25 21:59:56 +0200 (Thu, 25 May 2006) | 1 line

  enable darwin/x86 support for libffi and hence ctypes (doesn't yet support --enable-universalsdk)
........
  r46252 | georg.brandl | 2006-05-25 22:28:10 +0200 (Thu, 25 May 2006) | 4 lines

  Someone seems to just have copy-pasted the docs of
  tp_compare to tp_richcompare ;)
........
  r46253 | brett.cannon | 2006-05-25 22:44:08 +0200 (Thu, 25 May 2006) | 2 lines

  Swap out bare malloc()/free() use for PyMem_MALLOC()/PyMem_FREE() .
........
  r46254 | bob.ippolito | 2006-05-25 22:52:38 +0200 (Thu, 25 May 2006) | 1 line

  squelch gcc4 darwin/x86 compiler warnings
........
  r46255 | bob.ippolito | 2006-05-25 23:09:45 +0200 (Thu, 25 May 2006) | 1 line

  fix test_float regression and 64-bit size mismatch issue
........
  r46256 | georg.brandl | 2006-05-25 23:11:56 +0200 (Thu, 25 May 2006) | 3 lines

  Add a x-ref to newer calling APIs.
........
  r46257 | ronald.oussoren | 2006-05-25 23:30:54 +0200 (Thu, 25 May 2006) | 2 lines

  Fix minor typo in prep_cif.c
........
  r46259 | brett.cannon | 2006-05-25 23:33:11 +0200 (Thu, 25 May 2006) | 4 lines

  Change test_values so that it compares the lowercasing of group names since getgrall() can return all lowercase names while getgrgid() returns proper casing.

  Discovered on Ubuntu 5.04 (custom).
........
  r46261 | tim.peters | 2006-05-25 23:50:17 +0200 (Thu, 25 May 2006) | 7 lines

  Some Win64 pre-release in 2000 didn't support
  QueryPerformanceCounter(), but we believe Win64 does
  support it now.  So use in time.clock().

  It would be peachy if someone with a Win64 box tried
  this ;-)
........
  r46262 | tim.peters | 2006-05-25 23:52:19 +0200 (Thu, 25 May 2006) | 2 lines

  Whitespace normalization.
........
  r46263 | bob.ippolito | 2006-05-25 23:58:05 +0200 (Thu, 25 May 2006) | 1 line

  Add missing files from x86 darwin ctypes patch
........
  r46264 | brett.cannon | 2006-05-26 00:00:14 +0200 (Fri, 26 May 2006) | 2 lines

  Move over to use of METH_O and METH_NOARGS.
........
  r46265 | tim.peters | 2006-05-26 00:25:25 +0200 (Fri, 26 May 2006) | 3 lines

  Repair idiot typo, and complete the job of trying to
  use the Windows time.clock() implementation on Win64.
........
  r46266 | tim.peters | 2006-05-26 00:28:46 +0200 (Fri, 26 May 2006) | 9 lines

  Patch #1494387: SVN longobject.c compiler warnings

  The SIGCHECK macro defined here has always been bizarre, but
  it apparently causes compiler warnings on "Sun Studio 11".
  I believe the warnings are bogus, but it doesn't hurt to make
  the macro definition saner.

  Bugfix candidate (but I'm not going to bother).
........
  r46268 | fredrik.lundh | 2006-05-26 01:27:53 +0200 (Fri, 26 May 2006) | 8 lines

  needforspeed: partition for 8-bit strings.  for some simple tests,
  this is on par with a corresponding find, and nearly twice as fast
  as split(sep, 1)

  full tests, a unicode version, and documentation will follow to-
  morrow.
........
  r46271 | andrew.kuchling | 2006-05-26 03:46:22 +0200 (Fri, 26 May 2006) | 1 line

  Add Soc student
........
  r46272 | ronald.oussoren | 2006-05-26 10:41:25 +0200 (Fri, 26 May 2006) | 3 lines

  Without this patch OSX users couldn't add new help sources because the code
  tried to update one item in a tuple.
........
  r46273 | fredrik.lundh | 2006-05-26 10:54:28 +0200 (Fri, 26 May 2006) | 5 lines

  needforspeed: partition implementation, part two.

  feel free to improve the documentation and the docstrings.
........
  r46274 | georg.brandl | 2006-05-26 11:05:54 +0200 (Fri, 26 May 2006) | 3 lines

  Clarify docs for str.partition().
........
  r46278 | fredrik.lundh | 2006-05-26 11:46:59 +0200 (Fri, 26 May 2006) | 5 lines

  needforspeed: use METH_O for argument handling, which made partition some
  ~15% faster for the current tests (which is noticable faster than a corre-
  sponding find call).  thanks to neal-who-never-sleeps for the tip.
........
  r46280 | fredrik.lundh | 2006-05-26 12:27:17 +0200 (Fri, 26 May 2006) | 5 lines

  needforspeed: use Py_ssize_t for the fastsearch counter and skip
  length (thanks, neal!).  and yes, I've verified that this doesn't
  slow things down ;-)
........
  r46285 | andrew.dalke | 2006-05-26 13:11:38 +0200 (Fri, 26 May 2006) | 2 lines

  Added a few more test cases for whitespace split.  These strings have leading whitespace.
........
  r46286 | jack.diederich | 2006-05-26 13:15:17 +0200 (Fri, 26 May 2006) | 1 line

  use Py_ssize_t in places that may need it
........
  r46287 | andrew.dalke | 2006-05-26 13:15:22 +0200 (Fri, 26 May 2006) | 2 lines

  Added split whitespace checks for characters other than space.
........
  r46288 | ronald.oussoren | 2006-05-26 13:17:55 +0200 (Fri, 26 May 2006) | 2 lines

  Fix buglet in postinstall script, it would generate an invalid .cshrc file.
........
  r46290 | georg.brandl | 2006-05-26 13:26:11 +0200 (Fri, 26 May 2006) | 3 lines

  Add "partition" to UserString.
........
  r46291 | fredrik.lundh | 2006-05-26 13:29:39 +0200 (Fri, 26 May 2006) | 5 lines

  needforspeed: added Py_LOCAL macro, based on the LOCAL macro used
  for SRE and others.  applied Py_LOCAL to relevant portion of ceval,
  which gives a 1-2% speedup on my machine.  ymmv.
........
  r46292 | jack.diederich | 2006-05-26 13:37:20 +0200 (Fri, 26 May 2006) | 1 line

  when generating python code prefer to generate valid python code
........
  r46293 | fredrik.lundh | 2006-05-26 13:38:15 +0200 (Fri, 26 May 2006) | 3 lines

  use Py_LOCAL also for string and unicode objects
........
  r46294 | ronald.oussoren | 2006-05-26 13:38:39 +0200 (Fri, 26 May 2006) | 12 lines

  - Search the sqlite specific search directories
    after the normal include directories when looking
    for the version of sqlite to use.
  - On OSX:
    * Extract additional include and link directories
      from the CFLAGS and LDFLAGS, if the user has
      bothered to specify them we might as wel use them.
    * Add '-Wl,-search_paths_first' to the extra_link_args
      for readline and sqlite. This makes it possible to
      use a static library to override the system provided
      dynamic library.
........
  r46295 | ronald.oussoren | 2006-05-26 13:43:26 +0200 (Fri, 26 May 2006) | 6 lines

  Integrate installing a framework in the 'make install'
  target. Until now users had to use 'make frameworkinstall'
  to install python when it is configured with '--enable-framework'.
  This tends to confuse users that don't hunt for readme files
  hidden in platform specific directories :-)
........
  r46297 | fredrik.lundh | 2006-05-26 13:54:04 +0200 (Fri, 26 May 2006) | 4 lines

  needforspeed: added PY_LOCAL_AGGRESSIVE macro to enable "aggressive"
  LOCAL inlining; also added some missing whitespace
........
  r46298 | andrew.kuchling | 2006-05-26 14:01:44 +0200 (Fri, 26 May 2006) | 1 line

  Typo fixes
........
  r46299 | fredrik.lundh | 2006-05-26 14:01:49 +0200 (Fri, 26 May 2006) | 4 lines

  Py_LOCAL shouldn't be used for data; it works for some .NET 2003 compilers,
  but Trent's copy thinks that it's an anachronism...
........
  r46300 | martin.blais | 2006-05-26 14:03:27 +0200 (Fri, 26 May 2006) | 12 lines

  Support for buffer protocol for socket and struct.

  * Added socket.recv_buf() and socket.recvfrom_buf() methods, that use the buffer
    protocol (send and sendto already did).

  * Added struct.pack_to(), that is the corresponding buffer compatible method to
    unpack_from().

  * Fixed minor typos in arraymodule.
........
  r46302 | ronald.oussoren | 2006-05-26 14:23:20 +0200 (Fri, 26 May 2006) | 6 lines

  - Remove previous version of the binary distribution script for OSX
  - Some small bugfixes for the IDLE.app wrapper
  - Tweaks to build-installer to ensure that python gets build in the right way,
    including sqlite3.
  - Updated readme files
........
  r46305 | tim.peters | 2006-05-26 14:26:21 +0200 (Fri, 26 May 2006) | 2 lines

  Whitespace normalization.
........
  r46307 | andrew.dalke | 2006-05-26 14:28:15 +0200 (Fri, 26 May 2006) | 7 lines

  I like tests.

  The new split functions use a preallocated list.  Added tests which exceed
  the preallocation size, to exercise list appends/resizes.

  Also added more edge case tests.
........
  r46308 | andrew.dalke | 2006-05-26 14:31:00 +0200 (Fri, 26 May 2006) | 2 lines

  Test cases for off-by-one errors in string split with multicharacter pattern.
........
  r46309 | tim.peters | 2006-05-26 14:31:20 +0200 (Fri, 26 May 2006) | 2 lines

  Whitespace normalization.
........
  r46313 | andrew.kuchling | 2006-05-26 14:39:48 +0200 (Fri, 26 May 2006) | 1 line

  Add str.partition()
........
  r46314 | bob.ippolito | 2006-05-26 14:52:53 +0200 (Fri, 26 May 2006) | 1 line

  quick hack to fix busted binhex test
........
  r46316 | andrew.dalke | 2006-05-26 15:05:55 +0200 (Fri, 26 May 2006) | 2 lines

  Added more rstrip tests, including for prealloc'ed arrays
........
  r46320 | bob.ippolito | 2006-05-26 15:15:44 +0200 (Fri, 26 May 2006) | 1 line

  fix #1229380 No struct.pack exception for some out of range integers
........
  r46325 | tim.peters | 2006-05-26 15:39:17 +0200 (Fri, 26 May 2006) | 2 lines

  Use open() to open files (was using file()).
........
  r46327 | andrew.dalke | 2006-05-26 16:00:45 +0200 (Fri, 26 May 2006) | 37 lines

  Changes to string.split/rsplit on whitespace to preallocate space in the
  results list.

  Originally it allocated 0 items and used the list growth during append.  Now
  it preallocates 12 items so the first few appends don't need list reallocs.

  ("Here are some words ."*2).split(None, 1) is 7% faster
  ("Here are some words ."*2).split() is is 15% faster

    (Your milage may vary, see dealership for details.)

  File parsing like this

      for line in f:
          count += len(line.split())

  is also about 15% faster.  There is a slowdown of about 3% for large
  strings because of the additional overhead of checking if the append is
  to a preallocated region of the list or not.  This will be the rare case.
  It could be improved with special case code but we decided it was not
  useful enough.

  There is a cost of 12*sizeof(PyObject *) bytes per list.  For the normal
  case of file parsing this is not a problem because of the lists have
  a short lifetime.  We have not come up with cases where this is a problem
  in real life.

  I chose 12 because human text averages about 11 words per line in books,
  one of my data sets averages 6.2 words with a final peak at 11 words per
  line, and I work with a tab delimited data set with 8 tabs per line (or
  9 words per line).  12 encompasses all of these.

  Also changed the last rstrip code to append then reverse, rather than
  doing insert(0).  The strip() and rstrip() times are now comparable.
........
  r46328 | tim.peters | 2006-05-26 16:02:05 +0200 (Fri, 26 May 2006) | 5 lines

  Explicitly close files.  I'm trying to stop the frequent spurious test_tarfile
  failures on Windows buildbots, but it's hard to know how since the regrtest
  failure output is useless here, and it never fails when a buildbot slave runs
  test_tarfile the second time in verbose mode.
........
  r46329 | andrew.kuchling | 2006-05-26 16:03:41 +0200 (Fri, 26 May 2006) | 1 line

  Add buffer support for struct, socket
........
  r46330 | andrew.kuchling | 2006-05-26 16:04:19 +0200 (Fri, 26 May 2006) | 1 line

  Typo fix
........
  r46331 | bob.ippolito | 2006-05-26 16:07:23 +0200 (Fri, 26 May 2006) | 1 line

  Fix distutils so that libffi will cross-compile between darwin/x86 and darwin/ppc
........
  r46333 | bob.ippolito | 2006-05-26 16:23:21 +0200 (Fri, 26 May 2006) | 1 line

  Fix _struct typo that broke some 64-bit platforms
........
  r46335 | bob.ippolito | 2006-05-26 16:29:35 +0200 (Fri, 26 May 2006) | 1 line

  Enable PY_USE_INT_WHEN_POSSIBLE in struct
........
  r46343 | andrew.dalke | 2006-05-26 17:21:01 +0200 (Fri, 26 May 2006) | 2 lines

  Eeked out another 3% or so performance in split whitespace by cleaning up the algorithm.
........
  r46352 | andrew.dalke | 2006-05-26 18:22:52 +0200 (Fri, 26 May 2006) | 3 lines

  Test for more edge strip cases; leading and trailing separator gets removed
  even with strip(..., 0)
........
  r46354 | bob.ippolito | 2006-05-26 18:23:28 +0200 (Fri, 26 May 2006) | 1 line

  fix signed/unsigned mismatch in struct
........
  r46355 | steve.holden | 2006-05-26 18:27:59 +0200 (Fri, 26 May 2006) | 5 lines

  Add -t option to allow easy test selection.
  Action verbose option correctly.
  Tweak operation counts. Add empty and new instances tests.
  Enable comparisons across different warp factors. Change version.
........
  r46356 | fredrik.lundh | 2006-05-26 18:32:42 +0200 (Fri, 26 May 2006) | 3 lines

  needforspeed: use Py_LOCAL on a few more locals in stringobject.c
........
  r46357 | thomas.heller | 2006-05-26 18:42:44 +0200 (Fri, 26 May 2006) | 4 lines

  For now, I gave up with automatic conversion of reST to Python-latex,
  so I'm writing this in latex now.

  Skeleton for the ctypes reference.
........
  r46358 | tim.peters | 2006-05-26 18:49:28 +0200 (Fri, 26 May 2006) | 3 lines

  Repair Windows compiler warnings about mixing
  signed and unsigned integral types in comparisons.
........
  r46359 | tim.peters | 2006-05-26 18:52:04 +0200 (Fri, 26 May 2006) | 2 lines

  Whitespace normalization.
........
  r46360 | tim.peters | 2006-05-26 18:53:04 +0200 (Fri, 26 May 2006) | 2 lines

  Add missing svn:eol-style property to text files.
........
  r46362 | fredrik.lundh | 2006-05-26 19:04:58 +0200 (Fri, 26 May 2006) | 3 lines

  needforspeed: stringlib refactoring (in progress)
........
  r46363 | thomas.heller | 2006-05-26 19:18:33 +0200 (Fri, 26 May 2006) | 1 line

  Write some docs.
........
  r46364 | fredrik.lundh | 2006-05-26 19:22:38 +0200 (Fri, 26 May 2006) | 3 lines

  needforspeed: stringlib refactoring (in progress)
........
  r46366 | fredrik.lundh | 2006-05-26 19:26:39 +0200 (Fri, 26 May 2006) | 3 lines

  needforspeed: cleanup
........
  r46367 | fredrik.lundh | 2006-05-26 19:31:41 +0200 (Fri, 26 May 2006) | 4 lines

  needforspeed: remove remaining USE_FAST macros; if fastsearch was
  broken, someone would have noticed by now ;-)
........
  r46368 | steve.holden | 2006-05-26 19:41:32 +0200 (Fri, 26 May 2006) | 5 lines

  Use minimum calibration time rather than avergae to avoid
  the illusion of negative run times. Halt with an error if
  run times go below 10 ms, indicating that results will be
  unreliable.
........
  r46370 | thomas.heller | 2006-05-26 19:47:40 +0200 (Fri, 26 May 2006) | 2 lines

  Reordered, and wrote more docs.
........
  r46372 | georg.brandl | 2006-05-26 20:03:31 +0200 (Fri, 26 May 2006) | 9 lines

  Need for speed: Patch #921466 : sys.path_importer_cache is now used to cache valid and
    invalid file paths for the built-in import machinery which leads to
    fewer open calls on startup.

    Also fix issue with PEP 302 style import hooks which lead to more open()
    calls than necessary.
........
  r46373 | fredrik.lundh | 2006-05-26 20:05:34 +0200 (Fri, 26 May 2006) | 3 lines

  removed unnecessary include
........
  r46377 | fredrik.lundh | 2006-05-26 20:15:38 +0200 (Fri, 26 May 2006) | 3 lines

  needforspeed: added rpartition implementation
........
  r46380 | fredrik.lundh | 2006-05-26 20:24:15 +0200 (Fri, 26 May 2006) | 5 lines

  needspeed: rpartition documentation, tests, and a bug fixes.

  feel free to add more tests and improve the documentation.
........
  r46381 | steve.holden | 2006-05-26 20:26:21 +0200 (Fri, 26 May 2006) | 4 lines

  Revert tests to MAL's original round sizes to retiain comparability
  from long ago and far away. Stop calling this pybench 1.4 because it
  isn't. Remove the empty test, which was a bad idea.
........
  r46387 | andrew.kuchling | 2006-05-26 20:41:18 +0200 (Fri, 26 May 2006) | 1 line

  Add rpartition() and path caching
........
  r46388 | andrew.dalke | 2006-05-26 21:02:09 +0200 (Fri, 26 May 2006) | 10 lines

  substring split now uses /F's fast string matching algorithm.
    (If compiled without FAST search support, changed the pre-memcmp test
     to check the last character as well as the first.  This gave a 25%
     speedup for my test case.)

  Rewrote the split algorithms so they stop when maxsplit gets to 0.
  Previously they did a string match first then checked if the maxsplit
  was reached.  The new way prevents a needless string search.
........
  r46391 | brett.cannon | 2006-05-26 21:04:47 +0200 (Fri, 26 May 2006) | 2 lines

  Change C spacing to 4 spaces by default to match PEP 7 for new C files.
........
  r46392 | georg.brandl | 2006-05-26 21:04:47 +0200 (Fri, 26 May 2006) | 3 lines

  Exception isn't the root of all exception classes anymore.
........
  r46397 | fredrik.lundh | 2006-05-26 21:23:21 +0200 (Fri, 26 May 2006) | 3 lines

  added rpartition method to UserString class
........
  r46398 | fredrik.lundh | 2006-05-26 21:24:53 +0200 (Fri, 26 May 2006) | 4 lines

  needforspeed: stringlib refactoring, continued.  added count and
  find helpers; updated unicodeobject to use stringlib_count
........
  r46400 | fredrik.lundh | 2006-05-26 21:29:05 +0200 (Fri, 26 May 2006) | 4 lines

  needforspeed: stringlib refactoring: use stringlib/find for unicode
  find
........
  r46403 | fredrik.lundh | 2006-05-26 21:33:03 +0200 (Fri, 26 May 2006) | 3 lines

  needforspeed: use a macro to fix slice indexes
........
  r46404 | thomas.heller | 2006-05-26 21:43:45 +0200 (Fri, 26 May 2006) | 1 line

  Write more docs.
........
  r46406 | fredrik.lundh | 2006-05-26 21:48:07 +0200 (Fri, 26 May 2006) | 3 lines

  needforspeed: stringlib refactoring: use stringlib/find for string find
........
  r46407 | andrew.kuchling | 2006-05-26 21:51:10 +0200 (Fri, 26 May 2006) | 1 line

  Comment typo
........
  r46409 | georg.brandl | 2006-05-26 22:04:44 +0200 (Fri, 26 May 2006) | 3 lines

  Replace Py_BuildValue("OO") by PyTuple_Pack.
........
  r46411 | georg.brandl | 2006-05-26 22:14:47 +0200 (Fri, 26 May 2006) | 2 lines

  Patch #1492218: document None being a constant.
........
  r46415 | georg.brandl | 2006-05-26 22:22:50 +0200 (Fri, 26 May 2006) | 3 lines

  Simplify calling.
........
  r46416 | andrew.dalke | 2006-05-26 22:25:22 +0200 (Fri, 26 May 2006) | 4 lines

  Added limits to the replace code so it does not count all of the matching
  patterns in a string, only the number needed by the max limit.
........
  r46417 | bob.ippolito | 2006-05-26 22:25:23 +0200 (Fri, 26 May 2006) | 1 line

  enable all of the struct tests, use ssize_t, fix some whitespace
........
  r46418 | tim.peters | 2006-05-26 22:56:56 +0200 (Fri, 26 May 2006) | 2 lines

  Record Iceland sprint attendees.
........
  r46421 | tim.peters | 2006-05-26 23:51:13 +0200 (Fri, 26 May 2006) | 2 lines

  Whitespace normalization.
........
  r46422 | steve.holden | 2006-05-27 00:17:54 +0200 (Sat, 27 May 2006) | 2 lines

  Add Richard Tew to developers
........
  r46423 | steve.holden | 2006-05-27 00:33:20 +0200 (Sat, 27 May 2006) | 2 lines

  Update help text and documentaition.
........
  r46424 | steve.holden | 2006-05-27 00:39:27 +0200 (Sat, 27 May 2006) | 2 lines

  Blasted typos ...
........
  r46425 | andrew.dalke | 2006-05-27 00:49:03 +0200 (Sat, 27 May 2006) | 2 lines

  Added description of why splitlines doesn't use the prealloc strategy
........
  r46426 | tim.peters | 2006-05-27 01:14:37 +0200 (Sat, 27 May 2006) | 19 lines

  Patch 1145039.

  set_exc_info(), reset_exc_info():  By exploiting the
  likely (who knows?) invariant that when an exception's
  `type` is NULL, its `value` and `traceback` are also NULL,
  save some cycles in heavily-executed code.

  This is a "a kronar saved is a kronar earned" patch:  the
  speedup isn't reliably measurable, but it obviously does
  reduce the operation count in the normal (no exception
  raised) path through PyEval_EvalFrameEx().

  The tim-exc_sanity branch tries to push this harder, but
  is still blowing up (at least in part due to pre-existing
  subtle bugs that appear to have no other visible
  consequences!).

  Not a bugfix candidate.
........
  r46429 | steve.holden | 2006-05-27 02:51:52 +0200 (Sat, 27 May 2006) | 2 lines

  Reinstate new-style object tests.
........
  r46430 | neal.norwitz | 2006-05-27 07:18:57 +0200 (Sat, 27 May 2006) | 1 line

  Fix compiler warning (and whitespace) on Mac OS 10.4.  (A lot of this code looked duplicated, I wonder if a utility function could help reduce the duplication here.)
........
  r46431 | neal.norwitz | 2006-05-27 07:21:30 +0200 (Sat, 27 May 2006) | 4 lines

  Fix Coverity warnings.
   - Check the correct variable (str_obj, not str) for NULL
   - sep_len was already verified it wasn't 0
........
  r46432 | martin.v.loewis | 2006-05-27 10:36:52 +0200 (Sat, 27 May 2006) | 2 lines

  Patch 1494554: Update numeric properties to Unicode 4.1.
........
  r46433 | martin.v.loewis | 2006-05-27 10:54:29 +0200 (Sat, 27 May 2006) | 2 lines

  Explain why 'consumed' is initialized.
........
  r46436 | fredrik.lundh | 2006-05-27 12:05:10 +0200 (Sat, 27 May 2006) | 3 lines

  needforspeed: more stringlib refactoring
........
  r46438 | fredrik.lundh | 2006-05-27 12:39:48 +0200 (Sat, 27 May 2006) | 5 lines

  needforspeed: backed out the Py_LOCAL-isation of ceval; the massive in-
  lining killed performance on certain Intel boxes, and the "aggressive"
  macro itself gives most of the benefits on others.
........
  r46439 | andrew.dalke | 2006-05-27 13:04:36 +0200 (Sat, 27 May 2006) | 2 lines

  fixed typo
........
  r46440 | martin.v.loewis | 2006-05-27 13:07:49 +0200 (Sat, 27 May 2006) | 2 lines

  Revert bogus change committed in 46432 to this file.
........
  r46444 | andrew.kuchling | 2006-05-27 13:26:33 +0200 (Sat, 27 May 2006) | 1 line

  Add Py_LOCAL macros
........
  r46450 | bob.ippolito | 2006-05-27 13:47:12 +0200 (Sat, 27 May 2006) | 1 line

  Remove the range checking and int usage #defines from _struct and strip out the now-dead code
........
  r46454 | bob.ippolito | 2006-05-27 14:11:36 +0200 (Sat, 27 May 2006) | 1 line

  Fix up struct docstrings, add struct.pack_to function for symmetry
........
  r46456 | richard.jones | 2006-05-27 14:29:24 +0200 (Sat, 27 May 2006) | 2 lines

  Conversion of exceptions over from faked-up classes to new-style C types.
........
  r46457 | georg.brandl | 2006-05-27 14:30:25 +0200 (Sat, 27 May 2006) | 3 lines

  Add news item for new-style exception class branch merge.
........
  r46458 | tim.peters | 2006-05-27 14:36:53 +0200 (Sat, 27 May 2006) | 3 lines

  More random thrashing trying to understand spurious
  Windows failures.  Who's keeping a bz2 file open?
........
  r46460 | andrew.kuchling | 2006-05-27 15:44:37 +0200 (Sat, 27 May 2006) | 1 line

  Mention new-style exceptions
........
  r46461 | richard.jones | 2006-05-27 15:50:42 +0200 (Sat, 27 May 2006) | 1 line

  credit where credit is due
........
  r46462 | georg.brandl | 2006-05-27 16:02:03 +0200 (Sat, 27 May 2006) | 3 lines

  Always close BZ2Proxy object. Remove unnecessary struct usage.
........
  r46463 | tim.peters | 2006-05-27 16:13:13 +0200 (Sat, 27 May 2006) | 2 lines

  The cheery optimism of old age.
........
  r46464 | andrew.dalke | 2006-05-27 16:16:40 +0200 (Sat, 27 May 2006) | 2 lines

  cleanup - removed trailing whitespace
........
  r46465 | georg.brandl | 2006-05-27 16:41:55 +0200 (Sat, 27 May 2006) | 3 lines

  Remove spurious semicolons after macro invocations.
........
  r46468 | fredrik.lundh | 2006-05-27 16:58:20 +0200 (Sat, 27 May 2006) | 4 lines

  needforspeed: replace improvements, changed to Py_LOCAL_INLINE
  where appropriate
........
  r46469 | fredrik.lundh | 2006-05-27 17:20:22 +0200 (Sat, 27 May 2006) | 4 lines

  needforspeed: stringlib refactoring: changed find_obj to find_slice,
  to enable use from stringobject
........
  r46470 | fredrik.lundh | 2006-05-27 17:26:19 +0200 (Sat, 27 May 2006) | 3 lines

  needforspeed: stringlib refactoring: use find_slice for stringobject
........
  r46472 | kristjan.jonsson | 2006-05-27 17:41:31 +0200 (Sat, 27 May 2006) | 1 line

  Add a PCBuild8 build directory for building with Visual Studio .NET 2005.  Contains a special project to perform profile guided optimizations on the pythoncore.dll, by instrumenting and running pybench.py
........
  r46473 | jack.diederich | 2006-05-27 17:44:34 +0200 (Sat, 27 May 2006) | 3 lines

  needforspeed: use PyObject_MALLOC instead of system malloc for small
  allocations.  Use PyMem_MALLOC for larger (1k+) chunks.  1%-2% speedup.
........
  r46474 | bob.ippolito | 2006-05-27 17:53:49 +0200 (Sat, 27 May 2006) | 1 line

  fix struct regression on 64-bit platforms
........
  r46475 | richard.jones | 2006-05-27 18:07:28 +0200 (Sat, 27 May 2006) | 1 line

  doc string additions and tweaks
........
  r46477 | richard.jones | 2006-05-27 18:15:11 +0200 (Sat, 27 May 2006) | 1 line

  move semicolons
........
  r46478 | george.yoshida | 2006-05-27 18:32:44 +0200 (Sat, 27 May 2006) | 2 lines

  minor markup nits
........
  r46488 | george.yoshida | 2006-05-27 18:51:43 +0200 (Sat, 27 May 2006) | 3 lines

  End of Ch.3 is now about "with statement".
  Avoid obsolescence by directly referring to the section.
........
  r46489 | george.yoshida | 2006-05-27 19:09:17 +0200 (Sat, 27 May 2006) | 2 lines

  fix typo
........
