[py-svn] r8182 - in py/dist/py: . bin builtin builtin/testing code code/testing documentation documentation/example/pytest execnet execnet/bin execnet/testing execnet/testing/test magic magic/testing misc misc/testing path path/extpy path/extpy/testing path/extpy/testing/test_data path/gateway path/local path/local/popen5/testing path/local/testing path/svn path/svn/testing path/test process process/testing test test/report test/report/testing test/report/text test/testing test/testing/test test/testing/test/data test/tool test/tool/testing

hpk at codespeak.net hpk at codespeak.net
Sun Jan 9 16:49:35 CET 2005


Author: hpk
Date: Sun Jan  9 16:49:34 2005
New Revision: 8182

Modified:
   py/dist/py/__init__.py
   py/dist/py/bin/_findpy.py
   py/dist/py/builtin/enumerate.py
   py/dist/py/builtin/testing/test_enumerate.py
   py/dist/py/code/excinfo.py
   py/dist/py/code/frame.py
   py/dist/py/code/source.py
   py/dist/py/code/testing/test_cpython_features.py
   py/dist/py/code/testing/test_excinfo.py
   py/dist/py/code/testing/test_frame.py
   py/dist/py/code/testing/test_source.py
   py/dist/py/conftest.py
   py/dist/py/documentation/example/pytest/failure_demo.py
   py/dist/py/documentation/example/pytest/test_setup_flow_example.py
   py/dist/py/documentation/rest_test.py
   py/dist/py/env.py
   py/dist/py/execnet/bin/quitserver.py
   py/dist/py/execnet/bin/shell.py
   py/dist/py/execnet/bin/startserver.py
   py/dist/py/execnet/channel.py
   py/dist/py/execnet/gateway.py
   py/dist/py/execnet/inputoutput.py
   py/dist/py/execnet/message.py
   py/dist/py/execnet/register.py
   py/dist/py/execnet/testing/__init__.py
   py/dist/py/execnet/testing/sshtesting.py
   py/dist/py/execnet/testing/test/test_pickle.py
   py/dist/py/execnet/testing/test_gateway.py
   py/dist/py/initpkg.py
   py/dist/py/magic/assertion.py
   py/dist/py/magic/autopath.py
   py/dist/py/magic/conftest.py
   py/dist/py/magic/exprinfo.py
   py/dist/py/magic/invoke.py
   py/dist/py/magic/patch.py
   py/dist/py/magic/testing/__init__.py
   py/dist/py/magic/testing/test_assertion.py
   py/dist/py/magic/testing/test_autopath.py
   py/dist/py/magic/testing/test_exprinfo.py
   py/dist/py/magic/testing/test_invoke.py
   py/dist/py/magic/testing/test_patch.py
   py/dist/py/magic/testing/test_viewtype.py
   py/dist/py/magic/viewtype.py
   py/dist/py/misc/cache.py
   py/dist/py/misc/error.py
   py/dist/py/misc/std.py
   py/dist/py/misc/testing/__init__.py
   py/dist/py/misc/testing/test_api.py
   py/dist/py/misc/testing/test_cache.py
   py/dist/py/misc/testing/test_error.py
   py/dist/py/misc/testing/test_initpkg.py
   py/dist/py/misc/testing/test_std.py
   py/dist/py/path/__init__.py
   py/dist/py/path/common.py
   py/dist/py/path/extpy/extpy.py
   py/dist/py/path/extpy/testing/__init__.py
   py/dist/py/path/extpy/testing/inc_pseudofs.py
   py/dist/py/path/extpy/testing/inc_test_extpy.py
   py/dist/py/path/extpy/testing/test_data/no_trailing_newline.py
   py/dist/py/path/extpy/testing/test_extpy.py
   py/dist/py/path/gateway/channeltest.py
   py/dist/py/path/gateway/channeltest2.py
   py/dist/py/path/gateway/remotepath.py
   py/dist/py/path/local/api.py
   py/dist/py/path/local/local.py
   py/dist/py/path/local/popen5/testing/__init__.py
   py/dist/py/path/local/popen5/testing/test_subprocess.py
   py/dist/py/path/local/posix.py
   py/dist/py/path/local/stdoutcapture.py
   py/dist/py/path/local/testing/__init__.py
   py/dist/py/path/local/testing/test_local.py
   py/dist/py/path/local/testing/test_posix.py
   py/dist/py/path/local/win.py
   py/dist/py/path/svn/cache.py
   py/dist/py/path/svn/svncommon.py
   py/dist/py/path/svn/testing/__init__.py
   py/dist/py/path/svn/testing/svntestbase.py
   py/dist/py/path/svn/testing/test_urlcommand.py
   py/dist/py/path/svn/testing/test_wccommand.py
   py/dist/py/path/svn/urlcommand.py
   py/dist/py/path/svn/wccommand.py
   py/dist/py/path/svn/xsvnbinding.py
   py/dist/py/path/test/common.py
   py/dist/py/path/test/fscommon.py
   py/dist/py/path/test/test_api.py
   py/dist/py/process/cmdexec.py
   py/dist/py/process/testing/__init__.py
   py/dist/py/test/cmdline.py
   py/dist/py/test/collect.py
   py/dist/py/test/compat.py
   py/dist/py/test/config.py
   py/dist/py/test/defaultconfig.py
   py/dist/py/test/drive.py
   py/dist/py/test/item.py
   py/dist/py/test/raises.py
   py/dist/py/test/report/memo.py
   py/dist/py/test/report/testing/__init__.py
   py/dist/py/test/report/testing/test_memo.py
   py/dist/py/test/report/text/out.py
   py/dist/py/test/report/text/reporter.py
   py/dist/py/test/report/text/summary.py
   py/dist/py/test/run.py
   py/dist/py/test/testing/__init__.py
   py/dist/py/test/testing/test/data/disabled.py
   py/dist/py/test/testing/test/data/disabledclass.py
   py/dist/py/test/testing/test/data/syntax_error.py
   py/dist/py/test/testing/test/demo.py
   py/dist/py/test/testing/test/test_setup_nested.py
   py/dist/py/test/testing/test_collect.py
   py/dist/py/test/testing/test_compat.py
   py/dist/py/test/testing/test_config.py
   py/dist/py/test/testing/test_raises.py
   py/dist/py/test/tool/optparse.py
   py/dist/py/test/tool/outerrcapture.py
   py/dist/py/test/tool/testing/__init__.py
   py/dist/py/test/tool/testing/test_outerrcapture.py
Log:
remove trailing whitespace.  As i was usually the one 
who added these trailing whitespace it doesn't really 
change the history (which is nice to keep in mind when
doing such changes).  



Modified: py/dist/py/__init__.py
==============================================================================
--- py/dist/py/__init__.py	(original)
+++ py/dist/py/__init__.py	Sun Jan  9 16:49:34 2005
@@ -12,7 +12,7 @@
     'test.collect.Class'     : ('./test/collect.py', 'Class'),
     'test.collect.Error'     : ('./test/collect.py', 'Error'),
     'test.collect.Collector' : ('./test/collect.py', 'Collector'),
-    'test.TextReporter'      : ('./test/report/text/reporter.py', 
+    'test.TextReporter'      : ('./test/report/text/reporter.py',
                                 'TextReporter'),
     'test.Option'            : ('./test/tool/optparse.py', 'Option'),
     'test.MemoReporter'      : ('./test/report/memo.py', 'MemoReporter'),
@@ -52,5 +52,5 @@
     'execnet.PopenGateway'   : ('./execnet/register.py', 'PopenGateway'),
     'execnet.SshGateway'     : ('./execnet/register.py', 'SshGateway'),
 
-    'error'                  : ('./misc/error.py', 'error'), 
+    'error'                  : ('./misc/error.py', 'error'),
 })

Modified: py/dist/py/bin/_findpy.py
==============================================================================
--- py/dist/py/bin/_findpy.py	(original)
+++ py/dist/py/bin/_findpy.py	Sun Jan  9 16:49:34 2005
@@ -1,27 +1,27 @@
 #
-# find and import a version of 'py' 
-# 
+# find and import a version of 'py'
+#
 import sys
 import os
-from os.path import dirname as opd, exists, join, basename, abspath 
+from os.path import dirname as opd, exists, join, basename, abspath
 
 def searchpy(current):
     while 1:
         last = current
-        initpy = join(current, '__init__.py') 
-        if not exists(initpy): 
-            pydir = join(current, 'py') 
-            # recognize py-package and ensure it is importable 
-            if exists(pydir) and exists(join(pydir, '__init__.py')): 
+        initpy = join(current, '__init__.py')
+        if not exists(initpy):
+            pydir = join(current, 'py')
+            # recognize py-package and ensure it is importable
+            if exists(pydir) and exists(join(pydir, '__init__.py')):
                 for p in sys.path:
                     if p == current:
-                        return True 
+                        return True
                 print "inserting into sys.path:", current
-                sys.path.insert(0, current) 
+                sys.path.insert(0, current)
                 return True
-        current = opd(current) 
-        if last == current: 
-            return False 
+        current = opd(current)
+        if last == current:
+            return False
 
 if not searchpy(abspath(os.curdir)):
     if not searchpy(opd(abspath(sys.argv[0]))):

Modified: py/dist/py/builtin/enumerate.py
==============================================================================
--- py/dist/py/builtin/enumerate.py	(original)
+++ py/dist/py/builtin/enumerate.py	Sun Jan  9 16:49:34 2005
@@ -1,9 +1,9 @@
-from __future__ import generators 
+from __future__ import generators
 try:
     enumerate = enumerate
-except NameError: 
-    def enumerate(iterable): 
-        i = 0 
-        for x in iterable: 
+except NameError:
+    def enumerate(iterable):
+        i = 0
+        for x in iterable:
             yield i, x
             i += 1

Modified: py/dist/py/builtin/testing/test_enumerate.py
==============================================================================
--- py/dist/py/builtin/testing/test_enumerate.py	(original)
+++ py/dist/py/builtin/testing/test_enumerate.py	Sun Jan  9 16:49:34 2005
@@ -1,7 +1,7 @@
-import sys 
+import sys
 import py
 
-def test_enumerate(): 
+def test_enumerate():
     l = [0,1,2]
-    for i,x in py.builtin.enumerate(l): 
-        assert i == x 
+    for i,x in py.builtin.enumerate(l):
+        assert i == x

Modified: py/dist/py/code/excinfo.py
==============================================================================
--- py/dist/py/code/excinfo.py	(original)
+++ py/dist/py/code/excinfo.py	Sun Jan  9 16:49:34 2005
@@ -1,13 +1,13 @@
-from __future__ import generators 
+from __future__ import generators
 import sys
 import py
 
-class ExceptionInfo(object): 
-    """ wraps sys.exc_info() objects and offers 
-        help for navigating the traceback. 
+class ExceptionInfo(object):
+    """ wraps sys.exc_info() objects and offers
+        help for navigating the traceback.
     """
     TRACEBACK_HIDE = object()
-    
+
     def __init__(self, tup=None, exprinfo=None):
         # NB. all attributes are private!  Subclasses or other
         #     ExceptionInfo-like classes may have different attributes.
@@ -49,53 +49,53 @@
                 yield TracebackEntry(current)
             current = current.tb_next
 
-    def getentries(self, startcondition=None, endcondition=None): 
-        if startcondition is not None and not callable(startcondition): 
-            raise TypeError("%r is not callable or None" % startcondition) 
-        if endcondition is not None and not callable(endcondition): 
-            raise TypeError("%r is not callable or None" % endcondition) 
+    def getentries(self, startcondition=None, endcondition=None):
+        if startcondition is not None and not callable(startcondition):
+            raise TypeError("%r is not callable or None" % startcondition)
+        if endcondition is not None and not callable(endcondition):
+            raise TypeError("%r is not callable or None" % endcondition)
         result = []
         gen = iter(self)
-        for x in gen: 
-            if startcondition is None or startcondition(x): 
-                result.append(x) 
-                break 
-        for x in gen: 
-            result.append(x) 
-            if endcondition is not None and endcondition(x): 
-                break 
-        return result 
-        #entries = list(self) 
-        #gen = py.builtin.enumerate(self) 
-        #if start is not None: 
-        #    for i, entry in gen: 
+        for x in gen:
+            if startcondition is None or startcondition(x):
+                result.append(x)
+                break
+        for x in gen:
+            result.append(x)
+            if endcondition is not None and endcondition(x):
+                break
+        return result
+        #entries = list(self)
+        #gen = py.builtin.enumerate(self)
+        #if start is not None:
+        #    for i, entry in gen:
         #        p,l = entry.frame.code.path, entry.frame.code.firstlineno
-        #        if start == i or (p,l) == start: 
-        #            break 
+        #        if start == i or (p,l) == start:
+        #            break
         #res = []
-        #for i, entry in gen: 
+        #for i, entry in gen:
         #    res.append(entry)
-        #    if end is not None: 
-        #       p,l = entry.frame.code.path, entry.frame.code.firstlineno 
-        #       if i == end or (p,l) == end: 
-        #           break 
-        #return res 
+        #    if end is not None:
+        #       p,l = entry.frame.code.path, entry.frame.code.firstlineno
+        #       if i == end or (p,l) == end:
+        #           break
+        #return res
 
-class TracebackEntry(object): 
+class TracebackEntry(object):
     def __init__(self, rawentry):
         self._rawentry = rawentry
         self.frame = py.code.Frame(rawentry.tb_frame)
-        self.lineno = rawentry.tb_lineno - 1 
-        
-    def statement(self): 
-        source = self.frame.code.fullsource 
-        return source.getstatement(self.lineno) 
-    statement = property(statement, None, None, 
-                         "statement of this traceback entry.") 
+        self.lineno = rawentry.tb_lineno - 1
+
+    def statement(self):
+        source = self.frame.code.fullsource
+        return source.getstatement(self.lineno)
+    statement = property(statement, None, None,
+                         "statement of this traceback entry.")
 
-    def path(self): 
-        return self.frame.path 
+    def path(self):
+        return self.frame.path
     path = property(path, None, None, "path to the full source code")
 
-    def __repr__(self): 
+    def __repr__(self):
         return "<TracebackEntry %s:%d>" %(self.frame.code.path, self.lineno + 1)

Modified: py/dist/py/code/frame.py
==============================================================================
--- py/dist/py/code/frame.py	(original)
+++ py/dist/py/code/frame.py	Sun Jan  9 16:49:34 2005
@@ -1,42 +1,42 @@
 import py
 
-class Code(object): 
-    def __init__(self, f_code): 
-        self.raw = f_code 
-        self.firstlineno = f_code.co_firstlineno - 1 
+class Code(object):
+    def __init__(self, f_code):
+        self.raw = f_code
+        self.firstlineno = f_code.co_firstlineno - 1
         self.name = f_code.co_name
 
-    def path(self): 
-        try: 
-            return self.raw.co_filename.__path__ 
-        except AttributeError: 
+    def path(self):
+        try:
+            return self.raw.co_filename.__path__
+        except AttributeError:
             return py.path.local(self.raw.co_filename)
     path = property(path, None, None, "path of this code object")
 
-    def fullsource(self): 
-        fn = self.raw.co_filename 
-        try: 
-            return fn.__source__ 
-        except AttributeError: 
+    def fullsource(self):
+        fn = self.raw.co_filename
+        try:
+            return fn.__source__
+        except AttributeError:
             return py.code.Source(self.path.read(mode="rU"))
-    fullsource = property(fullsource, None, None, 
-                          "full source containing this code object") 
+    fullsource = property(fullsource, None, None,
+                          "full source containing this code object")
 
 
 class Frame(object):
     """Wrapper around a Python frame holding f_locals and f_globals
     in which expressions can be evaluated."""
-    
+
     def __init__(self, frame):
         self.code = Code(frame.f_code)
         self.lineno = frame.f_lineno - 1
         self.f_globals = frame.f_globals
-        self.f_locals = frame.f_locals 
+        self.f_locals = frame.f_locals
 
-    def statement(self): 
-        return self.code.fullsource.getstatement(self.lineno) 
-    statement = property(statement, None, None, 
-                         "statement this frame is at") 
+    def statement(self):
+        return self.code.fullsource.getstatement(self.lineno)
+    statement = property(statement, None, None,
+                         "statement this frame is at")
 
     def eval(self, code, **vars):
         self.f_locals.update(vars)
@@ -52,4 +52,4 @@
     def is_true(self, object):
         return object
 
-        
+

Modified: py/dist/py/code/source.py
==============================================================================
--- py/dist/py/code/source.py	(original)
+++ py/dist/py/code/source.py	Sun Jan  9 16:49:34 2005
@@ -1,262 +1,262 @@
-from __future__ import generators 
-import sys 
+from __future__ import generators
+import sys
 import inspect
 
 # DON'T IMPORT PY HERE
 
 class Source(object):
-    """ a mutable object holding a source code fragment, 
-        automatically deindenting it. 
+    """ a mutable object holding a source code fragment,
+        automatically deindenting it.
     """
-    def __init__(self, *parts, **kwargs): 
+    def __init__(self, *parts, **kwargs):
         self.lines = lines = []
         de = kwargs.get('deindent', True)
         for part in parts:
             if isinstance(part, Source):
-                partlines = part.lines 
+                partlines = part.lines
             elif isinstance(part, str):
                 partlines = part.split('\n')
-            else: 
-                partlines = getsource(part, deindent=False).lines 
-            if de: 
-                partlines = deindent(partlines) 
-            lines.extend(partlines) 
+            else:
+                partlines = getsource(part, deindent=False).lines
+            if de:
+                partlines = deindent(partlines)
+            lines.extend(partlines)
 
-    def __getitem__(self, key): 
-        if isinstance(key, int): 
+    def __getitem__(self, key):
+        if isinstance(key, int):
             return self.lines[key]
-        else: 
-            return self.__getslice__(key) 
+        else:
+            return self.__getslice__(key)
 
     def __getslice__(self, start, end):
         newsource = Source()
         newsource.lines = self.lines[start:end]
-        return newsource 
+        return newsource
 
-    def strip(self): 
-        """ return new source object with trailing 
-            and leading blank lines removed. 
+    def strip(self):
+        """ return new source object with trailing
+            and leading blank lines removed.
         """
         for start in range(0, len(self)):
-            if not self.lines[start].isspace(): 
-                break 
-        for end in range(len(self)-1, -1, -1): 
-            if not self.lines[end].isspace(): 
-                break 
-        source = Source() 
+            if not self.lines[start].isspace():
+                break
+        for end in range(len(self)-1, -1, -1):
+            if not self.lines[end].isspace():
+                break
+        source = Source()
         source.lines[:] = self.lines[start:end+1]
-        return source 
+        return source
 
     def putaround(self, before='', after=''):
-        """ modifies a new source object embedded/indented 
-            between before and after. 
+        """ modifies a new source object embedded/indented
+            between before and after.
         """
-        before = Source(before) 
-        after = Source(after) 
-        newsource = Source() 
+        before = Source(before)
+        after = Source(after)
+        newsource = Source()
         lines = ['    ' + line for line in self.lines]
-        newsource.lines = before.lines + lines +  after.lines 
-        return newsource 
+        newsource.lines = before.lines + lines +  after.lines
+        return newsource
 
     def getstatement(self, lineno):
-        """ return Source statement which contains the 
-            given linenumber (counted from 0). 
+        """ return Source statement which contains the
+            given linenumber (counted from 0).
         """
-        start, end = self.getstatementrange(lineno) 
+        start, end = self.getstatementrange(lineno)
         return self[start:end]
 
     def getstatementrange(self, lineno):
-        """ return (start, end) tuple which span the statement 
-            region which contains the given lineno. 
+        """ return (start, end) tuple which span the statement
+            region which contains the given lineno.
         """
-        # XXX there must be a better than these heuristic ways ... 
-        for end in range(lineno, len(self)): 
+        # XXX there must be a better than these heuristic ways ...
+        for end in range(lineno, len(self)):
             trysource = self[lineno:end+1]
-            if trysource.isparseable(): 
-                start = lineno 
-                break 
-        else: 
+            if trysource.isparseable():
+                start = lineno
+                break
+        else:
             end = lineno
-            for start in range(lineno, -1, -1): 
+            for start in range(lineno, -1, -1):
                 trysource = self[start:end+1]
-                if trysource.isparseable(): 
-                    break 
-            else: 
-                # find the end 
-                for end in range(lineno, len(self)): 
+                if trysource.isparseable():
+                    break
+            else:
+                # find the end
+                for end in range(lineno, len(self)):
                     trysource = self[:end+1]
-                    if trysource.isparseable(): 
-                        break 
-                else: 
-                    return None 
-                # find the start 
-                for start in range(end, -1, -1): 
+                    if trysource.isparseable():
+                        break
+                else:
+                    return None
+                # find the start
+                for start in range(end, -1, -1):
                     trysource = self[start:end+1]
-                    if trysource.isparseable(): 
-                        break 
+                    if trysource.isparseable():
+                        break
         assert start <= lineno <= end, "could not locate statement"
         return start, end + 1
 
-    def getblockend(self, lineno): 
+    def getblockend(self, lineno):
         # XXX
         lines = [x + '\n' for x in self.lines[lineno:]]
-        blocklines = inspect.getblock(lines) 
-        #print blocklines 
+        blocklines = inspect.getblock(lines)
+        #print blocklines
         return lineno + len(blocklines) - 1
 
-    def deindent(self, offset=None): 
-        """ return a new source object deindented by offset.  
-            If offset is None then guess an indentation offset from 
-            the first non-blank line.  Subsequent lines which have a 
-            lower indentation offset will be copied verbatim as 
-            they are assumed to be part of multilines. 
+    def deindent(self, offset=None):
+        """ return a new source object deindented by offset.
+            If offset is None then guess an indentation offset from
+            the first non-blank line.  Subsequent lines which have a
+            lower indentation offset will be copied verbatim as
+            they are assumed to be part of multilines.
         """
-        # XXX maybe use the tokenizer to properly handle multiline 
-        #     strings etc.pp? 
+        # XXX maybe use the tokenizer to properly handle multiline
+        #     strings etc.pp?
         newsource = Source()
-        newsource.lines[:] = deindent(self.lines, offset) 
-        return newsource 
-        
-    def __len__(self): 
-        return len(self.lines) 
-
-    def isparseable(self, deindent=True): 
-        """ return True if source is parseable, heuristically 
-            deindenting it by default. 
+        newsource.lines[:] = deindent(self.lines, offset)
+        return newsource
+
+    def __len__(self):
+        return len(self.lines)
+
+    def isparseable(self, deindent=True):
+        """ return True if source is parseable, heuristically
+            deindenting it by default.
         """
-        import parser 
-        if deindent: 
+        import parser
+        if deindent:
             source = str(self.deindent())
-        else: 
-            source = str(self) 
+        else:
+            source = str(self)
         try:
-            parser.suite(source+'\n') 
+            parser.suite(source+'\n')
         except (parser.ParserError, SyntaxError):
             return False
         else:
-            return True 
+            return True
 
     def __str__(self):
-        return "\n".join(self.lines) 
+        return "\n".join(self.lines)
 
-    def compile(self, filename=None, mode='exec', 
+    def compile(self, filename=None, mode='exec',
                 flag=generators.compiler_flag):
-        """ return compiled code object. if filename is None 
-            invent an artificial filename which displays 
-            the source/line position of the caller frame. 
+        """ return compiled code object. if filename is None
+            invent an artificial filename which displays
+            the source/line position of the caller frame.
         """
-        if filename is None: 
-            frame = sys._getframe(1) # the caller 
-            filename = '<%s:%d>' % (frame.f_code.co_filename, 
-                                    frame.f_lineno) 
+        if filename is None:
+            frame = sys._getframe(1) # the caller
+            filename = '<%s:%d>' % (frame.f_code.co_filename,
+                                    frame.f_lineno)
         source = str(self)+'\n'
         try:
             co = compile(source, filename, mode, flag)
         except SyntaxError, ex:
-            # re-represent syntax errors from parsing python strings 
+            # re-represent syntax errors from parsing python strings
             newex = SyntaxError('\n'.join([
                 "".join(self.lines[:ex.lineno]),
-                " " * ex.offset + '^', 
+                " " * ex.offset + '^',
                 "syntax error probably generated here: %s" % filename]))
             newex.offset = ex.offset
             newex.lineno = ex.lineno
             newex.text = ex.text
             raise newex
-        else: 
-            co_filename = MyStr(filename) 
+        else:
+            co_filename = MyStr(filename)
             co_filename.__source__ = self
-            return newcode_withfilename(co, co_filename) 
+            return newcode_withfilename(co, co_filename)
 
-# 
-# public API shortcut functions 
-# 
-
-def compile_(source, filename=None, mode='exec', flags= 
-            generators.compiler_flag): 
-    """ compile the given source to a raw code object, 
-        which points back to the source code through 
-        "co_filename.__source__".  All code objects 
-        contained in the code object will recursively 
-        also have this special subclass-of-string 
-        filename. 
+#
+# public API shortcut functions
+#
+
+def compile_(source, filename=None, mode='exec', flags=
+            generators.compiler_flag):
+    """ compile the given source to a raw code object,
+        which points back to the source code through
+        "co_filename.__source__".  All code objects
+        contained in the code object will recursively
+        also have this special subclass-of-string
+        filename.
     """
     s = Source(source)
-    co = s.compile(filename, mode, flags) 
-    return co 
+    co = s.compile(filename, mode, flags)
+    return co
 
-def getsource(obj, **kwargs): 
-    if hasattr(obj, 'func_code'): 
+def getsource(obj, **kwargs):
+    if hasattr(obj, 'func_code'):
         obj = obj.func_code
-    elif hasattr(obj, 'f_code'): 
-        obj = obj.f_code 
+    elif hasattr(obj, 'f_code'):
+        obj = obj.f_code
     try:
-        fullsource = obj.co_filename.__source__ 
-    except AttributeError: 
-        import inspect 
-        strsrc = inspect.getsource(obj) 
-        assert isinstance(strsrc, str) 
-        return Source(strsrc, **kwargs) 
-    else: 
-        lineno = obj.co_firstlineno - 1 
+        fullsource = obj.co_filename.__source__
+    except AttributeError:
+        import inspect
+        strsrc = inspect.getsource(obj)
+        assert isinstance(strsrc, str)
+        return Source(strsrc, **kwargs)
+    else:
+        lineno = obj.co_firstlineno - 1
         end = fullsource.getblockend(lineno)
         return fullsource[lineno:end+1]
 
-# 
-# various helper functions 
-# 
-class MyStr(str): 
-    """ custom string which allows to add attributes. """ 
- 
+#
+# various helper functions
+#
+class MyStr(str):
+    """ custom string which allows to add attributes. """
+
 def deindent(lines, offset=None):
-    # XXX maybe use the tokenizer to properly handle multiline 
-    #     strings etc.pp? 
-    if offset is None: 
-        for line in lines: 
+    # XXX maybe use the tokenizer to properly handle multiline
+    #     strings etc.pp?
+    if offset is None:
+        for line in lines:
             s = line.lstrip()
-            if s: 
-                offset = len(line)-len(s) 
-                break 
-        else: 
-            offset = 0 
+            if s:
+                offset = len(line)-len(s)
+                break
+        else:
+            offset = 0
     newlines = []
-    for line in lines: 
+    for line in lines:
         #line = line.expandtabs()
         s = line.lstrip()
-        if s and line[:offset].isspace(): 
+        if s and line[:offset].isspace():
             line = line[offset:]
-        newlines.append(line) 
-    return newlines 
+        newlines.append(line)
+    return newlines
 
-def newcode(fromcode, **kwargs): 
+def newcode(fromcode, **kwargs):
     names = [x for x in dir(fromcode) if x[:3] == 'co_']
-    for name in names: 
-        if name not in kwargs: 
-            kwargs[name] = getattr(fromcode, name) 
+    for name in names:
+        if name not in kwargs:
+            kwargs[name] = getattr(fromcode, name)
     import new
     return new.code(
-             kwargs['co_argcount'], 
-             kwargs['co_nlocals'], 
-             kwargs['co_stacksize'], 
-             kwargs['co_flags'], 
-             kwargs['co_code'], 
-             kwargs['co_consts'], 
-             kwargs['co_names'], 
-             kwargs['co_varnames'], 
-             kwargs['co_filename'], 
-             kwargs['co_name'], 
-             kwargs['co_firstlineno'], 
-             kwargs['co_lnotab'], 
-             kwargs['co_freevars'], 
-             kwargs['co_cellvars'], 
+             kwargs['co_argcount'],
+             kwargs['co_nlocals'],
+             kwargs['co_stacksize'],
+             kwargs['co_flags'],
+             kwargs['co_code'],
+             kwargs['co_consts'],
+             kwargs['co_names'],
+             kwargs['co_varnames'],
+             kwargs['co_filename'],
+             kwargs['co_name'],
+             kwargs['co_firstlineno'],
+             kwargs['co_lnotab'],
+             kwargs['co_freevars'],
+             kwargs['co_cellvars'],
     )
 
-def newcode_withfilename(co, co_filename): 
+def newcode_withfilename(co, co_filename):
     newconstlist = []
     cotype = type(co)
-    for c in co.co_consts: 
-        if isinstance(c, cotype): 
+    for c in co.co_consts:
+        if isinstance(c, cotype):
             c = newcode_withfilename(c, co_filename)
-        newconstlist.append(c) 
-    return newcode(co, co_consts = tuple(newconstlist), 
+        newconstlist.append(c)
+    return newcode(co, co_consts = tuple(newconstlist),
                        co_filename = co_filename)
-    
+

Modified: py/dist/py/code/testing/test_cpython_features.py
==============================================================================
--- py/dist/py/code/testing/test_cpython_features.py	(original)
+++ py/dist/py/code/testing/test_cpython_features.py	Sun Jan  9 16:49:34 2005
@@ -1,16 +1,16 @@
 
-import new 
+import new
 
-def test_new_code_object_carries_filename_through(): 
-    class mystr(str): 
-        pass 
+def test_new_code_object_carries_filename_through():
+    class mystr(str):
+        pass
     filename = mystr("dummy")
     co = compile("hello\n", filename, 'exec')
-    assert not isinstance(co.co_filename, mystr) 
-    c2 = new.code(co.co_argcount, co.co_nlocals, co.co_stacksize, 
-             co.co_flags, co.co_code, co.co_consts, 
-             co.co_names, co.co_varnames, 
-             filename, 
-             co.co_name, co.co_firstlineno, co.co_lnotab, 
+    assert not isinstance(co.co_filename, mystr)
+    c2 = new.code(co.co_argcount, co.co_nlocals, co.co_stacksize,
+             co.co_flags, co.co_code, co.co_consts,
+             co.co_names, co.co_varnames,
+             filename,
+             co.co_name, co.co_firstlineno, co.co_lnotab,
              co.co_freevars, co.co_cellvars)
-    assert c2.co_filename is filename 
+    assert c2.co_filename is filename

Modified: py/dist/py/code/testing/test_excinfo.py
==============================================================================
--- py/dist/py/code/testing/test_excinfo.py	(original)
+++ py/dist/py/code/testing/test_excinfo.py	Sun Jan  9 16:49:34 2005
@@ -1,39 +1,39 @@
-import py 
-mypath = py.magic.autopath() 
+import py
+mypath = py.magic.autopath()
 
-def test_excinfo_simple(): 
-    try: 
+def test_excinfo_simple():
+    try:
         raise ValueError
-    except ValueError: 
+    except ValueError:
         info = py.code.ExceptionInfo()
-    assert info.type == ValueError 
+    assert info.type == ValueError
 
-def test_excinfo_getstatement(): 
+def test_excinfo_getstatement():
     def g():
         raise ValueError
-    def f(): 
+    def f():
         g()
-    try: 
+    try:
         f()
-    except ValueError: 
-        info = py.code.ExceptionInfo() 
-    l = list(info) 
-    linenumbers = [f.func_code.co_firstlineno-1+3, 
-                   f.func_code.co_firstlineno-1+1, 
+    except ValueError:
+        info = py.code.ExceptionInfo()
+    l = list(info)
+    linenumbers = [f.func_code.co_firstlineno-1+3,
+                   f.func_code.co_firstlineno-1+1,
                    g.func_code.co_firstlineno-1+1,]
     foundlinenumbers = [x.lineno for x in info]
     print l[0].frame.statement
-    assert foundlinenumbers == linenumbers  
-    #for x in info: 
+    assert foundlinenumbers == linenumbers
+    #for x in info:
     #    print "%s:%d  %s" %(x.path.relto(root), x.lineno, x.statement)
     #xxx
 
 # testchain for getentries test below
-def f(): 
-    raise ValueError 
-def g(): 
+def f():
+    raise ValueError
+def g():
     f()
-def h(): 
+def h():
     g()
 
 def test_excinfo_getentries_nocut():
@@ -42,28 +42,28 @@
     except ValueError:
         pass
     excinfo = py.code.ExceptionInfo()
-    entries = excinfo.getentries() 
-    assert len(entries) == 4 # fragile 
+    entries = excinfo.getentries()
+    assert len(entries) == 4 # fragile
     names = ['f','g','h']
-    for entry in entries: 
-        try: 
+    for entry in entries:
+        try:
             names.remove(entry.frame.code.name)
-        except ValueError: 
-            pass 
-    assert not names 
+        except ValueError:
+            pass
+    assert not names
 
-def test_excinfo_getentries_cut(): 
-    excinfo = py.test.raises(ValueError, h) 
+def test_excinfo_getentries_cut():
+    excinfo = py.test.raises(ValueError, h)
     entries = excinfo.getentries(
-            lambda x: x.frame.code.name != 'raises', 
+            lambda x: x.frame.code.name != 'raises',
             lambda x: x.frame.code.name != 'f')
     names = [x.frame.code.name for x in entries]
     assert names == ['h','g']
 
-def test_excinfo_getentries_type_error(): 
-    excinfo = py.test.raises(ValueError, h) 
+def test_excinfo_getentries_type_error():
+    excinfo = py.test.raises(ValueError, h)
     entries = excinfo.getentries(
-            lambda x: x.frame.code.name != 'raises', 
+            lambda x: x.frame.code.name != 'raises',
             lambda x: x.frame.code.name != 'f')
     names = [x.frame.code.name for x in entries]
     assert names == ['h','g']

Modified: py/dist/py/code/testing/test_frame.py
==============================================================================
--- py/dist/py/code/testing/test_frame.py	(original)
+++ py/dist/py/code/testing/test_frame.py	Sun Jan  9 16:49:34 2005
@@ -1,10 +1,10 @@
 import sys
-from py.code import Frame 
+from py.code import Frame
 
-def test_frame_getsourcelineno_myself(): 
-    def func(): 
-        return sys._getframe(0) 
-    f = func() 
-    f = Frame(f) 
-    source, lineno = f.code.fullsource, f.lineno 
+def test_frame_getsourcelineno_myself():
+    def func():
+        return sys._getframe(0)
+    f = func()
+    f = Frame(f)
+    source, lineno = f.code.fullsource, f.lineno
     assert source[lineno].startswith("        return sys._getframe(0)")

Modified: py/dist/py/code/testing/test_source.py
==============================================================================
--- py/dist/py/code/testing/test_source.py	(original)
+++ py/dist/py/code/testing/test_source.py	Sun Jan  9 16:49:34 2005
@@ -1,31 +1,31 @@
-from py.code import Source 
-import py 
+from py.code import Source
+import py
 import sys
 
 def test_source_str_function():
     x = Source("3")
-    assert str(x) == "3" 
+    assert str(x) == "3"
 
     x = Source("   3")
-    assert str(x) == "3" 
+    assert str(x) == "3"
 
     x = Source("""
         3
-    """) 
-    assert str(x) == "\n3\n    " 
+    """)
+    assert str(x) == "\n3\n    "
 
-def test_source_from_function(): 
+def test_source_from_function():
     source = py.code.Source(test_source_str_function)
     assert str(source).startswith('def test_source_str_function():')
 
-def test_source_from_inner_function(): 
-    def f(): 
-        pass 
-    source = py.code.Source(f, deindent=False) 
-    assert str(source).startswith('    def f():') 
-    source = py.code.Source(f) 
-    assert str(source).startswith('def f():') 
-    
+def test_source_from_inner_function():
+    def f():
+        pass
+    source = py.code.Source(f, deindent=False)
+    assert str(source).startswith('    def f():')
+    source = py.code.Source(f)
+    assert str(source).startswith('def f():')
+
 def test_source_putaround_simple():
     source = Source("raise ValueError")
     source = source.putaround(
@@ -48,126 +48,126 @@
     assert ex.value.offset == 3
     assert ex.value.text.strip(), 'x x'
 
-def test_isparseable(): 
+def test_isparseable():
     assert Source("hello").isparseable()
     assert Source("if 1:\n  pass").isparseable()
     assert Source(" \nif 1:\n  pass").isparseable()
     assert not Source(" \nif 1:\npass").isparseable()
 
-class TestSliceAccess: 
+class TestSliceAccess:
     source = Source("""\
         def f(x):
             pass
         def g(x):
             pass
     """)
-    def test_getrange(self): 
+    def test_getrange(self):
         x = self.source[0:2]
-        assert x.isparseable() 
+        assert x.isparseable()
         assert len(x.lines) == 2
-        assert str(x) == "def f(x):\n    pass" 
+        assert str(x) == "def f(x):\n    pass"
 
-    def test_getline(self): 
+    def test_getline(self):
         x = self.source[0]
-        assert x == "def f(x):" 
+        assert x == "def f(x):"
 
-class TestCodeHacks: 
-    def test_newcode(self): 
-        from py.__impl__.code.source import newcode 
-        def f(): 
+class TestCodeHacks:
+    def test_newcode(self):
+        from py.__impl__.code.source import newcode
+        def f():
             pass
         co_filename = 'hello'
-        c = newcode(f.func_code, co_filename=co_filename) 
-        assert c.co_filename is co_filename 
+        c = newcode(f.func_code, co_filename=co_filename)
+        assert c.co_filename is co_filename
 
-    def test_newcode_withfilename(self): 
+    def test_newcode_withfilename(self):
         from py.__impl__.code.source import newcode_withfilename
         source = py.code.Source("""
-            def f(): 
-                def g(): 
+            def f():
+                def g():
                     pass
         """)
         co = compile(str(source)+'\n', 'nada', 'exec')
         obj = 'hello'
-        newco = newcode_withfilename(co, obj) 
-        def walkcode(co): 
-            for x in co.co_consts: 
-                if isinstance(x, type(co)): 
-                    for y in walkcode(x): 
-                        yield y 
-            yield co 
-         
-        names = [] 
-        for code in walkcode(newco): 
-            assert newco.co_filename == obj 
-            assert newco.co_filename is obj 
-            names.append(code.co_name) 
-        assert 'f' in names 
-        assert 'g' in names 
+        newco = newcode_withfilename(co, obj)
+        def walkcode(co):
+            for x in co.co_consts:
+                if isinstance(x, type(co)):
+                    for y in walkcode(x):
+                        yield y
+            yield co
+
+        names = []
+        for code in walkcode(newco):
+            assert newco.co_filename == obj
+            assert newco.co_filename is obj
+            names.append(code.co_name)
+        assert 'f' in names
+        assert 'g' in names
 
-class TestSourceParsingAndCompiling: 
+class TestSourceParsingAndCompiling:
     source = Source("""\
         def f(x):
-            assert (x == 
-                    3 + 
+            assert (x ==
+                    3 +
                     4)
     """).strip()
 
-    def test_compile(self): 
+    def test_compile(self):
         co = py.code.compile("x=3")
-        exec co 
-        assert x == 3 
+        exec co
+        assert x == 3
 
-    def test_compile_and_getsource_simple(self): 
+    def test_compile_and_getsource_simple(self):
         co = py.code.compile("x=3")
-        exec co 
-        source = py.code.Source(co) 
+        exec co
+        source = py.code.Source(co)
         assert str(source) == "x=3"
 
     def test_getstatement(self):
         #print str(self.source)
-        ass = str(self.source[1:]) 
-        for i in range(1, 4): 
+        ass = str(self.source[1:])
+        for i in range(1, 4):
             #print "trying start in line %r" % self.source[i]
-            s = self.source.getstatement(i) 
+            s = self.source.getstatement(i)
             #x = s.deindent()
-            assert str(s) == ass 
+            assert str(s) == ass
 
-    def XXXtest_getstatement_within_constructs(self): 
+    def XXXtest_getstatement_within_constructs(self):
         source = Source("""\
-            try: 
-                raise ValueError 
-            finally: 
+            try:
+                raise ValueError
+            finally:
                 42
-        """) 
+        """)
         stmt = source.getstatement(1)
         assert str(stmt).strip() == 'raise ValueError'
         xxx
-        co = source.compile() 
-        try: 
-            exec co 
-        except ValueError: 
-            excinfo = py.code.ExceptionInfo(py.std.sys.exc_info()) 
-        l = list(excinfo) 
+        co = source.compile()
+        try:
+            exec co
+        except ValueError:
+            excinfo = py.code.ExceptionInfo(py.std.sys.exc_info())
+        l = list(excinfo)
         tb = l[0]
         inner = l[1]
-        print "inner frame-statement:", inner.frame.statement 
+        print "inner frame-statement:", inner.frame.statement
         print "inner frame-lineno:", inner.frame.lineno
-        print "inner tb-statement:", inner.statement 
+        print "inner tb-statement:", inner.statement
         print "inner tb-lineno:", inner.lineno
         print "...", repr(inner.frame.code.fullsource[inner.lineno])
 
-        print "tb-statement:", tb.statement 
-        print "tb-lineno:", tb.lineno 
+        print "tb-statement:", tb.statement
+        print "tb-lineno:", tb.lineno
         XXX
 
-    def test_compile_and_getsource(self): 
-        co = self.source.compile() 
-        exec co 
+    def test_compile_and_getsource(self):
+        co = self.source.compile()
+        exec co
         f(7)
         excinfo = py.test.raises(AssertionError, "f(6)")
         frame = list(excinfo)[-1].frame
-        stmt = frame.code.fullsource.getstatement(frame.lineno) 
+        stmt = frame.code.fullsource.getstatement(frame.lineno)
         #print "block", str(block)
         assert str(stmt).strip().startswith('assert')
 
@@ -175,9 +175,9 @@
     class A:
         def __init__(self, *args):
             frame = sys._getframe(1)
-            self.source = py.code.Frame(frame).statement 
-           
-    x = A('x', 'y') 
+            self.source = py.code.Frame(frame).statement
+
+    x = A('x', 'y')
 
     l = [i for i in x.source.lines if i.strip()]
     assert len(l) == 1
@@ -186,12 +186,12 @@
     class A:
         def __init__(self, *args):
             frame = sys._getframe(1)
-            self.source = py.code.Frame(frame).statement 
-           
-    x = A('x', 
+            self.source = py.code.Frame(frame).statement
+
+    x = A('x',
           'y' \
-          , 
-          'z') 
+          ,
+          'z')
 
     l = [i for i in x.source.lines if i.strip()]
     assert len(l) == 4
@@ -202,13 +202,13 @@
     excinfo = py.test.raises(TypeError, """
            teardown = None
            try:
-                c(1) 
+                c(1)
            finally:
-                if teardown: 
-                    teardown() 
+                if teardown:
+                    teardown()
     """)
-    source = list(excinfo)[-1].statement 
-    assert str(source).strip() == 'c(1)' 
+    source = list(excinfo)[-1].statement
+    assert str(source).strip() == 'c(1)'
 
 def test_getfuncsource_dynamic():
     source = """
@@ -217,8 +217,8 @@
 
         def g(): pass
     """
-    co = py.code.compile(source) 
-    exec co 
+    co = py.code.compile(source)
+    exec co
     assert str(py.code.Source(f)).strip() == 'def f():\n    raise ValueError'
     assert str(py.code.Source(g)).strip() == 'def g(): pass'
 

Modified: py/dist/py/conftest.py
==============================================================================
--- py/dist/py/conftest.py	(original)
+++ py/dist/py/conftest.py	Sun Jan  9 16:49:34 2005
@@ -1,20 +1,20 @@
-#pythonexecutables = ('python2.2', 'python2.3',) 
-#pythonexecutable = 'python2.2' 
+#pythonexecutables = ('python2.2', 'python2.3',)
+#pythonexecutable = 'python2.2'
 
-# in the future we want to be able to say here: 
+# in the future we want to be able to say here:
 #def setup_module(extpy):
-#    mod = extpy.resolve() 
+#    mod = extpy.resolve()
 #    mod.module = 23
 #    directory = pypath.root.dirpath()
 
 import py
 rootdir = py.magic.autopath().dirpath().dirpath()
-    
-# default values for options (modified from cmdline) 
-verbose = 0 
-nocapture = False 
-collectonly = False 
-exitfirstproblem = False 
-fulltrace = False 
+
+# default values for options (modified from cmdline)
+verbose = 0
+nocapture = False
+collectonly = False
+exitfirstproblem = False
+fulltrace = False
 showlocals = False
-nomagic = False 
+nomagic = False

Modified: py/dist/py/documentation/example/pytest/failure_demo.py
==============================================================================
--- py/dist/py/documentation/example/pytest/failure_demo.py	(original)
+++ py/dist/py/documentation/example/pytest/failure_demo.py	Sun Jan  9 16:49:34 2005
@@ -3,7 +3,7 @@
 
 def otherfunc(a,b):
     assert a==b
-    
+
 def somefunc(x,y):
     otherfunc(x,y)
 
@@ -39,12 +39,12 @@
     def test_startswith(self):
         s = "123"
         g = "456"
-        assert s.startswith(g) 
+        assert s.startswith(g)
 
     def test_startswith_nested(self):
-        def f():   
+        def f():
             return "123"
-        def g():   
+        def g():
             return "456"
         assert f().startswith(g())
 
@@ -74,7 +74,7 @@
 
     def test_raise(self):
         raise ValueError("demo error")
-        
+
     def test_tupleerror(self):
         a,b = [1]
 
@@ -87,16 +87,16 @@
         if namenotexi:
             pass
 
-    def test_generator(self): 
-        yield None 
+    def test_generator(self):
+        yield None
 
-    def func1(self): 
+    def func1(self):
         assert 41 == 42
 
-    def test_generator2(self): 
+    def test_generator2(self):
         yield self.func1
 
-# thanks to Matthew Scott for this test 
+# thanks to Matthew Scott for this test
 def test_dynamic_compile_shows_nicely():
     src = 'def foo():\n assert 1 == 0\n'
     name = 'abc-123'
@@ -105,7 +105,7 @@
     exec code in module.__dict__
     py.std.sys.modules[name] = module
     module.foo()
-        
+
 
 def globf(x):
     return x+1

Modified: py/dist/py/documentation/example/pytest/test_setup_flow_example.py
==============================================================================
--- py/dist/py/documentation/example/pytest/test_setup_flow_example.py	(original)
+++ py/dist/py/documentation/example/pytest/test_setup_flow_example.py	Sun Jan  9 16:49:34 2005
@@ -25,18 +25,18 @@
 """ For this example the control flow happens as follows::
     import test_setup_flow_example
     setup_module(test_setup_flow_example)
-       setup_class(TestStateFullThing) 
+       setup_class(TestStateFullThing)
            instance = TestStateFullThing()
-           setup_method(instance, instance.test_42) 
+           setup_method(instance, instance.test_42)
               instance.test_42()
-           setup_method(instance, instance.test_23) 
+           setup_method(instance, instance.test_23)
               instance.test_23()
-       teardown_class(TestStateFullThing) 
+       teardown_class(TestStateFullThing)
     teardown_module(test_setup_flow_example)
 
-Note that ``setup_class(TestStateFullThing)`` is called and not 
+Note that ``setup_class(TestStateFullThing)`` is called and not
 ``TestStateFullThing.setup_class()`` which would require you
 to insert ``setup_class = classmethod(setup_class)`` to make
-your setup function callable. 
+your setup function callable.
 """
 

Modified: py/dist/py/documentation/rest_test.py
==============================================================================
--- py/dist/py/documentation/rest_test.py	(original)
+++ py/dist/py/documentation/rest_test.py	Sun Jan  9 16:49:34 2005
@@ -1,19 +1,19 @@
-from __future__ import generators 
+from __future__ import generators
 
-import py 
+import py
 
-pydir = py.magic.autopath(vars(py)).dirpath() 
-rest = pydir.join('bin', 'py.rest').getpymodule() 
+pydir = py.magic.autopath(vars(py)).dirpath()
+rest = pydir.join('bin', 'py.rest').getpymodule()
 docdir = py.path.svnwc(pydir.join('documentation'))
 
-def restcheck(path): 
-    try: 
-        import docutils 
-    except ImportError: 
-        py.test.skip("docutils not importable") 
-    rest.process(path) 
-    #assert not out 
+def restcheck(path):
+    try:
+        import docutils
+    except ImportError:
+        py.test.skip("docutils not importable")
+    rest.process(path)
+    #assert not out
 
-def test_rest_files(): 
-    for x in docdir.listdir('*.txt'): 
-        yield restcheck, x 
+def test_rest_files():
+    for x in docdir.listdir('*.txt'):
+        yield restcheck, x

Modified: py/dist/py/env.py
==============================================================================
--- py/dist/py/env.py	(original)
+++ py/dist/py/env.py	Sun Jan  9 16:49:34 2005
@@ -1,8 +1,8 @@
-#!/usr/bin/python 
+#!/usr/bin/python
 
 import sys, os
 
-progpath = sys.argv[0] 
+progpath = sys.argv[0]
 packagedir = os.path.abspath(os.path.dirname(progpath))
 packagename = os.path.basename(packagedir)
 bindir = os.path.join(packagedir, 'bin')
@@ -20,4 +20,4 @@
 if sys.platform != 'win32':
     print prepend_unixpath('PATH', bindir)
     print prepend_unixpath('PATH', tooldir)
-    print prepend_unixpath('PYTHONPATH', rootdir) 
+    print prepend_unixpath('PYTHONPATH', rootdir)

Modified: py/dist/py/execnet/bin/quitserver.py
==============================================================================
--- py/dist/py/execnet/bin/quitserver.py	(original)
+++ py/dist/py/execnet/bin/quitserver.py	Sun Jan  9 16:49:34 2005
@@ -1,6 +1,6 @@
 """
 
-  send a "quit" signal to a remote server 
+  send a "quit" signal to a remote server
 
 """
 

Modified: py/dist/py/execnet/bin/shell.py
==============================================================================
--- py/dist/py/execnet/bin/shell.py	(original)
+++ py/dist/py/execnet/bin/shell.py	Sun Jan  9 16:49:34 2005
@@ -1,14 +1,14 @@
 """
-a remote python shell 
+a remote python shell
 
-for injection into startserver.py 
+for injection into startserver.py
 """
 import sys, os, socket, select
 
 try:
-    clientsock 
+    clientsock
 except NameError:
-    print "client side starting" 
+    print "client side starting"
     import sys
     host, port  = sys.argv[1].split(':')
     port = int(port)
@@ -59,8 +59,8 @@
                 line = filein.readline()
                 if len(line)==0: raise EOFError,"nothing"
                 #print >>sys.stderr,"got line: " + line
-                if line.strip(): 
-                    oldout, olderr = sys.stdout, sys.stderr 
+                if line.strip():
+                    oldout, olderr = sys.stdout, sys.stderr
                     sys.stdout, sys.stderr = clientfile, clientfile
                     try:
                         try:

Modified: py/dist/py/execnet/bin/startserver.py
==============================================================================
--- py/dist/py/execnet/bin/startserver.py	(original)
+++ py/dist/py/execnet/bin/startserver.py	Sun Jan  9 16:49:34 2005
@@ -1,23 +1,23 @@
 #! /usr/bin/env python
 
 """
-    start socket based minimal readline exec server 
+    start socket based minimal readline exec server
 """
 # this part of the program only executes on the server side
 #
 
 progname = 'socket_readline_exec_server-1.2'
-debug = 0 
+debug = 0
 
 import sys, socket, os
 
-if debug: #  and not os.isatty(sys.stdin.fileno()): 
-    f = open('/tmp/execnet-socket-pyout.log', 'a', 0) 
-    old = sys.stdout, sys.stderr 
-    sys.stdout = sys.stderr = f 
+if debug: #  and not os.isatty(sys.stdin.fileno()):
+    f = open('/tmp/execnet-socket-pyout.log', 'a', 0)
+    old = sys.stdout, sys.stderr
+    sys.stdout = sys.stderr = f
 
-def execloop(serversock): 
-    while 1: 
+def execloop(serversock):
+    while 1:
         try:
             print progname, 'Entering Accept loop', serversock.getsockname()
             clientsock,address = serversock.accept()
@@ -27,17 +27,17 @@
             source = clientfile.readline()
             clientfile.close()
             g = {'clientsock' : clientsock, 'address' : address}
-            source = eval(source) 
+            source = eval(source)
             if not source:
-                break 
+                break
             co = compile(source+'\n', source, 'exec')
-            print progname, 'compiled source, executing' 
+            print progname, 'compiled source, executing'
             try:
                 exec co in g
-            finally: 
-                print progname, 'finished executing code' 
+            finally:
+                print progname, 'finished executing code'
         except (SystemExit, KeyboardInterrupt):
-            break 
+            break
         #except:
         #    import traceback
         #    traceback.print_exc()
@@ -56,7 +56,7 @@
         execloop(serversock)
     finally:
         print "leaving socketserver execloop"
-        serversock.shutdown(2) 
+        serversock.shutdown(2)
 
 if __name__ == '__main__':
     import sys
@@ -64,6 +64,6 @@
         hostport = sys.argv[1]
     else:
         hostport = ':8888'
-    serversock = bind_and_listen(hostport) 
+    serversock = bind_and_listen(hostport)
     startserver(serversock)
 

Modified: py/dist/py/execnet/channel.py
==============================================================================
--- py/dist/py/execnet/channel.py	(original)
+++ py/dist/py/execnet/channel.py	Sun Jan  9 16:49:34 2005
@@ -1,4 +1,4 @@
-import threading 
+import threading
 import Queue
 if 'Message' not in globals():
     from py.__impl__.execnet.message import Message
@@ -8,7 +8,7 @@
     def __init__(self, gateway, id):
         assert isinstance(id, int)
         self.gateway = gateway
-        self.id = id 
+        self.id = id
         self._items = Queue.Queue()
         self._closeevent = threading.Event()
         #self._depchannel = []
@@ -18,99 +18,99 @@
         return "<Channel id=%d %s>" % (self.id, flag)
 
     def isclosed(self):
-        return self._closeevent.isSet() 
+        return self._closeevent.isSet()
 
     def open(self, mode='w'):
         assert mode == 'w'
-        return ChannelFile(self) 
+        return ChannelFile(self)
 
     def close(self, error=None):
-        """ close down this channel on both sides. """ 
-        if self.id in self.gateway.channelfactory: 
-            put = self.gateway._outgoing.put 
-            if error is not None: 
-                put(Message.CHANNEL_CLOSE_ERROR(self.id, str(error))) 
+        """ close down this channel on both sides. """
+        if self.id in self.gateway.channelfactory:
+            put = self.gateway._outgoing.put
+            if error is not None:
+                put(Message.CHANNEL_CLOSE_ERROR(self.id, str(error)))
             else:
                 put(Message.CHANNEL_CLOSE(self.id))
             self._close()
 
-    def _close(self, finalitem=EOFError()): 
+    def _close(self, finalitem=EOFError()):
         if self.id in self.gateway.channelfactory:
             del self.gateway.channelfactory[self.id]
-        self._finalitem = finalitem 
-        #for x in self._depchannel: 
-        #    x._close() 
-        self._items.put(finalitem) 
+        self._finalitem = finalitem
+        #for x in self._depchannel:
+        #    x._close()
+        self._items.put(finalitem)
         self._closeevent.set()
 
     def newchannel(self):
-        """ return a new channel. """ 
+        """ return a new channel. """
         chan = self.gateway.channelfactory.new()
         return chan
 
     def _receivechannel(self, newid):
-        """ receive a remotely created new (sub)channel. """ 
-        newchannel = Channel(self.gateway, newid) 
-        self.gateway.channelfactory[newid] = newchannel 
-        #self._depchannel.append(newchannel) 
-        self._items.put(newchannel) 
+        """ receive a remotely created new (sub)channel. """
+        newchannel = Channel(self.gateway, newid)
+        self.gateway.channelfactory[newid] = newchannel
+        #self._depchannel.append(newchannel)
+        self._items.put(newchannel)
 
-    def waitclose(self, timeout): 
+    def waitclose(self, timeout):
         """ wait until this channel is closed.  Note that a closed
-        channel may still hold items that can be received or 
-        send. Also note that exceptions from the other side will be 
-        reraised as gateway.RemoteError exceptions containing 
-        a textual representation of the remote traceback. 
+        channel may still hold items that can be received or
+        send. Also note that exceptions from the other side will be
+        reraised as gateway.RemoteError exceptions containing
+        a textual representation of the remote traceback.
         """
-        self._closeevent.wait(timeout=timeout) 
+        self._closeevent.wait(timeout=timeout)
         if not self._closeevent.isSet():
             raise IOError, "Timeout"
         if isinstance(self._finalitem, self.gateway.RemoteError):
-            raise self._finalitem 
-        
-    def send(self, item): 
-        """sends the given item to the other side of the channel, 
-        possibly blocking if the sender queue is full. 
-        Note that an item needs to be marshallable. 
+            raise self._finalitem
+
+    def send(self, item):
+        """sends the given item to the other side of the channel,
+        possibly blocking if the sender queue is full.
+        Note that an item needs to be marshallable.
         """
         if isinstance(item, Channel):
-            data = Message.CHANNEL_NEW(self.id, item.id) 
-        else: 
-            data = Message.CHANNEL_DATA(self.id, item) 
+            data = Message.CHANNEL_NEW(self.id, item.id)
+        else:
+            data = Message.CHANNEL_DATA(self.id, item)
         self.gateway._outgoing.put(data)
 
     def receive(self):
-        """receives an item that was sent from the other side, 
-        possibly blocking if there is none. 
-        Note that exceptions from the other side will be 
-        reraised as gateway.RemoteError exceptions containing 
-        a textual representation of the remote traceback. 
+        """receives an item that was sent from the other side,
+        possibly blocking if there is none.
+        Note that exceptions from the other side will be
+        reraised as gateway.RemoteError exceptions containing
+        a textual representation of the remote traceback.
         """
-        x = self._items.get() 
-        if isinstance(x, EOFError): 
-            raise x 
+        x = self._items.get()
+        if isinstance(x, EOFError):
+            raise x
         return x
 
-# 
-# helpers 
+#
+# helpers
 #
 
 class ChannelFactory(object):
-    def __init__(self, gateway, startcount=1): 
+    def __init__(self, gateway, startcount=1):
         self._dict = dict()
         self._lock = threading.RLock()
         self.gateway = gateway
         self.count = startcount
 
-    def new(self, id=None): 
+    def new(self, id=None):
         """ create a new Channel with 'id' (or create new id if None). """
         self._lock.acquire()
         try:
             if id is None:
-                id = self.count 
-                self.count += 2 
-            channel = Channel(self.gateway, id) 
-            self._dict[id] = channel 
+                id = self.count
+                self.count += 2
+            channel = Channel(self.gateway, id)
+            self._dict[id] = channel
             return channel
         finally:
             self._lock.release()
@@ -122,13 +122,13 @@
         finally:
             self._lock.release()
 
-    def values(self): 
+    def values(self):
         self._lock.acquire()
         try:
-            return self._dict.values() 
+            return self._dict.values()
         finally:
             self._lock.release()
-   
+
     def __getitem__(self, key):
         self._lock.acquire()
         try:
@@ -152,11 +152,11 @@
 class ChannelFile:
     def __init__(self, channel):
         self.channel = channel
-        
+
     def write(self, out):
         if self.channel.isclosed():
             return
-        self.channel.send(out) 
+        self.channel.send(out)
 
     def flush(self):
         pass
@@ -165,15 +165,15 @@
         self.channel.close()
 
     def __repr__(self):
-        state = self.channel.isclosed() and 'closed' or 'open' 
-        return '<ChannelFile %d %s>' %(self.channel.id, state) 
+        state = self.channel.isclosed() and 'closed' or 'open'
+        return '<ChannelFile %d %s>' %(self.channel.id, state)
 
 def receive2file(channel, f):
-    while 1: 
+    while 1:
         try:
-            out = channel.receive() 
-        except EOFError: 
-            break 
-        f.write(out) 
+            out = channel.receive()
+        except EOFError:
+            break
+        f.write(out)
         f.flush()
 

Modified: py/dist/py/execnet/gateway.py
==============================================================================
--- py/dist/py/execnet/gateway.py	(original)
+++ py/dist/py/execnet/gateway.py	Sun Jan  9 16:49:34 2005
@@ -1,64 +1,64 @@
 import sys
 import os
 import threading
-import Queue 
+import Queue
 import traceback
 import atexit
 
 # XXX the following line should not be here
 g = globals()
 if 'Message' not in g:
-    from py.code import Source 
+    from py.code import Source
     from py.__impl__.execnet.channel import ChannelFactory, Channel
-    from py.__impl__.execnet.message import Message 
+    from py.__impl__.execnet.message import Message
 
 assert Message and ChannelFactory, "Import/Configuration Error"
 
 import os
-debug = 0 # open('/tmp/execnet-debug-%d' % os.getpid()  , 'wa') 
+debug = 0 # open('/tmp/execnet-debug-%d' % os.getpid()  , 'wa')
 
-sysex = (KeyboardInterrupt, SystemExit) 
+sysex = (KeyboardInterrupt, SystemExit)
 
 class RemoteError(EOFError):
     """ Contains an Exceptions from the other side. """
-    def __init__(self, formatted): 
-        self.formatted = formatted 
-        EOFError.__init__(self) 
+    def __init__(self, formatted):
+        self.formatted = formatted
+        EOFError.__init__(self)
 
     def __str__(self):
-        return self.formatted 
+        return self.formatted
 
     def __repr__(self):
-        return "%s: %s" %(self.__class__.__name__, self.formatted) 
+        return "%s: %s" %(self.__class__.__name__, self.formatted)
 
 class Gateway(object):
     num_worker_threads = 2
     RemoteError = RemoteError
 
-    def __init__(self, io, startcount=2): 
+    def __init__(self, io, startcount=2):
         self.io = io
         self._execqueue = Queue.Queue()
         self._outgoing = Queue.Queue()
-        self.channelfactory = ChannelFactory(self, startcount) 
+        self.channelfactory = ChannelFactory(self, startcount)
         self._exitlock = threading.Lock()
         self.iothreads = [
             threading.Thread(target=self.thread_receiver, name='receiver'),
             threading.Thread(target=self.thread_sender, name='sender'),
         ]
-        self.workerthreads = w = [] 
+        self.workerthreads = w = []
         for x in range(self.num_worker_threads):
-            w.append(threading.Thread(target=self.thread_executor, 
+            w.append(threading.Thread(target=self.thread_executor,
                                       name='executor %d' % x))
-        for x in self.iothreads + w: 
+        for x in self.iothreads + w:
             x.start()
         if not _gateways:
-            atexit.register(cleanup_atexit) 
-        _gateways.append(self) 
+            atexit.register(cleanup_atexit)
+        _gateways.append(self)
 
     def _stopexec(self):
-        if self.workerthreads: 
-            for x in self.workerthreads: 
-                self._execqueue.put(None) 
+        if self.workerthreads:
+            for x in self.workerthreads:
+                self._execqueue.put(None)
             for x in self.workerthreads:
                 if x.isAlive():
                     self.trace("joining %r" % x)
@@ -66,21 +66,21 @@
             self.workerthreads[:] = []
             self.trace("workerthreads are empty now")
 
-    def exit(self): 
+    def exit(self):
         self._exitlock.acquire()
         try:
             #for channel in self.channelfactory.values():
             #    channel.close()
             if self.workerthreads:
                 self._stopexec()
-                self._outgoing.put(Message.EXIT_GATEWAY()) 
+                self._outgoing.put(Message.EXIT_GATEWAY())
                 return True
         finally:
             self._exitlock.release()
 
     def join(self):
         current = threading.currentThread()
-        for x in self.iothreads: 
+        for x in self.iothreads:
             if x != current and x.isAlive():
                 self.trace("joining %s" % x)
                 x.join()
@@ -91,75 +91,75 @@
                 l = "\n".join(args).split(os.linesep)
                 id = getid(self)
                 for x in l:
-                    print >>debug, x 
+                    print >>debug, x
                 debug.flush()
-            except sysex: 
+            except sysex:
                 raise
             except:
                 traceback.print_exc()
     def traceex(self, excinfo):
-        l = traceback.format_exception(*excinfo) 
+        l = traceback.format_exception(*excinfo)
         errortext = "".join(l)
         self.trace(errortext)
 
     def thread_receiver(self):
-        """ thread to read and handle Messages half-sync-half-async. """ 
+        """ thread to read and handle Messages half-sync-half-async. """
         try:
-            while 1: 
+            while 1:
                 try:
-                    msg = Message.readfrom(self.io) 
-                    self.trace("received <- %r" % msg) 
-                    msg.received(self) 
-                except sysex: 
-                    raise 
+                    msg = Message.readfrom(self.io)
+                    self.trace("received <- %r" % msg)
+                    msg.received(self)
+                except sysex:
+                    raise
                 except:
-                    self.traceex(sys.exc_info()) 
+                    self.traceex(sys.exc_info())
                     break
         finally:
             self.trace('leaving %r' % threading.currentThread())
 
     def thread_sender(self):
-        """ thread to send Messages over the wire. """ 
+        """ thread to send Messages over the wire. """
         try:
-            while 1: 
+            while 1:
                 msg = self._outgoing.get()
                 try:
-                    msg.writeto(self.io) 
-                except: 
+                    msg.writeto(self.io)
+                except:
                     excinfo = sys.exc_info()
-                    self.traceex(excinfo) 
-                    msg.post_sent(self, excinfo) 
+                    self.traceex(excinfo)
+                    msg.post_sent(self, excinfo)
                     raise
                 else:
-                    self.trace('sent -> %r' % msg) 
+                    self.trace('sent -> %r' % msg)
                     msg.post_sent(self)
-        finally: 
+        finally:
             self.trace('leaving %r' % threading.currentThread())
 
     def thread_executor(self):
-        """ worker thread to execute source objects from the execution queue. """ 
+        """ worker thread to execute source objects from the execution queue. """
         try:
-            while 1: 
+            while 1:
                 task = self._execqueue.get()
-                if task is None: 
+                if task is None:
                     break
-                channel, source = task 
+                channel, source = task
                 try:
-                    loc = { 'channel' : channel } 
-                    self.trace("execution starts:", repr(source)[:50]) 
-                    try: 
+                    loc = { 'channel' : channel }
+                    self.trace("execution starts:", repr(source)[:50])
+                    try:
                         co = compile(source+'\n', '', 'exec')
-                        exec co in loc 
-                    finally: 
-                        self.trace("execution finished:", repr(source)[:50]) 
+                        exec co in loc
+                    finally:
+                        self.trace("execution finished:", repr(source)[:50])
                 except (KeyboardInterrupt, SystemExit):
                     raise
                 except:
                     excinfo = sys.exc_info()
-                    l = traceback.format_exception(*excinfo) 
+                    l = traceback.format_exception(*excinfo)
                     errortext = "".join(l)
-                    channel.close(errortext) 
-                    self.trace(errortext) 
+                    channel.close(errortext)
+                    self.trace(errortext)
                 else:
                     channel.close()
         finally:
@@ -167,21 +167,21 @@
 
     # _____________________________________________________________________
     #
-    # High Level Interface 
+    # High Level Interface
     # _____________________________________________________________________
-    
+
     def remote_exec(self, source):
-        """ return channel object for communicating with the asynchronously 
-            executing 'source' code which will have a corresponding 'channel' 
-            object in its executing namespace. 
-        """ 
+        """ return channel object for communicating with the asynchronously
+            executing 'source' code which will have a corresponding 'channel'
+            object in its executing namespace.
+        """
         source = str(Source(source))
         channel = self.channelfactory.new()
         self._outgoing.put(Message.CHANNEL_OPEN(channel.id, source))
         return channel
 
 def getid(gw, cache={}):
-    name = gw.__class__.__name__ 
+    name = gw.__class__.__name__
     try:
         return cache.setdefault(name, {})[id(gw)]
     except KeyError:
@@ -190,8 +190,8 @@
 
 _gateways = []
 def cleanup_atexit():
-    if debug: 
+    if debug:
         print >>debug, "="*20 + "cleaning up" + "=" * 20
         debug.flush()
-    for x in _gateways: 
+    for x in _gateways:
         x.exit()

Modified: py/dist/py/execnet/inputoutput.py
==============================================================================
--- py/dist/py/execnet/inputoutput.py	(original)
+++ py/dist/py/execnet/inputoutput.py	Sun Jan  9 16:49:34 2005
@@ -1,13 +1,13 @@
 """
   InputOutput Classes used for connecting gateways
-  across process or computer barriers. 
+  across process or computer barriers.
 """
 
 import socket, os, sys
 
 class SocketIO:
     server_stmt = """
-io = SocketIO(clientsock) 
+io = SocketIO(clientsock)
 import sys
 try:
     sys.stdout = sys.stderr = open('/tmp/execnet-socket-debug.log', 'a', 0)
@@ -17,8 +17,8 @@
 """
 
     error = (socket.error, EOFError)
-    def __init__(self, sock): 
-        self.sock = sock 
+    def __init__(self, sock):
+        self.sock = sock
         try:
             sock.setsockopt(socket.SOL_TCP, socket.TCP_NODELAY, 1)
             sock.setsockopt(socket.SOL_IP, socket.IP_TOS, 0x10)  # IPTOS_LOWDELAY
@@ -38,11 +38,11 @@
         return buf
 
     def write(self, data):
-        """write out all bytes to the socket. """ 
+        """write out all bytes to the socket. """
         self.sock.sendall(data)
 
     def close_read(self):
-        if self.readable: 
+        if self.readable:
             self.sock.shutdown(0)
             self.readable = None
     def close_write(self):
@@ -62,12 +62,12 @@
 """
     error = (IOError, OSError, EOFError)
 
-    def __init__(self, infile, outfile): 
-        if sys.platform == 'win32': 
-            import msvcrt 
-            msvcrt.setmode(infile.fileno(), os.O_BINARY) 
-            msvcrt.setmode(outfile.fileno(), os.O_BINARY) 
-        self.outfile, self.infile = infile, outfile 
+    def __init__(self, infile, outfile):
+        if sys.platform == 'win32':
+            import msvcrt
+            msvcrt.setmode(infile.fileno(), os.O_BINARY)
+            msvcrt.setmode(outfile.fileno(), os.O_BINARY)
+        self.outfile, self.infile = infile, outfile
         self.readable = self.writeable = True
 
     def read(self, numbytes):
@@ -81,7 +81,7 @@
         return s
 
     def write(self, data):
-        """write out all bytes to the pipe. """ 
+        """write out all bytes to the pipe. """
         #import sys
         #print >> sys.stderr, "writing: %r" % data
         self.outfile.write(data)
@@ -89,9 +89,9 @@
 
     def close_read(self):
         if self.readable:
-            os.close(self.infile.fileno()) 
+            os.close(self.infile.fileno())
             self.readable = None
     def close_write(self):
         if self.writeable:
-            os.close(self.outfile.fileno()) 
+            os.close(self.outfile.fileno())
             self.writeable = None

Modified: py/dist/py/execnet/message.py
==============================================================================
--- py/dist/py/execnet/message.py	(original)
+++ py/dist/py/execnet/message.py	Sun Jan  9 16:49:34 2005
@@ -1,43 +1,43 @@
 import struct
-#import marshal 
+#import marshal
 
 # ___________________________________________________________________________
 #
-# Messages 
+# Messages
 # ___________________________________________________________________________
-# the size of a number on the wire 
+# the size of a number on the wire
 numsize = struct.calcsize("!i")
 
 class Message:
     """ encapsulates Messages and their wire protocol. """
     _types = {}
-    def __init__(self, channelid=0, data=''): 
-        self.channelid = channelid 
-        self.data = data 
+    def __init__(self, channelid=0, data=''):
+        self.channelid = channelid
+        self.data = data
 
     def writeto(self, io):
         # big XXX and all this
         #     data = marshal.dumps(self.data)
         # doesn't work for exchanging data across Python version :-(((
         data = repr(self.data)  # argh
-        
+
         header = struct.pack("!iii", self.msgtype, self.channelid, len(data))
         io.write(header)
-        io.write(data) 
+        io.write(data)
 
-    def readfrom(cls, io): 
-        header = io.read(numsize*3)  
+    def readfrom(cls, io):
+        header = io.read(numsize*3)
         msgtype, senderid, stringlen = struct.unpack("!iii", header)
-        if stringlen: 
+        if stringlen:
             string = io.read(stringlen)
             # same big XXX as in writeto()
             #     string = marshal.loads(string)
             string = eval(string, {})
         else:
-            string = '' 
+            string = ''
         msg = cls._types[msgtype](senderid, string)
-        return msg 
-    readfrom = classmethod(readfrom) 
+        return msg
+    readfrom = classmethod(readfrom)
 
     def post_sent(self, gateway, excinfo=None):
         pass
@@ -45,29 +45,29 @@
     def __repr__(self):
         r = repr(self.data)
         if len(r) > 50:
-            return "<Message.%s channelid=%d len=%d>" %(self.__class__.__name__, 
+            return "<Message.%s channelid=%d len=%d>" %(self.__class__.__name__,
                         self.channelid, len(r))
-        else: 
-            return "<Message.%s channelid=%d %r>" %(self.__class__.__name__, 
+        else:
+            return "<Message.%s channelid=%d %r>" %(self.__class__.__name__,
                         self.channelid, self.data)
 
 
 def _setupmessages():
     #
     # EXIT_GATEWAY and STOP_RECEIVING are messages to cleanly
-    # bring down the IO and gateway connection 
+    # bring down the IO and gateway connection
     #
     # First an EXIT_GATEWAY message is send which results
-    # on the other side's receive_handle to send send 
-    # a STOP_RECEIVING message 
+    # on the other side's receive_handle to send send
+    # a STOP_RECEIVING message
     #
     class EXIT_GATEWAY(Message):
         def received(self, gateway):
             gateway._stopexec()
-            gateway._outgoing.put(self.STOP_RECEIVING()) 
-            for x in gateway.channelfactory.values(): 
+            gateway._outgoing.put(self.STOP_RECEIVING())
+            for x in gateway.channelfactory.values():
                 x._close()
-            raise SystemExit 
+            raise SystemExit
         def post_sent(self, gateway, excinfo=None):
             gateway.io.close_write()
             raise SystemExit
@@ -77,33 +77,33 @@
             # as the sender side will have closed the io
             # already. With sockets closing it would raise
             # a Transport Not Connected exception
-            for x in gateway.channelfactory.values(): 
+            for x in gateway.channelfactory.values():
                 x._close()
-            raise SystemExit 
+            raise SystemExit
         def post_sent(self, gateway, excinfo=None):
             gateway.io.close_write()
             raise SystemExit
-            
+
     class CHANNEL_OPEN(Message):
         def received(self, gateway):
-            channel = gateway.channelfactory.new(self.channelid) 
-            gateway._execqueue.put((channel, self.data)) 
+            channel = gateway.channelfactory.new(self.channelid)
+            gateway._execqueue.put((channel, self.data))
 
     class CHANNEL_NEW(Message):
         def received(self, gateway):
-            newid = self.data 
-            channel = gateway.channelfactory[self.channelid] 
+            newid = self.data
+            channel = gateway.channelfactory[self.channelid]
             channel._receivechannel(newid)
 
     class CHANNEL_DATA(Message):
         def received(self, gateway):
             channel = gateway.channelfactory[self.channelid]
-            channel._items.put(self.data) 
+            channel._items.put(self.data)
 
     class CHANNEL_CLOSE(Message):
         def received(self, gateway):
             channel = gateway.channelfactory[self.channelid]
-            channel._close() 
+            channel._close()
     class CHANNEL_CLOSE_ERROR(Message):
         def received(self, gateway):
             channel = gateway.channelfactory[self.channelid]
@@ -111,10 +111,10 @@
     classes = [x for x in locals().values() if hasattr(x, '__bases__')]
     classes.sort(lambda x,y : cmp(x.__name__, y.__name__))
     i = 0
-    for cls in classes: 
-        Message._types[i] = cls  
+    for cls in classes:
+        Message._types[i] = cls
         cls.msgtype = i
-        setattr(Message, cls.__name__, cls) 
+        setattr(Message, cls.__name__, cls)
         i+=1
 
 _setupmessages()

Modified: py/dist/py/execnet/register.py
==============================================================================
--- py/dist/py/execnet/register.py	(original)
+++ py/dist/py/execnet/register.py	Sun Jan  9 16:49:34 2005
@@ -8,26 +8,26 @@
 
 class InstallableGateway(gateway.Gateway):
     """ initialize gateways on both sides of a inputoutput object. """
-    def __init__(self, io): 
-        self.remote_bootstrap_gateway(io) 
+    def __init__(self, io):
+        self.remote_bootstrap_gateway(io)
         gateway.Gateway.__init__(self, io=io, startcount=1)
 
-    def remote_bootstrap_gateway(self, io, extra=''): 
-        """ return Gateway with a asynchronously remotely 
-            initialized counterpart Gateway (which may or may not succeed). 
-            Note that the other sides gateways starts enumerating 
+    def remote_bootstrap_gateway(self, io, extra=''):
+        """ return Gateway with a asynchronously remotely
+            initialized counterpart Gateway (which may or may not succeed).
+            Note that the other sides gateways starts enumerating
             its channels with even numbers while the sender
-            gateway starts with odd numbers.  This allows to 
-            uniquely identify channels across both sides. 
+            gateway starts with odd numbers.  This allows to
+            uniquely identify channels across both sides.
         """
-        bootstrap = [ 
-            extra, 
-            inspect.getsource(inputoutput), 
-            inspect.getsource(message), 
-            inspect.getsource(channel), 
-            inspect.getsource(gateway), 
-            io.server_stmt, 
-            "Gateway(io=io, startcount=2).join()", 
+        bootstrap = [
+            extra,
+            inspect.getsource(inputoutput),
+            inspect.getsource(message),
+            inspect.getsource(channel),
+            inspect.getsource(gateway),
+            io.server_stmt,
+            "Gateway(io=io, startcount=2).join()",
         ]
         source = "\n".join(bootstrap)
         self.trace("sending gateway bootstrap code")
@@ -36,53 +36,53 @@
 class PopenCmdGateway(InstallableGateway):
     def __init__(self, cmd):
         infile, outfile = os.popen2(cmd)
-        io = inputoutput.Popen2IO(infile, outfile) 
+        io = inputoutput.Popen2IO(infile, outfile)
         super(PopenCmdGateway, self).__init__(io=io)
 
-        self._pidchannel = self.remote_exec(""" 
-            import os 
-            channel.send(os.getpid()) 
-        """) 
+        self._pidchannel = self.remote_exec("""
+            import os
+            channel.send(os.getpid())
+        """)
 
     def exit(self):
         if not super(PopenCmdGateway, self).exit():
             return
         try:
             pid = self._pidchannel.receive()
-            self._pidchannel.waitclose(timeout=0.5) 
-        except IOError: 
+            self._pidchannel.waitclose(timeout=0.5)
+        except IOError:
             self.trace("could not receive child PID")
         else:
-            self.trace("waiting for pid %s" % pid) 
+            self.trace("waiting for pid %s" % pid)
             try:
-                os.waitpid(pid, 0) 
-            except OSError: 
-                self.trace("child process %s already dead?" %pid) 
+                os.waitpid(pid, 0)
+            except OSError:
+                self.trace("child process %s already dead?" %pid)
 
 class PopenGateway(PopenCmdGateway):
-    # use sysfind/sysexec/subprocess instead of os.popen? 
+    # use sysfind/sysexec/subprocess instead of os.popen?
     def __init__(self, python=sys.executable):
         cmd = '%s -u -c "exec input()"' % python
         super(PopenGateway, self).__init__(cmd)
 
-    def remote_bootstrap_gateway(self, io, extra=''): 
-        # XXX the following hack helps us to import the same version 
-        #     of the py lib, but only works for PopenGateways 
-        #     --> we need proper remote imports working 
+    def remote_bootstrap_gateway(self, io, extra=''):
+        # XXX the following hack helps us to import the same version
+        #     of the py lib, but only works for PopenGateways
+        #     --> we need proper remote imports working
         #         across any kind of gateway!
-        plist = os.environ['PYTHONPATH'].split(':') 
-        s = "import sys ; sys.path[:0] = %r" % (plist,) 
-        s = "\n".join([extra, s]) 
-        super(PopenGateway, self).remote_bootstrap_gateway(io, s) 
+        plist = os.environ['PYTHONPATH'].split(':')
+        s = "import sys ; sys.path[:0] = %r" % (plist,)
+        s = "\n".join([extra, s])
+        super(PopenGateway, self).remote_bootstrap_gateway(io, s)
 
 class SocketGateway(InstallableGateway):
-    def __init__(self, host, port): 
+    def __init__(self, host, port):
         sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-        self.host = host = str(host) 
-        self.port = port = int(port) 
+        self.host = host = str(host)
+        self.port = port = int(port)
         sock.connect((host, port))
-        io = inputoutput.SocketIO(sock) 
-        InstallableGateway.__init__(self, io=io) 
+        io = inputoutput.SocketIO(sock)
+        InstallableGateway.__init__(self, io=io)
 
 class SshGateway(PopenCmdGateway):
     def __init__(self, host, port=None, username=None, remotepython='python'):
@@ -117,7 +117,7 @@
             callbacks = self.callbacks = {}
         answerid = id(callback)
         self.callbacks[answerid] = callback
-        
+
         self.exec_remote('''
             import sys, StringIO
             try:

Modified: py/dist/py/execnet/testing/__init__.py
==============================================================================
--- py/dist/py/execnet/testing/__init__.py	(original)
+++ py/dist/py/execnet/testing/__init__.py	Sun Jan  9 16:49:34 2005
@@ -1 +1 @@
-#
\ No newline at end of file
+#

Modified: py/dist/py/execnet/testing/sshtesting.py
==============================================================================
--- py/dist/py/execnet/testing/sshtesting.py	(original)
+++ py/dist/py/execnet/testing/sshtesting.py	Sun Jan  9 16:49:34 2005
@@ -4,9 +4,9 @@
 
 import py
 
-#REMOTE_HOST = 'codespeak.net'     
-#REMOTE_HOSTNAME = 'thoth.codespeak.net'  
-REMOTE_HOST = 'localhost'    # you need to have a local ssh-daemon running! 
+#REMOTE_HOST = 'codespeak.net'
+#REMOTE_HOSTNAME = 'thoth.codespeak.net'
+REMOTE_HOST = 'localhost'    # you need to have a local ssh-daemon running!
 REMOTE_HOSTNAME = py.std.socket.gethostname() # the remote's socket.gethostname()
 
 def test_sshgateway():

Modified: py/dist/py/execnet/testing/test/test_pickle.py
==============================================================================
--- py/dist/py/execnet/testing/test/test_pickle.py	(original)
+++ py/dist/py/execnet/testing/test/test_pickle.py	Sun Jan  9 16:49:34 2005
@@ -18,11 +18,11 @@
     pickler1.dump(d)
     f1.seek(0)
     d_other = unpickler2.load()
-   
-    # translate unpickler2 memo to pickler2 
-    pickler2.memo = dict([(id(obj), (int(x), obj)) 
+
+    # translate unpickler2 memo to pickler2
+    pickler2.memo = dict([(id(obj), (int(x), obj))
                             for x, obj in unpickler2.memo.items()])
-    
+
     pickler2.dump(d_other)
     f2.seek(0)
 
@@ -30,13 +30,13 @@
 
     d_back = unpickler1.load()
 
-    assert d is d_back 
+    assert d is d_back
 
 def test_cpickle():
     import cPickle
     pickletest(cPickle)
 
 def test_pickle():
-    import pickle 
+    import pickle
     pickletest(pickle)
 

Modified: py/dist/py/execnet/testing/test_gateway.py
==============================================================================
--- py/dist/py/execnet/testing/test_gateway.py	(original)
+++ py/dist/py/execnet/testing/test_gateway.py	Sun Jan  9 16:49:34 2005
@@ -1,7 +1,7 @@
 import os, sys
-import py 
-from py.__impl__.execnet import gateway 
-mypath = py.magic.autopath() 
+import py
+from py.__impl__.execnet import gateway
+mypath = py.magic.autopath()
 
 from StringIO import StringIO
 
@@ -9,11 +9,11 @@
     def test_wire_protocol(self):
         for cls in gateway.Message._types.values():
             one = StringIO()
-            cls(42, '23').writeto(one) 
+            cls(42, '23').writeto(one)
             two = StringIO(one.getvalue())
             msg = gateway.Message.readfrom(two)
-            assert isinstance(msg, cls) 
-            assert msg.channelid == 42 
+            assert isinstance(msg, cls)
+            assert msg.channelid == 42
             assert msg.data == '23'
             assert isinstance(repr(msg), str)
             # == "<Message.%s channelid=42 '23'>" %(msg.__class__.__name__, )
@@ -30,39 +30,39 @@
 
     def test_factory_getitem(self):
         chan1 = self.fac.new()
-        assert self.fac[chan1.id] == chan1 
+        assert self.fac[chan1.id] == chan1
         chan2 = self.fac.new()
         assert self.fac[chan2.id] == chan2
-        
+
     def test_factory_delitem(self):
         chan1 = self.fac.new()
-        assert self.fac[chan1.id] == chan1 
+        assert self.fac[chan1.id] == chan1
         del self.fac[chan1.id]
         py.test.raises(KeyError, self.fac.__getitem__, chan1.id)
 
     def test_factory_setitem(self):
         channel = gateway.Channel(None, 12)
         self.fac[channel.id] = channel
-        assert self.fac[channel.id] == channel 
+        assert self.fac[channel.id] == channel
 
     def test_channel_timeouterror(self):
-        channel = self.fac.new() 
+        channel = self.fac.new()
         py.test.raises(IOError, channel.waitclose, timeout=0.01)
 
-class PopenGatewayTestSetup: 
+class PopenGatewayTestSetup:
     def setup_class(cls):
-        cls.gw = py.execnet.PopenGateway() 
+        cls.gw = py.execnet.PopenGateway()
 
     def teardown_class(cls):
-        cls.gw.exit()  
+        cls.gw.exit()
 
-class BasicRemoteExecution: 
+class BasicRemoteExecution:
     def test_correct_setup(self):
-        assert self.gw.workerthreads and self.gw.iothreads 
+        assert self.gw.workerthreads and self.gw.iothreads
 
-    def test_remote_exec_waitclose(self): 
-        channel = self.gw.remote_exec('pass') 
-        channel.waitclose(timeout=3.0) 
+    def test_remote_exec_waitclose(self):
+        channel = self.gw.remote_exec('pass')
+        channel.waitclose(timeout=3.0)
 
     def test_remote_exec_channel_anonymous(self):
         channel = self.gw.remote_exec('''
@@ -75,33 +75,33 @@
 
     def test_channel_close_and_then_receive_error(self):
         channel = self.gw.remote_exec('raise ValueError')
-        py.test.raises(gateway.RemoteError, channel.receive) 
+        py.test.raises(gateway.RemoteError, channel.receive)
 
     def test_channel_close_and_then_receive_error_multiple(self):
         channel = self.gw.remote_exec('channel.send(42) ; raise ValueError')
         x = channel.receive()
-        assert x == 42 
-        py.test.raises(gateway.RemoteError, channel.receive) 
+        assert x == 42
+        py.test.raises(gateway.RemoteError, channel.receive)
 
     def test_channel_close(self):
         channel = self.gw.channelfactory.new()
-        channel._close() 
+        channel._close()
         channel.waitclose(0.1)
 
     def test_channel_close_error(self):
         channel = self.gw.channelfactory.new()
-        channel._close(gateway.RemoteError("error")) 
-        py.test.raises(gateway.RemoteError, channel.waitclose, 0.01) 
+        channel._close(gateway.RemoteError("error"))
+        py.test.raises(gateway.RemoteError, channel.waitclose, 0.01)
 
     def test_channel_passing_over_channel(self):
         channel = self.gw.remote_exec('''
                     c = channel.newchannel()
-                    channel.send(c) 
+                    channel.send(c)
                     c.send(42)
                   ''')
         c = channel.receive()
         x = c.receive()
-        assert x == 42 
+        assert x == 42
 
         # check that the both sides previous channels are really gone
         channel.waitclose(0.3)
@@ -112,18 +112,18 @@
                   ''' % (channel.id))
         newchan.waitclose(0.3)
 
-class TestBasicPopenGateway(PopenGatewayTestSetup, BasicRemoteExecution): 
+class TestBasicPopenGateway(PopenGatewayTestSetup, BasicRemoteExecution):
     def test_many_popen(self):
         num = 4
         l = []
         for i in range(num):
             l.append(py.execnet.PopenGateway())
         channels = []
-        for gw in l: 
+        for gw in l:
             channel = gw.remote_exec("""channel.send(42)""")
             channels.append(channel)
         try:
-            while channels: 
+            while channels:
                 channel = channels.pop()
                 try:
                     ret = channel.receive()
@@ -131,63 +131,63 @@
                 finally:
                     channel.gateway.exit()
         finally:
-            for x in channels: 
+            for x in channels:
                 x.gateway.exit()
 
 class SocketGatewaySetup:
     def setup_class(cls):
         portrange = (7770, 7800)
-        cls.proxygw = py.execnet.PopenGateway() 
-        socketserverbootstrap = py.code.Source( 
-            mypath.dirpath().dirpath('bin', 'startserver.py').read(), 
+        cls.proxygw = py.execnet.PopenGateway()
+        socketserverbootstrap = py.code.Source(
+            mypath.dirpath().dirpath('bin', 'startserver.py').read(),
             """
-            import socket 
-            portrange = channel.receive() 
-            for i in portrange: 
+            import socket
+            portrange = channel.receive()
+            for i in portrange:
                 try:
                     sock = bind_and_listen(("localhost", i))
-                except socket.error: 
+                except socket.error:
                     print "got error"
                     import traceback
                     traceback.print_exc()
                     continue
                 else:
-                    channel.send(i) 
+                    channel.send(i)
                     startserver(sock)
                     break
             else:
-                channel.send(None) 
+                channel.send(None)
     """)
-        # open a gateway to a fresh child process 
+        # open a gateway to a fresh child process
         cls.proxygw = py.execnet.PopenGateway()
 
         # execute asynchronously the above socketserverbootstrap on the other
-        channel = cls.proxygw.remote_exec(socketserverbootstrap) 
+        channel = cls.proxygw.remote_exec(socketserverbootstrap)
 
         # send parameters for the for-loop
-        channel.send((7770, 7800)) 
+        channel.send((7770, 7800))
         #
         # the other side should start the for loop now, we
         # wait for the result
         #
-        cls.listenport = channel.receive() 
-        if cls.listenport is None: 
+        cls.listenport = channel.receive()
+        if cls.listenport is None:
             raise IOError, "could not setup remote SocketServer"
-        cls.gw = py.execnet.SocketGateway('localhost', cls.listenport) 
-        print "initialized socket gateway on port", cls.listenport 
+        cls.gw = py.execnet.SocketGateway('localhost', cls.listenport)
+        print "initialized socket gateway on port", cls.listenport
 
     def teardown_class(cls):
-        print "trying to tear down remote socket gateway" 
-        cls.gw.exit() 
-        if cls.gw.port: 
-            print "trying to tear down remote socket loop" 
+        print "trying to tear down remote socket gateway"
+        cls.gw.exit()
+        if cls.gw.port:
+            print "trying to tear down remote socket loop"
             import socket
             sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
             sock.connect(('localhost', cls.listenport))
-            sock.sendall('"raise KeyboardInterrupt"') 
-            sock.shutdown(2) 
-        print "trying to tear proxy gateway" 
-        cls.proxygw.exit() 
+            sock.sendall('"raise KeyboardInterrupt"')
+            sock.shutdown(2)
+        print "trying to tear proxy gateway"
+        cls.proxygw.exit()
 
-class TestSocketGateway(SocketGatewaySetup, BasicRemoteExecution): 
+class TestSocketGateway(SocketGatewaySetup, BasicRemoteExecution):
     pass

Modified: py/dist/py/initpkg.py
==============================================================================
--- py/dist/py/initpkg.py	(original)
+++ py/dist/py/initpkg.py	Sun Jan  9 16:49:34 2005
@@ -1,78 +1,78 @@
 """
-package initialization.  
+package initialization.
 
 You use the functionality of this package by putting
 
-    from py.initpkg import initpkg 
-    initpkg(__name__, exportdefs={ 
+    from py.initpkg import initpkg
+    initpkg(__name__, exportdefs={
         'name1.name2' : ('./path/to/file.py', 'name')
         ...
     })
 
-into your package's __init__.py file.  This will 
+into your package's __init__.py file.  This will
 lead your package to only expose the names of all
-your implementation files that you explicitely 
-specify.  In the above example 'name1' will 
-become a Module instance where 'name2' is 
-bound in its namespace to the 'name' object 
-in the relative './path/to/file.py' python module. 
-Note that you can also use a '.c' file in which 
+your implementation files that you explicitely
+specify.  In the above example 'name1' will
+become a Module instance where 'name2' is
+bound in its namespace to the 'name' object
+in the relative './path/to/file.py' python module.
+Note that you can also use a '.c' file in which
 case it will be compiled via distutils-facilities
-on the fly. 
+on the fly.
 
 """
-from __future__ import generators 
+from __future__ import generators
 import sys
 assert sys.version_info >= (2,2,0), "py lib requires python 2.2 or higher"
 
 ModuleType = type(sys.modules[__name__])
 
 # ---------------------------------------------------
-# Package Object 
+# Package Object
 # ---------------------------------------------------
 
 class Package(object):
     def __init__(self, name, exportdefs):
         pkgmodule = sys.modules[name]
-        assert pkgmodule.__name__ == name 
+        assert pkgmodule.__name__ == name
         self.exportdefs = exportdefs
-        self.module = pkgmodule 
+        self.module = pkgmodule
         assert not hasattr(pkgmodule, '__package__'), \
                    "unsupported reinitialization of %r" % pkgmodule
         pkgmodule.__package__ = self
 
-        # make available pkgname.__impl__  
+        # make available pkgname.__impl__
         implname = name + '.' + '__impl__'
-        self.implmodule = ModuleType(implname) 
-        self.implmodule.__name__ = implname 
+        self.implmodule = ModuleType(implname)
+        self.implmodule.__name__ = implname
         self.implmodule.__file__ = pkgmodule.__file__
-        self.implmodule.__path__ = pkgmodule.__path__ 
+        self.implmodule.__path__ = pkgmodule.__path__
         pkgmodule.__impl__ = self.implmodule
-        setmodule(implname, self.implmodule) 
+        setmodule(implname, self.implmodule)
         # inhibit further direct filesystem imports through the package module
         del pkgmodule.__path__
-       
+
     def _resolve(self, extpyish):
         """ resolve a combined filesystem/python extpy-ish path. """
         fspath, modpath = extpyish
-        if not fspath.endswith('.py'): 
+        if not fspath.endswith('.py'):
             import py
-            e = py.path.local(self.implmodule.__file__) 
-            e = e.dirpath(fspath, abs=True) 
-            e = py.path.extpy(e, modpath) 
-            return e.resolve() 
+            e = py.path.local(self.implmodule.__file__)
+            e = e.dirpath(fspath, abs=True)
+            e = py.path.extpy(e, modpath)
+            return e.resolve()
         assert fspath.startswith('./'), \
-               "%r is not an implementation path (XXX)" % extpyish 
-        implmodule = self._loadimpl(fspath[:-3]) 
-        current = implmodule 
-        for x in modpath.split('.'): 
-            current = getattr(current, x) 
+               "%r is not an implementation path (XXX)" % extpyish
+        implmodule = self._loadimpl(fspath[:-3])
+        current = implmodule
+        for x in modpath.split('.'):
+            current = getattr(current, x)
         return current
 
     def _loadimpl(self, relfile):
         """ load implementation for the given relfile. """
         parts = [x.strip() for x in relfile.split('/') if x and x!= '.']
-        modpath = ".".join([self.implmodule.__name__] + parts) 
+        modpath = ".".join([self.implmodule.__name__] + parts)
         #print "trying import", modpath
         return __import__(modpath, None, None, ['name'])
 
@@ -80,68 +80,68 @@
         return self.exportdefs.items()
 
     def getpath(self):
-        from py.path import local 
+        from py.path import local
         base = local(self.implmodule.__file__).dirpath()
         assert base.check()
         return base
 
-    def _iterfiles(self): 
-        from py.path import checker 
-        base = self.getpath() 
-        for x in base.visit(checker(file=1, notext='.pyc'), 
+    def _iterfiles(self):
+        from py.path import checker
+        base = self.getpath()
+        for x in base.visit(checker(file=1, notext='.pyc'),
                             rec=checker(dotfile=0)):
-            yield x 
+            yield x
 
     def shahexdigest(self, cache=[]):
         """ return sha hexdigest for files contained in package. """
-        if cache: 
+        if cache:
             return cache[0]
-        from sha import sha 
-        sum = sha() 
-        for x in self._iterfiles(): 
-            sum.update(x.read()) 
+        from sha import sha
+        sum = sha()
+        for x in self._iterfiles():
+            sum.update(x.read())
         cache.append(sum.hexdigest())
         return cache[0]
 
-    def getzipdata(self): 
-        """ return string representing a zipfile containing the package. """ 
-        import zipfile 
+    def getzipdata(self):
+        """ return string representing a zipfile containing the package. """
+        import zipfile
         import py
-        try: 
+        try:
             from cStringIO import StringIO
-        except ImportError: 
+        except ImportError:
             from StringIO import StringIO
         base = py.__package__.getpath().dirpath()
         outf = StringIO()
         f = zipfile.ZipFile(outf, 'w', compression=zipfile.ZIP_DEFLATED)
         try:
-            for x in self._iterfiles(): 
+            for x in self._iterfiles():
                 f.write(str(x), x.relto(base))
-        finally: 
+        finally:
             f.close()
-        return outf.getvalue() 
+        return outf.getvalue()
 
-    def getrev(self): 
+    def getrev(self):
         import py
-        p = py.path.svnwc(self.module.__file__).dirpath() 
-        try: 
-            return p.info().rev 
-        except (KeyboardInterrupt, MemoryError, SystemExit): 
-            raise 
-        except: 
-            return 'unknown' 
+        p = py.path.svnwc(self.module.__file__).dirpath()
+        try:
+            return p.info().rev
+        except (KeyboardInterrupt, MemoryError, SystemExit):
+            raise
+        except:
+            return 'unknown'
 
 def setmodule(modpath, module):
     #print "sys.modules[%r] = %r" % (modpath, module)
-    sys.modules[modpath] = module 
+    sys.modules[modpath] = module
 
 # ---------------------------------------------------
-# Virtual Module Object 
+# Virtual Module Object
 # ---------------------------------------------------
 
-class Module(ModuleType): 
-    def __init__(self, pkg, name): 
-        self.__package__ = pkg 
+class Module(ModuleType):
+    def __init__(self, pkg, name):
+        self.__package__ = pkg
         self.__name__ = name
         self.__map__ = {}
 
@@ -149,23 +149,23 @@
         try:
             extpy = self.__map__[name]
         except KeyError:
-            raise AttributeError(name) 
-        #print "getattr(%r, %r)" %(self, name) 
+            raise AttributeError(name)
+        #print "getattr(%r, %r)" %(self, name)
         result = self.__package__._resolve(extpy)
-        setattr(self, name, result) 
+        setattr(self, name, result)
         del self.__map__[name]
-        # XXX modify some attrs to make a class appear at virtual module level 
-        if hasattr(result, '__module__'): 
+        # XXX modify some attrs to make a class appear at virtual module level
+        if hasattr(result, '__module__'):
             try:
-                setattr(result, '__module__', self.__name__) 
-            except (AttributeError, TypeError): 
-                pass 
+                setattr(result, '__module__', self.__name__)
+            except (AttributeError, TypeError):
+                pass
         if hasattr(result, '__bases__'):
             try:
                 setattr(result, '__name__', name)
-            except (AttributeError, TypeError): 
+            except (AttributeError, TypeError):
                 pass
-        #    print "setting virtual module on %r" % result 
+        #    print "setting virtual module on %r" % result
         return result
 
     def __repr__(self):
@@ -183,32 +183,32 @@
     del getdict
 
 # ---------------------------------------------------
-# Bootstrap Virtual Module Hierarchy 
+# Bootstrap Virtual Module Hierarchy
 # ---------------------------------------------------
 
 def initpkg(pkgname, exportdefs):
     #print "initializing package", pkgname
-    # bootstrap Package object 
+    # bootstrap Package object
     pkg = Package(pkgname, exportdefs)
     seen = { pkgname : pkg.module }
 
     for pypath, extpy in pkg.exportitems():
         pyparts = pypath.split('.')
         modparts = pyparts[:-1]
-        current = pkgname 
+        current = pkgname
 
-        # ensure modules 
+        # ensure modules
         for name in modparts:
             previous = current
-            current += '.' + name 
+            current += '.' + name
             if current not in seen:
-                seen[current] = mod = Module(pkg, current) 
-                setattr(seen[previous], name, mod) 
-                setmodule(current, mod) 
+                seen[current] = mod = Module(pkg, current)
+                setattr(seen[previous], name, mod)
+                setmodule(current, mod)
         mod = seen[current]
         if not hasattr(mod, '__map__'):
             assert mod is pkg.module, \
                    "only root modules are allowed to be non-lazy. "
             setattr(mod, pyparts[-1], pkg._resolve(extpy))
         else:
-            mod.__map__[pyparts[-1]] = extpy 
+            mod.__map__[pyparts[-1]] = extpy

Modified: py/dist/py/magic/assertion.py
==============================================================================
--- py/dist/py/magic/assertion.py	(original)
+++ py/dist/py/magic/assertion.py	Sun Jan  9 16:49:34 2005
@@ -1,5 +1,5 @@
 import __builtin__, sys
-import py 
+import py
 from py.__impl__.magic import exprinfo
 
 BuiltinAssertionError = __builtin__.AssertionError
@@ -11,7 +11,7 @@
         try:
             source = py.code.Frame(f).statement
             source = str(source).strip()
-        except py.error.ENOENT: 
+        except py.error.ENOENT:
             source = None
             # this can also occur during reinterpretation, when the
             # co_filename is set to "<run>".
@@ -25,4 +25,4 @@
 def invoke():
     py.magic.patch(__builtin__, 'AssertionError', AssertionError)
 def revoke():
-    py.magic.revert(__builtin__, 'AssertionError') 
+    py.magic.revert(__builtin__, 'AssertionError')

Modified: py/dist/py/magic/autopath.py
==============================================================================
--- py/dist/py/magic/autopath.py	(original)
+++ py/dist/py/magic/autopath.py	Sun Jan  9 16:49:34 2005
@@ -3,39 +3,39 @@
 from py.__impl__.path.common import PathStr
 
 def autopath(globs=None, basefile='__init__.py'):
-    """ return the (local) path of the "current" file pointed to by globals 
-        or - if it is none - alternatively the callers frame globals. 
+    """ return the (local) path of the "current" file pointed to by globals
+        or - if it is none - alternatively the callers frame globals.
 
-        the path will always point to a .py file  or to None. 
-        the path will have the following payload: 
-        pkgdir   is the last parent directory path containing 'basefile' 
-                 starting backwards from the current file. 
+        the path will always point to a .py file  or to None.
+        the path will have the following payload:
+        pkgdir   is the last parent directory path containing 'basefile'
+                 starting backwards from the current file.
     """
     if globs is None:
         globs = sys._getframe(1).f_globals
     try:
-        __file__ = globs['__file__'] 
+        __file__ = globs['__file__']
     except KeyError:
-        if not sys.argv[0]: 
+        if not sys.argv[0]:
             raise ValueError, "cannot compute autopath in interactive mode"
-        __file__ = os.path.abspath(sys.argv[0]) 
+        __file__ = os.path.abspath(sys.argv[0])
 
     custom__file__ = isinstance(__file__, PathStr)
     if custom__file__:
         ret = __file__.__path__
     else:
-        ret = local(__file__) 
+        ret = local(__file__)
         if ret.ext in ('.pyc', '.pyo'):
             ret = ret.new(ext='.py')
     current = pkgdir = ret.dirpath()
-    while 1: 
+    while 1:
         if basefile in current:
-            pkgdir = current 
+            pkgdir = current
             current = current.dirpath()
             if pkgdir != current:
                 continue
         elif not custom__file__ and str(current) not in sys.path:
             sys.path.insert(0, str(current))
-        break 
-    ret.pkgdir = pkgdir 
-    return ret 
+        break
+    ret.pkgdir = pkgdir
+    return ret

Modified: py/dist/py/magic/conftest.py
==============================================================================
--- py/dist/py/magic/conftest.py	(original)
+++ py/dist/py/magic/conftest.py	Sun Jan  9 16:49:34 2005
@@ -1,7 +1,7 @@
 import py
 
-class Directory(py.test.collect.Directory): 
-    def rec(self, path): 
-        if path.basename != 'testing': 
-            return False 
-        return super(Directory, self).rec(path) 
+class Directory(py.test.collect.Directory):
+    def rec(self, path):
+        if path.basename != 'testing':
+            return False
+        return super(Directory, self).rec(path)

Modified: py/dist/py/magic/exprinfo.py
==============================================================================
--- py/dist/py/magic/exprinfo.py	(original)
+++ py/dist/py/magic/exprinfo.py	Sun Jan  9 16:49:34 2005
@@ -1,8 +1,8 @@
 from compiler import parse, ast, pycodegen
-import py 
+import py
 import __builtin__, sys
 
-passthroughex = (KeyboardInterrupt, SystemExit, MemoryError) 
+passthroughex = (KeyboardInterrupt, SystemExit, MemoryError)
 
 class Failure:
     def __init__(self, node):
@@ -26,8 +26,8 @@
             self.__obj__.filename = '<eval>'
             co = pycodegen.ExpressionCodeGenerator(expr).getCode()
             result = frame.eval(co)
-        except passthroughex: 
-            raise 
+        except passthroughex:
+            raise
         except:
             raise Failure(self)
         self.result = result
@@ -40,8 +40,8 @@
             expr.filename = '<run>'
             co = pycodegen.ModuleCodeGenerator(expr).getCode()
             frame.exec_(co)
-        except passthroughex: 
-            raise 
+        except passthroughex:
+            raise
         except:
             raise Failure(self)
 
@@ -164,10 +164,10 @@
     ast.Not    : 'not __exprinfo_expr',
     ast.Invert : '(~__exprinfo_expr)',
     }.items():
-    
+
     class UnaryArith(Interpretable):
         __view__ = astclass
-        
+
         def eval(self, frame, astpattern=astpattern,
                               co=compile(astpattern, '?', 'eval')):
             expr = Interpretable(self.expr)
@@ -192,7 +192,7 @@
     ast.Mod    : '(__exprinfo_left % __exprinfo_right)',
     ast.Power  : '(__exprinfo_left ** __exprinfo_right)',
     }.items():
-    
+
     class BinaryArith(Interpretable):
         __view__ = astclass
 
@@ -212,7 +212,7 @@
                 raise
             except:
                 raise Failure(self)
-    
+
     keepalive.append(BinaryArith)
 
 
@@ -280,7 +280,7 @@
         co = compile('__exprinfo_expr.%s' % self.attrname, '?', 'eval')
         try:
             self.result = frame.eval(co, __exprinfo_expr=expr.result)
-        except passthroughex: 
+        except passthroughex:
             raise
         except:
             raise Failure(self)
@@ -293,7 +293,7 @@
             from_instance = frame.is_true(
                 frame.eval(co, __exprinfo_expr=expr.result))
         except passthroughex:
-            raise 
+            raise
         except:
             from_instance = True
         if from_instance:
@@ -316,11 +316,11 @@
             test.explanation = test.explanation[15:-2]
         # print the result as  'assert <explanation>'
         self.result = test.result
-        self.explanation = 'assert ' + test.explanation 
+        self.explanation = 'assert ' + test.explanation
         if not frame.is_true(test.result):
             try:
                 raise BuiltinAssertionError
-            except passthroughex: 
+            except passthroughex:
                 raise
             except:
                 raise Failure(self)
@@ -340,7 +340,7 @@
         co = pycodegen.ModuleCodeGenerator(mod).getCode()
         try:
             frame.exec_(co, __exprinfo_expr=expr.result)
-        except passthroughex: 
+        except passthroughex:
             raise
         except:
             raise Failure(self)
@@ -381,7 +381,7 @@
     node = Interpretable(expr.node)
     try:
         node.eval(frame)
-    except passthroughex: 
+    except passthroughex:
         raise
     except Failure, e:
         report_failure(e)
@@ -391,19 +391,19 @@
 
 
 ###########################################################
-# API / Entry points 
+# API / Entry points
 # #########################################################
 
 def interpret(source, frame, should_fail=False):
     module = Interpretable(parse(source, 'exec').node)
-    #print "got module", module 
-    if isinstance(frame, py.std.types.FrameType): 
+    #print "got module", module
+    if isinstance(frame, py.std.types.FrameType):
         frame = py.code.Frame(frame)
     try:
         module.run(frame)
     except Failure, e:
         return getfailure(e)
-    except passthroughex: 
+    except passthroughex:
         raise
     except:
         import traceback
@@ -413,13 +413,13 @@
     else:
         return None
 
-def getmsg(excinfo): 
-    if isinstance(excinfo, tuple): 
-        excinfo = py.code.ExceptionInfo(excinfo) 
+def getmsg(excinfo):
+    if isinstance(excinfo, tuple):
+        excinfo = py.code.ExceptionInfo(excinfo)
     #frame, line = gettbline(tb)
     #frame = py.code.Frame(frame)
     #return interpret(line, frame)
-    
+
     tb = list(excinfo)[-1]
     source = str(tb.statement).strip()
     x = interpret(source, tb.frame, should_fail=True)

Modified: py/dist/py/magic/invoke.py
==============================================================================
--- py/dist/py/magic/invoke.py	(original)
+++ py/dist/py/magic/invoke.py	Sun Jan  9 16:49:34 2005
@@ -1,19 +1,19 @@
 
-def invoke(assertion=False): 
+def invoke(assertion=False):
     """ invoke magic, currently you can specify:
 
         assertion  patches the builtin AssertionError to try to give
                    more meaningful AssertionErrors, which by means
                    of deploying a mini-interpreter constructs
-                   a useful error message. 
+                   a useful error message.
     """
-    if assertion: 
-        from py.__impl__.magic import assertion 
+    if assertion:
+        from py.__impl__.magic import assertion
         assertion.invoke()
 
 def revoke(assertion=False):
     """ revoke previously invoked magic (see invoke())."""
     if assertion:
-        from py.__impl__.magic import assertion 
+        from py.__impl__.magic import assertion
         assertion.revoke()
 

Modified: py/dist/py/magic/patch.py
==============================================================================
--- py/dist/py/magic/patch.py	(original)
+++ py/dist/py/magic/patch.py	Sun Jan  9 16:49:34 2005
@@ -1,26 +1,26 @@
 
 patched = {}
 
-def patch(namespace, name, value): 
-    """ rebind the 'name' on the 'namespace'  to the 'value', 
-        possibly and remember the original value. Multiple 
+def patch(namespace, name, value):
+    """ rebind the 'name' on the 'namespace'  to the 'value',
+        possibly and remember the original value. Multiple
         invocations to the same namespace/name pair will
-        remember a list of old values. 
+        remember a list of old values.
     """
-    nref = (namespace, name) 
+    nref = (namespace, name)
     orig = getattr(namespace, name)
-    patched.setdefault(nref, []).append(orig) 
+    patched.setdefault(nref, []).append(orig)
     setattr(namespace, name, value)
     return orig
-   
+
 def revert(namespace, name):
-    """ revert to the orginal value the last patch modified. 
-        Raise ValueError if no such original value exists. 
+    """ revert to the orginal value the last patch modified.
+        Raise ValueError if no such original value exists.
     """
-    nref = (namespace, name) 
+    nref = (namespace, name)
     if nref not in patched or not patched[nref]:
         raise ValueError, "No original value stored for %s.%s" % nref
     current = getattr(namespace, name)
     orig = patched[nref].pop()
-    setattr(namespace, name, orig) 
+    setattr(namespace, name, orig)
     return current

Modified: py/dist/py/magic/testing/__init__.py
==============================================================================
--- py/dist/py/magic/testing/__init__.py	(original)
+++ py/dist/py/magic/testing/__init__.py	Sun Jan  9 16:49:34 2005
@@ -1 +1 @@
-#
\ No newline at end of file
+#

Modified: py/dist/py/magic/testing/test_assertion.py
==============================================================================
--- py/dist/py/magic/testing/test_assertion.py	(original)
+++ py/dist/py/magic/testing/test_assertion.py	Sun Jan  9 16:49:34 2005
@@ -1,10 +1,10 @@
 import py
 
 def setup_module(mod):
-    py.magic.invoke(assertion=1) 
+    py.magic.invoke(assertion=1)
 
 def teardown_module(mod):
-    py.magic.revoke(assertion=1) 
+    py.magic.revoke(assertion=1)
 
 def f():
     return 2
@@ -16,10 +16,10 @@
         s = str(e)
         assert s.startswith('assert 2 == 3\n')
 
-def test_assert_within_finally(): 
-    class A: 
+def test_assert_within_finally():
+    class A:
         def f():
-            pass 
+            pass
     excinfo = py.test.raises(TypeError, """
         try:
             A().f()

Modified: py/dist/py/magic/testing/test_autopath.py
==============================================================================
--- py/dist/py/magic/testing/test_autopath.py	(original)
+++ py/dist/py/magic/testing/test_autopath.py	Sun Jan  9 16:49:34 2005
@@ -1,64 +1,64 @@
-import py 
+import py
 import sys
 
-class TestAutoPath: 
-    getauto = "from py.magic import autopath ; autopath = autopath()" 
+class TestAutoPath:
+    getauto = "from py.magic import autopath ; autopath = autopath()"
     def __init__(self):
-        self.root = py.test.config.tmpdir.ensure('autoconfigure', dir=1) 
+        self.root = py.test.config.tmpdir.ensure('autoconfigure', dir=1)
         self.initdir = self.root.ensure('pkgdir', dir=1)
-        self.initdir.ensure('__init__.py') 
-        self.initdir2 = self.initdir.ensure('initdir2', dir=1) 
-        self.initdir2.ensure('__init__.py') 
+        self.initdir.ensure('__init__.py')
+        self.initdir2 = self.initdir.ensure('initdir2', dir=1)
+        self.initdir2.ensure('__init__.py')
 
     def test_import_autoconfigure__file__with_init(self):
         testpath = self.initdir2 / 'autoconfiguretest.py'
         d = {'__file__' : str(testpath)}
         oldsyspath = sys.path[:]
         try:
-            exec self.getauto in d 
+            exec self.getauto in d
             conf = d['autopath']
             assert conf.dirpath() == self.initdir2
-            assert conf.pkgdir == self.initdir 
-            assert str(self.root) in sys.path 
-            exec self.getauto in d 
+            assert conf.pkgdir == self.initdir
+            assert str(self.root) in sys.path
+            exec self.getauto in d
             assert conf is not d['autopath']
         finally:
-            sys.path[:] = oldsyspath 
+            sys.path[:] = oldsyspath
 
     def test_import_autoconfigure__file__with_py_exts(self):
-        for ext in '.pyc', '.pyo': 
+        for ext in '.pyc', '.pyo':
             testpath = self.initdir2 / ('autoconfiguretest' + ext)
             d = {'__file__' : str(testpath)}
             oldsyspath = sys.path[:]
             try:
-                exec self.getauto in d 
+                exec self.getauto in d
                 conf = d['autopath']
-                assert conf == self.initdir2.join('autoconfiguretest.py') 
-                assert conf.pkgdir == self.initdir 
-                assert str(self.root) in sys.path 
-                exec self.getauto in d 
+                assert conf == self.initdir2.join('autoconfiguretest.py')
+                assert conf.pkgdir == self.initdir
+                assert str(self.root) in sys.path
+                exec self.getauto in d
                 assert conf is not d['autopath']
             finally:
-                sys.path[:] = oldsyspath 
+                sys.path[:] = oldsyspath
 
     def test_import_autoconfigure___file__without_init(self):
         testpath = self.root / 'autoconfiguretest.py'
         d = {'__file__' : str(testpath)}
         oldsyspath = sys.path[:]
         try:
-            exec self.getauto in d 
+            exec self.getauto in d
             conf = d['autopath']
             assert conf.dirpath() == self.root
             assert conf.pkgdir == self.root
             syspath = sys.path[:]
-            assert str(self.root) in syspath 
-            exec self.getauto in d 
+            assert str(self.root) in syspath
+            exec self.getauto in d
             assert conf is not d['autopath']
         finally:
-            sys.path[:] = oldsyspath 
+            sys.path[:] = oldsyspath
 
     def test_import_autoconfigure__nofile(self):
-        p = self.initdir2 / 'autoconfiguretest.py' 
+        p = self.initdir2 / 'autoconfiguretest.py'
         oldsysarg = sys.argv
         sys.argv = [str(p)]
         oldsyspath = sys.path[:]
@@ -69,10 +69,10 @@
             assert conf.dirpath() == self.initdir2
             assert conf.pkgdir == self.initdir
             syspath = sys.path[:]
-            assert str(self.root) in syspath 
+            assert str(self.root) in syspath
         finally:
-            sys.path[:] = oldsyspath 
-            sys.argv = sys.argv 
+            sys.path[:] = oldsyspath
+            sys.argv = sys.argv
 
 
     def test_import_autoconfigure__nofile_interactive(self):
@@ -83,7 +83,7 @@
             py.test.raises(ValueError,'''
                 d = {}
                 exec self.getauto in d
-            ''') 
+            ''')
         finally:
-            sys.path[:] = oldsyspath 
-            sys.argv = sys.argv 
+            sys.path[:] = oldsyspath
+            sys.argv = sys.argv

Modified: py/dist/py/magic/testing/test_exprinfo.py
==============================================================================
--- py/dist/py/magic/testing/test_exprinfo.py	(original)
+++ py/dist/py/magic/testing/test_exprinfo.py	Sun Jan  9 16:49:34 2005
@@ -43,18 +43,18 @@
     msg = getmsg(excinfo)
     assert msg == 'assert 1 == 2'
 
-def test_assert_func_argument_type_error(): 
-    def f (): 
+def test_assert_func_argument_type_error():
+    def f ():
         pass
     def g():
-        f(1) 
+        f(1)
     excinfo = getexcinfo(TypeError, g)
     msg = getmsg(excinfo)
     assert msg.find("takes no argument") != -1
 
-    class A: 
+    class A:
         def f():
-            pass 
+            pass
     def g():
         A().f()
     excinfo = getexcinfo(TypeError, g)
@@ -80,24 +80,24 @@
 def test_keyboard_interrupt():
     # XXX this test is slightly strange because it is not
     # clear that "interpret" should execute "raise" statements
-    # ... but it apparently currently does and it's nice to 
-    # exercise the code because the exprinfo-machinery is 
-    # not much executed when all tests pass ... 
-   
-    class DummyCode: 
+    # ... but it apparently currently does and it's nice to
+    # exercise the code because the exprinfo-machinery is
+    # not much executed when all tests pass ...
+
+    class DummyCode:
         co_filename = 'dummy'
         co_firstlineno = 0
         co_name = 'dummy'
-    class DummyFrame: 
+    class DummyFrame:
         f_globals = f_locals = {}
-        f_code = DummyCode 
+        f_code = DummyCode
         f_lineno = 0
-        
+
     for exstr in "SystemExit", "KeyboardInterrupt", "MemoryError":
-        ex = eval(exstr) 
+        ex = eval(exstr)
         try:
             interpret("raise %s" % exstr, py.code.Frame(DummyFrame))
-        except ex: 
+        except ex:
             pass
         else:
             raise AssertionError, "ex %s didn't pass through" %(exstr, )

Modified: py/dist/py/magic/testing/test_invoke.py
==============================================================================
--- py/dist/py/magic/testing/test_invoke.py	(original)
+++ py/dist/py/magic/testing/test_invoke.py	Sun Jan  9 16:49:34 2005
@@ -1,10 +1,10 @@
-import __builtin__ as bltin 
-import py 
+import __builtin__ as bltin
+import py
 import inspect
 
 def check_assertion():
     excinfo = py.test.raises(AssertionError, "assert 1 == 2")
-    assert excinfo.exception_text == "assert 1 == 2" 
+    assert excinfo.exception_text == "assert 1 == 2"
 
 def test_invoke_assertion():
     py.magic.invoke(assertion=True)
@@ -12,4 +12,4 @@
         check_assertion()
     finally:
         py.magic.revoke(assertion=True)
-    
+

Modified: py/dist/py/magic/testing/test_patch.py
==============================================================================
--- py/dist/py/magic/testing/test_patch.py	(original)
+++ py/dist/py/magic/testing/test_patch.py	Sun Jan  9 16:49:34 2005
@@ -1,5 +1,5 @@
-from py.test import raises 
-from py.magic import patch, revert 
+from py.test import raises
+from py.magic import patch, revert
 
 def test_patch_revert():
     class a:
@@ -7,12 +7,12 @@
     raises(AttributeError, "patch(a, 'i', 42)")
 
     a.i = 42
-    patch(a, 'i', 23) 
+    patch(a, 'i', 23)
     assert a.i == 23
-    revert(a, 'i') 
+    revert(a, 'i')
     assert a.i == 42
 
-def test_double_patch():    
+def test_double_patch():
     class a:
         i = 42
     assert patch(a, 'i', 2) == 42
@@ -28,4 +28,4 @@
         i = 2
         pass
     raises(ValueError, "revert(a, 'i')")
-    
+

Modified: py/dist/py/magic/testing/test_viewtype.py
==============================================================================
--- py/dist/py/magic/testing/test_viewtype.py	(original)
+++ py/dist/py/magic/testing/test_viewtype.py	Sun Jan  9 16:49:34 2005
@@ -23,7 +23,7 @@
 
     assert Picklable(123).pickle() == '123'
     assert Picklable([1,[2,3],4]).pickle() == '1;2;3;4'
-    assert Picklable({1:2}).pickle() == '1!2' 
+    assert Picklable({1:2}).pickle() == '1!2'
 
 
 def test_custom_class_hierarchy():

Modified: py/dist/py/magic/viewtype.py
==============================================================================
--- py/dist/py/magic/viewtype.py	(original)
+++ py/dist/py/magic/viewtype.py	Sun Jan  9 16:49:34 2005
@@ -10,7 +10,7 @@
 
 class View(object):
     """View base class.
-    
+
     If C is a subclass of View, then C(x) creates a proxy object around
     the object x.  The actual class of the proxy is not C in general,
     but a *subclass* of C determined by the rules below.  To avoid confusion
@@ -35,7 +35,7 @@
     of the object x, instead of the class of x, by overriding __viewkey__.
     See last example at the end of this module.
     """
-    
+
     _viewcache = {}
     __view__ = ()
 

Modified: py/dist/py/misc/cache.py
==============================================================================
--- py/dist/py/misc/cache.py	(original)
+++ py/dist/py/misc/cache.py	Sun Jan  9 16:49:34 2005
@@ -1,154 +1,154 @@
-""" 
-This module contains multithread-safe cache implementations. 
+"""
+This module contains multithread-safe cache implementations.
 
-Caches mainly have a 
+Caches mainly have a
 
     __getitem__  and  getorbuild() method
 
-where the latter either just return a cached value or 
-first builds the value. 
+where the latter either just return a cached value or
+first builds the value.
 
-These are the current cache implementations: 
+These are the current cache implementations:
 
-    BuildcostAccessCache  tracks building-time and accesses. Evicts 
-              by product of num-accesses * build-time. 
+    BuildcostAccessCache  tracks building-time and accesses. Evicts
+              by product of num-accesses * build-time.
 
 """
-import py 
-gettime = py.std.time.time 
+import py
+gettime = py.std.time.time
 
-class WeightedCountingEntry(object): 
-    def __init__(self, value, oneweight): 
-        self.num = 1 
-        self._value = value 
-        self.oneweight = oneweight 
-
-    def weight(): 
-        def fget(self): 
-            return self.num * self.oneweight 
-        return property(fget, None, None, "cumulative weight") 
-    weight = weight() 
-
-    def value(): 
-        def fget(self): 
-            # you need to protect against mt-access at caller side! 
-            self.num += 1 
-            return self._value 
-        return property(fget, None, None) 
+class WeightedCountingEntry(object):
+    def __init__(self, value, oneweight):
+        self.num = 1
+        self._value = value
+        self.oneweight = oneweight
+
+    def weight():
+        def fget(self):
+            return self.num * self.oneweight
+        return property(fget, None, None, "cumulative weight")
+    weight = weight()
+
+    def value():
+        def fget(self):
+            # you need to protect against mt-access at caller side!
+            self.num += 1
+            return self._value
+        return property(fget, None, None)
     value = value()
- 
-class BasicCache(object): 
-    def __init__(self, maxentries=128): 
-        self.maxentries = maxentries 
+
+class BasicCache(object):
+    def __init__(self, maxentries=128):
+        self.maxentries = maxentries
         self.prunenum = maxentries - int(maxentries/8)
         self._lock = py.std.threading.RLock()
         self._dict = {}
 
-    def getentry(self, key): 
-        lock = self._lock 
+    def getentry(self, key):
+        lock = self._lock
         lock.acquire()
-        try: 
-            return self._dict.get(key, None) 
-        finally: 
-            lock.release() 
+        try:
+            return self._dict.get(key, None)
+        finally:
+            lock.release()
 
-    def putentry(self, key, entry): 
+    def putentry(self, key, entry):
         self._lock.acquire()
-        try: 
-            self._prunelowestweight() 
-            self._dict[key] = entry 
-        finally: 
-            self._lock.release() 
+        try:
+            self._prunelowestweight()
+            self._dict[key] = entry
+        finally:
+            self._lock.release()
 
-    def delentry(self, key, raising=False): 
+    def delentry(self, key, raising=False):
         self._lock.acquire()
-        try: 
-            try: 
-                del self._dict[key] 
-            except KeyError: 
-                if raising: 
-                    raise 
-        finally: 
-            self._lock.release() 
+        try:
+            try:
+                del self._dict[key]
+            except KeyError:
+                if raising:
+                    raise
+        finally:
+            self._lock.release()
 
-    def getorbuild(self, key, builder, *args, **kwargs): 
+    def getorbuild(self, key, builder, *args, **kwargs):
         entry = self.getentry(key)
-        if entry is None: 
-            entry = self.build(key, builder, *args, **kwargs) 
-        return entry.value 
-
-    def _prunelowestweight(self): 
-        """ prune out entries with lowest weight. """ 
-        # note: must be called with acquired self._lock! 
-        numentries = len(self._dict) 
-        if numentries >= self.maxentries: 
-            # evict according to entry's weight 
+        if entry is None:
+            entry = self.build(key, builder, *args, **kwargs)
+        return entry.value
+
+    def _prunelowestweight(self):
+        """ prune out entries with lowest weight. """
+        # note: must be called with acquired self._lock!
+        numentries = len(self._dict)
+        if numentries >= self.maxentries:
+            # evict according to entry's weight
             items = [(entry.weight, key) for key, entry in self._dict.iteritems()]
-            items.sort() 
-            index = numentries - self.prunenum 
-            if index > 0: 
-                for weight, key in items[:index]: 
-                    del self._dict[key] 
-    
-class BuildcostAccessCache(BasicCache): 
-    """ A BuildTime/Access-counting cache implementation. 
+            items.sort()
+            index = numentries - self.prunenum
+            if index > 0:
+                for weight, key in items[:index]:
+                    del self._dict[key]
+
+class BuildcostAccessCache(BasicCache):
+    """ A BuildTime/Access-counting cache implementation.
         the weight of a value is computed as the product of
-        
-            num-accesses-of-a-value * time-to-build-the-value 
 
-        The values with the least such weights are evicted 
-        if the cache maxentries threshold is superceded.  
-        For implementation flexibility more than one object 
-        might be evicted at a time. 
-    """ 
-    # time function to use for measuring build-times 
-    _time = gettime 
-
-    def __init__(self, maxentries=64): 
-        super(BuildcostAccessCache, self).__init__(maxentries) 
-
-    def build(self, key, builder, *args, **kwargs): 
-        start = self._time() 
-        val = builder(*args, **kwargs) 
-        end = self._time() 
-        entry = WeightedCountingEntry(val, end-start) 
-        self.putentry(key, entry) 
-        return entry 
-    
-class AgingCache(BasicCache): 
-    """ This cache prunes out cache entries that are too old. 
+            num-accesses-of-a-value * time-to-build-the-value
+
+        The values with the least such weights are evicted
+        if the cache maxentries threshold is superceded.
+        For implementation flexibility more than one object
+        might be evicted at a time.
+    """
+    # time function to use for measuring build-times
+    _time = gettime
+
+    def __init__(self, maxentries=64):
+        super(BuildcostAccessCache, self).__init__(maxentries)
+
+    def build(self, key, builder, *args, **kwargs):
+        start = self._time()
+        val = builder(*args, **kwargs)
+        end = self._time()
+        entry = WeightedCountingEntry(val, end-start)
+        self.putentry(key, entry)
+        return entry
+
+class AgingCache(BasicCache):
+    """ This cache prunes out cache entries that are too old.
     """
-    def __init__(self, maxentries=128, maxseconds=10.0): 
-        super(AgingCache, self).__init__(maxentries) 
-        self.maxseconds = maxseconds 
+    def __init__(self, maxentries=128, maxseconds=10.0):
+        super(AgingCache, self).__init__(maxentries)
+        self.maxseconds = maxseconds
 
-    def getentry(self, key): 
-        self._lock.acquire() 
+    def getentry(self, key):
+        self._lock.acquire()
         try:
-            try: 
+            try:
                 entry = self._dict[key]
-            except KeyError: 
-                entry = None 
-            else: 
-                if entry.isexpired(): 
-                    del self._dict[key] 
-                    entry = None 
-            return entry 
-        finally: 
-            self._lock.release() 
-
-    def build(self, key, builder, *args, **kwargs): 
-        ctime = gettime() 
-        val = builder(*args, **kwargs) 
-        entry = AgingEntry(val, ctime + self.maxseconds) 
-        self.putentry(key, entry) 
-        return entry 
-
-class AgingEntry(object): 
-    def __init__(self, value, expirationtime): 
-        self.value = value 
-        self.expirationtime = expirationtime 
-
-    def isexpired(self): 
-        t = py.std.time.time() 
-        return t >= self.expirationtime 
+            except KeyError:
+                entry = None
+            else:
+                if entry.isexpired():
+                    del self._dict[key]
+                    entry = None
+            return entry
+        finally:
+            self._lock.release()
+
+    def build(self, key, builder, *args, **kwargs):
+        ctime = gettime()
+        val = builder(*args, **kwargs)
+        entry = AgingEntry(val, ctime + self.maxseconds)
+        self.putentry(key, entry)
+        return entry
+
+class AgingEntry(object):
+    def __init__(self, value, expirationtime):
+        self.value = value
+        self.expirationtime = expirationtime
+
+    def isexpired(self):
+        t = py.std.time.time()
+        return t >= self.expirationtime

Modified: py/dist/py/misc/error.py
==============================================================================
--- py/dist/py/misc/error.py	(original)
+++ py/dist/py/misc/error.py	Sun Jan  9 16:49:34 2005
@@ -1,56 +1,56 @@
 
 import py
 
-class Error(EnvironmentError): 
+class Error(EnvironmentError):
     __module__ = 'py.error'
 
-    def __repr__(self): 
-        return "%s.%s %r: %s " %(self.__class__.__module__, 
-                               self.__class__.__name__, 
-                               self.__class__.__doc__, 
-                               " ".join(map(str, self.args)), 
-                               #repr(self.args) 
+    def __repr__(self):
+        return "%s.%s %r: %s " %(self.__class__.__module__,
+                               self.__class__.__name__,
+                               self.__class__.__doc__,
+                               " ".join(map(str, self.args)),
+                               #repr(self.args)
                                 )
 
-    def __str__(self): 
-        return "[%s]: %s" %(self.__class__.__doc__, 
-                          " ".join(map(str, self.args)), 
+    def __str__(self):
+        return "[%s]: %s" %(self.__class__.__doc__,
+                          " ".join(map(str, self.args)),
                           )
 
-ModuleType = type(py) 
+ModuleType = type(py)
 
-class py_error(ModuleType): 
-    """ py.error contains higher level Exception classes 
-        for each possible POSIX errno (as defined per 
-        the 'errno' module.  All such Exceptions derive 
-        from py.error.Error, which itself is a subclass 
-        of EnvironmentError. 
-    """ 
-    Error = Error 
+class py_error(ModuleType):
+    """ py.error contains higher level Exception classes
+        for each possible POSIX errno (as defined per
+        the 'errno' module.  All such Exceptions derive
+        from py.error.Error, which itself is a subclass
+        of EnvironmentError.
+    """
+    Error = Error
 
-    def _geterrnoclass(eno, _errno2class = {}): 
-        try: 
+    def _geterrnoclass(eno, _errno2class = {}):
+        try:
             return _errno2class[eno]
-        except KeyError: 
+        except KeyError:
             clsname = py.std.errno.errorcode[eno]
-            cls = py.std.new.classobj(clsname, (Error,), 
-                    {'__module__':'py.error', 
+            cls = py.std.new.classobj(clsname, (Error,),
+                    {'__module__':'py.error',
                      '__doc__': py.std.os.strerror(eno)})
             _errno2class[eno] = cls
-            return cls 
-    _geterrnoclass = staticmethod(_geterrnoclass) 
+            return cls
+    _geterrnoclass = staticmethod(_geterrnoclass)
 
-    def __getattr__(self, name): 
-        eno = getattr(py.std.errno, name) 
+    def __getattr__(self, name):
+        eno = getattr(py.std.errno, name)
         cls = self._geterrnoclass(eno)
-        setattr(self, name, cls) 
-        return cls 
+        setattr(self, name, cls)
+        return cls
 
     def getdict(self, done=[]):
         try:
             return done[0]
-        except IndexError: 
-            for name in py.std.errno.errorcode.values(): 
+        except IndexError:
+            for name in py.std.errno.errorcode.values():
                 hasattr(self, name)   # force attribute to be loaded, ignore errors
             dictdescr = ModuleType.__dict__['__dict__']
             done.append(dictdescr.__get__(self))
@@ -59,4 +59,4 @@
     __dict__ = property(getdict)
     del getdict
 
-error = py_error('py.error', py_error.__doc__) 
+error = py_error('py.error', py_error.__doc__)

Modified: py/dist/py/misc/std.py
==============================================================================
--- py/dist/py/misc/std.py	(original)
+++ py/dist/py/misc/std.py	Sun Jan  9 16:49:34 2005
@@ -3,13 +3,13 @@
 
 class Std(object):
     def __init__(self):
-        self.__dict__ = sys.modules 
+        self.__dict__ = sys.modules
 
     def __getattr__(self, name):
         try:
             m = __import__(name)
-        except ImportError: 
-            raise AttributeError("py.std: could not import %s" % name) 
-        return m 
+        except ImportError:
+            raise AttributeError("py.std: could not import %s" % name)
+        return m
 
-std = Std() 
+std = Std()

Modified: py/dist/py/misc/testing/__init__.py
==============================================================================
--- py/dist/py/misc/testing/__init__.py	(original)
+++ py/dist/py/misc/testing/__init__.py	Sun Jan  9 16:49:34 2005
@@ -1 +1 @@
-#
\ No newline at end of file
+#

Modified: py/dist/py/misc/testing/test_api.py
==============================================================================
--- py/dist/py/misc/testing/test_api.py	(original)
+++ py/dist/py/misc/testing/test_api.py	Sun Jan  9 16:49:34 2005
@@ -6,7 +6,7 @@
 
 class TestAPI_V0_namespace_consistence:
     def test_path_entrypoints(self):
-        assert inspect.ismodule(py.path) 
+        assert inspect.ismodule(py.path)
         assert_class('py.path', 'local')
         assert_class('py.path', 'svnwc')
         assert_class('py.path', 'svnurl')
@@ -21,23 +21,23 @@
         assert_function('py.magic', 'revoke')
 
     def test_process_entrypoints(self):
-        assert_function('py.process', 'cmdexec') 
+        assert_function('py.process', 'cmdexec')
 
     def XXXtest_utest_entrypoints(self):
-        # XXX TOBECOMPLETED 
-        assert_function('py.test', 'main') 
-        #assert_module('std.utest', 'collect') 
+        # XXX TOBECOMPLETED
+        assert_function('py.test', 'main')
+        #assert_module('std.utest', 'collect')
 
 def assert_class(modpath, name):
     mod = __import__(modpath, None, None, [name])
-    obj = getattr(mod, name) 
+    obj = getattr(mod, name)
     fullpath = modpath + '.' + name
-    assert obj.__module__ == modpath 
+    assert obj.__module__ == modpath
     if sys.version_info >= (2,3):
         assert obj.__name__ == name
 
 def assert_function(modpath, name):
     mod = __import__(modpath, None, None, [name])
-    obj = getattr(mod, name) 
-    assert hasattr(obj, 'func_doc') 
+    obj = getattr(mod, name)
+    assert hasattr(obj, 'func_doc')
     #assert obj.func_name == name

Modified: py/dist/py/misc/testing/test_cache.py
==============================================================================
--- py/dist/py/misc/testing/test_cache.py	(original)
+++ py/dist/py/misc/testing/test_cache.py	Sun Jan  9 16:49:34 2005
@@ -1,55 +1,55 @@
-import py 
-from py.__impl__.misc.cache import BuildcostAccessCache, AgingCache 
+import py
+from py.__impl__.misc.cache import BuildcostAccessCache, AgingCache
 
-class BasicCacheAPITest: 
+class BasicCacheAPITest:
     cache = None
-    def test_getorbuild(self): 
-        val = self.cache.getorbuild(-42, lambda: 42) 
-        assert val == 42 
-        val = self.cache.getorbuild(-42, lambda: 23) 
-        assert val == 42 
-
-    def test_cache_get_key_error(self): 
-        assert self.cache.getentry(-23) == None 
-
-    def test_delentry_non_raising(self): 
-        val = self.cache.getorbuild(100, lambda: 100) 
-        self.cache.delentry(100) 
-        assert self.cache.getentry(100) is None 
-
-    def test_delentry_raising(self): 
-        val = self.cache.getorbuild(100, lambda: 100) 
-        self.cache.delentry(100) 
+    def test_getorbuild(self):
+        val = self.cache.getorbuild(-42, lambda: 42)
+        assert val == 42
+        val = self.cache.getorbuild(-42, lambda: 23)
+        assert val == 42
+
+    def test_cache_get_key_error(self):
+        assert self.cache.getentry(-23) == None
+
+    def test_delentry_non_raising(self):
+        val = self.cache.getorbuild(100, lambda: 100)
+        self.cache.delentry(100)
+        assert self.cache.getentry(100) is None
+
+    def test_delentry_raising(self):
+        val = self.cache.getorbuild(100, lambda: 100)
+        self.cache.delentry(100)
         py.test.raises(KeyError, "self.cache.delentry(100, raising=True)")
 
-class TestBuildcostAccess(BasicCacheAPITest): 
-    cache = BuildcostAccessCache(maxentries=128) 
+class TestBuildcostAccess(BasicCacheAPITest):
+    cache = BuildcostAccessCache(maxentries=128)
 
-    def test_cache_works_somewhat_simple(self): 
-        cache = BuildcostAccessCache() 
-        for x in range(cache.maxentries): 
-            y = cache.getorbuild(x, lambda: x) 
-            assert x == y 
-        for x in range(cache.maxentries): 
-            assert cache.getorbuild(x, None) == x 
-        for x in range(cache.maxentries/2): 
-            assert cache.getorbuild(x, None) == x 
-            assert cache.getorbuild(x, None) == x 
-            assert cache.getorbuild(x, None) == x 
-        val = cache.getorbuild(cache.maxentries * 2, lambda: 42) 
-        assert val == 42 
-        # check that recently used ones are still there  
+    def test_cache_works_somewhat_simple(self):
+        cache = BuildcostAccessCache()
+        for x in range(cache.maxentries):
+            y = cache.getorbuild(x, lambda: x)
+            assert x == y
+        for x in range(cache.maxentries):
+            assert cache.getorbuild(x, None) == x
+        for x in range(cache.maxentries/2):
+            assert cache.getorbuild(x, None) == x
+            assert cache.getorbuild(x, None) == x
+            assert cache.getorbuild(x, None) == x
+        val = cache.getorbuild(cache.maxentries * 2, lambda: 42)
+        assert val == 42
+        # check that recently used ones are still there
         # and are not build again
-        for x in range(cache.maxentries/2): 
-            assert cache.getorbuild(x, None) == x 
-        assert cache.getorbuild(cache.maxentries*2, None) == 42 
-       
-
-class TestAging(BasicCacheAPITest): 
-    maxsecs = 0.02 
-    cache = AgingCache(maxentries=128, maxseconds=maxsecs) 
+        for x in range(cache.maxentries/2):
+            assert cache.getorbuild(x, None) == x
+        assert cache.getorbuild(cache.maxentries*2, None) == 42
 
-    def test_cache_eviction(self): 
+
+class TestAging(BasicCacheAPITest):
+    maxsecs = 0.02
+    cache = AgingCache(maxentries=128, maxseconds=maxsecs)
+
+    def test_cache_eviction(self):
         self.cache.getorbuild(17, lambda: 17)
-        py.std.time.sleep(self.maxsecs*1.1) 
-        assert self.cache.getentry(17) is None 
+        py.std.time.sleep(self.maxsecs*1.1)
+        assert self.cache.getentry(17) is None

Modified: py/dist/py/misc/testing/test_error.py
==============================================================================
--- py/dist/py/misc/testing/test_error.py	(original)
+++ py/dist/py/misc/testing/test_error.py	Sun Jan  9 16:49:34 2005
@@ -1,10 +1,10 @@
 
 import py
 
-import errno 
+import errno
 
-def test_error_classes(): 
-    for name in errno.errorcode.values(): 
-        x = getattr(py.error, name) 
-        assert issubclass(x, py.error.Error) 
-        assert issubclass(x, EnvironmentError) 
+def test_error_classes():
+    for name in errno.errorcode.values():
+        x = getattr(py.error, name)
+        assert issubclass(x, py.error.Error)
+        assert issubclass(x, EnvironmentError)

Modified: py/dist/py/misc/testing/test_initpkg.py
==============================================================================
--- py/dist/py/misc/testing/test_initpkg.py	(original)
+++ py/dist/py/misc/testing/test_initpkg.py	Sun Jan  9 16:49:34 2005
@@ -1,25 +1,25 @@
 import py
 import types
 
-def checksubpackage(name): 
+def checksubpackage(name):
     obj = getattr(py, name)
-    if hasattr(obj, '__map__'): # isinstance(obj, Module): 
-        keys = dir(obj) 
-        assert len(keys) > 0 
+    if hasattr(obj, '__map__'): # isinstance(obj, Module):
+        keys = dir(obj)
+        assert len(keys) > 0
         assert getattr(obj, '__map__')  == {}
 
 def test_dir():
-    from py.__impl__.initpkg import Module 
+    from py.__impl__.initpkg import Module
     for name in dir(py):
-        if name == 'magic': # greenlets don't work everywhere, we don't care here 
-            continue 
+        if name == 'magic': # greenlets don't work everywhere, we don't care here
+            continue
         if not name.startswith('_'):
-            yield checksubpackage, name 
+            yield checksubpackage, name
 
 def test_virtual_module_identity():
     from py import path as path1
     from py import path as path2
-    assert path1 is path2 
+    assert path1 is path2
     from py.path import local as local1
     from py.path import local as local2
     assert local1 is local2
@@ -27,59 +27,59 @@
 def test_importing_all_implementations():
     base = py.path.local(py.__file__).dirpath()
     nodirs = (
-        base.join('test', 'testing', 'test'), 
-        base.join('path', 'extpy', 'testing', 'test_data'), 
-        base.join('path', 'gateway',), 
-        base.join('documentation',), 
-        base.join('test', 'testing', 'import_test'), 
-        base.join('magic', 'greenlet'), 
-        base.join('bin'), 
-        base.join('execnet', 'bin'), 
+        base.join('test', 'testing', 'test'),
+        base.join('path', 'extpy', 'testing', 'test_data'),
+        base.join('path', 'gateway',),
+        base.join('documentation',),
+        base.join('test', 'testing', 'import_test'),
+        base.join('magic', 'greenlet'),
+        base.join('bin'),
+        base.join('execnet', 'bin'),
     )
     for p in base.visit('*.py', py.path.checker(dotfile=0)):
-        relpath = p.new(ext='').relto(base) 
-        if base.sep in relpath: # not std/*.py itself 
-            for x in nodirs: 
-                if p.relto(x): 
-                    break 
-            else: 
-                relpath = relpath.replace(base.sep, '.') 
-                modpath = 'py.__impl__.%s' % relpath 
-                assert __import__(modpath) 
+        relpath = p.new(ext='').relto(base)
+        if base.sep in relpath: # not std/*.py itself
+            for x in nodirs:
+                if p.relto(x):
+                    break
+            else:
+                relpath = relpath.replace(base.sep, '.')
+                modpath = 'py.__impl__.%s' % relpath
+                assert __import__(modpath)
 
-def test_shahexdigest(): 
-    hex = py.__package__.shahexdigest() 
+def test_shahexdigest():
+    hex = py.__package__.shahexdigest()
     assert len(hex) == 40
 
 def test_getzipdata():
     s = py.__package__.getzipdata()
 
-def test_getrev(): 
-    d = py.__package__.getrev() 
-    try: 
-        svnversion = py.path.local.sysfind('svnversion') 
-    except py.error.ENOENT: 
-        py.test.skip("cannot test svnversion, 'svnversion' binary not found") 
+def test_getrev():
+    d = py.__package__.getrev()
+    try:
+        svnversion = py.path.local.sysfind('svnversion')
+    except py.error.ENOENT:
+        py.test.skip("cannot test svnversion, 'svnversion' binary not found")
     v = svnversion.sysexec(py.path.local(py.__file__).dirpath())
-    assert v.startswith(str(d)) 
+    assert v.startswith(str(d))
 
-# the following test should abasically work in the future 
+# the following test should abasically work in the future
 def XXXtest_virtual_on_the_fly():
     py.initpkg('my', {
-        'x.abspath' : 'os.path.abspath', 
+        'x.abspath' : 'os.path.abspath',
         'x.local'   : 'py.path.local',
-        'y'   : 'smtplib', 
-        'z.cmdexec'   : 'py.process.cmdexec', 
+        'y'   : 'smtplib',
+        'z.cmdexec'   : 'py.process.cmdexec',
     })
     from my.x import abspath
-    from my.x import local 
-    import smtplib 
+    from my.x import local
+    import smtplib
     from my import y
-    assert y is smtplib 
+    assert y is smtplib
     from my.z import cmdexec
     from py.process import cmdexec as cmdexec2
     assert cmdexec is cmdexec2
 
 ##def test_help():
-#    help(std.path) 
+#    help(std.path)
 #    #assert False

Modified: py/dist/py/misc/testing/test_std.py
==============================================================================
--- py/dist/py/misc/testing/test_std.py	(original)
+++ py/dist/py/misc/testing/test_std.py	Sun Jan  9 16:49:34 2005
@@ -3,11 +3,11 @@
 
 def test_os():
     import os
-    assert py.std.os is os 
+    assert py.std.os is os
 
 def test_import_error_converts_to_attributeerror():
     py.test.raises(AttributeError, "py.std.xyzalskdj")
 
 def test_std_gets_it():
     for x in py.std.sys.modules:
-        assert x in py.std.__dict__ 
+        assert x in py.std.__dict__

Modified: py/dist/py/path/__init__.py
==============================================================================
--- py/dist/py/path/__init__.py	(original)
+++ py/dist/py/path/__init__.py	Sun Jan  9 16:49:34 2005
@@ -1 +1 @@
-# 
+#

Modified: py/dist/py/path/common.py
==============================================================================
--- py/dist/py/path/common.py	(original)
+++ py/dist/py/path/common.py	Sun Jan  9 16:49:34 2005
@@ -4,13 +4,13 @@
 """
 from __future__ import generators
 import sys
-import py 
+import py
 
 def checktype(pathinstance, kw):
-    names = ('local', 'svnwc', 'svnurl', 'py', 'fspy') 
+    names = ('local', 'svnwc', 'svnurl', 'py', 'fspy')
     for name,value in kw.items():
         if name in names:
-            cls = getattr(py.path, name) 
+            cls = getattr(py.path, name)
             if bool(isinstance(pathinstance, cls)) ^ bool(value):
                 return False
             del kw[name]
@@ -21,9 +21,9 @@
         self.kwargs = kwargs
     def __call__(self, p):
         return p.check(**self.kwargs)
-    
+
 class Checkers:
-    _depend_on_existence = 'exists', 
+    _depend_on_existence = 'exists',
 
     def __init__(self, path):
         self.path = path
@@ -48,16 +48,16 @@
 
     def _evaluate(self, kw):
         for name, value in kw.items():
-            invert = False 
+            invert = False
             meth = None
             try:
                 meth = getattr(self, name)
             except AttributeError:
                 if name[:3] == 'not':
                     invert = True
-                    try: 
-                        meth = getattr(self, name[3:]) 
-                    except AttributeError: 
+                    try:
+                        meth = getattr(self, name[3:])
+                    except AttributeError:
                         pass
             if meth is None:
                 raise TypeError, "no %r checker available for %r" % (name, self.path)
@@ -68,12 +68,12 @@
                 else:
                     if bool(value) ^ bool(meth()) ^ invert:
                         return False
-            except (py.error.ENOENT, py.error.ENOTDIR): 
-                for name in self._depend_on_existence: 
+            except (py.error.ENOENT, py.error.ENOTDIR):
+                for name in self._depend_on_existence:
                     if name in kw:
                         if kw.get(name):
                             return False
-                    name = 'not' + name 
+                    name = 'not' + name
                     if name in kw:
                         if not kw.get(name):
                             return False
@@ -100,17 +100,17 @@
         if isinstance(other, str):
             return self.join(other).check()
         else:
-            if other.dirpath() != self: 
+            if other.dirpath() != self:
                 return False
             p = self.join(other.basename)
             return p.check()
 
     def basename(self):
         return self.get('basename')[0]
-    basename = property(basename, None, None, 'basename part of path') 
+    basename = property(basename, None, None, 'basename part of path')
 
-    def parts(self, reverse=False): 
-        """ return a root-first list of all ancestor directories 
+    def parts(self, reverse=False):
+        """ return a root-first list of all ancestor directories
             plus the path itself.
         """
         current = self
@@ -119,20 +119,20 @@
             last = current
             current = current.dirpath()
             if last == current:
-                break 
-            l.insert(0, current) 
+                break
+            l.insert(0, current)
         if reverse:
             l.reverse()
         return l
 
     def common(self, other):
         """ return the common part shared with the other path
-            or None if there is no common part. 
+            or None if there is no common part.
         """
         last = None
         for x, y in zip(self.parts(), other.parts()):
             if x != y:
-                return last 
+                return last
             last = x
         return last
 
@@ -151,7 +151,7 @@
     def __repr__(self):
         return repr(str(self))
 
-    def visit(self, fil=None, rec=None, ignore=None): 
+    def visit(self, fil=None, rec=None, ignore=None):
         if isinstance(fil, str):
             fil = fnmatch(fil)
         if isinstance(rec, str):
@@ -160,12 +160,12 @@
             try:
                 dirlist = self.listdir()
             except ignore:
-                return 
+                return
         else:
             dirlist = self.listdir()
         checkdir = py.path.checker(dir=1)
         reclist = []
-        for p in dirlist: 
+        for p in dirlist:
             if fil is None or fil(p):
                 yield p
             if checkdir(p) and (rec is None or rec(p)):
@@ -176,18 +176,18 @@
                 yield i
 
     def _callex(self, func, *args):
-        """ call a function and raise errno-exception if applicable. """ 
+        """ call a function and raise errno-exception if applicable. """
         try:
             return func(*args)
         except (py.error.Error, KeyboardInterrupt, SystemExit):
-            raise 
+            raise
         except EnvironmentError, e:
-            if not hasattr(e, 'errno'): 
-                raise 
-            cls, value, tb = sys.exc_info() 
-            cls = py.error._geterrnoclass(e.errno) 
+            if not hasattr(e, 'errno'):
+                raise
+            cls, value, tb = sys.exc_info()
+            cls = py.error._geterrnoclass(e.errno)
             value = cls("%s%r" % (func.__name__, args))
-            raise cls, value, tb 
+            raise cls, value, tb
 
 class fnmatch:
     def __init__(self, pattern):
@@ -201,17 +201,17 @@
         [!seq]  matches any char not in seq
 
         if the pattern contains a path-separator then the full path
-        is used for pattern matching and a '*' is prepended to the 
-        pattern. 
+        is used for pattern matching and a '*' is prepended to the
+        pattern.
 
         if the pattern doesn't contain a path-separator the pattern
-        is only matched against the basename. 
+        is only matched against the basename.
         """
         pattern = self.pattern
         if pattern.find(path.sep) == -1:
-            name = path.basename 
+            name = path.basename
         else:
-            name = str(path) # path.strpath # XXX svn? 
+            name = str(path) # path.strpath # XXX svn?
             pattern = '*' + path.sep + pattern
         from fnmatch import fnmatch
         return fnmatch(name, pattern)
@@ -232,9 +232,9 @@
     def ext(self, arg):
         if not arg.startswith('.'):
             arg = '.' + arg
-        return self.path.ext == arg 
+        return self.path.ext == arg
 
-class FSPathBase(PathBase): 
+class FSPathBase(PathBase):
     """ shared implementation for filesystem path objects."""
     Checkers = FSCheckers
 
@@ -243,27 +243,27 @@
 
     def dirpath(self, *args, **kwargs):
         """ return the directory Path of the current Path joined
-            with any given path arguments. 
+            with any given path arguments.
         """
-        return self.new(basename='').join(*args, **kwargs) 
+        return self.new(basename='').join(*args, **kwargs)
 
     def ext(self):
         return self.get('ext')[0]
-    ext = property(ext, None, None, 'extension part of path') 
+    ext = property(ext, None, None, 'extension part of path')
 
     def purebasename(self):
         return self.get('purebasename')[0]
     purebasename = property(purebasename, None, None, 'basename without extension')
 
     def read(self, mode='rb'):
-        """ read and return a bytestring from reading the path. """ 
-        if py.std.sys.version_info < (2,3): 
-            for x in 'u', 'U': 
-                if x in mode: 
-                    mode = mode.replace(x, '') 
-        f = self.open(mode) 
+        """ read and return a bytestring from reading the path. """
+        if py.std.sys.version_info < (2,3):
+            for x in 'u', 'U':
+                if x in mode:
+                    mode = mode.replace(x, '')
+        f = self.open(mode)
         try:
-            return f.read() 
+            return f.read()
         finally:
             f.close()
 
@@ -292,11 +292,11 @@
 
     def move(self, target):
         if target.relto(self):
-            raise py.error.EINVAL(target, "cannot move path into a subdirectory of itself") 
+            raise py.error.EINVAL(target, "cannot move path into a subdirectory of itself")
         try:
             self.rename(target)
         except py.error.EXDEV:  # invalid cross-device link
-            self.copy(target)    
+            self.copy(target)
             self.remove()
 
     def getpymodule(self):
@@ -309,7 +309,7 @@
             co = self.getpycodeobj()
             mod = py.std.new.module(modname)
             mod.__file__ = PathStr(self)
-            if self.basename == '__init__.py': 
+            if self.basename == '__init__.py':
                 mod.__path__ = [str(self.dirpath())]
             sys.modules[modname] = mod
             exec co in mod.__dict__
@@ -318,7 +318,7 @@
     def getpycodeobj(self):
         s = self.read('rU')
         # XXX str(self) should show up somewhere in the code's filename
-        return py.code.compile(s) 
+        return py.code.compile(s)
 
 class PathStr(str):
     def __init__(self, path):

Modified: py/dist/py/path/extpy/extpy.py
==============================================================================
--- py/dist/py/path/extpy/extpy.py	(original)
+++ py/dist/py/path/extpy/extpy.py	Sun Jan  9 16:49:34 2005
@@ -1,40 +1,40 @@
 """
-A path to python objects located in filesystems. 
+A path to python objects located in filesystems.
 
 Note: this is still experimental and may be removed
       for the first stable release!
 """
 from __future__ import generators
 import py
-from py.__impl__.path import common 
+from py.__impl__.path import common
 import sys
 import inspect
-moduletype = type(py) 
+moduletype = type(py)
 
 class Extpy(common.PathBase):
-    """ path object for addressing python objects. """ 
+    """ path object for addressing python objects. """
     sep = '.'
-    def __new__(cls, root, modpath=''): 
+    def __new__(cls, root, modpath=''):
         if isinstance(root, str):
-            root = py.path.local(root) 
+            root = py.path.local(root)
         #root = py.path.local(root)
-            #raise TypeError("first root argument is not resolvable") 
+            #raise TypeError("first root argument is not resolvable")
         if not isinstance(modpath, str):
-            raise TypeError("second 'modpath' argument must be a dotted name.") 
+            raise TypeError("second 'modpath' argument must be a dotted name.")
         #assert not isinstance(root, Extpy)
         self = object.__new__(cls)
         self.modpath = modpath
-        self.root = root 
+        self.root = root
         return self
 
     def __hash__(self):
-        return hash((self.root, self.modpath)) 
+        return hash((self.root, self.modpath))
 
     def __repr__(self):
-        return 'extpy(%r, %r)' % (self.root, self.modpath) 
+        return 'extpy(%r, %r)' % (self.root, self.modpath)
 
     def __str__(self):
-        return str(self.root.new(ext=self.modpath)) 
+        return str(self.root.new(ext=self.modpath))
 
     def join(self, *args):
         for arg in args:
@@ -42,28 +42,28 @@
                 raise TypeError, "non-strings not allowed in %r" % args
         modpath = [x.strip('.') for x in ((self.modpath,)+args) if x]
         modpath = self.sep.join(modpath)
-        return self.__class__(self.root, modpath) 
+        return self.__class__(self.root, modpath)
 
     def dirpath(self, *args):
         modpath = self.modpath.split(self.sep) [:-1]
         modpath = self.sep.join(modpath+list(args))
-        return self.__class__(self.root, modpath) 
-        
+        return self.__class__(self.root, modpath)
+
     def new(self, **kw):
         """ create a modified version of this path.
             the following keyword arguments modify various path parts:
-            modpath    substitute module path 
+            modpath    substitute module path
         """
-        cls = self.__class__ 
+        cls = self.__class__
         if 'modpath' in kw:
-            return cls(self.root, kw['modpath']) 
+            return cls(self.root, kw['modpath'])
         if 'basename' in kw:
             i = self.modpath.rfind('.')
-            if i != -1: 
+            if i != -1:
                 return cls(self.root, self.modpath[i+1:] + kw['basename'])
             else:
                 return cls(self.root, kw['basename'])
-        return cls(self.root, self.modpath) 
+        return cls(self.root, self.modpath)
 
     def get(self, spec):
         l = []
@@ -71,29 +71,29 @@
         for name in spec.split(','):
             if name == 'basename':
                 l.append(modparts[-1])
-        return l 
+        return l
 
     def resolve(self):
         """return the python object, obtained from traversing from
-           the root along the modpath. 
+           the root along the modpath.
         """
-        rest = filter(None, self.modpath.split('.')) 
+        rest = filter(None, self.modpath.split('.'))
         target = self.getpymodule()
-        for name in rest: 
+        for name in rest:
             try:
                 target = getattr(target, name)
             except AttributeError:
-                raise py.error.ENOENT(target, name) 
-        return target 
+                raise py.error.ENOENT(target, name)
+        return target
 
     def getpymodule(self):
-        if hasattr(self.root, 'resolve'): 
-            return self.root.resolve() 
+        if hasattr(self.root, 'resolve'):
+            return self.root.resolve()
         else:
             return self.root.getpymodule()
 
     def relto(self, otherpath):
-        if self.root == otherpath.root: 
+        if self.root == otherpath.root:
             if self.modpath.startswith(otherpath.modpath):
                 s = self.modpath[len(otherpath.modpath):]
                 return s.lstrip(self.sep)
@@ -116,7 +116,7 @@
         obj = self.resolve()
         l = []
         #print "listdir on", self
-        if not hasattr(obj, '__dict__'): 
+        if not hasattr(obj, '__dict__'):
             raise py.error.ENOTDIR(self, "does not have a __dict__ attribute")
         for name in dir(obj):
             sub = self.join(name)
@@ -129,30 +129,30 @@
 
     def getfilelineno(self, scrapinit=0):
         x = obj = self.resolve()
-        if inspect.ismodule(obj): 
+        if inspect.ismodule(obj):
             return obj.__file__, 0
         if inspect.ismethod(obj):
-            obj = obj.im_func 
+            obj = obj.im_func
         if inspect.isfunction(obj):
-            obj = obj.func_code 
+            obj = obj.func_code
         if inspect.iscode(obj):
             return py.path.local(obj.co_filename), obj.co_firstlineno - 1
         else:
-            source, lineno = inspect.findsource(obj) 
+            source, lineno = inspect.findsource(obj)
             return x.getfile(), lineno - 1
 
     def visit(self, fil=None, rec=None, ignore=None, seen=None):
         def myrec(p, seen={id(self): True}):
             if id(p) in seen:
                 return False
-            seen[id(p)] = True 
+            seen[id(p)] = True
             if self.samefile(p):
-                return True 
-            
+                return True
+
         for x in super(Extpy, self).visit(fil=fil, rec=rec, ignore=ignore):
             yield x
         return
-  
+
         if seen is None:
             seen = {id(self): True}
 
@@ -165,20 +165,20 @@
             try:
                 l = self.listdir()
             except ignore:
-                return 
+                return
         else:
             l = self.listdir()
         reclist = []
-        for p in l: 
+        for p in l:
             if fil is None or fil(p):
                 yield p
             if id(p) not in seen:
                 try:
                     obj = p.resolve()
-                    if inspect.isclass(obj) or inspect.ismodule(obj): 
+                    if inspect.isclass(obj) or inspect.ismodule(obj):
                         reclist.append(p)
                 finally:
-                    seen[id(p)] = p 
+                    seen[id(p)] = p
         for p in reclist:
             for i in p.visit(fil, rec, seen):
                 yield i
@@ -186,20 +186,20 @@
     def samefile(self, other):
         otherobj = other.resolve()
         try:
-            x = inspect.getfile(otherobj) 
-        except TypeError: 
-            return False 
+            x = inspect.getfile(otherobj)
+        except TypeError:
+            return False
         if x.endswith('.pyc'):
             x = x[:-1]
         if str(self.root) == x:
             return True
 
-    def read(self): 
+    def read(self):
         """ return a bytestring from looking at our underlying object. """
         return str(self.resolve())
 
     class Checkers(common.Checkers):
-        _depend_on_existence = (common.Checkers._depend_on_existence + 
+        _depend_on_existence = (common.Checkers._depend_on_existence +
                                 ('func', 'class_', 'exists', 'dir'))
 
         def _obj(self):
@@ -208,7 +208,7 @@
 
         def exists(self):
             obj = self._obj()
-            return True 
+            return True
 
         def func(self):
             ob = self._obj()
@@ -216,20 +216,20 @@
 
         def class_(self):
             ob = self._obj()
-            return inspect.isclass(ob) 
-           
+            return inspect.isclass(ob)
+
         def isinstance(self, args):
             return isinstance(self._obj(), args)
 
         def dir(self):
             obj = self._obj()
-            return inspect.isclass(obj) or inspect.ismodule(obj) 
+            return inspect.isclass(obj) or inspect.ismodule(obj)
 
         def file(self):
-            return not self.dir() 
+            return not self.dir()
 
         def genfunc(self):
             try:
-                return self._obj().func_code.co_flags & 32 
+                return self._obj().func_code.co_flags & 32
             except AttributeError:
-                return False 
+                return False

Modified: py/dist/py/path/extpy/testing/__init__.py
==============================================================================
--- py/dist/py/path/extpy/testing/__init__.py	(original)
+++ py/dist/py/path/extpy/testing/__init__.py	Sun Jan  9 16:49:34 2005
@@ -1 +1 @@
-#
\ No newline at end of file
+#

Modified: py/dist/py/path/extpy/testing/inc_pseudofs.py
==============================================================================
--- py/dist/py/path/extpy/testing/inc_pseudofs.py	(original)
+++ py/dist/py/path/extpy/testing/inc_pseudofs.py	Sun Jan  9 16:49:34 2005
@@ -6,7 +6,7 @@
     otherfile = 'otherfile'
 
 class otherdir:
-    init = 42 
+    init = 42
 
 class execfile:
-    x = 42 
+    x = 42

Modified: py/dist/py/path/extpy/testing/inc_test_extpy.py
==============================================================================
--- py/dist/py/path/extpy/testing/inc_test_extpy.py	(original)
+++ py/dist/py/path/extpy/testing/inc_test_extpy.py	Sun Jan  9 16:49:34 2005
@@ -1,4 +1,4 @@
-from __future__ import generators 
+from __future__ import generators
 
 class A:
     x1 = 42
@@ -9,10 +9,10 @@
         yield 2
 
 class B:
-    x2 = 23 
-   
+    x2 = 23
+
 class Nested:
     class Class:
         def borgfunc(self): pass
 
-    
+

Modified: py/dist/py/path/extpy/testing/test_data/no_trailing_newline.py
==============================================================================
--- py/dist/py/path/extpy/testing/test_data/no_trailing_newline.py	(original)
+++ py/dist/py/path/extpy/testing/test_data/no_trailing_newline.py	Sun Jan  9 16:49:34 2005
@@ -4,4 +4,4 @@
 
 #############################################################################
 # 2004 M.E.Farmer Jr.
-# Python license
\ No newline at end of file
+# Python license

Modified: py/dist/py/path/extpy/testing/test_extpy.py
==============================================================================
--- py/dist/py/path/extpy/testing/test_extpy.py	(original)
+++ py/dist/py/path/extpy/testing/test_extpy.py	Sun Jan  9 16:49:34 2005
@@ -1,9 +1,9 @@
 import os
-import py 
+import py
 
-from py.__impl__.path.test import common 
+from py.__impl__.path.test import common
 
-mypath = py.magic.autopath().dirpath('inc_test_extpy.py') 
+mypath = py.magic.autopath().dirpath('inc_test_extpy.py')
 
 class TestExtPyCommonTests(common.CommonPathTests):
     def setup_class(cls):
@@ -11,12 +11,12 @@
                       py.magic.autopath().dirpath('inc_pseudofs.py'))
 
     def test_file(self):
-        assert self.root.join('samplefile').check(file=1) 
-        assert self.root.join('otherdir').check(file=0) 
- 
-class TestExtPy: 
+        assert self.root.join('samplefile').check(file=1)
+        assert self.root.join('otherdir').check(file=0)
+
+class TestExtPy:
     def setup_class(cls):
-        cls.root = py.path.extpy(mypath) 
+        cls.root = py.path.extpy(mypath)
 
     def test_join(self):
         p = self.root.join('A')
@@ -27,7 +27,7 @@
     def test_listdir_module(self):
         l = self.root.listdir()
         basenames = [x.basename for x in l]
-        dlist = dir(self.root.resolve()) 
+        dlist = dir(self.root.resolve())
         for name in dlist:
             assert name in basenames
         for name in basenames:
@@ -36,7 +36,7 @@
     def test_listdir_class(self):
         l = self.root.join('A').listdir()
         basenames = [x.basename for x in l]
-        dlist = dir(self.root.resolve().A) 
+        dlist = dir(self.root.resolve().A)
         for name in dlist:
             assert name in basenames
         for name in basenames:
@@ -45,33 +45,33 @@
     def listobj(self):
         l = self.root.listobj(basestarts='path')
         assert len(l) == 1
-        assert l[0] == path 
+        assert l[0] == path
 
     def test_visit(self):
         l = list(self.root.visit(py.path.checker(basename='borgfunc')))
         assert len(l) == 1
         obj = l[0]
-        assert str(obj).endswith('Nested.Class.borgfunc') 
-        assert obj.resolve() == self.root.resolve().Nested.Class.borgfunc 
+        assert str(obj).endswith('Nested.Class.borgfunc')
+        assert obj.resolve() == self.root.resolve().Nested.Class.borgfunc
 
     def test_visit_fnmatch(self):
-        l = list(self.root.visit('borg*')) 
+        l = list(self.root.visit('borg*'))
         assert len(l) == 1
         obj = l[0]
-        assert str(obj).endswith('Nested.Class.borgfunc') 
-        assert obj.resolve() == self.root.resolve().Nested.Class.borgfunc 
+        assert str(obj).endswith('Nested.Class.borgfunc')
+        assert obj.resolve() == self.root.resolve().Nested.Class.borgfunc
 
     #def test_join_from_empty(self):
-    #    p = path.py('') 
+    #    p = path.py('')
     #    n = p.join('tokenize')
     #    assert str(n) == 'tokenize'
     #
-    #    p = path.py('', ns=os) 
+    #    p = path.py('', ns=os)
     #    n = p.join('getlogin')
     #    assert str(n) == 'getlogin'
 
     #def test_unspecifiedpypath_lists_modules(self):
-    #    p = path.py('') 
+    #    p = path.py('')
     #    l = p.listdir()
     #    for i in l:
     #        assert '.' not in str(i)
@@ -84,20 +84,20 @@
     #            self.fail("%s is not in sys.modules")
 
     #def test_main_works(self):
-    #    m = path.py('__main__') 
+    #    m = path.py('__main__')
     #    import __main__
     #    assert m.resolve() is __main__
 
     def test_relto(self):
-        m1 = self.root.new(modpath='a.b.c.d') 
+        m1 = self.root.new(modpath='a.b.c.d')
         m2 = self.root.new(modpath='a.b')
-        m3 = self.root.new(modpath='') 
+        m3 = self.root.new(modpath='')
         res = m1.relto(m2)
         assert str(res) == 'c.d'
-        assert m2.relto(m3) == 'a.b' 
+        assert m2.relto(m3) == 'a.b'
 
     def test_basename(self):
-        m1 = self.root.new(modpath='a.b.hello') 
+        m1 = self.root.new(modpath='a.b.hello')
         assert m1.basename == 'hello'
         assert m1.check(basename='hello')
         assert not m1.check(basename='nono')
@@ -106,17 +106,17 @@
 
     def test_dirpath(self):
         m1 = self.root.new(modpath='a.b.hello')
-        m2 = self.root.new(modpath='a.b') 
-        m3 = self.root.new(modpath='a') 
-        m4 = self.root.new(modpath='') 
-        assert m1.dirpath() == m2 
-        assert m2.dirpath() == m3 
-        assert m3.dirpath() == m4 
+        m2 = self.root.new(modpath='a.b')
+        m3 = self.root.new(modpath='a')
+        m4 = self.root.new(modpath='')
+        assert m1.dirpath() == m2
+        assert m2.dirpath() == m3
+        assert m3.dirpath() == m4
 
     def test_function(self):
-        p = self.root.join('A.func') 
+        p = self.root.join('A.func')
         assert p.check(func=1)
-        p = self.root.join('A.x1') 
+        p = self.root.join('A.x1')
         assert p.check(func=0)
 
     def test_generatorfunction(self):
@@ -128,33 +128,33 @@
         assert p.check(genfunc=0)
 
     def test_class(self):
-        p = self.root.join('A') 
+        p = self.root.join('A')
         assert p.check(class_=1)
 
     def test_hashing_equality(self):
         x = self.root
-        y = self.root.new() 
-        assert x == y 
-        assert hash(x) == hash(y) 
+        y = self.root.new()
+        assert x == y
+        assert hash(x) == hash(y)
 
     def test_parts2(self):
-        x = self.root.new(modpath='os.path.abspath') 
-        l = x.parts() 
-        assert len(l) == 4 
+        x = self.root.new(modpath='os.path.abspath')
+        l = x.parts()
+        assert len(l) == 4
         assert self.root.join('') == l[0]
         assert self.root.join('os') == l[1]
         assert self.root.join('os.path') == l[2]
         assert self.root.join('os.path.abspath') == l[3]
 
-#class TestExtPyWithModule: 
+#class TestExtPyWithModule:
 #    def test_module(self):
 #        import os
-#        x = py.path.extpy(os, 'path.abspath') 
+#        x = py.path.extpy(os, 'path.abspath')
 #        assert x.check()
-#        assert x.resolve() is os.path.abspath 
+#        assert x.resolve() is os.path.abspath
 #    #def setup_class(cls):
-    #    cls.root = py.path.extpy(mypath) 
-        
+    #    cls.root = py.path.extpy(mypath)
+
 class TestEval:
     disabled = True
     def test_funccall(self):
@@ -170,17 +170,17 @@
         p = path.py('os.path.qwe("a", ')
         s = test.raises(ValueError, "p.resolve()")
 
-class TestErrors: 
+class TestErrors:
     def test_ENOENT(self):
-        p = py.path.extpy(mypath, 'somesuch') 
+        p = py.path.extpy(mypath, 'somesuch')
         py.test.raises(py.error.ENOENT, p.resolve)
 
     def test_ENOENT_really(self):
-        p = py.path.extpy(mypath.new(basename='notexist'), 'somesuch') 
+        p = py.path.extpy(mypath.new(basename='notexist'), 'somesuch')
         py.test.raises(py.error.ENOENT, p.resolve)
 
     #def test_ImportError():
-    #    p = path.py('__std.utest.test.data.failingimport.someattr') 
+    #    p = path.py('__std.utest.test.data.failingimport.someattr')
     #    utest.raises(ImportError, p.resolve)
 
 class ExampleClass:

Modified: py/dist/py/path/gateway/channeltest.py
==============================================================================
--- py/dist/py/path/gateway/channeltest.py	(original)
+++ py/dist/py/path/gateway/channeltest.py	Sun Jan  9 16:49:34 2005
@@ -25,7 +25,7 @@
 
     def command_GET(self, id, spec):
         path = self.C2P[id]
-        self.channel.send(path.get(spec)) 
+        self.channel.send(path.get(spec))
 
     def command_READ(self, id):
         path = self.C2P[id]

Modified: py/dist/py/path/gateway/channeltest2.py
==============================================================================
--- py/dist/py/path/gateway/channeltest2.py	(original)
+++ py/dist/py/path/gateway/channeltest2.py	Sun Jan  9 16:49:34 2005
@@ -12,7 +12,7 @@
 
 
 #gw = py.execnet.SshGateway('codespeak.net')
-gw = py.execnet.PopenGateway() 
+gw = py.execnet.PopenGateway()
 c = gw.remote_exec(SRC)
 subchannel = gw.channelfactory.new()
 c.send(subchannel)

Modified: py/dist/py/path/gateway/remotepath.py
==============================================================================
--- py/dist/py/path/gateway/remotepath.py	(original)
+++ py/dist/py/path/gateway/remotepath.py	Sun Jan  9 16:49:34 2005
@@ -36,10 +36,10 @@
     def get(self, spec):
         parts = spec.split(',')
         ask = [x for x in parts  if x not in self._specs]
-        if ask: 
+        if ask:
             self._channel.send(('GET', self._id, ",".join(ask)))
-            for part, value in zip(ask, self._channel.receive()): 
-                self._specs[part] = value 
+            for part, value in zip(ask, self._channel.receive()):
+                self._specs[part] = value
         return [self._specs[x] for x in parts]
 
     def read(self):

Modified: py/dist/py/path/local/api.py
==============================================================================
--- py/dist/py/path/local/api.py	(original)
+++ py/dist/py/path/local/api.py	Sun Jan  9 16:49:34 2005
@@ -1,7 +1,7 @@
 """
 Tool functions regarding local filesystem paths
 """
-from py import path 
+from py import path
 
 def get_temproot():
     """ return the system's temporary directory (where tempfiles are usually created in)"""
@@ -10,16 +10,16 @@
         return p.dirpath()
     finally:
         p.remove()
-    
+
 def mkdtemp():
     """ return a Path object pointing to a fresh new temporary directory
-    (which we created ourself).  
+    (which we created ourself).
     """
     import tempfile
     tries = 10
     for i in range(tries):
         dname = tempfile.mktemp()
-        dpath = path.local(tempfile.mktemp()) 
+        dpath = path.local(tempfile.mktemp())
         try:
             dpath.mkdir()
         except path.FileExists:
@@ -29,16 +29,16 @@
 
 def make_numbered_dir(rootdir=None, base = 'session-', keep=3):
     """ return unique directory with a number greater than the current
-        maximum one.  The number is assumed to start directly after base. 
+        maximum one.  The number is assumed to start directly after base.
         if keep is true directories with a number less than (maxnum-keep)
-        will be removed. 
+        will be removed.
     """
     if rootdir is None:
         rootdir = get_temproot()
 
     def parse_num(path):
         """ parse the number out of a path (if it matches the base) """
-        bn = path.basename 
+        bn = path.basename
         if bn.startswith(base):
             try:
                 return int(bn[len(base):])
@@ -52,11 +52,11 @@
         if num is not None:
             maxnum = max(maxnum, num)
 
-    # make the new directory 
+    # make the new directory
     udir = rootdir.mkdir(base + str(maxnum+1))
 
     # prune old directories
-    if keep: 
+    if keep:
         for path in rootdir.listdir():
             num = parse_num(path)
             if num is not None and num <= (maxnum - keep):
@@ -67,7 +67,7 @@
     if startmodule is None:
         fn = path.local()
     else:
-        mod = path.py(startmodule) 
+        mod = path.py(startmodule)
         fn = mod.getfile()
     current = fn.dirpath()
     while current != fn:

Modified: py/dist/py/path/local/local.py
==============================================================================
--- py/dist/py/path/local/local.py	(original)
+++ py/dist/py/path/local/local.py	Sun Jan  9 16:49:34 2005
@@ -1,23 +1,23 @@
 """
-specialized local path implementation. 
+specialized local path implementation.
 
-This Path implementation offers some methods like chmod(), owner() 
-and so on that may only make sense on unix. 
+This Path implementation offers some methods like chmod(), owner()
+and so on that may only make sense on unix.
 
 """
-from __future__ import generators 
+from __future__ import generators
 import sys, os, stat
-import py 
-from py.__impl__.path import common 
+import py
+from py.__impl__.path import common
 
 if sys.platform == 'win32':
-    from py.__impl__.path.local.win import WinMixin as PlatformMixin 
+    from py.__impl__.path.local.win import WinMixin as PlatformMixin
 else:
-    from py.__impl__.path.local.posix import PosixMixin as PlatformMixin 
+    from py.__impl__.path.local.posix import PosixMixin as PlatformMixin
 
 class LocalPath(common.FSPathBase, PlatformMixin):
-    """ Local path implementation offering access/modification 
-        methods similar to os.path. 
+    """ Local path implementation offering access/modification
+        methods similar to os.path.
     """
     sep = os.sep
     class Checkers(common.FSCheckers):
@@ -27,10 +27,10 @@
             except AttributeError:
                 try:
                     self._statcache = self.path.stat()
-                except py.error.ELOOP: 
-                    self._statcache = self.path.lstat() 
+                except py.error.ELOOP:
+                    self._statcache = self.path.lstat()
                 return self._statcache
-           
+
         def dir(self):
             return stat.S_ISDIR(self._stat().st_mode)
 
@@ -45,15 +45,15 @@
             return stat.S_ISLNK(st.st_mode)
 
     def __new__(cls, path=None):
-        """ Initialize and return a local Path instance. 
+        """ Initialize and return a local Path instance.
 
         Path can be relative to the current directory.
         If it is None then the current working directory is taken.
         Note that Path instances always carry an absolute path.
-        Note also that passing in a local path object will simply return 
-        the exact same path object. Use new() to get a new copy. 
+        Note also that passing in a local path object will simply return
+        the exact same path object. Use new() to get a new copy.
         """
-        if isinstance(path, cls): 
+        if isinstance(path, cls):
             if path.__class__ == cls:
                 return path
             path = path.strpath
@@ -77,9 +77,9 @@
         """ create a modified version of this path.
             the following keyword arguments modify various path parts:
 
-              a:/some/path/to/a/file.ext 
+              a:/some/path/to/a/file.ext
               ||                            drive
-                |-------------|             dirname 
+                |-------------|             dirname
                                 |------|    basename
                                 |--|        purebasename
                                     |--|    ext
@@ -91,18 +91,18 @@
             if 'purebasename' in kw or 'ext' in kw:
                 raise ValueError("invalid specification %r" % kw)
         else:
-            pb = kw.setdefault('purebasename', purebasename) 
+            pb = kw.setdefault('purebasename', purebasename)
             try:
                 ext = kw['ext']
-            except KeyError: 
+            except KeyError:
                 pass
             else:
                 if ext and not ext.startswith('.'):
                     ext = '.' + ext
             kw['basename'] = pb + ext
 
-        kw.setdefault('drive', drive) 
-        kw.setdefault('dirname', dirname) 
+        kw.setdefault('drive', drive)
+        kw.setdefault('dirname', dirname)
         kw.setdefault('sep', self.sep)
         obj.strpath = os.path.normpath(
             "%(drive)s%(dirname)s%(sep)s%(basename)s" % kw)
@@ -110,18 +110,18 @@
 
     def get(self, spec):
         """ return a sequence of specified path parts.  'spec' is
-            a comma separated string containing path part names. 
-            according to the following convention: 
-            a:/some/path/to/a/file.ext 
+            a comma separated string containing path part names.
+            according to the following convention:
+            a:/some/path/to/a/file.ext
             ||                            drive
-              |-------------|             dirname 
+              |-------------|             dirname
                               |------|    basename
                               |--|        purebasename
                                   |--|    ext
         """
         res = []
         parts = self.strpath.split(self.sep)
-        
+
         args = filter(None, spec.split(',') )
         append = res.append
         for name in args:
@@ -145,17 +145,17 @@
                         append(ext)
                     else:
                         raise ValueError, "invalid part specification %r" % name
-        return res 
+        return res
 
     def join(self, *args, **kwargs):
         """ return a new path by appending all 'args' as path
-        components.  if abs=1 is used restart from root if any 
+        components.  if abs=1 is used restart from root if any
         of the args is an absolute path.
         """
         if not args:
             return self
         strargs = [self.strpath]
-        strargs.extend(map(str, args)) 
+        strargs.extend(map(str, args))
         if kwargs.get('abs', 0):
             for i in range(len(strargs)-1, 0, -1):
                 if os.path.isabs(strargs[i]):
@@ -170,7 +170,7 @@
 
     def open(self, mode='r'):
         """ return an opened file with the given mode. """
-        return self._callex(open, self.strpath, mode) 
+        return self._callex(open, self.strpath, mode)
 
     def listdir(self, fil=None, sort=None):
         """ list directory contents, possibly filter by the given fil func
@@ -179,7 +179,7 @@
         if isinstance(fil, str):
             fil = common.fnmatch(fil)
         res = []
-        for name in self._callex(os.listdir, self.strpath): 
+        for name in self._callex(os.listdir, self.strpath):
             childurl = self.join(name)
             if fil is None or fil(childurl):
                 res.append(childurl)
@@ -217,7 +217,7 @@
             self._callex(os.remove, self.strpath)
 
     def copy(self, target, archive=False):
-        assert not archive, "XXX archive-mode not supported" 
+        assert not archive, "XXX archive-mode not supported"
         if self.check(file=1):
             if target.check(dir=1):
                 target = target.join(self.basename)
@@ -227,18 +227,18 @@
             target.ensure(dir=1)
             def rec(p):
                 return p.check(link=0)
-            for x in self.visit(rec=rec): 
-                relpath = x.relto(self) 
+            for x in self.visit(rec=rec):
+                relpath = x.relto(self)
                 newx = target.join(relpath)
                 if x.check(link=1):
                     newx.mksymlinkto(x.readlink())
                 elif x.check(file=1):
                     copychunked(x, newx)
                 elif x.check(dir=1):
-                    newx.ensure(dir=1) 
+                    newx.ensure(dir=1)
 
     def rename(self, target):
-        return self._callex(os.rename, str(self), str(target)) 
+        return self._callex(os.rename, str(self), str(target))
 
     def dumpobj(self, obj):
         """ pickle object into path location"""
@@ -252,7 +252,7 @@
         """ create & return the directory joined with args. """
         p = self.join(*args)
         self._callex(os.mkdir, str(p))
-        return p 
+        return p
 
     def write(self, content):
         """ write string content into path. """
@@ -274,9 +274,9 @@
         return self
 
     def ensure(self, *args, **kwargs):
-        """ ensure that an args-joined path exists (by default as 
+        """ ensure that an args-joined path exists (by default as
             a file). if you specify a keyword argument 'dir=True'
-            then the path is forced to be a directory path. 
+            then the path is forced to be a directory path.
         """
         p = self.join(*args)
         if kwargs.get('dir', 0):
@@ -288,16 +288,16 @@
 
     def stat(self):
         """ Return an os.stat() tuple. """
-        return self._callex(os.stat, self.strpath) 
+        return self._callex(os.stat, self.strpath)
 
     def lstat(self):
         """ Return an os.lstat() tuple. """
-        return self._callex(os.lstat, self.strpath) 
+        return self._callex(os.lstat, self.strpath)
 
     # xlocal implementation
     def setmtime(self, mtime=None):
         """ set modification time for the given path.  if 'mtime' is None
-        (the default) then the file's mtime is set to current time. 
+        (the default) then the file's mtime is set to current time.
 
         Note that the resolution for 'mtime' is platform dependent.
         """
@@ -305,7 +305,7 @@
             return self._callex(os.utime, self.strpath, mtime)
         try:
             return self._callex(os.utime, self.strpath, (-1, mtime))
-        except py.error.EINVAL: 
+        except py.error.EINVAL:
             return self._callex(os.utime, self.strpath, (self.atime(), mtime))
 
     def chdir(self):
@@ -336,7 +336,7 @@
         return mod
 
     def getpycodeobj(self):
-        dotpy = self.check(ext='.py') 
+        dotpy = self.check(ext='.py')
         if dotpy:
             my_magic     = py.std.imp.get_magic()
             my_timestamp = int(self.mtime())
@@ -345,7 +345,7 @@
             else:
                 pycfile = self + 'o'
             try:
-                f = pycfile.open('rb') 
+                f = pycfile.open('rb')
                 try:
                     header = f.read(8)
                     if len(header) == 8:
@@ -354,62 +354,62 @@
                             return py.std.marshal.load(f)
                 finally:
                     f.close()
-            except py.error.Error: 
+            except py.error.Error:
                 pass
         s = self.read(mode='rU') + '\n'
         codeobj = compile(s, str(self), 'exec', generators.compiler_flag)
         if dotpy:
             try:
-                f = pycfile.open('wb') 
+                f = pycfile.open('wb')
                 f.write(py.std.struct.pack('<4si', 'TEMP', -1))  # fixed below
                 py.std.marshal.dump(codeobj, f)
                 f.flush()
                 f.seek(0)
                 f.write(py.std.struct.pack('<4si', my_magic, my_timestamp))
                 f.close()
-            except py.error.Error: 
+            except py.error.Error:
                 pass
         return codeobj
 
     def sysexec(self, *argv):
-        """ return stdout-put from executing a system child process, 
-            where the self path points to the binary (XXX or script) 
-            to be executed. Note that this process is directly 
-            invoked and not through a system shell. 
+        """ return stdout-put from executing a system child process,
+            where the self path points to the binary (XXX or script)
+            to be executed. Note that this process is directly
+            invoked and not through a system shell.
         """
         from py.__impl__.path.local.popen5.subprocess import Popen, PIPE
-        argv = map(str, argv) 
+        argv = map(str, argv)
         proc = Popen([str(self)] + list(argv), stdout=PIPE, stderr=PIPE)
         stdout, stderr = proc.communicate()
         ret = proc.wait()
         if ret != 0:
-            raise py.process.cmdexec.Error(ret, ret, str(self), 
-                                           stdout, 
-                                           stderr,) 
+            raise py.process.cmdexec.Error(ret, ret, str(self),
+                                           stdout,
+                                           stderr,)
         return stdout
-        
-    def sysfind(self, name, checker=None): 
-        """ return a path object found by looking at the systems 
+
+    def sysfind(self, name, checker=None):
+        """ return a path object found by looking at the systems
             underlying PATH specification. If the checker is not None
-            it will be invoked to filter matching paths.  If a binary 
-            cannot be found, py.error.ENOENT is raised. 
-            Note: This is probably not working on plain win32 systems 
-            but may work on cygwin. 
-        """ 
+            it will be invoked to filter matching paths.  If a binary
+            cannot be found, py.error.ENOENT is raised.
+            Note: This is probably not working on plain win32 systems
+            but may work on cygwin.
+        """
         for x in py.std.os.environ['PATH'].split(':'):
             p = py.path.local(x).join(name)
-            if p.check(file=1): 
-                if checker: 
-                    if not checker(p): 
-                        continue 
-                return p 
-        raise py.error.ENOENT(name) 
+            if p.check(file=1):
+                if checker:
+                    if not checker(p):
+                        continue
+                return p
+        raise py.error.ENOENT(name)
     sysfind = classmethod(sysfind)
     #"""
     #special class constructors for local filesystem paths
     #"""
     def get_temproot(cls):
-        """ return the system's temporary directory 
+        """ return the system's temporary directory
             (where tempfiles are usually created in)
         """
         p = cls.mkdtemp()
@@ -417,41 +417,41 @@
             return p.dirpath()
         finally:
             p.remove()
-    get_temproot = classmethod(get_temproot) 
-        
+    get_temproot = classmethod(get_temproot)
+
     def mkdtemp(cls):
         """ return a Path object pointing to a fresh new temporary directory
-            (which we created ourself).  
+            (which we created ourself).
         """
         import tempfile
         tries = 10
         for i in range(tries):
             dname = tempfile.mktemp()
-            dpath = cls(tempfile.mktemp()) 
+            dpath = cls(tempfile.mktemp())
             try:
                 dpath.mkdir()
             except path.FileExists:
                 continue
             return dpath
         raise py.error.ENOENT(dpath, "could not create tempdir, %d tries" % tries)
-    mkdtemp = classmethod(mkdtemp) 
+    mkdtemp = classmethod(mkdtemp)
 
     def make_numbered_dir(cls, rootdir=None, base = 'session-', keep=3):
         """ return unique directory with a number greater than the current
-            maximum one.  The number is assumed to start directly after base. 
+            maximum one.  The number is assumed to start directly after base.
             if keep is true directories with a number less than (maxnum-keep)
-            will be removed. 
+            will be removed.
         """
         if rootdir is None:
             rootdir = cls.get_temproot()
 
         def parse_num(path):
             """ parse the number out of a path (if it matches the base) """
-            bn = path.basename 
+            bn = path.basename
             if bn.startswith(base):
                 try:
                     return int(bn[len(base):])
-                except ValueError: 
+                except ValueError:
                     pass
 
         # compute the maximum number currently in use with the base
@@ -461,11 +461,11 @@
             if num is not None:
                 maxnum = max(maxnum, num)
 
-        # make the new directory 
+        # make the new directory
         udir = rootdir.mkdir(base + str(maxnum+1))
 
         # prune old directories
-        if keep: 
+        if keep:
             for path in rootdir.listdir():
                 num = parse_num(path)
                 if num is not None and num <= (maxnum - keep):
@@ -481,7 +481,7 @@
     #    if startmodule is None:
     #        fn = path.local()
     #    else:
-    #        mod = path.py(startmodule) 
+    #        mod = path.py(startmodule)
     #        fn = mod.getfile()
     #    current = fn.dirpath()
     #    while current != fn:
@@ -491,7 +491,7 @@
     #        current = current.dirpath()
     #parentdirmatch = classmethod(parentdirmatch)
 
-def copychunked(src, dest): 
+def copychunked(src, dest):
     chunksize = 524288 # half a meg of bytes
     fsrc = src.open('rb')
     try:
@@ -523,17 +523,17 @@
     dirpath = cfile.dirpath()
     lastdir = dirpath.chdir()
     try:
-        modname = cfile.purebasename 
+        modname = cfile.purebasename
         lib = py.path.local(modname+'.so')
         # argl! we need better "build"-locations alltogether!
-        if lib.check(): 
+        if lib.check():
             lib.remove()
         c = stdoutcapture.Capture(mixed_out_err = True)
         try:
             try:
                 setup(
                   name = "pylibmodules",
-                  ext_modules=[ 
+                  ext_modules=[
                         Extension(modname, [str(cfile)])
                   ],
                   script_name = 'setup.py',
@@ -542,16 +542,16 @@
                 )
             finally:
                 foutput, foutput = c.done()
-        except KeyboardInterrupt: 
+        except KeyboardInterrupt:
             raise
-        except SystemExit: 
+        except SystemExit:
             raise RuntimeError("cannot compile %s:\n%s" % (cfile, foutput.read(),))
         # XXX do we need to do some check on fout/ferr?
         # XXX not a nice way to import a module
-        if debug: 
+        if debug:
             print "inserting path to sys.path", dirpath
         sys.path.insert(0, '.')
-        if debug: 
+        if debug:
             print "import %(modname)s as testmodule" % locals()
         exec py.code.compile("import %(modname)s as testmodule" % locals())
         sys.path.pop(0)

Modified: py/dist/py/path/local/popen5/testing/__init__.py
==============================================================================
--- py/dist/py/path/local/popen5/testing/__init__.py	(original)
+++ py/dist/py/path/local/popen5/testing/__init__.py	Sun Jan  9 16:49:34 2005
@@ -1 +1 @@
-#
\ No newline at end of file
+#

Modified: py/dist/py/path/local/popen5/testing/test_subprocess.py
==============================================================================
--- py/dist/py/path/local/popen5/testing/test_subprocess.py	(original)
+++ py/dist/py/path/local/popen5/testing/test_subprocess.py	Sun Jan  9 16:49:34 2005
@@ -21,7 +21,7 @@
 def remove_stderr_debug_decorations(stderr):
     return py.std.re.sub(r"\[\d+ refs\]\r?\n?$", "", stderr)
 
-class TestPopen5(py.test.compat.TestCase): 
+class TestPopen5(py.test.compat.TestCase):
     disabled = True
     def mkstemp(self):
         """wrapper for mkstemp, calling mktemp if mkstemp is not available"""

Modified: py/dist/py/path/local/posix.py
==============================================================================
--- py/dist/py/path/local/posix.py	(original)
+++ py/dist/py/path/local/posix.py	Sun Jan  9 16:49:34 2005
@@ -1,5 +1,5 @@
 """
-module to access local filesystem pathes 
+module to access local filesystem pathes
 (mostly filename manipulations but also file operations)
 """
 import os, sys, stat
@@ -7,20 +7,20 @@
 import py
 #__________________________________________________________
 #
-# Local Path Posix Mixin 
+# Local Path Posix Mixin
 #__________________________________________________________
 
 class PosixMixin:
-    # an instance needs to be a local path instance 
+    # an instance needs to be a local path instance
     def owner(self):
         """ return owner name of file. """
-        uid = self.stat().st_uid 
-        entry = self._callex(py.std.pwd.getpwuid, uid) 
+        uid = self.stat().st_uid
+        entry = self._callex(py.std.pwd.getpwuid, uid)
         return entry[0]
 
     def group(self):
         """ return group name of file. """
-        gid = self.stat().st_gid 
+        gid = self.stat().st_gid
         entry = self._callex(py.std.grp.getgrgid, gid)
         return entry[0]
 
@@ -30,46 +30,46 @@
 
     def chmod(self, mode, rec=0):
         """ change permissions to the given mode. If mode is an
-            integer it directly encodes the os-specific modes. 
+            integer it directly encodes the os-specific modes.
             (xxx if mode is a string then it specifies access rights
-            in '/bin/chmod' style, e.g. a+r). 
-            if rec is True perform recursively. 
+            in '/bin/chmod' style, e.g. a+r).
+            if rec is True perform recursively.
         """
         if not isinstance(mode, int):
-            raise TypeError("mode %r must be an integer" % (mode,)) 
+            raise TypeError("mode %r must be an integer" % (mode,))
         if rec:
             for x in self.visit():
-                self._callex(os.chmod, str(x), mode) 
-        self._callex(os.chmod, str(self), mode) 
+                self._callex(os.chmod, str(x), mode)
+        self._callex(os.chmod, str(self), mode)
 
     def chown(self, user, group, rec=0):
-        """ change ownership to the given user and group. 
+        """ change ownership to the given user and group.
             user and group may be specified by a number or
-            by a name.  if rec is True change ownership 
-            recursively. 
+            by a name.  if rec is True change ownership
+            recursively.
         """
         uid = getuserid(user)
         gid = getgroupid(group)
         if rec:
             for x in self.visit(rec=py.path.checker(link=0)):
-                self._callex(os.chown, str(x), uid, gid) 
-        self._callex(os.chown, str(self), uid, gid) 
+                self._callex(os.chown, str(x), uid, gid)
+        self._callex(os.chown, str(self), uid, gid)
 
     def readlink(self):
-        """ return value of a symbolic link. """ 
-        return self._callex(os.readlink, self.strpath) 
+        """ return value of a symbolic link. """
+        return self._callex(os.readlink, self.strpath)
 
-    def mklinkto(self, oldname): 
-        """ posix style hard link to another name. """ 
+    def mklinkto(self, oldname):
+        """ posix style hard link to another name. """
         self._callex(os.link, str(oldname), str(self))
 
     def mksymlinkto(self, value, absolute=1):
-        """ create a symbolic link with the given value (pointing to another name). """ 
+        """ create a symbolic link with the given value (pointing to another name). """
         if absolute:
             self._callex(os.symlink, str(value), self.strpath)
         else:
             base = self.common(value)
-            # with posix local paths '/' is always a common base 
+            # with posix local paths '/' is always a common base
             relsource = self.__class__(value).relto(base)
             reldest = self.relto(base)
             n = reldest.count(self.sep)

Modified: py/dist/py/path/local/stdoutcapture.py
==============================================================================
--- py/dist/py/path/local/stdoutcapture.py	(original)
+++ py/dist/py/path/local/stdoutcapture.py	Sun Jan  9 16:49:34 2005
@@ -6,7 +6,7 @@
 
 
 class Capture:
-    
+
     def __init__(self, mixed_out_err = False):
         "Start capture of the Unix-level stdout and stderr."
         if (not hasattr(os, 'tmpfile') or

Modified: py/dist/py/path/local/testing/__init__.py
==============================================================================
--- py/dist/py/path/local/testing/__init__.py	(original)
+++ py/dist/py/path/local/testing/__init__.py	Sun Jan  9 16:49:34 2005
@@ -1 +1 @@
-#
\ No newline at end of file
+#

Modified: py/dist/py/path/local/testing/test_local.py
==============================================================================
--- py/dist/py/path/local/testing/test_local.py	(original)
+++ py/dist/py/path/local/testing/test_local.py	Sun Jan  9 16:49:34 2005
@@ -1,6 +1,6 @@
 import py
 from py.path import local, checker
-from py.__impl__.path.test.fscommon import CommonFSTests, setuptestfs 
+from py.__impl__.path.test.fscommon import CommonFSTests, setuptestfs
 
 class LocalSetup:
     def setup_class(cls):
@@ -13,7 +13,7 @@
 
     def teardown_method(self, method):
         self.tmpdir.remove(rec=1)
-        
+
 class TestLocalPath(LocalSetup, CommonFSTests):
     def test_initialize_curdir(self):
         assert str(local()) == py.std.os.getcwd()
@@ -33,7 +33,7 @@
         assert path1 == path2
         assert path2 == path1
         path3 = self.root.join('samplefile')
-        assert path3 != path2 
+        assert path3 != path2
         assert path2 != path3
 
     def test_dump(self):
@@ -98,7 +98,7 @@
 
     def test_chdir(self):
         tmpdir = self.tmpdir.realpath()
-        old = local() 
+        old = local()
         try:
             res = tmpdir.chdir()
             assert str(res) == str(old)
@@ -107,69 +107,69 @@
             old.chdir()
 
     def test_ensure_filepath_withdir(self):
-        tmpdir = self.tmpdir 
+        tmpdir = self.tmpdir
         newfile = tmpdir.join('test1','test2')
         newfile.ensure()
         assert newfile.check(file=1)
 
     def test_ensure_filepath_withoutdir(self):
-        tmpdir = self.tmpdir 
+        tmpdir = self.tmpdir
         newfile = tmpdir.join('test1')
         t = newfile.ensure()
         assert t == newfile
         assert newfile.check(file=1)
 
     def test_ensure_dirpath(self):
-        tmpdir = self.tmpdir 
+        tmpdir = self.tmpdir
         newfile = tmpdir.join('test1','test2')
         t = newfile.ensure(dir=1)
         assert t == newfile
         assert newfile.check(dir=1)
 
 class TestExecution(LocalSetup):
-    disabled = py.std.sys.platform == 'win32' 
+    disabled = py.std.sys.platform == 'win32'
 
     def test_sysfind(self):
         x = py.path.local.sysfind('test')
-        assert x.check(file=1) 
+        assert x.check(file=1)
         py.test.raises(py.error.ENOENT, """
             py.path.local.sysfind('jaksdkasldqwe')
-        """) 
+        """)
 
     def test_sysfind_multiple(self):
-        dir = py.test.config.tmpdir.ensure('sysfind', dir=1) 
+        dir = py.test.config.tmpdir.ensure('sysfind', dir=1)
         env = py.std.os.environ
-        oldpath = env['PATH'] 
-        try: 
-            env['PATH'] += ":%s:%s" % (dir.ensure('a'), 
-                                       dir.join('b')) 
-            dir.ensure('b', 'a') 
+        oldpath = env['PATH']
+        try:
+            env['PATH'] += ":%s:%s" % (dir.ensure('a'),
+                                       dir.join('b'))
+            dir.ensure('b', 'a')
             checker = lambda x: x.dirpath().basename == 'b'
             x = py.path.local.sysfind('a', checker=checker)
             assert x.basename == 'a'
-            assert x.dirpath().basename == 'b' 
-            checker = lambda x: None 
-            py.test.raises(py.error.ENOENT, """ 
+            assert x.dirpath().basename == 'b'
+            checker = lambda x: None
+            py.test.raises(py.error.ENOENT, """
                  py.path.local.sysfind('a', checker=checker)
-            """) 
+            """)
         finally:
-            env['PATH'] = oldpath 
-            #dir.remove() 
+            env['PATH'] = oldpath
+            #dir.remove()
 
     def test_sysexec(self):
         x = py.path.local.sysfind('ls')
-        out = x.sysexec() 
+        out = x.sysexec()
         for x in py.path.local():
-            assert out.find(x.basename) != -1 
+            assert out.find(x.basename) != -1
 
     def test_sysexec_failing(self):
-        x = py.path.local.sysfind('false') 
+        x = py.path.local.sysfind('false')
         py.test.raises(py.process.cmdexec.Error, """
             x.sysexec('aksjdkasjd')
         """)
 
     def test_make_numbered_dir(self):
-        root = self.tmpdir 
+        root = self.tmpdir
         root.ensure('base.not_an_int', dir=1)
         for i in range(10):
             numdir = local.make_numbered_dir(root, 'base.', keep=2)

Modified: py/dist/py/path/local/testing/test_posix.py
==============================================================================
--- py/dist/py/path/local/testing/test_posix.py	(original)
+++ py/dist/py/path/local/testing/test_posix.py	Sun Jan  9 16:49:34 2005
@@ -1,15 +1,15 @@
 import py
 import sys
 from py.__impl__.path.test.fscommon import setuptestfs
-checker = py.path.checker 
-local = py.path.local 
+checker = py.path.checker
+local = py.path.local
 
 class TestPOSIXLocalPath:
     #root = local(TestLocalPath.root)
     disabled = sys.platform == 'win32'
 
     def setup_class(cls):
-        cls.root = py.test.config.tmpdir / 'TestPosixLocalPath' 
+        cls.root = py.test.config.tmpdir / 'TestPosixLocalPath'
         cls.root.ensure(dir=1)
         setuptestfs(cls.root)
 
@@ -59,9 +59,9 @@
         finally:
             tmpdir.remove(rec=1)
 
-    def test_relto_with_root(self): 
+    def test_relto_with_root(self):
         y = self.root.join('x').relto(py.path.local('/'))
-        assert y[0] == str(self.root)[1] 
+        assert y[0] == str(self.root)[1]
 
     def test_visit_recursive_symlink(self):
         tmpdir = local.mkdtemp()
@@ -88,10 +88,10 @@
         tmpdir = local.mkdtemp().realpath()
         try:
             linkpath = tmpdir.join('test')
-            linkpath.mksymlinkto(linkpath) # point to itself 
+            linkpath.mksymlinkto(linkpath) # point to itself
             assert linkpath.check(link=1)
             linkpath.remove()
-            assert not linkpath.check() 
+            assert not linkpath.check()
         finally:
             tmpdir.remove(rec=1)
 
@@ -103,7 +103,7 @@
             filepath.write("")
             linkpath.mksymlinkto(filepath)
             realpath = linkpath.realpath()
-            assert realpath.basename == 'file' 
+            assert realpath.basename == 'file'
         finally:
             tmpdir.remove(rec=1)
 
@@ -118,7 +118,7 @@
     def XXXtest_atime(self):
         # XXX disabled. this test is just not platform independent enough
         #     because acesstime resolution is very different through
-        #     filesystems even on one platform. 
+        #     filesystems even on one platform.
         import time
         path = self.root.join('samplefile')
         atime = path.atime()
@@ -145,12 +145,12 @@
     def test_chmod_simple_int(self):
         print "self.root is", self.root
         mode = self.root.mode()
-        self.root.chmod(mode/2) 
+        self.root.chmod(mode/2)
         try:
             assert self.root.mode() != mode
         finally:
             self.root.chmod(mode)
-            assert self.root.mode() == mode 
+            assert self.root.mode() == mode
 
     def test_chmod_rec_int(self):
         # XXX fragile test
@@ -162,17 +162,17 @@
         self.root.chmod(0772, rec=1)
         try:
             for x in self.root.visit(rec=recfilter):
-                assert x.mode() & 0777 == 0772 
+                assert x.mode() & 0777 == 0772
         finally:
             for x,y in oldmodes.items():
-                x.chmod(y) 
+                x.chmod(y)
 
     def test_chown_identity(self):
         owner = self.root.owner()
         group = self.root.group()
-        self.root.chown(owner, group) 
+        self.root.chown(owner, group)
 
     def test_chown_identity_rec_mayfail(self):
         owner = self.root.owner()
         group = self.root.group()
-        self.root.chown(owner, group) 
+        self.root.chown(owner, group)

Modified: py/dist/py/path/local/win.py
==============================================================================
--- py/dist/py/path/local/win.py	(original)
+++ py/dist/py/path/local/win.py	Sun Jan  9 16:49:34 2005
@@ -1,7 +1,7 @@
 """
-module for win-specific local path stuff 
+module for win-specific local path stuff
 
-(implementor needed :-) 
+(implementor needed :-)
 """
 
 class WinMixin:

Modified: py/dist/py/path/svn/cache.py
==============================================================================
--- py/dist/py/path/svn/cache.py	(original)
+++ py/dist/py/path/svn/cache.py	Sun Jan  9 16:49:34 2005
@@ -29,7 +29,7 @@
 class RepoCache:
     """ The Repocache manages discovered repository paths
     and their revisions.  If inside a timeout the cache
-    will even return the revision of the root. 
+    will even return the revision of the root.
     """
     timeout = 20 # seconds after which we forget that we know the last revision
 
@@ -44,7 +44,7 @@
             return
         if timestamp is None:
             timestamp = time.time()
-            
+
         for entry in self.repos:
             if url == entry.url:
                 entry.timestamp = timestamp

Modified: py/dist/py/path/svn/svncommon.py
==============================================================================
--- py/dist/py/path/svn/svncommon.py	(original)
+++ py/dist/py/path/svn/svncommon.py	Sun Jan  9 16:49:34 2005
@@ -1,5 +1,5 @@
 """
-module with a base subversion path object. 
+module with a base subversion path object.
 """
 import os, sys, time, re
 import py
@@ -18,17 +18,17 @@
 
     def __str__(self):
         """ return a string representation (including rev-number) """
-        return self.strpath 
+        return self.strpath
 
     def __hash__(self):
         return hash(self.strpath)
 
     def new(self, **kw):
         """ create a modified version of this path. A 'rev' argument
-            indicates a new revision.  
+            indicates a new revision.
             the following keyword arguments modify various path parts:
 
-              http://host.com/repo/path/file.ext 
+              http://host.com/repo/path/file.ext
               |-----------------------|          dirname
                                         |------| basename
                                         |--|     purebasename
@@ -42,15 +42,15 @@
             if 'purebasename' in kw or 'ext' in kw:
                 raise ValueError("invalid specification %r" % kw)
         else:
-            pb = kw.setdefault('purebasename', purebasename) 
-            ext = kw.setdefault('ext', ext) 
+            pb = kw.setdefault('purebasename', purebasename)
+            ext = kw.setdefault('ext', ext)
             if ext and not ext.startswith('.'):
                 ext = '.' + ext
             kw['basename'] = pb + ext
 
-        kw.setdefault('dirname', dirname) 
+        kw.setdefault('dirname', dirname)
         kw.setdefault('sep', self.sep)
-        if kw['basename']: 
+        if kw['basename']:
             obj.strpath = "%(dirname)s%(sep)s%(basename)s" % kw
         else:
             obj.strpath = "%(dirname)s" % kw
@@ -59,11 +59,11 @@
     def get(self, spec):
         """ get specified parts of the path.  'arg' is a string
             with comma separated path parts. The parts are returned
-            in exactly the order of the specification. 
-    
-            you may specify the following parts: 
+            in exactly the order of the specification.
+
+            you may specify the following parts:
 
-            http://host.com/repo/path/file.ext 
+            http://host.com/repo/path/file.ext
             |-----------------------|          dirname
                                       |------| basename
                                       |--|     purebasename
@@ -90,23 +90,23 @@
                     res.append(ext)
                 else:
                     raise NameError, "Don't know part %r" % name
-        return res 
+        return res
 
     def __eq__(self, other):
         """ return true if path and rev attributes each match """
-        return (str(self) == str(other) and 
+        return (str(self) == str(other) and
                (self.rev == other.rev or self.rev == other.rev))
 
     def __ne__(self, other):
         return not self == other
 
     def join(self, *args):
-        """ return a new Path (with the same revision) which is composed 
+        """ return a new Path (with the same revision) which is composed
             of the self Path followed by 'args' path components.
         """
         if not args:
             return self
-        
+
         args = tuple([arg.strip(self.sep) for arg in args])
         parts = (self.strpath, ) + args
         newpath = self.__class__(self.sep.join(parts), self.rev)
@@ -124,19 +124,19 @@
 
     # XXX unify argument naming with LocalPath.listdir
     def listdir(self, fil=None, sort=None):
-        """ return a sequence of Paths.  
+        """ return a sequence of Paths.
 
         listdir will return either a tuple or a list of paths
-        depending on implementation choices. 
+        depending on implementation choices.
         """
         if isinstance(fil, str):
             fil = common.fnmatch(fil)
-        nameinfo_seq = self._listdir_nameinfo() 
-        if len(nameinfo_seq) == 1: 
-            name, info = nameinfo_seq[0] 
-            if name == self.basename and info.kind == 'file': 
-                if not self.check(dir=1): 
-                    raise py.error.ENOTDIR(self) 
+        nameinfo_seq = self._listdir_nameinfo()
+        if len(nameinfo_seq) == 1:
+            name, info = nameinfo_seq[0]
+            if name == self.basename and info.kind == 'file':
+                if not self.check(dir=1):
+                    raise py.error.ENOTDIR(self)
         paths = self._make_path_tuple(nameinfo_seq)
 
         if fil or sort:
@@ -151,12 +151,12 @@
     def info(self):
         """ return an Info structure with svn-provided information. """
         parent = self.dirpath()
-        nameinfo_seq = parent._listdir_nameinfo() 
+        nameinfo_seq = parent._listdir_nameinfo()
         bn = self.basename
         for name, info in nameinfo_seq:
-            if name == bn: 
-                return info 
-        raise py.error.ENOENT(self) 
+            if name == bn:
+                return info
+        raise py.error.ENOENT(self)
 
     def size(self):
         """ Return the size of the file content of the Path. """
@@ -167,9 +167,9 @@
         return self.info().mtime
 
     def relto(self, rel):
-        """ Return a string which is the relative part of the Path to 'rel'. 
+        """ Return a string which is the relative part of the Path to 'rel'.
 
-        If the Path is not relative to the given base, return an empty string. 
+        If the Path is not relative to the given base, return an empty string.
         """
         relpath = rel.strpath
         if self.strpath.startswith(relpath):
@@ -199,7 +199,7 @@
 
     #def _getlatestrevision(self):
     #    """ return latest repo-revision for this path. """
-    #    url = self.strpath 
+    #    url = self.strpath
     #    path = self.__class__(url, None)
     #
     #    # we need a long walk to find the root-repo and revision
@@ -210,7 +210,7 @@
     #            path = path.dirpath()
     #        except (IOError, process.cmdexec.Error):
     #            break
-    #    if rev is None: 
+    #    if rev is None:
     #        raise IOError, "could not determine newest repo revision for %s" % self
     #    return rev
 
@@ -224,7 +224,7 @@
         def _listdirworks(self):
             try:
                 self.path.listdir()
-            except py.error.ENOENT: 
+            except py.error.ENOENT:
                 return False
             else:
                 return True
@@ -232,13 +232,13 @@
         def file(self):
             try:
                 return self.path.info().kind == 'file'
-            except py.error.ENOENT: 
-                return False 
+            except py.error.ENOENT:
+                return False
 
         def exists(self):
             try:
                 return self.path.info()
-            except py.error.ENOENT: 
+            except py.error.ENOENT:
                 return self._listdirworks()
 
 def parse_apr_time(timestr):

Modified: py/dist/py/path/svn/testing/__init__.py
==============================================================================
--- py/dist/py/path/svn/testing/__init__.py	(original)
+++ py/dist/py/path/svn/testing/__init__.py	Sun Jan  9 16:49:34 2005
@@ -1 +1 @@
-#
\ No newline at end of file
+#

Modified: py/dist/py/path/svn/testing/svntestbase.py
==============================================================================
--- py/dist/py/path/svn/testing/svntestbase.py	(original)
+++ py/dist/py/path/svn/testing/svntestbase.py	Sun Jan  9 16:49:34 2005
@@ -1,7 +1,7 @@
 import py
 from py import path, test, process
-from py.__impl__.path.test.fscommon import CommonFSTests, setuptestfs 
-from py.__impl__.path.svn import cache 
+from py.__impl__.path.test.fscommon import CommonFSTests, setuptestfs
+from py.__impl__.path.svn import cache
 
 mypath = py.magic.autopath()
 repodump = mypath.dirpath('testrepo.dump')
@@ -18,25 +18,25 @@
         try:
             py.process.cmdexec('svnadmin create %s' % repo)
             py.process.cmdexec('svnadmin load -q %r <%r' % (str(repo), str(repodump)))
-        except py.process.cmdexec.Error: 
+        except py.process.cmdexec.Error:
             repo.remove()
             raise py.test.skip('could not create temporary svn test repository')
         print "created svn repository", repo
         wcdir.ensure(dir=1)
-        wc = py.path.svnwc(wcdir) 
-        wc.checkout(url='file://%s' % repo) 
+        wc = py.path.svnwc(wcdir)
+        wc.checkout(url='file://%s' % repo)
         print "checked out new repo into", wc
     else:
-        print "using repository at", repo 
+        print "using repository at", repo
         wc = py.path.svnwc(wcdir)
     return ("file://%s" % repo, wc)
 
 class CommonSvnTests(CommonFSTests):
 
     def setup_method(self, meth):
-        bn = meth.func_name 
-        for x in 'test_remove', 'test_move': 
-            if bn.startswith(x): 
+        bn = meth.func_name
+        for x in 'test_remove', 'test_move':
+            if bn.startswith(x):
                 py.test.skip(
                     "tests for modifying svn needs better test state management")
 
@@ -85,7 +85,7 @@
     #    raises(py.error.ENOENT, url.listdir)
 
     #def test_newrev(self):
-    #    url = self.root.new(rev=None) 
+    #    url = self.root.new(rev=None)
     #    assert url.rev == None
     #    assert url.strpath == self.root.strpath
     #    url = self.root.new(rev=10)
@@ -97,12 +97,12 @@
     #    res = url.info()
     #    assert res.size > len("samplefile") and res.created_rev == 1155
 
-    # the following tests are easier if we have a path class 
+    # the following tests are easier if we have a path class
     def test_repocache_simple(self):
         repocache = cache.RepoCache()
-        repocache.put(self.root.strpath, 42) 
+        repocache.put(self.root.strpath, 42)
         url, rev = repocache.get(self.root.join('test').strpath)
-        assert rev == 42 
+        assert rev == 42
         assert url == self.root.strpath
 
     def test_repocache_notimeout(self):
@@ -122,7 +122,7 @@
 
     def _test_getreporev(self):
         """ this test runs so slow it's usually disabled """
-        old = cache.repositories.repos 
+        old = cache.repositories.repos
         try:
             _repocache.clear()
             root = self.root.new(rev=-1)

Modified: py/dist/py/path/svn/testing/test_urlcommand.py
==============================================================================
--- py/dist/py/path/svn/testing/test_urlcommand.py	(original)
+++ py/dist/py/path/svn/testing/test_urlcommand.py	Sun Jan  9 16:49:34 2005
@@ -1,9 +1,9 @@
 import py
-from svntestbase import CommonCommandAndBindingTests, getrepowc 
+from svntestbase import CommonCommandAndBindingTests, getrepowc
 
 class TestSvnCommandPath(CommonCommandAndBindingTests):
     def __init__(self):
-        repo, wc = getrepowc() 
+        repo, wc = getrepowc()
         self.root = py.path.svnurl(repo)
 
     def xtest_copy_file(self):

Modified: py/dist/py/path/svn/testing/test_wccommand.py
==============================================================================
--- py/dist/py/path/svn/testing/test_wccommand.py	(original)
+++ py/dist/py/path/svn/testing/test_wccommand.py	Sun Jan  9 16:49:34 2005
@@ -1,7 +1,7 @@
 import py
 from svntestbase import CommonSvnTests, getrepowc
 
-class TestWCSvnCommandPath(CommonSvnTests): 
+class TestWCSvnCommandPath(CommonSvnTests):
     def __init__(self):
         repo, self.root = getrepowc()
 
@@ -83,7 +83,7 @@
     def test_diff(self):
         p = self.root / 'anotherfile'
         out = p.diff(rev=2)
-        assert out.find('hello') != -1 
+        assert out.find('hello') != -1
 
     def test_join_abs(self):
         s = str(self.root.localpath)
@@ -94,7 +94,7 @@
         assert self.root.join('samplefile', abs=1) == self.root.join('samplefile')
 
     def test_str_gives_localpath(self):
-        assert str(self.root) == str(self.root.localpath) 
+        assert str(self.root) == str(self.root.localpath)
 
     def test_versioned(self):
         assert self.root.check(versioned=1)
@@ -119,11 +119,11 @@
             self.root.propdel('gaga')
 
     def test_proplist_recursive(self):
-        s = self.root.join('samplefile') 
-        s.propset('gugu', 'that') 
+        s = self.root.join('samplefile')
+        s.propset('gugu', 'that')
         try:
-            p = self.root.proplist(rec=1) 
-            assert self.root / 'samplefile' in p 
+            p = self.root.proplist(rec=1)
+            assert self.root / 'samplefile' in p
         finally:
             s.propdel('gugu')
 
@@ -134,7 +134,7 @@
                 """
         try:
             self.root.propset('gaga', value)
-            backvalue = self.root.propget('gaga') 
+            backvalue = self.root.propget('gaga')
             assert backvalue == value
             #assert len(backvalue.split('\n')) == 1
         finally:
@@ -149,8 +149,8 @@
             self.root.join('a').remove(force=1)
 
     def test_not_versioned(self):
-        p = self.root.localpath.mkdir('whatever') 
-        f = self.root.localpath.ensure('testcreatedfile') 
+        p = self.root.localpath.mkdir('whatever')
+        f = self.root.localpath.ensure('testcreatedfile')
         try:
             assert self.root.join('whatever').check(versioned=0)
             assert self.root.join('testcreatedfile').check(versioned=0)

Modified: py/dist/py/path/svn/urlcommand.py
==============================================================================
--- py/dist/py/path/svn/urlcommand.py	(original)
+++ py/dist/py/path/svn/urlcommand.py	Sun Jan  9 16:49:34 2005
@@ -1,38 +1,38 @@
 """
 
 module defining a subversion path object based on the external
-command 'svn'. 
+command 'svn'.
 
 """
 
 import os, sys, time, re
-import py 
+import py
 from py import path, process
-from py.__impl__.path import common 
-from py.__impl__.path.svn import svncommon 
-from py.__impl__.misc.cache import BuildcostAccessCache, AgingCache 
+from py.__impl__.path import common
+from py.__impl__.path.svn import svncommon
+from py.__impl__.misc.cache import BuildcostAccessCache, AgingCache
 
 class SvnCommandPath(svncommon.SvnPathBase):
-    _lsrevcache = BuildcostAccessCache(maxentries=128) 
-    _lsnorevcache = AgingCache(maxentries=1000, maxseconds=60.0) 
+    _lsrevcache = BuildcostAccessCache(maxentries=128)
+    _lsnorevcache = AgingCache(maxentries=1000, maxseconds=60.0)
 
-    def __new__(cls, path, rev=None): 
+    def __new__(cls, path, rev=None):
         self = object.__new__(cls)
-        if not isinstance(path, str): 
-            path = str(path) 
-        path = path.rstrip('/') 
-        self.strpath = path 
+        if not isinstance(path, str):
+            path = str(path)
+        path = path.rstrip('/')
+        self.strpath = path
         self.rev = rev
         return self
 
     def __repr__(self):
         if self.rev == -1:
-            return 'svnurl(%r)' % self.strpath 
+            return 'svnurl(%r)' % self.strpath
         else:
-            return 'svnurl(%r, %r)' % (self.strpath, self.rev) 
+            return 'svnurl(%r, %r)' % (self.strpath, self.rev)
 
     def _svn(self, cmd, *args):
-        if self.rev is None: 
+        if self.rev is None:
             l = ['svn %s' % cmd]
         else:
             l = ['svn %s -r %d' % (cmd, self.rev)]
@@ -53,48 +53,48 @@
         # fixing the locale because we can't otherwise parse
         string = svncommon.fixlocale() + " ".join(l)
         #print "execing", string
-        try: 
+        try:
             out = process.cmdexec(string)
-        except py.process.cmdexec.Error, e: 
-            if e.err.find('File Exists'): 
-                raise py.error.EEXIST(self) 
-            raise 
+        except py.process.cmdexec.Error, e:
+            if e.err.find('File Exists'):
+                raise py.error.EEXIST(self)
+            raise
         return out
 
     def open(self, mode='r'):
-        assert 'w' not in mode and 'a' not in mode, "XXX not implemented for svn cmdline" 
+        assert 'w' not in mode and 'a' not in mode, "XXX not implemented for svn cmdline"
         assert self.check(file=1) # svn cat returns an empty file otherwise
         def popen(cmd):
             return os.popen(cmd)
         if self.rev is None:
-            return popen(svncommon.fixlocale() + 
+            return popen(svncommon.fixlocale() +
                             'svn cat "%s"' % (self.strpath, ))
         else:
-            return popen(svncommon.fixlocale() + 
+            return popen(svncommon.fixlocale() +
                             'svn cat -r %s "%s"' % (self.rev, self.strpath))
 
 
-    # modifying methods (cache must be invalidated) 
-    def mkdir(self, *args, **kwargs): 
-        commit_msg=kwargs.get('msg', "mkdir by py lib invocation") 
-        createpath = self.join(*args) 
+    # modifying methods (cache must be invalidated)
+    def mkdir(self, *args, **kwargs):
+        commit_msg=kwargs.get('msg', "mkdir by py lib invocation")
+        createpath = self.join(*args)
         createpath._svnwrite('mkdir', '-m', commit_msg)
-        self._lsnorevcache.delentry(createpath.dirpath().strpath) 
-        return createpath 
+        self._lsnorevcache.delentry(createpath.dirpath().strpath)
+        return createpath
 
     def copy(self, target, msg='copied by py lib invocation'):
-        if getattr(target, 'rev', None) is not None: 
+        if getattr(target, 'rev', None) is not None:
             raise py.error.EINVAL(target, "can't copy to revisioned resource")
         process.cmdexec("svn copy -m %r %s %s" %(msg, str(self), str(target)))
-        self._lsnorevcache.delentry(target.dirpath().strpath) 
+        self._lsnorevcache.delentry(target.dirpath().strpath)
 
     def remove(self, rec=1, msg='removed by py lib invocation'):
         if self.rev is not None:
-            raise py.error.EINVAL(self, "can't remove revisioned resource") 
+            raise py.error.EINVAL(self, "can't remove revisioned resource")
         process.cmdexec("svn rm -m %r %s" %(msg, str(self)))
-        self._lsnorevcache.delentry(self.dirpath().strpath) 
+        self._lsnorevcache.delentry(self.dirpath().strpath)
 
-    # end of modifying methods 
+    # end of modifying methods
     def _propget(self, name):
         res = self._svn('propget', name)
         return res[:-1] # strip trailing newline
@@ -107,19 +107,19 @@
 
     def _listdir_nameinfo(self):
         """ return sequence of name-info directory entries of self """
-        def builder(): 
+        def builder():
             try:
                 res = self._svn('ls', '-v')
             except process.cmdexec.Error, e:
                 if e.err.find('non-existent in that revision') != -1:
                     raise py.error.ENOENT(self, e.err)
                 elif e.err.find('not part of a repository')!=-1:
-                    raise py.error.ENOENT(self, e.err) 
+                    raise py.error.ENOENT(self, e.err)
                 elif e.err.find('Unable to open')!=-1:
-                    raise py.error.ENOENT(self, e.err) 
+                    raise py.error.ENOENT(self, e.err)
                 elif e.err.lower().find('method not allowed')!=-1:
-                    raise py.error.EACCES(self, e.err) 
-                raise py.error.Error(e.err) 
+                    raise py.error.EACCES(self, e.err)
+                raise py.error.Error(e.err)
             lines = res.split('\n')
             nameinfo_seq = []
             for lsline in lines:
@@ -127,9 +127,9 @@
                     info = InfoSvnCommand(lsline)
                     nameinfo_seq.append((info._name, info))
             return nameinfo_seq
-        if self.rev is not None: 
+        if self.rev is not None:
             return self._lsrevcache.getorbuild((self.strpath, self.rev), builder)
-        else: 
+        else:
             return self._lsnorevcache.getorbuild(self.strpath, builder)
 
     def log(self, rev_start=None, rev_end=1, verbose=False):
@@ -143,7 +143,7 @@
             rev_opt = "-r %s:%s" % (rev_start, rev_end)
         verbose_opt = verbose and "-v" or ""
         xmlpipe =  os.popen(svncommon.fixlocale() +
-                      'svn log --xml %s %s "%s"' % 
+                      'svn log --xml %s %s "%s"' %
                       (rev_opt, verbose_opt, self.strpath))
         from xml.dom import minidom
         tree = minidom.parse(xmlpipe)
@@ -187,16 +187,16 @@
 # helper functions
 #____________________________________________________
 def parse_time_with_missing_year(timestr):
-    """ analyze the time part from a single line of "svn ls -v" 
+    """ analyze the time part from a single line of "svn ls -v"
     the svn output doesn't show the year makes the 'timestr'
-    ambigous. 
+    ambigous.
     """
     t_now = time.gmtime()
 
     tparts = timestr.split()
     month = time.strptime(tparts.pop(0), '%b')[1]
     day = time.strptime(tparts.pop(0), '%d')[2]
-    last = tparts.pop(0) # year or hour:minute 
+    last = tparts.pop(0) # year or hour:minute
     try:
         year = time.strptime(last, '%Y')[0]
         hour = minute = 0
@@ -233,7 +233,7 @@
                         self.msg = ''
                 elif lpart.nodeName == u'date':
                     #2003-07-29T20:05:11.598637Z
-                    timestr = lpart.firstChild.nodeValue.encode('UTF-8')   
+                    timestr = lpart.firstChild.nodeValue.encode('UTF-8')
                     self.date = svncommon.parse_apr_time(timestr)
                 elif lpart.nodeName == u'paths':
                     self.strpaths = []
@@ -243,7 +243,7 @@
     def __repr__(self):
         return '<Logentry rev=%d author=%s date=%s>' % (
             self.rev, self.author, self.date)
-                            
+
 
 class _Head:
     def __str__(self):

Modified: py/dist/py/path/svn/wccommand.py
==============================================================================
--- py/dist/py/path/svn/wccommand.py	(original)
+++ py/dist/py/path/svn/wccommand.py	Sun Jan  9 16:49:34 2005
@@ -2,25 +2,25 @@
 
 svn-Command based Implementation of a Subversion WorkingCopy Path.
 
-  SvnWCCommandPath  is the main class. 
+  SvnWCCommandPath  is the main class.
 
-  SvnWC is an alias to this class. 
+  SvnWC is an alias to this class.
 
 """
 
 import os, sys, time, re
 from py import path
-import py 
-from py.__impl__.path import common 
+import py
+from py.__impl__.path import common
 from py.__impl__.path.svn import cache
-from py.__impl__.path.svn import svncommon 
+from py.__impl__.path.svn import svncommon
 
 DEBUG = 0
 
 class SvnWCCommandPath(common.FSPathBase):
     sep = os.sep
 
-    def __new__(cls, wcpath=None): 
+    def __new__(cls, wcpath=None):
         self = object.__new__(cls)
         self.localpath = path.local(wcpath)
         return self
@@ -28,7 +28,7 @@
     strpath = property(lambda x: str(x.localpath), None, None, "string path")
 
     def __eq__(self, other):
-        return self.localpath == getattr(other, 'localpath', None) 
+        return self.localpath == getattr(other, 'localpath', None)
 
     def _geturl(self):
         if getattr(self, '_url', None) is None:
@@ -43,7 +43,7 @@
     def svnurl(self):
         """ return current SvnPath for this WC-item. """
         info = self.info()
-        return path.svnurl(info.url) 
+        return path.svnurl(info.url)
 
     url = property(_geturl, None, None, "url of this WC item")
 
@@ -62,15 +62,15 @@
         string = svncommon.fixlocale() + " ".join(l)
         if DEBUG:
             print "execing", string
-        try: 
+        try:
             out = py.process.cmdexec(string)
-        except py.process.cmdexec.Error, e: 
-            if e.err.find('File Exists'): 
-                raise py.error.EEXIST(self) 
+        except py.process.cmdexec.Error, e:
+            if e.err.find('File Exists'):
+                raise py.error.EEXIST(self)
             raise
         return out
 
-    def checkout(self, url=None, rev = None): 
+    def checkout(self, url=None, rev = None):
         """ checkout from url to local wcpath. """
         if url is None:
             url = self.url
@@ -100,9 +100,9 @@
         return self
 
     def ensure(self, *args, **kwargs):
-        """ ensure that an args-joined path exists (by default as 
+        """ ensure that an args-joined path exists (by default as
             a file). if you specify a keyword argument 'directory=True'
-            then the path is forced  to be a directory path. 
+            then the path is forced  to be a directory path.
         """
         try:
             p = self.join(*args)
@@ -126,10 +126,10 @@
     def add(self):
         self._svn('add')
 
-    def remove(self, rec=1, force=1): 
-        """ remove a file or a directory tree. 'rec'ursive is 
-            ignored and considered always true (because of 
-            underlying svn semantics. 
+    def remove(self, rec=1, force=1):
+        """ remove a file or a directory tree. 'rec'ursive is
+            ignored and considered always true (because of
+            underlying svn semantics.
         """
         flags = []
         if force:
@@ -144,7 +144,7 @@
 
     def status(self, updates=0, rec=0):
         """ return (collective) Status object for this file. """
-        # http://svnbook.red-bean.com/book.html#svn-ch-3-sect-4.3.1 
+        # http://svnbook.red-bean.com/book.html#svn-ch-3-sect-4.3.1
         #             2201     2192        jum   test
         if rec:
             rec= ''
@@ -182,7 +182,7 @@
                 elif c0 == 'I':
                     wcpath = self.join(fn, abs=1)
                     rootstatus.ignored.append(wcpath)
-                
+
                 continue
 
             #elif c0 in '~!' or c4 == 'S':
@@ -199,7 +199,7 @@
                     update_rev = int(rest.split(':')[1].strip())
                     continue
                 # keep trying
-                raise ValueError, "could not parse line %r" % line 
+                raise ValueError, "could not parse line %r" % line
             else:
                 rev, modrev, author, fn = m.groups()
             wcpath = self.join(fn, abs=1)
@@ -276,7 +276,7 @@
             lines = res.split('\n')
             lines = map(str.strip, lines[1:])
             return svncommon.PropListDict(self, lines)
-    
+
     def revert(self, rec=0):
         if rec:
             result = self._svn('revert -R')
@@ -289,10 +289,10 @@
             localpath = self.localpath.new(**kw)
         else:
             localpath = self.localpath
-        return self.__class__(localpath) 
-        
+        return self.__class__(localpath)
+
     def join(self, *args, **kwargs):
-        """ return a new Path (with the same revision) which is composed 
+        """ return a new Path (with the same revision) which is composed
             of the self Path followed by 'args' path components.
         """
         if not args:
@@ -302,36 +302,36 @@
 
     def info(self, usecache=1):
         """ return an Info structure with svn-provided information. """
-        info = usecache and cache.info.get(self) 
+        info = usecache and cache.info.get(self)
         if not info:
             try:
                 output = self._svn('info')
             except py.process.cmdexec.Error, e:
                 if e.err.find('Path is not a working copy directory') != -1:
-                    raise py.error.ENOENT(self, e.err) 
+                    raise py.error.ENOENT(self, e.err)
                 raise
             if output.find('Not a versioned resource') != -1:
-                raise py.error.ENOENT(self, output) 
+                raise py.error.ENOENT(self, output)
             info = InfoSvnWCCommand(path.local(self.strpath), output)
             cache.info[self] = info
         self.rev = info.rev
         return info
 
     def listdir(self, fil=None, sort=None):
-        """ return a sequence of Paths.  
+        """ return a sequence of Paths.
 
         listdir will return either a tuple or a list of paths
-        depending on implementation choices. 
+        depending on implementation choices.
         """
         if isinstance(fil, str):
             fil = common.fnmatch(fil)
         # XXX unify argument naming with LocalPath.listdir
         def notsvn(path):
-            return not path.get('basename') == '.svn' 
+            return not path.get('basename') == '.svn'
 
         paths = []
         for localpath in self.localpath.listdir(notsvn):
-            p = self.__class__(localpath) 
+            p = self.__class__(localpath)
             paths.append(p)
 
         if fil or sort:
@@ -352,7 +352,7 @@
     class Checkers(path.local.Checkers):
         def __init__(self, path):
             self.svnwcpath = path
-            self.path = path.localpath 
+            self.path = path.localpath
         def versioned(self):
             try:
                 s = self.svnwcpath.status()
@@ -394,9 +394,9 @@
         return self.info().mtime
 
     def relto(self, rel):
-        """ Return a string which is the relative part of the Path to 'rel'. 
+        """ Return a string which is the relative part of the Path to 'rel'.
 
-        If the Path is not relative to the given base, return an empty string. 
+        If the Path is not relative to the given base, return an empty string.
         """
 
         relpath = rel.strpath
@@ -449,9 +449,9 @@
 
         d = {}
         for line in output.split('\n'):
-            if not line.strip(): 
+            if not line.strip():
                 continue
-            key, value = line.split(':', 1) 
+            key, value = line.split(':', 1)
             key = key.lower().replace(' ', '')
             value = value.strip()
             d[key] = value
@@ -467,7 +467,7 @@
             self.last_author = d['lastchangedauthor']
             self.mtime = parse_wcinfotime(d['lastchangeddate'])
             self.time = self.mtime * 1000000
-        
+
     def __eq__(self, other):
         return self.__dict__ == other.__dict__
 
@@ -482,8 +482,8 @@
     parsedtime = time.strptime(timestr, "%Y-%m-%d %H:%M:%S")
     return time.mktime(parsedtime)
 
-def make_recursive_propdict(wcroot, 
-                            output, 
+def make_recursive_propdict(wcroot,
+                            output,
                             rex = re.compile("Properties on '(.*)':")):
     """ Return a dictionary of path->PropListDict mappings. """
     lines = filter(None, output.split('\n'))
@@ -498,7 +498,7 @@
         propnames = []
         while lines and lines[0].startswith('  '):
             propname = lines.pop(0).strip()
-            propnames.append(propname) 
+            propnames.append(propname)
         assert propnames, "must have found properties!"
         pdict[wcpath] = svncommon.PropListDict(wcpath, propnames)
     return pdict

Modified: py/dist/py/path/svn/xsvnbinding.py
==============================================================================
--- py/dist/py/path/svn/xsvnbinding.py	(original)
+++ py/dist/py/path/svn/xsvnbinding.py	Sun Jan  9 16:49:34 2005
@@ -1,11 +1,11 @@
 """
 
-module defining subversion path objects. 
+module defining subversion path objects.
 
-SvnBindingPath    implementation using svn-swig-py-bindings 
+SvnBindingPath    implementation using svn-swig-py-bindings
 
 """
-# import svn swig-c-bindings 
+# import svn swig-c-bindings
 
 if 0:
     #import svn.client, svn.core, svn.util, atexit
@@ -18,11 +18,11 @@
 
     class SvnBindingPath(SvnPathBase):
         pool = svn.util.svn_pool_create(None)
-        
+
         def _make_rev_t(self):
             rev = svn.core.svn_opt_revision_t()
             if self.rev is not None:
-                rev.kind = svn.core.svn_opt_revision_number 
+                rev.kind = svn.core.svn_opt_revision_number
                 rev.value.number = self.rev
             return rev
 
@@ -58,7 +58,7 @@
             rev = self._make_rev_t()
             cctx = self._make_cctx()
             table = svn.client.svn_client_proplist(url, rev, 0, cctx, self.pool)
-     
+
             if not table:
                 return {}
             content = table[0][1]

Modified: py/dist/py/path/test/common.py
==============================================================================
--- py/dist/py/path/test/common.py	(original)
+++ py/dist/py/path/test/common.py	Sun Jan  9 16:49:34 2005
@@ -1,8 +1,8 @@
-from py.path import checker 
-import py 
+from py.path import checker
+import py
 
 class CommonPathTests:
-    root = None  # subclasses have to setup a 'root' attribute 
+    root = None  # subclasses have to setup a 'root' attribute
 
     def test_constructor_equality(self):
         p = self.root.__class__(self.root)
@@ -28,14 +28,14 @@
 
     def test_join_noargs(self):
         newpath = self.root.join()
-        assert self.root == newpath 
+        assert self.root == newpath
 
     def test_add_something(self):
         p = self.root.join('sample')
         p = p + 'dir'
         assert p.check()
 
-    def test_parts(self): 
+    def test_parts(self):
         newpath = self.root.join('sampledir', 'otherfile')
         par = newpath.parts()[-3:]
         assert par == [self.root, self.root.join('sampledir'), newpath]
@@ -51,23 +51,23 @@
         third = py.path.extpy('x', 'whatever')
         x = other.common(third)
         assert x is None
-        
+
 
     #def test_parents_nonexisting_file(self):
-    #    newpath = self.root / 'dirnoexist' / 'nonexisting file' 
+    #    newpath = self.root / 'dirnoexist' / 'nonexisting file'
     #    par = list(newpath.parents())
     #    assert par[:2] == [self.root / 'dirnoexist', self.root]
 
     def test_basename_checks(self):
         newpath = self.root.join('sampledir')
         assert newpath.check(basename='sampledir')
-        assert newpath.check(notbasename='xyz') 
+        assert newpath.check(notbasename='xyz')
         assert newpath.basename == 'sampledir'
 
     def test_basename(self):
         newpath = self.root.join('sampledir')
         assert newpath.check(basename='sampledir')
-        assert newpath.basename, 'sampledir' 
+        assert newpath.basename, 'sampledir'
 
     def test_dirpath(self):
         newpath = self.root.join('sampledir')
@@ -75,11 +75,11 @@
 
     def test_dirpath_with_args(self):
         newpath = self.root.join('sampledir')
-        assert newpath.dirpath('x') == self.root.join('x') 
+        assert newpath.dirpath('x') == self.root.join('x')
 
     def test_newbasename(self):
         newpath = self.root.join('samplefile')
-        newbase = newpath.new(basename="samplefile2") 
+        newbase = newpath.new(basename="samplefile2")
         assert newbase.basename == "samplefile2"
         assert newbase.dirpath() == newpath.dirpath()
 
@@ -94,7 +94,7 @@
     def test_dir(self):
         #print repr(self.root.join("sampledir"))
         assert self.root.join("sampledir").check(dir=1)
-        assert self.root.join('samplefile').check(notdir=1) 
+        assert self.root.join('samplefile').check(notdir=1)
         assert not self.root.join("samplefile").check(dir=1)
 
     def test_filter_dir(self):
@@ -107,7 +107,7 @@
 
     #def test_fnmatch_dir(self):
 
-    #    pattern = self.root.sep.join(['s*file']) 
+    #    pattern = self.root.sep.join(['s*file'])
     #    sfile = self.root.join("samplefile")
     #    assert sfile.check(fnmatch=pattern)
 
@@ -115,8 +115,8 @@
         l=self.root.join("sampledir", "otherfile")
         assert l.relto(self.root) == l.sep.join(["sampledir", "otherfile"])
         assert l.check(relto=self.root)
-        assert self.root.check(notrelto=l) 
-        assert not self.root.check(relto=l) 
+        assert self.root.check(notrelto=l)
+        assert not self.root.check(relto=l)
 
     def test_relto_not_relative(self):
         l1=self.root.join("sampledir")
@@ -127,7 +127,7 @@
         l = self.root.listdir()
         assert self.root.join('sampledir') in l
         assert self.root.join('samplefile') in l
-        py.test.raises(py.error.ENOTDIR, 
+        py.test.raises(py.error.ENOTDIR,
                        "self.root.join('samplefile').listdir()")
 
     def test_listdir_fnmatchstring(self):
@@ -181,33 +181,33 @@
 
     def test_endswith(self):
         assert self.root.check(notendswith='.py')
-        x = self.root.join('samplefile') 
-        assert x.check(endswith='file') 
+        x = self.root.join('samplefile')
+        assert x.check(endswith='file')
 
     def test_cmp(self):
         path1 = self.root.join('samplefile')
-        path2 = self.root.join('samplefile2') 
-        assert cmp(path1, path2) == cmp('samplefile', 'samplefile2') 
+        path2 = self.root.join('samplefile2')
+        assert cmp(path1, path2) == cmp('samplefile', 'samplefile2')
         assert cmp(path1, path1) == 0
 
     def test_contains_path(self):
         path1 = self.root.join('samplefile')
         assert path1 in self.root
-        assert not self.root.join('not existing') in self.root 
+        assert not self.root.join('not existing') in self.root
 
     def test_contains_path_with_basename(self):
         assert 'samplefile' in self.root
         assert 'not_existing' not in self.root
 
     def featuretest_check_docstring(self):
-        here = self.root.__class__ 
-        assert here.check.__doc__ 
-        doc = here.check.__doc__ 
+        here = self.root.__class__
+        assert here.check.__doc__
+        doc = here.check.__doc__
         for name in dir(local.Checkers):
             if name[0] != '_':
-                assert name in doc 
+                assert name in doc
 
     def test_simple_read(self):
         x = self.root.join('samplefile').read()
         assert x == 'samplefile\n'
-        
+

Modified: py/dist/py/path/test/fscommon.py
==============================================================================
--- py/dist/py/path/test/fscommon.py	(original)
+++ py/dist/py/path/test/fscommon.py	Sun Jan  9 16:49:34 2005
@@ -1,17 +1,17 @@
-import py 
-from py.__impl__.path.test import common 
+import py
+from py.__impl__.path.test import common
 
 checker = py.path.checker
 
 def setuptestfs(path):
     if path.join('samplefile').check():
-        return 
+        return
     #print "setting up test fs for", repr(path)
     samplefile = path.ensure('samplefile')
     samplefile.write('samplefile\n')
 
     execfile = path.ensure('execfile')
-    execfile.write('x=42') 
+    execfile.write('x=42')
 
     d = {1:2, 'hello': 'world', 'answer': 42}
     path.ensure('samplepickle').dumpobj(d)
@@ -38,7 +38,7 @@
 ''')
 
 class CommonFSTests(common.CommonPathTests):
-    root = None  # subclasses have to provide a current 'root' attribute 
+    root = None  # subclasses have to provide a current 'root' attribute
 
     def test_join_div_operator(self):
         newpath = self.root / '/sampledir' / '/test//'
@@ -47,13 +47,13 @@
 
     def test_ext(self):
         newpath = self.root.join('sampledir.ext')
-        assert newpath.ext == '.ext' 
+        assert newpath.ext == '.ext'
         newpath = self.root.join('sampledir')
-        assert not newpath.ext  
+        assert not newpath.ext
 
     def test_purebasename(self):
         newpath = self.root.join('samplefile.py')
-        assert newpath.purebasename == 'samplefile' 
+        assert newpath.purebasename == 'samplefile'
 
     def test_multiple_parts(self):
         newpath = self.root.join('samplefile.py')
@@ -66,9 +66,9 @@
 
     def test_dotted_name_ext(self):
         newpath = self.root.join('a.b.c')
-        ext = newpath.ext 
+        ext = newpath.ext
         assert ext == '.c'
-        assert newpath.ext == '.c' 
+        assert newpath.ext == '.c'
 
     def test_newext(self):
         newpath = self.root.join('samplefile.py')
@@ -103,7 +103,7 @@
         assert self.root.join("sampledir.nothere").check(notexists=1)
         assert not self.root.join("sampledir.nothere").check(notfile=0)
 
-    #    pattern = self.root.sep.join(['s*file']) 
+    #    pattern = self.root.sep.join(['s*file'])
     #    sfile = self.root.join("samplefile")
     #    assert sfile.check(fnmatch=pattern)
 
@@ -143,57 +143,57 @@
         assert chk(self.root.join('somepickle'))
 
     def test_copy_file(self):
-        otherdir = self.root.join('otherdir') 
+        otherdir = self.root.join('otherdir')
         initpy = otherdir.join('__init__.py')
-        copied = otherdir.join('copied') 
+        copied = otherdir.join('copied')
         initpy.copy(copied)
         try:
             assert copied.check()
             s1 = initpy.read()
             s2 = copied.read()
-            assert s1 == s2 
+            assert s1 == s2
         finally:
             if copied.check():
                 copied.remove()
 
     def test_copy_dir(self):
-        otherdir = self.root.join('otherdir') 
-        copied = self.root.join('newdir') 
+        otherdir = self.root.join('otherdir')
+        copied = self.root.join('newdir')
         try:
             otherdir.copy(copied)
             assert copied.check(dir=1)
             assert copied.join('__init__.py').check(file=1)
             s1 = otherdir.join('__init__.py').read()
             s2 = copied.join('__init__.py').read()
-            assert s1 == s2 
+            assert s1 == s2
         finally:
             if copied.check(dir=1):
                 copied.remove(rec=1)
 
     def test_remove_file(self):
-        d = self.root.ensure('todeleted') 
+        d = self.root.ensure('todeleted')
         assert d.check()
-        d.remove() 
-        assert not d.check() 
+        d.remove()
+        assert not d.check()
 
     def test_remove_dir_recursive_by_default(self):
-        d = self.root.ensure('to', 'be', 'deleted') 
+        d = self.root.ensure('to', 'be', 'deleted')
         assert d.check()
         p = self.root.join('to')
-        p.remove() 
-        assert not p.check() 
+        p.remove()
+        assert not p.check()
 
     def test_mkdir_and_remove(self):
-        tmpdir = self.root 
-        py.test.raises(py.error.EEXIST, tmpdir.mkdir, 'sampledir') 
+        tmpdir = self.root
+        py.test.raises(py.error.EEXIST, tmpdir.mkdir, 'sampledir')
         new = tmpdir.join('mktest1')
         new.mkdir()
         assert new.check(dir=1)
-        new.remove() 
+        new.remove()
 
         new = tmpdir.mkdir('mktest2')
         assert new.check(dir=1)
-        new.remove() 
+        new.remove()
         assert tmpdir.join('mktest2') == new
 
     def test_move_file(self):
@@ -208,13 +208,13 @@
         source.ensure('moved', 'somefile').write("42")
         dest = source.new(basename='moveddir')
         source.move(dest)
-        assert dest.check(dir=1) 
+        assert dest.check(dir=1)
         assert dest.join('moved', 'somefile').read() == '42'
         assert not source.check()
 
     def test_getpymodule(self):
         obj = self.root.join('execfile').getpymodule()
-        assert obj.x == 42 
+        assert obj.x == 42
 
     def test_not_has_resolve(self):
         # because this would mean confusion with respect to

Modified: py/dist/py/path/test/test_api.py
==============================================================================
--- py/dist/py/path/test/test_api.py	(original)
+++ py/dist/py/path/test/test_api.py	Sun Jan  9 16:49:34 2005
@@ -1,5 +1,5 @@
 from py import path, test
-from py.__impl__.path.svn.testing.test_wccommand import getrepowc 
+from py.__impl__.path.svn.testing.test_wccommand import getrepowc
 
 class TestAPI:
     def __init__(self):
@@ -9,7 +9,7 @@
         r = repr(p)
         from py.path import local,svnurl, svnwc, extpy
         y = eval(r)
-        assert y == p 
+        assert y == p
 
     def test_defaultlocal(self):
         p = path.local()
@@ -38,12 +38,12 @@
         self.repr_eval_test(p)
 
     def test_svnwc(self):
-        p = path.svnwc(self.root) 
+        p = path.svnwc(self.root)
         assert p.check(svnwc=1)
         self.repr_eval_test(p)
 
     #def test_fspy(self):
-    #    p = path.py('smtplib.SMTP') 
+    #    p = path.py('smtplib.SMTP')
     #    self.repr_eval_test(p)
 
 

Modified: py/dist/py/process/cmdexec.py
==============================================================================
--- py/dist/py/process/cmdexec.py	(original)
+++ py/dist/py/process/cmdexec.py	Sun Jan  9 16:49:34 2005
@@ -1,7 +1,7 @@
 """
 
 module defining basic hook for executing commands
-in a - as much as possible - platform independent way. 
+in a - as much as possible - platform independent way.
 
 Current list:
 
@@ -31,8 +31,8 @@
     stdin.close()
 
     # XXX sometimes we get a blocked r.read() call (see below)
-    #     although select told us there is something to read. 
-    #     only the next three lines appear to prevent 
+    #     although select told us there is something to read.
+    #     only the next three lines appear to prevent
     #     the read call from blocking infinitely.
     import fcntl
     fcntl.fcntl(stdout, fcntl.F_SETFL, os.O_NONBLOCK)
@@ -62,7 +62,7 @@
             status = os.WTERMSIG(systemstatus) + 128
         else:
             status = os.WEXITSTATUS(systemstatus)
-        raise ExecutionFailed(status, systemstatus, cmd, 
+        raise ExecutionFailed(status, systemstatus, cmd,
                               ''.join(out), ''.join(err))
     return "".join(out)
 
@@ -98,11 +98,11 @@
         self.cmd = cmd
         self.err = err
         self.out = out
-            
+
     def __str__(self):
         return "ExecutionFailed: %d  %s\n%s" %(self.status, self.cmd, self.err)
 #
-# choose correct platform-version 
+# choose correct platform-version
 #
 if sys.platform == 'win32':
     cmdexec = win32_exec_cmd

Modified: py/dist/py/process/testing/__init__.py
==============================================================================
--- py/dist/py/process/testing/__init__.py	(original)
+++ py/dist/py/process/testing/__init__.py	Sun Jan  9 16:49:34 2005
@@ -1 +1 @@
-#
\ No newline at end of file
+#

Modified: py/dist/py/test/cmdline.py
==============================================================================
--- py/dist/py/test/cmdline.py	(original)
+++ py/dist/py/test/cmdline.py	Sun Jan  9 16:49:34 2005
@@ -1,13 +1,13 @@
 from __future__ import generators
-import py 
+import py
 import sys
-from py.__impl__.test import run 
+from py.__impl__.test import run
 
 #
 # main entry point
 #
 
-def _old(argv): 
+def _old(argv):
     if argv is None:
         argv = py.std.sys.argv
         frame = py.std.sys._getframe(1)
@@ -17,19 +17,19 @@
         import __main__
         return [py.test.collect.Module(py.std.sys.argv[0])]
 
-def main(): 
+def main():
     args = py.std.sys.argv[1:]
-    py.test.config.readconfiguration(*run.getanchors(args)) 
+    py.test.config.readconfiguration(*run.getanchors(args))
 
     filenames = py.test.config.parseargs(args)
-    if not filenames: 
+    if not filenames:
         filenames.append(str(py.path.local()))
-    option = py.test.config.option 
+    option = py.test.config.option
     try:
-        if option.session or option.executable: 
-            run.session(args, filenames) 
+        if option.session or option.executable:
+            run.session(args, filenames)
         else:
-            run.inprocess(args, filenames) 
+            run.inprocess(args, filenames)
     except KeyboardInterrupt:
         print
         print "Keybordinterrupt"

Modified: py/dist/py/test/collect.py
==============================================================================
--- py/dist/py/test/collect.py	(original)
+++ py/dist/py/test/collect.py	Sun Jan  9 16:49:34 2005
@@ -1,43 +1,43 @@
 from __future__ import generators
 
 import sys, inspect, types
-from py import path, test 
+from py import path, test
 import py
 
-def getfscollector(fspath): 
+def getfscollector(fspath):
     if fspath.check(file=1):
         col = py.test.config.getconfigvalue(fspath, 'Module')
     elif fspath.check(dir=1):
         col = py.test.config.getconfigvalue(fspath, 'Directory')
     else:
-        raise py.error.ENOENT(fspath) 
-    return col(fspath) 
+        raise py.error.ENOENT(fspath)
+    return col(fspath)
+
+def configproperty(name):
+    def fget(self):
+        return py.test.config.getconfigvalue(self.fspath, name)
+    return property(fget)
 
-def configproperty(name): 
-    def fget(self): 
-        return py.test.config.getconfigvalue(self.fspath, name) 
-    return property(fget) 
-        
 class Error(object):
     """ represents a non-fatal exception while collecting. """
     def __init__(self, excinfo):
         self.excinfo = py.code.ExceptionInfo(excinfo)
 
     def __repr__(self):
-        tb = list(self.excinfo)[-1] 
-        return '<collect.Error in %r, line %d>' % (tb.frame.code.path, 
-                                                   tb.lineno+1) 
+        tb = list(self.excinfo)[-1]
+        return '<collect.Error in %r, line %d>' % (tb.frame.code.path,
+                                                   tb.lineno+1)
 
 class Collector(object):
     """ instances are *restartable iterators*. They will yield Units or
-        Collector instances during iteration.  
+        Collector instances during iteration.
     """
-    Item = test.Item 
-    GenItem = test.GenItem 
+    Item = test.Item
+    GenItem = test.GenItem
     Error = Error
-    Module = configproperty('Module') 
-    Directory = configproperty('Directory') 
-    Class = configproperty('Class') 
+    Module = configproperty('Module')
+    Directory = configproperty('Directory')
+    Class = configproperty('Class')
 
     def iterunits(self):
         """ yield all units of the Collector instance. """
@@ -55,30 +55,30 @@
         return Error(excinfo)
 
 # ----------------------------------------------
-# Collectors starting from a file system path 
+# Collectors starting from a file system path
 # ----------------------------------------------
 
 class FSCollector(Collector):
     def __init__(self, fspath):
         self.fspath = py.path.local(fspath)
     def __repr__(self):
-        return '%s(%r)' %(self.__class__.__name__, 
+        return '%s(%r)' %(self.__class__.__name__,
                           self.fspath.relto(py.path.local()))
 
 class Directory(FSCollector):
     def fil(self, fspath):
-        return (fspath.check(file=1, fnmatch='test_*.py') or 
+        return (fspath.check(file=1, fnmatch='test_*.py') or
                 fspath.check(file=1, fnmatch='*_test.py'))
     rec = py.path.checker(dir=1, dotfile=0, link=0)
 
     def __iter__(self):
         try:
-            for fspath in self.fspath.listdir(sort=True): 
+            for fspath in self.fspath.listdir(sort=True):
                 if self.rec(fspath):
                     # hack to get the correct Directory collector class
                     yield self.Directory(fspath).Directory(fspath)
                 elif self.fil(fspath):
-                    yield self.Module(fspath) 
+                    yield self.Module(fspath)
         except:
             yield self._except()
 
@@ -89,52 +89,52 @@
 class PyCollector(Collector):
     def __init__(self, extpy):
         if not hasattr(extpy, 'resolve'):
-            extpy = py.path.extpy(extpy) 
-        self.extpy = extpy 
-        self.yielders = [getattr(self, x) 
-                            for x in dir(self.__class__) 
+            extpy = py.path.extpy(extpy)
+        self.extpy = extpy
+        self.yielders = [getattr(self, x)
+                            for x in dir(self.__class__)
                                 if x.startswith('collect_')]
 
-    fspath = property(lambda self: self.extpy.root) 
+    fspath = property(lambda self: self.extpy.root)
 
     def __repr__(self):
         return '%s(%r)' %(self.__class__.__name__, str(self.extpy))
 
     def __iter__(self):
         try:
-            # we want to sort according to lineno, so here goes 
-            # the generator lazyness 
+            # we want to sort according to lineno, so here goes
+            # the generator lazyness
             l = []
             for extpy in self.extpy.listdir():
                 for meth in self.yielders:
                     #print "looking at", extpy
                     for x in meth(extpy):
-                        #print "found", x 
-                        sortvalue = self.getsortvalue(x) 
-                        l.append((sortvalue, x)) 
-            l.sort() 
+                        #print "found", x
+                        sortvalue = self.getsortvalue(x)
+                        l.append((sortvalue, x))
+            l.sort()
             for x,y in l:
                 yield y
         except:
             yield self._except()
 
-    def getsortvalue(self, obj): 
-        """ sorting function to bring test methods in 
-            the same order as int he file. 
-        """ 
-        if isinstance(obj, self.Item): 
-            obj = obj.extpy.resolve() 
+    def getsortvalue(self, obj):
+        """ sorting function to bring test methods in
+            the same order as int he file.
+        """
+        if isinstance(obj, self.Item):
+            obj = obj.extpy.resolve()
         elif isinstance(obj, PyCollector):
             for x in obj:
-                return self.getsortvalue(x) 
+                return self.getsortvalue(x)
         if hasattr(obj, 'im_func'):
-            obj = obj.im_func 
+            obj = obj.im_func
         if hasattr(obj, 'func_code'):
-            obj = obj.func_code 
-        # enough is enough 
-        return (getattr(obj, 'co_filename', None), 
+            obj = obj.func_code
+        # enough is enough
+        return (getattr(obj, 'co_filename', None),
                 getattr(obj, 'co_firstlineno', sys.maxint))
-            
+
 class Module(PyCollector):
     def __iter__(self):
         try:
@@ -142,18 +142,18 @@
             if iter.check(exists=True):
                 iter = iter.resolve()(self.extpy)
             else:
-                iter = super(Module, self).__iter__() 
-            for x in iter: 
-                yield x 
+                iter = super(Module, self).__iter__()
+            for x in iter:
+                yield x
         except:
             yield self._except()
 
     def collect_function(self, extpy):
         if extpy.check(func=1, basestarts='test_'):
-            if extpy.check(genfunc=1): 
-                yield Generator(extpy) 
-            else: 
-                #if self.extpy.samefile(extpy): not nfs/different mountpoint safe ? 
+            if extpy.check(genfunc=1):
+                yield Generator(extpy)
+            else:
+                #if self.extpy.samefile(extpy): not nfs/different mountpoint safe ?
                 yield self.Item(extpy)
 
     def collect_class(self, extpy):
@@ -166,41 +166,41 @@
 class Class(PyCollector):
     def collect_method(self, extpy):
         # note that we want to allow inheritance and thus
-        # we don't check for "samemodule"-ness of test 
+        # we don't check for "samemodule"-ness of test
         # methods like in the Module Collector
         if extpy.check(basestarts='test_', func=1):
-            if extpy.check(genfunc=1): 
-                yield Generator(extpy) 
-            else: 
+            if extpy.check(genfunc=1):
+                yield Generator(extpy)
+            else:
                 func = extpy.resolve()
                 try:
-                    yield getattr(func.im_class, 'Item')(extpy) 
-                except AttributeError: 
-                    yield self.Item(extpy) 
-
-class Generator(PyCollector): 
-    def builditem(self, obj): 
-        if isinstance(obj, (tuple, list)): 
+                    yield getattr(func.im_class, 'Item')(extpy)
+                except AttributeError:
+                    yield self.Item(extpy)
+
+class Generator(PyCollector):
+    def builditem(self, obj):
+        if isinstance(obj, (tuple, list)):
             call = obj[0]
             args = obj[1:]
         else:
-            call = obj 
+            call = obj
             args = ()
-        #if hasattr(call, 'gi_running'): 
-        #    return ... Generator(py.path.obj(call), *args) 
-        return self.GenItem(self.extpy, call, *args) 
+        #if hasattr(call, 'gi_running'):
+        #    return ... Generator(py.path.obj(call), *args)
+        return self.GenItem(self.extpy, call, *args)
 
     def __iter__(self):
         try:
-            # XXX we need to setup/teardown state here 
-            #sm = self.GenItem.setupmanager 
-            #sm.setup_path(self.extpy) 
-            #gen, teardown = sm.setup_method(self.extpy) 
-            #assert not teardown, "%r not processoable in Generator-Collector (XXX)" 
+            # XXX we need to setup/teardown state here
+            #sm = self.GenItem.setupmanager
+            #sm.setup_path(self.extpy)
+            #gen, teardown = sm.setup_method(self.extpy)
+            #assert not teardown, "%r not processoable in Generator-Collector (XXX)"
             gen = self.extpy.resolve()
-            if hasattr(gen, 'im_self')  and not gen.im_self: 
-                gen = gen.__get__(gen.im_class(), gen.im_class) 
-            for call in gen(): 
-                yield self.builditem(call) 
+            if hasattr(gen, 'im_self')  and not gen.im_self:
+                gen = gen.__get__(gen.im_class(), gen.im_class)
+            for call in gen():
+                yield self.builditem(call)
         except:
             yield self._except()

Modified: py/dist/py/test/compat.py
==============================================================================
--- py/dist/py/test/compat.py	(original)
+++ py/dist/py/test/compat.py	Sun Jan  9 16:49:34 2005
@@ -3,42 +3,42 @@
 
 class TestCaseUnit(py.test.Item):
     """ compatibility Unit executor for TestCase methods
-        honouring setUp and tearDown semantics. 
+        honouring setUp and tearDown semantics.
     """
     def execute(self, driver):
-        unboundmethod = self.extpy.resolve() 
+        unboundmethod = self.extpy.resolve()
         cls = unboundmethod.im_class
         instance = cls()
         instance.setUp()
         try:
-            unboundmethod(instance) 
+            unboundmethod(instance)
         finally:
             instance.tearDown()
         return py.test.Item.Passed()
 
 class TestCase:
     """compatibility class of unittest's TestCase. """
-    Item = TestCaseUnit 
+    Item = TestCaseUnit
 
-    def setUp(self): 
+    def setUp(self):
         pass
 
-    def tearDown(self): 
+    def tearDown(self):
         pass
 
     def fail(self, msg=None):
         """ fail immediate with given message. """
-        raise py.test.Item.Failed(msg=msg) 
+        raise py.test.Item.Failed(msg=msg)
 
     def assertRaises(self, excclass, func, *args, **kwargs):
         py.test.raises(excclass, func, *args, **kwargs)
     failUnlessRaises = assertRaises
 
-    # dynamically construct (redundant) methods 
+    # dynamically construct (redundant) methods
     aliasmap = [
         ('x',   'not x', 'assert_, failUnless'),
         ('x',   'x',     'failIf'),
-        ('x,y', 'x!=y',  'failUnlessEqual,assertEqual, assertEquals'), 
+        ('x,y', 'x!=y',  'failUnlessEqual,assertEqual, assertEquals'),
         ('x,y', 'x==y',  'failIfEqual,assertNotEqual, assertNotEquals'),
         ]
     items = []
@@ -53,6 +53,6 @@
             """ % locals() )
 
     source = "".join(items)
-    exec py.code.Source(source).compile() 
+    exec py.code.Source(source).compile()
 
 __all__ = ['TestCase']

Modified: py/dist/py/test/config.py
==============================================================================
--- py/dist/py/test/config.py	(original)
+++ py/dist/py/test/config.py	Sun Jan  9 16:49:34 2005
@@ -1,16 +1,16 @@
 from __future__ import generators
 
 import py
-from py.__impl__.test.tool import optparse 
+from py.__impl__.test.tool import optparse
 
 defaultconfig = py.magic.autopath().dirpath('defaultconfig.py')
-defaultconfig = py.path.extpy(defaultconfig) 
+defaultconfig = py.path.extpy(defaultconfig)
 dummy = object()
 
 #
 # config file handling (utest.conf)
 #
-configbasename = 'conftest.py' 
+configbasename = 'conftest.py'
 
 class Config:
     def __init__(self):
@@ -30,96 +30,96 @@
         """ read configuration files left-to-right for the given anchor file. """
         self.configpaths = []
         d = {}
-        for anchor in anchors: 
-            for p in anchor.parts(): 
+        for anchor in anchors:
+            for p in anchor.parts():
                 x = p.join(configbasename)
-                if x.check(file=1): 
-                    extpy = py.path.extpy(x) 
-                    extpy.resolve() # trigger loading it 
-                    if extpy not in d: 
-                        self.configpaths.append(extpy) 
+                if x.check(file=1):
+                    extpy = py.path.extpy(x)
+                    extpy.resolve() # trigger loading it
+                    if extpy not in d:
+                        self.configpaths.append(extpy)
                         d[extpy] = True
         self.configpaths.sort(lambda x,y: cmp(len(str(x)), len(str(y))))
         self.configpaths.append(defaultconfig)
 
-    def getconfigvalue(self, path, name): 
-        for p in path.parts(reverse=True): 
-            x = p.join(configbasename) 
-            if x.check(file=1): 
-                extpy = py.path.extpy(x, name) 
-                if extpy.check(): 
-                    return extpy.resolve() 
-        extpy = defaultconfig.join(name) 
-        if extpy.check(): 
+    def getconfigvalue(self, path, name):
+        for p in path.parts(reverse=True):
+            x = p.join(configbasename)
+            if x.check(file=1):
+                extpy = py.path.extpy(x, name)
+                if extpy.check():
+                    return extpy.resolve()
+        extpy = defaultconfig.join(name)
+        if extpy.check():
             return extpy.resolve()
-        raise ValueError("could not find config value %r" % name) 
-      
+        raise ValueError("could not find config value %r" % name)
+
     def getfirst(self, param, default=dummy):
         """ return first found parameter. """
-        for config in self.configpaths: 
+        for config in self.configpaths:
             x = config.join(param)
             if x.check():
-                return x.resolve() 
+                return x.resolve()
         if default is dummy:
             raise AttributeError, param
         return default
         #if default is not dummy:
         #    return getattr(self, param, default)
         #return getattr(self, param)
-            
-    def parseargs(self, args): 
-        # first a small fight with optparse to merge the 
-        # pytest.py file options correctly 
+
+    def parseargs(self, args):
+        # first a small fight with optparse to merge the
+        # pytest.py file options correctly
         parser = optparse.OptionParser()
-        for config in self.configpaths: 
-            meth = config.join('options') 
-            if meth.check(): 
-                groupname, groupoptions = meth.resolve() 
-                optgroup = optparse.OptionGroup(parser, groupname) 
+        for config in self.configpaths:
+            meth = config.join('options')
+            if meth.check():
+                groupname, groupoptions = meth.resolve()
+                optgroup = optparse.OptionGroup(parser, groupname)
                 optgroup.add_options(groupoptions)
                 parser.add_option_group(optgroup)
 
         # extract and remove defaults from options
         for option in flattenoptions(parser):
             if option.dest:
-                value = self.getfirst(option.dest, option.default) 
+                value = self.getfirst(option.dest, option.default)
                 #print "setting %r to %r" %(option.dest, value)
-                setattr(self.option, option.dest, value) 
+                setattr(self.option, option.dest, value)
                 option.default = 'NODEFAULT'
-        
-        # parse cmdline args  
-        cmdlineoption, remaining = parser.parse_args(args, self.option) 
 
-        self.fixoptions() 
-        # override previously computed defaults 
+        # parse cmdline args
+        cmdlineoption, remaining = parser.parse_args(args, self.option)
+
+        self.fixoptions()
+        # override previously computed defaults
         #for name in cmdlineoption.__dict__:
         #    if not name.startswith('_'):
         #        print "resetting %r to %r" %(name, cmdlineoption.__dict__[name])
         #        setattr(self.option, name, cmdlineoption.__dict__[name])
-        return remaining 
+        return remaining
 
 
-    def fixoptions(self): 
-        if self.option.session and self.option.usepdb: 
-            raise ValueError, "--session together with --pdb not supported yet." 
-        if self.option.executable and self.option.usepdb: 
-            raise ValueError, "--exec together with --pdb not supported yet." 
+    def fixoptions(self):
+        if self.option.session and self.option.usepdb:
+            raise ValueError, "--session together with --pdb not supported yet."
+        if self.option.executable and self.option.usepdb:
+            raise ValueError, "--exec together with --pdb not supported yet."
 
-        # setting a correct executable 
-        if self.option.executable is not None: 
+        # setting a correct executable
+        if self.option.executable is not None:
             exe = py.path.local(py.std.os.path.expanduser(self.option.executable))
-            if not exe.check(): 
-                exe = py.path.local.sysfind(self.option.executable) 
-            assert exe.check() 
-            self.option.executable = exe 
+            if not exe.check():
+                exe = py.path.local.sysfind(self.option.executable)
+            assert exe.check()
+            self.option.executable = exe
 
 config = Config()
 
-# helpers 
+# helpers
 
 def flattenoptions(parser):
     for group in parser.option_groups:
-        for y in group.option_list: 
+        for y in group.option_list:
             yield y
     for x in parser.option_list:
-        yield x 
+        yield x

Modified: py/dist/py/test/defaultconfig.py
==============================================================================
--- py/dist/py/test/defaultconfig.py	(original)
+++ py/dist/py/test/defaultconfig.py	Sun Jan  9 16:49:34 2005
@@ -1,8 +1,8 @@
-import py 
+import py
 Option = py.test.Option
 
-Module = py.test.collect.Module 
-Directory = py.test.collect.Directory 
+Module = py.test.collect.Module
+Directory = py.test.collect.Directory
 Class = py.test.collect.Class
 
 def getreporter():
@@ -11,34 +11,34 @@
 additionalinfo = None
 
 options = ('py.test standard options', [
-        Option('-v', '--verbose', 
+        Option('-v', '--verbose',
                action="count", dest="verbose", default=0,
                help="increase verbosity"),
-        Option('-x', '--exitfirst', 
-               action="store_true", dest="exitfirstproblem", default=False, 
+        Option('-x', '--exitfirst',
+               action="store_true", dest="exitfirstproblem", default=False,
                help="exit instantly on first error or failed test."),
-        Option('-S', '--nocapture', 
+        Option('-S', '--nocapture',
                action="store_true", dest="nocapture", default=False,
                help="disable catching of sys.stdout/stderr output."),
-        Option('-l', '--showlocals', 
-               action="store_true", dest="showlocals", default=False, 
+        Option('-l', '--showlocals',
+               action="store_true", dest="showlocals", default=False,
                help="show locals in tracebacks (disabled by default)"),
-        Option('', '--exec', 
+        Option('', '--exec',
                action="store", dest="executable", default=None,
                help="python executable to run the tests with. "),
-        Option('', '--session', 
+        Option('', '--session',
                action="store_true", dest="session", default=False,
                help="run a test session/rerun only failing tests. "),
-        Option('', '--fulltrace', 
-               action="store_true", dest="fulltrace", default=False, 
+        Option('', '--fulltrace',
+               action="store_true", dest="fulltrace", default=False,
                help="Don't try to cut any tracebacks (default is to cut)"),
-        Option('', '--nomagic', 
-               action="store_true", dest="nomagic", default=False, 
+        Option('', '--nomagic',
+               action="store_true", dest="nomagic", default=False,
                help="don't invoke magic to e.g. beautify failing/error statements."),
         Option('', '--pdb',
                action="store_true", dest="usepdb", default=False,
                help="Start pdb (the Python debugger) on errors."),
-        Option('', '--collectonly', 
+        Option('', '--collectonly',
                action="store_true", dest="collectonly", default=False,
                help="only collect tests, don't execute them. "),
 ])

Modified: py/dist/py/test/drive.py
==============================================================================
--- py/dist/py/test/drive.py	(original)
+++ py/dist/py/test/drive.py	Sun Jan  9 16:49:34 2005
@@ -1,37 +1,37 @@
 from __future__ import generators
-import py 
-collect = py.test.collect 
+import py
+collect = py.test.collect
 
-class Exit(Exception): 
+class Exit(Exception):
     """ for immediate program exits without tracebacks and reporter/summary. """
     def __init__(self, item=None):
         self.item = None
-        Exception.__init__(self) 
+        Exception.__init__(self)
 
 def exit(*args):
-    """ exit immediately without tracebacks and reporter/summary. """ 
-    raise Exit(*args) 
+    """ exit immediately without tracebacks and reporter/summary. """
+    raise Exit(*args)
 
 class Driver:
-    """ 
-        A Driver gets test Items from Collectors, # executes the 
-        Items and sends the Outcome to the Reporter. 
-    """ 
+    """
+        A Driver gets test Items from Collectors, # executes the
+        Items and sends the Outcome to the Reporter.
+    """
     option = py.test.config.option
     Exit = Exit
 
-    def __init__(self, channel): 
+    def __init__(self, channel):
         self.reporter = py.test.config.getfirst('getreporter') ()
-        self._channel = channel 
+        self._channel = channel
         self._failed = []
 
     def setup(self):
-        """ setup any neccessary resources. """ 
+        """ setup any neccessary resources. """
 
     def teardown(self):
-        """ teardown any resources we know about. """ 
-        # XXX a cleaner way to teardown setupmanagers? 
-        py.test.Item.teardownall() 
+        """ teardown any resources we know about. """
+        # XXX a cleaner way to teardown setupmanagers?
+        py.test.Item.teardownall()
 
     def run(self, collectors):
         """ main loop for running tests. """
@@ -39,17 +39,17 @@
         try:
             try:
                 self.reporter.start()
-                for x in collectors: 
-                    self.run_collector_or_item(x) 
+                for x in collectors:
+                    self.run_collector_or_item(x)
             finally:
                 self.teardown()
         except self.Exit, ex:
             pass
-        self.reporter.end() 
+        self.reporter.end()
         l = []
-        for x in self._failed: 
+        for x in self._failed:
             l.append((str(x.extpy.root), str(x.extpy.modpath)))
-        return l 
+        return l
 
     def run_collector_or_item(self, obj):
         """ run (possibly many) testitems and/or collectors. """
@@ -59,12 +59,12 @@
             self.runitem(obj)
         elif isinstance(obj, py.test.collect.Collector):
             self.runcollector(obj)
-        elif isinstance(obj, py.test.collect.Collector.Error): 
+        elif isinstance(obj, py.test.collect.Collector.Error):
             try:
                 self.reporter.report_collect_error(obj)
             except (KeyboardInterrupt, SystemExit):
-                raise 
-            except: 
+                raise
+            except:
                 print "*" * 80
                 print "Reporter Error"
                 print "*" * 80
@@ -72,7 +72,7 @@
                 traceback.print_exc()
                 raise SystemExit, 1
             if self.option.exitfirstproblem:
-                raise self.Exit() 
+                raise self.Exit()
         else:
             raise TypeError("%r is not a Item or Collector instance" % obj)
 
@@ -86,13 +86,13 @@
                 close()
 
     def runitem(self, item):
-        if not self.option.collectonly: 
+        if not self.option.collectonly:
             self.reporter.startitem(item)
             try:
                 item.run(self)
             except item.Outcome, res:
                 if not hasattr(res, 'excinfo'):
-                    res.excinfo = py.code.ExceptionInfo() 
+                    res.excinfo = py.code.ExceptionInfo()
             except (KeyboardInterrupt, SystemExit):
                 raise
             except:
@@ -101,8 +101,8 @@
                 res = item.Passed()
             res.item = item
             self.reporter.enditem(res)
-            if isinstance(res, (item.Failed,)): 
-                self._failed.append(item) 
+            if isinstance(res, (item.Failed,)):
+                self._failed.append(item)
                 if py.test.config.option.exitfirstproblem:
-                    raise self.Exit(res.item) 
+                    raise self.Exit(res.item)
 

Modified: py/dist/py/test/item.py
==============================================================================
--- py/dist/py/test/item.py	(original)
+++ py/dist/py/test/item.py	Sun Jan  9 16:49:34 2005
@@ -1,168 +1,168 @@
-import py 
+import py
 
 from inspect import isclass, ismodule
 
-class SetupState: 
-    """ shared state for setting up/tearing down tests. """ 
-    def __init__(self): 
+class SetupState:
+    """ shared state for setting up/tearing down tests. """
+    def __init__(self):
         self._setupstack = []
-        self._instance = None 
+        self._instance = None
 
-class SetupItem(object): 
-    state = SetupState()  
+class SetupItem(object):
+    state = SetupState()
 
-    def teardownall(cls): 
-        while cls.state._setupstack: 
-            item, extpy, obj = cls.state._setupstack.pop() 
-            item._dispatch_teardown(obj) 
-    teardownall = classmethod(teardownall) 
+    def teardownall(cls):
+        while cls.state._setupstack:
+            item, extpy, obj = cls.state._setupstack.pop()
+            item._dispatch_teardown(obj)
+    teardownall = classmethod(teardownall)
 
     def _dispatch_teardown(self, obj):
-        if ismodule(obj): 
-            self.teardown_module(obj) 
-        elif isclass(obj): 
-            self.teardown_class(obj) 
+        if ismodule(obj):
+            self.teardown_module(obj)
+        elif isclass(obj):
+            self.teardown_class(obj)
 
     def _dispatch_setup(self, obj):
-        if ismodule(obj): 
-            self.setup_module(obj) 
-        elif isclass(obj): 
-            self.setup_class(obj) 
-        else: 
-            return False 
+        if ismodule(obj):
+            self.setup_module(obj)
+        elif isclass(obj):
+            self.setup_class(obj)
+        else:
+            return False
         return True
-    
+
     def setup_path(self, extpy):
-        """ setup objects along the path to the test-method 
-            (pointed to by extpy). Tear down any previously 
-            setup objects which are not directly needed. 
-        """ 
-        # the setupstack contains (item, extpy, obj) tuples of already 
+        """ setup objects along the path to the test-method
+            (pointed to by extpy). Tear down any previously
+            setup objects which are not directly needed.
+        """
+        # the setupstack contains (item, extpy, obj) tuples of already
         # setup objects.  Strict ordering is maintained, i.e. each extpy in
-        # the stack is "relto" its previous extpy. 
-        stack = self.state._setupstack 
-        while stack and not extpy.relto(stack[-1][1]): 
+        # the stack is "relto" its previous extpy.
+        stack = self.state._setupstack
+        while stack and not extpy.relto(stack[-1][1]):
             item, addr, obj = stack.pop()
-            item._dispatch_teardown(obj) 
+            item._dispatch_teardown(obj)
         rest = extpy.parts()[len(stack):-1]
-        for x in rest: 
-            obj = x.resolve() 
-            if self._dispatch_setup(obj): 
-                stack.append((self, x, obj)) 
-
-    def setup_module(self, mod): 
-        if hasattr(mod, 'setup_module'): 
-            mod.setup_module(mod) 
-
-    def teardown_module(self, mod): 
-        if hasattr(mod, 'teardown_module'): 
-            mod.teardown_module(mod) 
-
-    def setup_class(self, cls): 
-        if hasattr(cls, 'setup_class'): 
-            cls.setup_class.im_func(cls) 
-
-    def teardown_class(self, cls): 
-        if hasattr(cls, 'teardown_class'): 
-            cls.teardown_class.im_func(cls) 
-
-    def setup_method(self, method): 
-        if hasattr(getattr(method, 'im_self', None), 'setup_method'): 
-            method.im_self.setup_method(method) 
-
-    def teardown_method(self, method): 
-        if hasattr(getattr(method, 'im_self', None), 'teardown_method'): 
-            method.im_self.teardown_method(method) 
-
-    def setup_function(self, function): 
-        x = function.func_globals.get('setup_function', None) 
-        if x is not None: 
-            x(function) 
-
-    def teardown_function(self, function): 
-        x = function.func_globals.get('teardown_function', None) 
-        if x is not None: 
-            x(function) 
+        for x in rest:
+            obj = x.resolve()
+            if self._dispatch_setup(obj):
+                stack.append((self, x, obj))
+
+    def setup_module(self, mod):
+        if hasattr(mod, 'setup_module'):
+            mod.setup_module(mod)
+
+    def teardown_module(self, mod):
+        if hasattr(mod, 'teardown_module'):
+            mod.teardown_module(mod)
+
+    def setup_class(self, cls):
+        if hasattr(cls, 'setup_class'):
+            cls.setup_class.im_func(cls)
+
+    def teardown_class(self, cls):
+        if hasattr(cls, 'teardown_class'):
+            cls.teardown_class.im_func(cls)
+
+    def setup_method(self, method):
+        if hasattr(getattr(method, 'im_self', None), 'setup_method'):
+            method.im_self.setup_method(method)
+
+    def teardown_method(self, method):
+        if hasattr(getattr(method, 'im_self', None), 'teardown_method'):
+            method.im_self.teardown_method(method)
+
+    def setup_function(self, function):
+        x = function.func_globals.get('setup_function', None)
+        if x is not None:
+            x(function)
+
+    def teardown_function(self, function):
+        x = function.func_globals.get('teardown_function', None)
+        if x is not None:
+            x(function)
 
-    def make_callable(self, method): 
+    def make_callable(self, method):
         assert callable(method)
         if not hasattr(method, 'im_class'):
-            return method 
-        if self.state._instance.__class__ != method.im_class: 
-            self.state._instance = method.im_class() 
-        return method.__get__(self.state._instance, method.im_class) 
+            return method
+        if self.state._instance.__class__ != method.im_class:
+            self.state._instance = method.im_class()
+        return method.__get__(self.state._instance, method.im_class)
 
 class Item(SetupItem):
-    """ an Item is responsible for locating and executing 
-        a Python callable test object. 
+    """ an Item is responsible for locating and executing
+        a Python callable test object.
     """
 
-    def __init__(self, extpy, *args): 
+    def __init__(self, extpy, *args):
         self.extpy = extpy
-        self.name = extpy.basename 
+        self.name = extpy.basename
         self.args = args
 
     def run(self, driver):
-        self.setup_path(self.extpy) 
-        method = self.make_callable(self.extpy.resolve()) 
-        if hasattr(method, 'im_self'): 
-            self.setup_method(method) 
-        else: 
+        self.setup_path(self.extpy)
+        method = self.make_callable(self.extpy.resolve())
+        if hasattr(method, 'im_self'):
+            self.setup_method(method)
+        else:
             self.setup_function(method)
         try:
             self.execute(method, *self.args)
-        finally: 
-            self.teardown_method(method) 
+        finally:
+            self.teardown_method(method)
+
+    def execute(self, target, *args):
+        """ default implementation for calling a test target is to
+            simply call it.
+        """
+        target(*args)
 
-    def execute(self, target, *args): 
-        """ default implementation for calling a test target is to 
-            simply call it. 
+    def reprcall(self):
+        """ return a string representing a call to the underlying
+            test function.
         """
-        target(*args) 
+        return "%s%r" % (self.extpy.modpath, self.args)
 
-    def reprcall(self): 
-        """ return a string representing a call to the underlying 
-            test function. 
-        """ 
-        return "%s%r" % (self.extpy.modpath, self.args) 
-            
-    class Outcome: 
+    class Outcome:
         def __init__(self, **kwargs):
             assert 'msg' not in kwargs or isinstance(kwargs['msg'], str), (
-                "given 'msg' argument is not a string" ) 
+                "given 'msg' argument is not a string" )
             self.__dict__.update(kwargs)
         def __repr__(self):
-            return getattr(self, 'msg', object.__repr__(self)) 
+            return getattr(self, 'msg', object.__repr__(self))
     class Passed(Outcome): pass
     class Failed(Outcome): pass
     class ExceptionFailure(Failed): msg = 'DID NOT RAISE'
-    class Skipped(Outcome): pass 
+    class Skipped(Outcome): pass
+
+class GenItem(Item):
+    def __init__(self, extpy, call, *args):
+        assert callable(call), "generated test %r is not callable" % (call,)
+        super(GenItem, self).__init__(extpy, *args)
+        self.call = call
 
-class GenItem(Item): 
-    def __init__(self, extpy, call, *args): 
-        assert callable(call), "generated test %r is not callable" % (call,) 
-        super(GenItem, self).__init__(extpy, *args) 
-        self.call = call 
-  
-    def execute(self, target, *args): 
-        #print "calling %r%r" %(self.call, args) 
+    def execute(self, target, *args):
+        #print "calling %r%r" %(self.call, args)
         return self.call(*args)
 
-    def reprcall(self): 
-        """ return a string representing a call to the underlying 
-            generated test function. 
-        """ 
-        name = getattr(self.call, '__name__', self.call) 
-        return "%s -> %s%r" % (self.extpy.modpath, name, self.args) 
+    def reprcall(self):
+        """ return a string representing a call to the underlying
+            generated test function.
+        """
+        name = getattr(self.call, '__name__', self.call)
+        return "%s -> %s%r" % (self.extpy.modpath, name, self.args)
 
 #
-# triggering specific outcomes from executing Items 
+# triggering specific outcomes from executing Items
 #
-def skip(msg="unknown reason"): 
+def skip(msg="unknown reason"):
     """ skip with the given Message. """
-    raise py.test.Item.Skipped(msg=msg, tbindex=-2) 
+    raise py.test.Item.Skipped(msg=msg, tbindex=-2)
 
-def fail(msg="unknown failure"): 
+def fail(msg="unknown failure"):
     """ fail with the given Message. """
-    raise py.test.Item.Failed(msg=msg, tbindex=-2) 
+    raise py.test.Item.Failed(msg=msg, tbindex=-2)
 

Modified: py/dist/py/test/raises.py
==============================================================================
--- py/dist/py/test/raises.py	(original)
+++ py/dist/py/test/raises.py	Sun Jan  9 16:49:34 2005
@@ -1,10 +1,10 @@
 import sys
-import py 
-ExceptionFailure = py.test.Item.ExceptionFailure 
+import py
+ExceptionFailure = py.test.Item.ExceptionFailure
 
 def raises(ExpectedException, *args, **kwargs):
-    """ raise AssertionError, if target code does not raise the expected 
-        exception. 
+    """ raise AssertionError, if target code does not raise the expected
+        exception.
     """
     assert args
     if isinstance(args[0], str):
@@ -17,17 +17,17 @@
         source = py.code.Source(expr)
         try:
             __traceback__ = py.code.ExceptionInfo.TRACEBACK_HIDE
-            eval(source.compile(), frame.f_globals, loc) 
+            eval(source.compile(), frame.f_globals, loc)
             del __traceback__
             # XXX didn'T mean f_globals == f_locals something special?
-            #     this is destroyed here ... 
+            #     this is destroyed here ...
         except ExpectedException:
             return py.code.ExceptionInfo()
-        raise ExceptionFailure(expr=expr, expected=ExpectedException, 
+        raise ExceptionFailure(expr=expr, expected=ExpectedException,
                                tbindex = -2)
     else:
         func = args[0]
-        assert callable 
+        assert callable
         try:
             __traceback__ = py.code.ExceptionInfo.TRACEBACK_HIDE
             func(*args[1:], **kwargs)
@@ -38,5 +38,5 @@
         if k:
             k = ', ' + k
         expr = '%s(%r%s)' %(func.__name__, args, k)
-        raise ExceptionFailure(expr=args, expected=ExpectedException, 
+        raise ExceptionFailure(expr=args, expected=ExpectedException,
                                tbindex = -2)

Modified: py/dist/py/test/report/memo.py
==============================================================================
--- py/dist/py/test/report/memo.py	(original)
+++ py/dist/py/test/report/memo.py	Sun Jan  9 16:49:34 2005
@@ -1,6 +1,6 @@
 from __future__ import generators
 
-from py.test import Item 
+from py.test import Item
 
 class MemoReporter:
     typemap = {
@@ -31,7 +31,7 @@
 
     def report_outcome(self, testresult):
         restype, c = self.processresult(testresult)
-            
+
     def summary(self):
         pass
 

Modified: py/dist/py/test/report/testing/__init__.py
==============================================================================
--- py/dist/py/test/report/testing/__init__.py	(original)
+++ py/dist/py/test/report/testing/__init__.py	Sun Jan  9 16:49:34 2005
@@ -1 +1 @@
-#
\ No newline at end of file
+#

Modified: py/dist/py/test/report/testing/test_memo.py
==============================================================================
--- py/dist/py/test/report/testing/test_memo.py	(original)
+++ py/dist/py/test/report/testing/test_memo.py	Sun Jan  9 16:49:34 2005
@@ -1,9 +1,9 @@
-import py 
+import py
 
 def setup_module(mod):
-    mod.tmpdir = py.path.local.make_numbered_dir() 
+    mod.tmpdir = py.path.local.make_numbered_dir()
 def teardown_module(mod):
-    mod.tmpdir.remove() 
+    mod.tmpdir.remove()
     del mod.tmpdir
 
 #def test_equal_should_raise():
@@ -11,13 +11,13 @@
 
 #class MyUnit(collect.Auto, collect.Unit):
 #    def execute(self, runner):
-#        try:        
+#        try:
 #
 def test_memoreporter():
     reporter = py.test.MemoReporter()
     p = tmpdir.join('memoimport.py')
-    p.write('raise IOError') 
-    collector = py.test.collect.Module(p) 
+    p.write('raise IOError')
+    collector = py.test.collect.Module(p)
     #main(collector=collector, reporter=reporter)
     #collect_errors = reporter.getlist(collect.Error)
     #assert len(collect_errors) == 1

Modified: py/dist/py/test/report/text/out.py
==============================================================================
--- py/dist/py/test/report/text/out.py	(original)
+++ py/dist/py/test/report/text/out.py	Sun Jan  9 16:49:34 2005
@@ -6,15 +6,15 @@
     tty = False
     fullwidth = int(os.environ.get('COLUMNS', 80))-1
     def __init__(self, file):
-        self.file = file 
+        self.file = file
 
     def sep(self, sepchar, title=None):
-        fullwidth = self.fullwidth 
+        fullwidth = self.fullwidth
         #spacing = " " * ((79 - compwidth)/2)
         if title is not None:
             size = len(title) + 2
             half = (fullwidth-size) / 2.0
-            #line = "%s%s %s %s%s" %(spacing, 
+            #line = "%s%s %s %s%s" %(spacing,
             #        sepchar * half, title, sepchar * half, spacing)
             fill = sepchar * int(half / len(sepchar))
             line = "%s %s %s" % (fill, title, fill)
@@ -47,7 +47,7 @@
         self.file.flush()
 
     def rewrite(self, s=''):
-        self.write('%s' % s) 
+        self.write('%s' % s)
 
 class FileOut(Out):
     def write(self, s):
@@ -62,11 +62,11 @@
         self.file.flush()
 
     def rewrite(self, s=''):
-        self.write(s) 
+        self.write(s)
 
 def getout(file):
-    # investigate further into terminal, this is not enough 
-    if False and file.isatty(): 
-        return TerminalOut(file) 
+    # investigate further into terminal, this is not enough
+    if False and file.isatty():
+        return TerminalOut(file)
     else:
-        return FileOut(file) 
+        return FileOut(file)

Modified: py/dist/py/test/report/text/reporter.py
==============================================================================
--- py/dist/py/test/report/text/reporter.py	(original)
+++ py/dist/py/test/report/text/reporter.py	Sun Jan  9 16:49:34 2005
@@ -4,67 +4,67 @@
 Collector = py.test.collect.Collector
 
 from time import time as now
-# lazy relative Implementation imports 
-from summary import Summary 
-from out import getout 
+# lazy relative Implementation imports
+from summary import Summary
+from out import getout
 
 
 class TextReporter(object):
-    Summary = Summary 
+    Summary = Summary
     typemap = {
-        Item.Passed: '.', 
-        Item.Skipped: 's', 
+        Item.Passed: '.',
+        Item.Skipped: 's',
         Item.Failed: 'F',
-        Collector.Error: 'C', 
+        Collector.Error: 'C',
     }
     namemap = {
-        Item.Passed: 'ok', 
-        Item.Skipped: 'SKIP', 
+        Item.Passed: 'ok',
+        Item.Skipped: 'SKIP',
         Item.Failed: 'FAIL',
-        Collector.Error: 'COLLECT ERROR', 
+        Collector.Error: 'COLLECT ERROR',
     }
 
-    def __init__(self, f=None): 
+    def __init__(self, f=None):
         if f is None:
-            f = py.std.sys.stdout 
-        self.out = getout(f) 
+            f = py.std.sys.stdout
+        self.out = getout(f)
         self._started = {}
-        self.summary = self.Summary(self.out) 
-        self.summary.option = self.option = py.test.config.option 
+        self.summary = self.Summary(self.out)
+        self.summary.option = self.option = py.test.config.option
 
     def start(self):
-        self.out.sep("=", "test process starts") 
-        option = py.test.config.option 
-        if option.session: 
-            mode = 'session/child process' 
-        elif option.executable: 
-            mode = 'child process' 
-        else: 
-            mode = 'inprocess' 
-        self.out.line("testing-mode: %s" % mode) 
-        self.out.line("executable  : %s  (%s)" % 
-                          (py.std.sys.executable, repr_pythonversion())) 
-   
-        rev = py.__package__.getrev() 
+        self.out.sep("=", "test process starts")
+        option = py.test.config.option
+        if option.session:
+            mode = 'session/child process'
+        elif option.executable:
+            mode = 'child process'
+        else:
+            mode = 'inprocess'
+        self.out.line("testing-mode: %s" % mode)
+        self.out.line("executable  : %s  (%s)" %
+                          (py.std.sys.executable, repr_pythonversion()))
+
+        rev = py.__package__.getrev()
         self.out.line("using py lib: %s <rev %s>" % (
                        py.path.local(py.__file__).dirpath(), rev))
 
-        for i, x in py.builtin.enumerate(py.test.config.configpaths): 
+        for i, x in py.builtin.enumerate(py.test.config.configpaths):
             self.out.line("initial testconfig %d: %s" %(i, x))
-        additional = py.test.config.getfirst('additionalinfo') 
-        if additional: 
-            for key, descr in additional(): 
+        additional = py.test.config.getfirst('additionalinfo')
+        if additional:
+            for key, descr in additional():
                 self.out.line("%s: %s" %(key, descr))
         self.out.sep("=")
         if not self.option.nomagic:
-            py.magic.invoke(assertion=1) 
-        self.summary.starttime = now() 
+            py.magic.invoke(assertion=1)
+        self.summary.starttime = now()
 
     def end(self):
         if not self.option.nomagic:
-            py.magic.revoke(assertion=1) 
-        self.summary.endtime = now() 
-        self.summary.render() 
+            py.magic.revoke(assertion=1)
+        self.summary.endtime = now()
+        self.summary.render()
 
     def open(self, collector):
         if self.option.collectonly:
@@ -90,11 +90,11 @@
         numunits = len(list(collector.iterunits()))
         if numunits > 0:
             #if verbose < 2:
-            #    self.out.write('%s[%d]' % (collector.extpy, 
+            #    self.out.write('%s[%d]' % (collector.extpy,
             #                           numunits))
             #else:
-            #self.out.line("collector.fspy.modpath) 
-            return self.out.line 
+            #self.out.line("collector.fspy.modpath)
+            return self.out.line
 
     def open_Directory(self, collector):
         if self.option.verbose < 1:
@@ -114,44 +114,44 @@
     def startitem(self, item):
         if self.option.collectonly:
             cols = self._opencollectors
-            if len(cols): 
+            if len(cols):
                 print '    ' * len(cols),
-            print "Item", item.extpy.modpath 
+            print "Item", item.extpy.modpath
             return
         if not self.option.nocapture:
-            from py.__impl__.test.tool.outerrcapture import SimpleOutErrCapture 
+            from py.__impl__.test.tool.outerrcapture import SimpleOutErrCapture
             item.iocapture = SimpleOutErrCapture()
         if self.out.tty:
             realpath, lineno = item.extpy.getfilelineno()
             location = "running %s:%d %s" % (realpath.basename, lineno, str(item.extpy.modpath))
-            self.out.rewrite(location) 
-        self._started[item] = now() 
+            self.out.rewrite(location)
+        self._started[item] = now()
 
     def enditem(self, result):
         if self.option.collectonly:
             return
         endtime = now()
-        item = result.item 
-        starttime = self._started[item] 
+        item = result.item
+        starttime = self._started[item]
         del self._started[item]
         elapsed = endtime - starttime
-        item.elapsed = elapsed 
-    
+        item.elapsed = elapsed
+
         if not self.option.nocapture:
             result.out, result.err = item.iocapture.reset()
-       
+
         restype, c = self.processresult(result)
-        writeinfo = None 
+        writeinfo = None
         if self.out.tty:
             if not isinstance(result, py.test.Item.Passed) or self.option.verbose >=1:
-                writeinfo = '\n' 
-            elif isinstance(result, py.test.Item.Passed): 
-                writeinfo = '' 
+                writeinfo = '\n'
+            elif isinstance(result, py.test.Item.Passed):
+                writeinfo = ''
         elif self.option.verbose >= 1:
-            writeinfo = '\n' 
+            writeinfo = '\n'
         else:
-            self.out.write(c) 
-            
+            self.out.write(c)
+
         if writeinfo is not None:
             realpath, lineno = item.extpy.getfilelineno()
             location = "%s:%d" % (realpath.basename, lineno+1)
@@ -171,23 +171,23 @@
                 pdb.post_mortem(result.excinfo._excinfo[2])
 
     def report_collect_error(self, error):
-        restype, c = self.processresult(error) 
-        writeinfo = None 
+        restype, c = self.processresult(error)
+        writeinfo = None
         if self.out.tty:
-            if not isinstance(result, Item.Passed) or self.option.verbose >=1:    
-                writeinfo = '\n' 
-            elif isinstance(result, Item.Passed): 
-                writeinfo = '' 
+            if not isinstance(result, Item.Passed) or self.option.verbose >=1:
+                writeinfo = '\n'
+            elif isinstance(result, Item.Passed):
+                writeinfo = ''
         elif self.option.verbose >= 1:
-            writeinfo = '\n' 
+            writeinfo = '\n'
         else:
-            self.out.write(c) 
-            
+            self.out.write(c)
+
         if writeinfo is not None:
             #exc, frame, filename,lineno = self.summary.getexinfo(error)
             tbentries = list(error.excinfo)
-            filename = tbentries[-1].frame.code.path 
-            lineno = tbentries[-1].lineno  
+            filename = tbentries[-1].frame.code.path
+            lineno = tbentries[-1].lineno
             self.out.line('CollectError: %s:%d' % (filename, lineno) )
 
     def processresult(self, testresult):
@@ -212,4 +212,4 @@
         return "%s.%s.%s-%s-%s" % v
     except ValueError:
         return str(v)
-    
+

Modified: py/dist/py/test/report/text/summary.py
==============================================================================
--- py/dist/py/test/report/text/summary.py	(original)
+++ py/dist/py/test/report/text/summary.py	Sun Jan  9 16:49:34 2005
@@ -1,11 +1,11 @@
 from __future__ import generators
-import py 
-Item = py.test.Item 
+import py
+Item = py.test.Item
 from py.__impl__.magic import exprinfo, assertion
 
 class Summary(object):
-    def __init__(self, out): 
-        self.out = out 
+    def __init__(self, out):
+        self.out = out
 
     def append(self, restype, testresult):
         self.getlist(restype).append(testresult)
@@ -14,12 +14,12 @@
         name = restype.__name__.lower()
         return self.__dict__.setdefault(name, [])
 
-    def repr_collect_error(self, error): 
+    def repr_collect_error(self, error):
         self.out.line()
-        self.out.sep("_") 
+        self.out.sep("_")
         self.out.sep("_", "Collect Error")
         self.out.line()
-        self.repr_traceback_raw(error.excinfo.getentries()) 
+        self.repr_traceback_raw(error.excinfo.getentries())
         #self.repr_failure_result(res)
         #self.out.line()
         #if isinstance(res.excinfo[1], AssertionError):
@@ -32,14 +32,14 @@
         #    for name, value in frame.f_locals.items():
         #        self.out.line("%-10s = %r" %(name, value))
     def summary_collect_errors(self):
-        for error in self.getlist(py.test.collect.Error): 
-            self.repr_collect_error(error) 
+        for error in self.getlist(py.test.collect.Error):
+            self.repr_collect_error(error)
 
     def render(self):
         self.out.write('\n')
         self.skippedreasons()
         self.failures()
-        self.summary_collect_errors() 
+        self.summary_collect_errors()
         outlist = []
         sum = 0
         for typ in Item.Passed, Item.Failed, Item.Skipped:
@@ -49,15 +49,15 @@
             sum += len(l)
         elapsed = self.endtime-self.starttime
         status = "%s" % ", ".join(outlist)
-        self.out.sep('=', 'tests finished: %s in %4.2f seconds' % 
+        self.out.sep('=', 'tests finished: %s in %4.2f seconds' %
                          (status, elapsed))
 
     def skippedreasons(self):
         d = {}
         for res in self.getlist(Item.Skipped):
             tbindex = getattr(res, 'tbindex', -1)
-            raisingtb = list(res.excinfo)[tbindex] 
-            fn = raisingtb.frame.code.path 
+            raisingtb = list(res.excinfo)[tbindex]
+            fn = raisingtb.frame.code.path
             lineno = raisingtb.lineno
             d[(fn,lineno)] = res
         if d:
@@ -66,22 +66,22 @@
             for (fn,lineno), res in d.items():
                 self.out.line('Skipped in %s:%d %s' %(fn,lineno+1,getattr(res, 'msg')))
             self.out.line()
-            
+
     def failures(self):
         for res in self.getlist(Item.Failed):
             self.repr_failure(res)
 
     def repr_failure(self, res):
         self.out.line()
-        self.out.sep("_") 
+        self.out.sep("_")
         #self.out.line()
-        self.repr_traceback(res.item, res.excinfo, 
+        self.repr_traceback(res.item, res.excinfo,
                             getattr(res, 'tbindex', -1))
         #self.out.line()
         self.repr_failure_result(res)
-        for name in 'out', 'err': 
-            if hasattr(res, name): 
-                out = getattr(res, name) 
+        for name in 'out', 'err':
+            if hasattr(res, name):
+                out = getattr(res, name)
                 if out.strip():
                     self.out.sep("- ", "recorded std%s" % name)
                     self.out.line(out.strip())
@@ -103,86 +103,86 @@
                                   "verbosity to see details)")
         self.out.line(exprinfo or res.excinfo)
 
-    def repr_source(self, tb): 
-        # represent source code for a given traceback entry 
+    def repr_source(self, tb):
+        # represent source code for a given traceback entry
         self.out.line()
-        try: 
-            source = tb.frame.code.fullsource 
-        except py.error.ENOENT: 
-            self.out.line("failure to get at sourcelines from %r" % tb) 
+        try:
+            source = tb.frame.code.fullsource
+        except py.error.ENOENT:
+            self.out.line("failure to get at sourcelines from %r" % tb)
             #self.out.line("(co_filename = %r)" % (frame.f_code.co_filename))
-            #self.out.line("(f_lineno = %r)" % (frame.f_lineno)) 
+            #self.out.line("(f_lineno = %r)" % (frame.f_lineno))
             return
-        start = tb.frame.code.firstlineno 
+        start = tb.frame.code.firstlineno
         end = tb.lineno
-        
-        for line in source[start:end]: 
+
+        for line in source[start:end]:
             self.out.line(line.rstrip())
-        line = source[end] 
+        line = source[end]
         if line.startswith(" "):
             line = line[1:]  # to avoid the indentation caused by ">"
         self.out.line(">" + line)
         return
 
-    def cut_traceback(self, excinfo, item=None, tbindex=None): 
-        if self.option.fulltrace or item is None: 
-            startcondition = endcondition = None 
-        else: 
+    def cut_traceback(self, excinfo, item=None, tbindex=None):
+        if self.option.fulltrace or item is None:
+            startcondition = endcondition = None
+        else:
             path,lineno = item.extpy.getfilelineno()
-            def startcondition(entry): 
+            def startcondition(entry):
                 return entry.frame.code.path == path and \
-                       entry.frame.code.firstlineno == lineno 
-            endcondition = None 
-        entries = excinfo.getentries(startcondition, endcondition) 
-        # XXX the cutting logic needs refactoring with respect 
-        #     to generative tests (which will not have the 
-        #     test item in their tb-path) 
-        #     
-        if not entries: 
-            entries = excinfo.getentries() 
+                       entry.frame.code.firstlineno == lineno
+            endcondition = None
+        entries = excinfo.getentries(startcondition, endcondition)
+        # XXX the cutting logic needs refactoring with respect
+        #     to generative tests (which will not have the
+        #     test item in their tb-path)
+        #
+        if not entries:
+            entries = excinfo.getentries()
         if tbindex is not None and tbindex < -1:
             entries = entries[:tbindex+1]
-        return entries 
+        return entries
 
     def repr_traceback(self, item, excinfo, tbindex=None):
         tbentries = self.cut_traceback(excinfo, item, tbindex)
-        self.repr_traceback_raw(tbentries) 
+        self.repr_traceback_raw(tbentries)
         self.out.sep('-')
 
-    def repr_traceback_raw(self, tbentries): 
+    def repr_traceback_raw(self, tbentries):
         recursioncache = {}
-        first = True 
+        first = True
         for tb in tbentries:
             if first:
-                first = False 
+                first = False
             else:
                 self.out.sep('-')
-            path = tb.frame.code.path 
-            lineno = tb.lineno 
-            name = tb.frame.code.name 
-            showfn = path 
+            path = tb.frame.code.path
+            lineno = tb.lineno
+            name = tb.frame.code.name
+            showfn = path
             #showfn = filename.split(os.sep)
             #if len(showfn) > 5:
             #    showfn = os.sep.join(['...'] + showfn[-5:])
-            self.repr_source(tb) 
+            self.repr_source(tb)
             self.out.line("")
             self.out.line("[%s:%d]" %(showfn, lineno+1)) # , name))
             if self.option.showlocals:
                 self.out.sep('- ', 'locals')
                 for name, value in tb.frame.f_locals.items():
-                    if len(repr(value)) < 70 or not isinstance(value, 
+                    if len(repr(value)) < 70 or not isinstance(value,
                                                     (list, tuple, dict)):
                         self.out.line("%-10s = %r" %(name, value))
                     else:
                         self.out.line("%-10s =\\" % (name,))
-                        py.std.pprint.pprint(value, stream=self.out) 
+                        py.std.pprint.pprint(value, stream=self.out)
                     #self.out.line("%-10s = %r" %(name, value))
             key = (path, lineno)
             if key not in recursioncache:
                 recursioncache.setdefault(key, []).append(tb.frame.f_locals)
             else:
                 f = tb.frame
-                loc = f.f_locals 
+                loc = f.f_locals
                 for x in recursioncache[key]:
                     if f.is_true(f.eval(co_equal, __recursioncache_locals_1=loc,
                                                   __recursioncache_locals_2=x)):

Modified: py/dist/py/test/run.py
==============================================================================
--- py/dist/py/test/run.py	(original)
+++ py/dist/py/test/run.py	Sun Jan  9 16:49:34 2005
@@ -1,42 +1,42 @@
 from __future__ import generators
-import py 
+import py
 from py.__impl__.execnet.channel import ChannelFile, receive2file
 from py.__impl__.test.config import configbasename
 from py.__impl__.test.collect import getfscollector
 import sys
 
-def checkpyfilechange(rootdir, statcache): 
-    """ wait until project files are changed. """ 
+def checkpyfilechange(rootdir, statcache):
+    """ wait until project files are changed. """
     fil = py.path.checker(fnmatch='*.py')
-    rec = py.path.checker(dotfile=0) 
+    rec = py.path.checker(dotfile=0)
     changed = False
     for path in rootdir.visit(fil, rec):
-        oldstat = statcache.get(path, None) 
+        oldstat = statcache.get(path, None)
         try:
             statcache[path] = curstat = path.stat()
-        except py.error.ENOENT: 
-            if oldstat: 
+        except py.error.ENOENT:
+            if oldstat:
                 del statcache[path]
-                print "# WARN: race condition on", path 
+                print "# WARN: race condition on", path
         else:
-            if oldstat: 
+            if oldstat:
                if oldstat.st_mtime != curstat.st_mtime or \
-                  oldstat.st_size != curstat.st_size: 
-                    changed = True 
+                  oldstat.st_size != curstat.st_size:
+                    changed = True
                     print "# MODIFIED", path
             else:
                 changed = True
-    return changed 
+    return changed
 
 class FailingCollector(py.test.collect.Collector):
     def __init__(self, faileditems):
-        self._faileditems = faileditems 
+        self._faileditems = faileditems
 
     def __iter__(self):
-        for x in self._faileditems: 
+        for x in self._faileditems:
             yield x
 
-   
+
 class StdouterrProxy:
     def __init__(self, gateway):
         self.gateway = gateway
@@ -44,16 +44,16 @@
         channel = self.gateway.remote_exec("""
             import sys
             out, err = channel.newchannel(), channel.newchannel()
-            channel.send(out) 
-            channel.send(err) 
-            sys.stdout, sys.stderr = out.open('w'), err.open('w') 
+            channel.send(out)
+            channel.send(err)
+            sys.stdout, sys.stderr = out.open('w'), err.open('w')
         """)
-        self.stdout = channel.receive() 
-        self.stderr = channel.receive() 
+        self.stdout = channel.receive()
+        self.stderr = channel.receive()
         channel.waitclose(1.0)
-        py.std.threading.Thread(target=receive2file, 
+        py.std.threading.Thread(target=receive2file,
                                 args=(self.stdout, sys.stdout)).start()
-        py.std.threading.Thread(target=receive2file, 
+        py.std.threading.Thread(target=receive2file,
                                 args=(self.stderr, sys.stderr)).start()
     def teardown(self):
         self.stdout.close()
@@ -63,8 +63,8 @@
     try:
         while 1:
             try:
-                channel.waitclose(0.1) 
-            except (IOError, py.error.Error): 
+                channel.waitclose(0.1)
+            except (IOError, py.error.Error):
                 continue
             else:
                 failures = channel.receive()
@@ -75,16 +75,16 @@
         channel.close()
         channel.gateway.exit()
 
-def failure_master(args, filenames, failures): 
+def failure_master(args, filenames, failures):
     exe = py.test.config.option.executable
-    gw = py.execnet.PopenGateway(python=exe or sys.executable) 
-    outproxy = StdouterrProxy(gw) 
+    gw = py.execnet.PopenGateway(python=exe or sys.executable)
+    outproxy = StdouterrProxy(gw)
     outproxy.setup()
     try:
         channel = gw.remote_exec("""
                 from py.__impl__.test.run import failure_slave
                 failure_slave(channel)
-        """) 
+        """)
         channel.send((args, filenames, failures))
         return waitfinish(channel)
     finally:
@@ -94,69 +94,69 @@
     """ we run this on the other side. """
     args, filenames, failures = channel.receive()
     filenames = map(py.path.local, filenames)
-    py.test.config.readconfiguration(*filenames) 
+    py.test.config.readconfiguration(*filenames)
     py.test.config.parseargs(args)
 
-    if failures: 
+    if failures:
         col = FailureCollector(failures)
-    else: 
+    else:
         col = list(getcollectors(filenames))
-    driver = py.test.Driver(channel) 
+    driver = py.test.Driver(channel)
     failures = driver.run(col)
-    channel.send(failures) 
+    channel.send(failures)
 
 class FailureCollector(py.test.collect.Collector):
     def __init__(self, failures):
         self.failures = failures
     def __iter__(self):
         for root,modpath in self.failures:
-            extpy = py.path.extpy(root, modpath) 
-            yield self.Item(extpy) 
-            
+            extpy = py.path.extpy(root, modpath)
+            yield self.Item(extpy)
+
 def getcollectors(filenames):
     current = py.path.local()
     for fn in filenames:
         fullfn = current.join(fn, abs=1)
-        yield getfscollector(fullfn) 
-        
+        yield getfscollector(fullfn)
+
 def getanchors(args):
     """ yield "anchors" from skimming the args for existing files/dirs. """
     current = py.path.local()
     l = []
-    for arg in args: 
-        anchor = current.join(arg, abs=1) 
+    for arg in args:
+        anchor = current.join(arg, abs=1)
         if anchor.check():
-            l.append(anchor) 
+            l.append(anchor)
     if not l:
         l = [current]
-    return l 
+    return l
 
 #
-# Testing Modes 
+# Testing Modes
 #
-def inprocess(args, filenames): 
+def inprocess(args, filenames):
     """ we run this on the other side. """
     fncollectors = list(getcollectors(filenames))
-    driver = py.test.Driver(None) 
+    driver = py.test.Driver(None)
     driver.run(fncollectors)
 
 def session(args, filenames):
     statcache = {}
     # XXX find out rootdir automatically with
-    #     something like py.magic.autopath() ? 
+    #     something like py.magic.autopath() ?
     rootdir = py.path.local(py.test.config.getfirst('rootdir', py.path.local()))
     l = len(str(rootdir))
     failures = []
     while 1:
-        if py.test.config.option.session: 
-            while not checkpyfilechange(rootdir, statcache): 
-                py.std.time.sleep(0.4) 
+        if py.test.config.option.session:
+            while not checkpyfilechange(rootdir, statcache):
+                py.std.time.sleep(0.4)
         failures = failure_master(args, filenames, failures)
-        if not py.test.config.option.session: 
-            break 
+        if not py.test.config.option.session:
+            break
         print "#" * 60
         print "# session mode: %d failures remaining" % len(failures)
-        for x in failures: 
+        for x in failures:
             print "Failure at: %r" % (x,)
         print "#    watching py files below %s" % rootdir
         print "#                           ", "^" * l

Modified: py/dist/py/test/testing/__init__.py
==============================================================================
--- py/dist/py/test/testing/__init__.py	(original)
+++ py/dist/py/test/testing/__init__.py	Sun Jan  9 16:49:34 2005
@@ -1 +1 @@
-#
\ No newline at end of file
+#

Modified: py/dist/py/test/testing/test/data/disabled.py
==============================================================================
--- py/dist/py/test/testing/test/data/disabled.py	(original)
+++ py/dist/py/test/testing/test/data/disabled.py	Sun Jan  9 16:49:34 2005
@@ -1,4 +1,4 @@
-class x: 
-    class y: 
+class x:
+    class y:
         disabled = True
-        def test_method(self): pass 
+        def test_method(self): pass

Modified: py/dist/py/test/testing/test/data/disabledclass.py
==============================================================================
--- py/dist/py/test/testing/test/data/disabledclass.py	(original)
+++ py/dist/py/test/testing/test/data/disabledclass.py	Sun Jan  9 16:49:34 2005
@@ -1,5 +1,5 @@
 
 class TestClass:
     disabled = True
-    def test_func(): 
+    def test_func():
         pass

Modified: py/dist/py/test/testing/test/data/syntax_error.py
==============================================================================
--- py/dist/py/test/testing/test/data/syntax_error.py	(original)
+++ py/dist/py/test/testing/test/data/syntax_error.py	Sun Jan  9 16:49:34 2005
@@ -1,4 +1,4 @@
 
 
-this is really not python 
+this is really not python
 

Modified: py/dist/py/test/testing/test/demo.py
==============================================================================
--- py/dist/py/test/testing/test/demo.py	(original)
+++ py/dist/py/test/testing/test/demo.py	Sun Jan  9 16:49:34 2005
@@ -2,7 +2,7 @@
 
 def otherfunc(a,b):
     assert a==b
-    
+
 def somefunc(x,y):
     otherfunc(x,y)
 
@@ -38,12 +38,12 @@
     def test_startswith():
         s = "123"
         g = "456"
-        assert s.startswith(g) 
+        assert s.startswith(g)
 
     def test_startswith_nested():
-        def f():   
+        def f():
             return "123"
-        def g():   
+        def g():
             return "456"
         assert f().startswith(g())
 
@@ -73,7 +73,7 @@
 
     def test_raise(self):
         raise ValueError("demo error")
-        
+
     def test_tupleerror(self):
         a,b = [1]
 

Modified: py/dist/py/test/testing/test/test_setup_nested.py
==============================================================================
--- py/dist/py/test/testing/test/test_setup_nested.py	(original)
+++ py/dist/py/test/testing/test/test_setup_nested.py	Sun Jan  9 16:49:34 2005
@@ -1,30 +1,30 @@
 
 #
-# test correct setup/teardowns at 
-# module, class, and instance level 
+# test correct setup/teardowns at
+# module, class, and instance level
 
 modlevel = []
 def setup_module(module):
-    module.modlevel.append(42) 
+    module.modlevel.append(42)
 
 def teardown_module(module):
     modlevel.pop()
 
-def setup_function(function): 
+def setup_function(function):
     function.answer = 17
 
-def teardown_function(function): 
+def teardown_function(function):
     del function.answer
 
 def test_modlevel():
     assert modlevel[0] == 42
-    assert test_modlevel.answer == 17 
+    assert test_modlevel.answer == 17
 
 
-class TestSimpleClassSetup: 
+class TestSimpleClassSetup:
     clslevel = []
     def setup_class(cls):
-        cls.clslevel.append(23) 
+        cls.clslevel.append(23)
 
     def teardown_class(cls):
         cls.clslevel.pop()
@@ -33,7 +33,7 @@
         assert self.clslevel[0] == 23
 
     def test_modulelevel(self):
-        assert modlevel == [42] 
+        assert modlevel == [42]
 
 class TestInheritedClassSetupStillWorks(TestSimpleClassSetup):
     def test_classlevel_anothertime(self):
@@ -45,8 +45,8 @@
 
     def teardown_method(self, method):
         x = self.clslevel.pop()
-        assert x == 17 
+        assert x == 17
 
     def test_setup(self):
-        assert self.clslevel[-1] == 17 
-        
+        assert self.clslevel[-1] == 17
+

Modified: py/dist/py/test/testing/test_collect.py
==============================================================================
--- py/dist/py/test/testing/test_collect.py	(original)
+++ py/dist/py/test/testing/test_collect.py	Sun Jan  9 16:49:34 2005
@@ -2,18 +2,18 @@
 import py
 from py.__impl__.test import collect
 autopath = py.magic.autopath()
-testdir = autopath.dirpath('test') 
+testdir = autopath.dirpath('test')
 assert testdir.check(dir=1)
 datadir = testdir / 'data'
 
 
 def test_failing_import_execfile():
-    fn = datadir / 'failingimport.py' 
+    fn = datadir / 'failingimport.py'
     l = list(collect.Module(py.path.extpy(fn)))
     assert l
     ex, = l
     assert issubclass(ex.excinfo.type, ImportError)
-       
+
 def test_failing_import_directory():
     class MyDirectory(collect.Directory):
         fil = py.path.checker(basestarts="testspecial_", ext='.py')
@@ -31,14 +31,14 @@
     l = list(collect.Module(fn))
     assert len(l) == 1
     assert isinstance(l[0], collect.Error)
-    assert isinstance(l[0].excinfo.value, py.error.ENOENT) 
+    assert isinstance(l[0].excinfo.value, py.error.ENOENT)
 
 def test_syntax_error_in_module():
     modpath = py.path.extpy(datadir.join('syntax_error.py'))
     l2 = list(collect.Module(modpath))
     assert len(l2) == 1
     assert isinstance(l2[0], collect.Error)
-    assert issubclass(l2[0].excinfo.type, SyntaxError) 
+    assert issubclass(l2[0].excinfo.type, SyntaxError)
 
 def test_disabled_class():
     extpy = py.path.extpy(datadir.join('disabled.py'))
@@ -50,15 +50,15 @@
     def test_something():
         raise ValueError
 
-        
-class TestWithCustomItem: 
-    class Item(py.test.Item): 
+
+class TestWithCustomItem:
+    class Item(py.test.Item):
         flag = []
-        def execute(self, target, *args): 
-            self.flag.append(42) 
-            target(*args) 
+        def execute(self, target, *args):
+            self.flag.append(42)
+            target(*args)
 
-    def test_hello(self): 
+    def test_hello(self):
         assert self.Item.flag == [42]
 
 l = []
@@ -84,61 +84,61 @@
 #
 l2=[]
 
-def func1(): 
+def func1():
     print "in func1"
-    l2.append(1) 
+    l2.append(1)
 
-def func2(i): 
+def func2(i):
     print "in func2 with param %d" % i
-    l2.append(i) 
+    l2.append(i)
 
-def test_generator(): 
+def test_generator():
     yield func1
-    yield func2, 2 
-    yield func2, 3 
+    yield func2, 2
+    yield func2, 3
 
-def test_stateful_previous(): 
+def test_stateful_previous():
     x = l2
     assert x == [1,2,3]
 
-class TestGeneratorMethod: 
+class TestGeneratorMethod:
     l3 = []
-    def func1(self, i): 
-        self.l3.append(i) 
+    def func1(self, i):
+        self.l3.append(i)
 
-    def test_generator(self): 
-        yield self.func1, 4 
+    def test_generator(self):
+        yield self.func1, 4
         yield self.func1, 5
 
-    def test_previous_generator_worked(self): 
+    def test_previous_generator_worked(self):
         assert self.l3 == [4,5]
 
-def test_custom_collection_from_conftest(): 
+def test_custom_collection_from_conftest():
     o = py.test.config.tmpdir.ensure('customconfigtest', dir=1)
-    o.ensure('conftest.py').write("""if 1: 
+    o.ensure('conftest.py').write("""if 1:
         import py
-        class MyItem(py.test.Item): 
+        class MyItem(py.test.Item):
             pass
-        class Directory(py.test.collect.Directory): 
-            def fil(self, fspath): 
+        class Directory(py.test.collect.Directory):
+            def fil(self, fspath):
                 return fspath.check(basestarts='check_')
-        class Module(py.test.collect.Module): 
-            def collect_function(self, extpy): 
-                if extpy.check(basestarts='check_', func=1): 
-                    yield self.Item(extpy) 
-        class Class(py.test.collect.Class): 
-            def collect_method(self, extpy): 
+        class Module(py.test.collect.Module):
+            def collect_function(self, extpy):
+                if extpy.check(basestarts='check_', func=1):
+                    yield self.Item(extpy)
+        class Class(py.test.collect.Class):
+            def collect_method(self, extpy):
                 if extpy.check(basestarts='check_', func=1):
-                    yield MyItem(extpy) 
+                    yield MyItem(extpy)
         """)
-    o.ensure('somedir', 'check_something').write("""if 1: 
-        def check_func(): 
-            assert 42 == 42 
-        class TestClass: 
-            def check_method(self): 
+    o.ensure('somedir', 'check_something').write("""if 1:
+        def check_func():
+            assert 42 == 42
+        class TestClass:
+            def check_method(self):
                 assert 23 == 23
         """)
-    from py.__impl__.test.collect import getfscollector 
-    units = list(getfscollector(o).iterunits()) 
+    from py.__impl__.test.collect import getfscollector
+    units = list(getfscollector(o).iterunits())
     assert len(units) == 2
-    assert units[1].__class__.__name__ == 'MyItem' 
+    assert units[1].__class__.__name__ == 'MyItem'

Modified: py/dist/py/test/testing/test_compat.py
==============================================================================
--- py/dist/py/test/testing/test_compat.py	(original)
+++ py/dist/py/test/testing/test_compat.py	Sun Jan  9 16:49:34 2005
@@ -1,7 +1,7 @@
 from __future__ import generators
-import py 
+import py
 
-class TestCompatTestCaseSetupSemantics(py.test.compat.TestCase): 
+class TestCompatTestCaseSetupSemantics(py.test.compat.TestCase):
     globlist = []
 
     def setUp(self):
@@ -44,8 +44,8 @@
                 #self.%(name)s(%(paramfail)s)
 
             def test_%(name)s_failing(self):
-                self.assertRaises(py.test.Item.Failed, 
+                self.assertRaises(py.test.Item.Failed,
                             self.%(name)s, %(paramfail)s)
             """ % locals()
-            co = py.code.Source(source).compile() 
-            exec co 
+            co = py.code.Source(source).compile()
+            exec co

Modified: py/dist/py/test/testing/test_config.py
==============================================================================
--- py/dist/py/test/testing/test_config.py	(original)
+++ py/dist/py/test/testing/test_config.py	Sun Jan  9 16:49:34 2005
@@ -1,6 +1,6 @@
 from __future__ import generators
 import py
-config = py.test.config 
+config = py.test.config
 
 class MyClass:
     def getoptions(self):
@@ -23,18 +23,18 @@
     assert not obj.option.verbose
 
 def test_tmpdir():
-    d1 = config.tmpdir 
-    d2 = config.tmpdir 
+    d1 = config.tmpdir
+    d2 = config.tmpdir
     assert d1 == d2
 
 def test_config_order():
-    from py.__impl__.test import config 
+    from py.__impl__.test import config
     o = py.test.config.tmpdir.ensure('configorder', dir=1)
-    o.ensure('conftest.py').write('x=1 ; import py ; py._x = [x]') 
+    o.ensure('conftest.py').write('x=1 ; import py ; py._x = [x]')
     o.ensure('a/conftest.py').write('x=2 ; import py ; py._x.append(x)')
     o.ensure('a/b/c/conftest.py').write('x=3 ; import py ; py._x.append(x)')
-    cfg = config.Config() 
-    cfg.readconfiguration(o) 
+    cfg = config.Config()
+    cfg.readconfiguration(o)
     assert cfg.getfirst('x') == 1
     assert py._x == [1]
 
@@ -42,11 +42,11 @@
     cfg.readconfiguration(o.join('a/b/c'))
     assert cfg.getfirst('x') == 1
     assert py._x == [1,2,3]
-    
+
 def test_getconfigvalue():
-    from py.__impl__.test import config 
-    cfg = config.Config() 
+    from py.__impl__.test import config
+    cfg = config.Config()
     o = py.test.config.tmpdir.ensure('configtest', dir=1)
-    o.ensure('conftest.py').write('x=1') 
+    o.ensure('conftest.py').write('x=1')
     assert cfg.getconfigvalue(o, 'x') == 1
     py.test.raises(ValueError, "cfg.getconfigvalue(o, 'y')")

Modified: py/dist/py/test/testing/test_raises.py
==============================================================================
--- py/dist/py/test/testing/test_raises.py	(original)
+++ py/dist/py/test/testing/test_raises.py	Sun Jan  9 16:49:34 2005
@@ -1,9 +1,9 @@
-from py import test 
+from py import test
 
 def somefunc(x, y):
     assert x == y
 
-class TestClass: 
+class TestClass:
     def test_raises(self):
         test.raises(ValueError, "int('qwe')")
 

Modified: py/dist/py/test/tool/optparse.py
==============================================================================
--- py/dist/py/test/tool/optparse.py	(original)
+++ py/dist/py/test/tool/optparse.py	Sun Jan  9 16:49:34 2005
@@ -69,7 +69,7 @@
 
 import sys, os
 import types
-from py.__impl__.test.tool import textwrap 
+from py.__impl__.test.tool import textwrap
 
 class OptParseError (Exception):
     def __init__ (self, msg):

Modified: py/dist/py/test/tool/outerrcapture.py
==============================================================================
--- py/dist/py/test/tool/outerrcapture.py	(original)
+++ py/dist/py/test/tool/outerrcapture.py	Sun Jan  9 16:49:34 2005
@@ -1,6 +1,6 @@
 """
 
-capture stdout/stderr 
+capture stdout/stderr
 
 """
 import sys
@@ -8,10 +8,10 @@
 except ImportError: from StringIO import StringIO
 
 class SimpleOutErrCapture:
-    """ capture sys.stdout/sys.stderr (but not system level fd 1 and 2). 
-   
+    """ capture sys.stdout/sys.stderr (but not system level fd 1 and 2).
+
     this captures only "In-Memory" and is currently intended to be
-    used by the unittest package to capture print-statements in tests. 
+    used by the unittest package to capture print-statements in tests.
     """
     def __init__(self):
         self.oldout = sys.stdout

Modified: py/dist/py/test/tool/testing/__init__.py
==============================================================================
--- py/dist/py/test/tool/testing/__init__.py	(original)
+++ py/dist/py/test/tool/testing/__init__.py	Sun Jan  9 16:49:34 2005
@@ -1 +1 @@
-#
\ No newline at end of file
+#

Modified: py/dist/py/test/tool/testing/test_outerrcapture.py
==============================================================================
--- py/dist/py/test/tool/testing/test_outerrcapture.py	(original)
+++ py/dist/py/test/tool/testing/test_outerrcapture.py	Sun Jan  9 16:49:34 2005
@@ -1,6 +1,6 @@
 import sys
 from py import test
-from py.__impl__.test.tool.outerrcapture import SimpleOutErrCapture 
+from py.__impl__.test.tool.outerrcapture import SimpleOutErrCapture
 
 def test_capturing_simple():
     cap = SimpleOutErrCapture()



More information about the pytest-commit mailing list