commit python-py for openSUSE:Factory
Hello community, here is the log from the commit of package python-py for openSUSE:Factory checked in at 2014-10-01 07:40:10 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-py (Old) and /work/SRC/openSUSE:Factory/.python-py.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "python-py" Changes: -------- --- /work/SRC/openSUSE:Factory/python-py/python-py.changes 2014-07-31 10:04:10.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.python-py.new/python-py.changes 2014-10-01 07:40:13.000000000 +0200 @@ -1,0 +2,28 @@ +Sat Sep 27 17:35:17 UTC 2014 - dmueller@suse.com + +- update to 1.4.25: + - fix issue52: vaguely fix py25 compat of py.path.local (it's not + officially supported), also fix docs + - fix pytest issue 589: when checking if we have a recursion error + check for the specific "maximum recursion depth" text of the exception. +- update to 1.4.24: + - Fix retrieving source when an else: line has an other statement on + the same line. + - add localpath read_text/write_text/read_bytes/write_bytes methods + as shortcuts and clearer bytes/text interfaces for read/write. + Adapted from a PR from Paul Moore. +- update to 1.4.23: + - use newer apipkg version which makes attribute access on + alias modules resolve to None rather than an ImportError. + This helps with code that uses inspect.getframeinfo() + on py34 which causes a complete walk on sys.modules + thus triggering the alias module to resolve and blowing + up with ImportError. The negative side is that something + like "py.test.X" will now result in None instead of "importerror: pytest" + if pytest is not installed. But you shouldn't import "py.test" + anyway anymore. + - adapt one svn test to only check for any exception instead + of specific ones because different svn versions cause different + errors and we don't care. + +------------------------------------------------------------------- Old: ---- py-1.4.22.tar.gz New: ---- py-1.4.25.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-py.spec ++++++ --- /var/tmp/diff_new_pack.KvdJov/_old 2014-10-01 07:40:14.000000000 +0200 +++ /var/tmp/diff_new_pack.KvdJov/_new 2014-10-01 07:40:14.000000000 +0200 @@ -17,7 +17,7 @@ Name: python-py -Version: 1.4.22 +Version: 1.4.25 Release: 0 Summary: Library with cross-python path, ini-parsing, io, code, log facilities License: MIT ++++++ py-1.4.22.tar.gz -> py-1.4.25.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.4.22/CHANGELOG new/py-1.4.25/CHANGELOG --- old/py-1.4.22/CHANGELOG 2014-07-17 10:51:42.000000000 +0200 +++ new/py-1.4.25/CHANGELOG 2014-09-24 13:39:53.000000000 +0200 @@ -1,3 +1,41 @@ +1.4.25 +================================================== + +- fix issue52: vaguely fix py25 compat of py.path.local (it's not + officially supported), also fix docs + +- fix pytest issue 589: when checking if we have a recursion error + check for the specific "maximum recursion depth" text of the exception. + +1.4.24 +================================================== + +- Fix retrieving source when an else: line has an other statement on + the same line. + +- add localpath read_text/write_text/read_bytes/write_bytes methods + as shortcuts and clearer bytes/text interfaces for read/write. + Adapted from a PR from Paul Moore. + + +1.4.23 +================================================== + +- use newer apipkg version which makes attribute access on + alias modules resolve to None rather than an ImportError. + This helps with code that uses inspect.getframeinfo() + on py34 which causes a complete walk on sys.modules + thus triggering the alias module to resolve and blowing + up with ImportError. The negative side is that something + like "py.test.X" will now result in None instead of "importerror: pytest" + if pytest is not installed. But you shouldn't import "py.test" + anyway anymore. + +- adapt one svn test to only check for any exception instead + of specific ones because different svn versions cause different + errors and we don't care. + + 1.4.22 ================================================== diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.4.22/PKG-INFO new/py-1.4.25/PKG-INFO --- old/py-1.4.22/PKG-INFO 2014-07-17 10:51:42.000000000 +0200 +++ new/py-1.4.25/PKG-INFO 2014-09-24 13:39:53.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: py -Version: 1.4.22 +Version: 1.4.25 Summary: library with cross-python path, ini-parsing, io, code, log facilities Home-page: http://pylib.readthedocs.org/ Author: holger krekel, Ronny Pfannschmidt, Benjamin Peterson and others diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.4.22/doc/install.txt new/py-1.4.25/doc/install.txt --- old/py-1.4.22/doc/install.txt 2014-07-17 10:51:42.000000000 +0200 +++ new/py-1.4.25/doc/install.txt 2014-09-24 13:39:53.000000000 +0200 @@ -7,7 +7,7 @@ **PyPI name**: py_ -**Pythons**: 2.5, 2.6, 2.7, 3.2, 3.3, Jython-2.5.1, PyPy-2.0 +**Pythons**: CPython 2.6, 2.7, 3.3, 3.4, PyPy-2.3 **Operating systems**: Linux, Windows, OSX, Unix @@ -29,7 +29,7 @@ will trigger an upgrade if you already have an older version installed. .. note:: - + As of version 1.4 py does not contain py.test anymore - you need to install the new `pytest`_ distribution. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.4.22/py/__init__.py new/py-1.4.25/py/__init__.py --- old/py-1.4.22/py/__init__.py 2014-07-17 10:51:42.000000000 +0200 +++ new/py-1.4.25/py/__init__.py 2014-09-24 13:39:53.000000000 +0200 @@ -6,9 +6,9 @@ name->value mappings where value can be another namespace dictionary or an import path. -(c) Holger Krekel and others, 2004-2013 +(c) Holger Krekel and others, 2004-2014 """ -__version__ = '1.4.22' +__version__ = '1.4.25' from py import _apipkg diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.4.22/py/_apipkg.py new/py-1.4.25/py/_apipkg.py --- old/py-1.4.22/py/_apipkg.py 2014-07-17 10:51:42.000000000 +0200 +++ new/py-1.4.25/py/_apipkg.py 2014-09-24 13:39:53.000000000 +0200 @@ -17,6 +17,7 @@ that will leave paths from jython jars alone """ if path.startswith('__pyclasspath__'): + return path else: return os.path.abspath(path) @@ -41,7 +42,7 @@ if hasattr(oldmod, "__dict__"): oldmod.__dict__.update(d) mod = ApiModule(pkgname, exportdefs, implprefix=pkgname, attr=d) - sys.modules[pkgname] = mod + sys.modules[pkgname] = mod def importobj(modpath, attrname): module = __import__(modpath, None, None, ['__doc__']) @@ -72,11 +73,11 @@ self.__implprefix__ = implprefix or name if attr: for name, val in attr.items(): - #print "setting", self.__name__, name, val + # print "setting", self.__name__, name, val setattr(self, name, val) for name, importspec in importspec.items(): if isinstance(importspec, dict): - subname = '%s.%s'%(self.__name__, name) + subname = '%s.%s' % (self.__name__, name) apimod = ApiModule(subname, importspec, implprefix) sys.modules[subname] = apimod setattr(self, name, apimod) @@ -88,7 +89,7 @@ modpath = implprefix + modpath if not attrname: - subname = '%s.%s'%(self.__name__, name) + subname = '%s.%s' % (self.__name__, name) apimod = AliasModule(subname, modpath) sys.modules[subname] = apimod if '.' not in name: @@ -108,7 +109,7 @@ def __makeattr(self, name): """lazily compute value for name or raise AttributeError if unknown.""" - #print "makeattr", self.__name__, name + # print "makeattr", self.__name__, name target = None if '__onfirstaccess__' in self.__map__: target = self.__map__.pop('__onfirstaccess__') @@ -126,7 +127,7 @@ try: del self.__map__[name] except KeyError: - pass # in a recursive-import situation a double-del can happen + pass # in a recursive-import situation a double-del can happen return result __getattr__ = __makeattr @@ -166,7 +167,10 @@ return '<AliasModule %r for %r>' % (modname, x) def __getattribute__(self, name): - return getattr(getmod(), name) + try: + return getattr(getmod(), name) + except ImportError: + return None def __setattr__(self, name, value): setattr(getmod(), name, value) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.4.22/py/_code/code.py new/py-1.4.25/py/_code/code.py --- old/py-1.4.22/py/_code/code.py 2014-07-17 10:51:42.000000000 +0200 +++ new/py-1.4.25/py/_code/code.py 2014-09-24 13:39:53.000000000 +0200 @@ -572,7 +572,8 @@ traceback = traceback.filter() recursionindex = None if excinfo.errisinstance(RuntimeError): - recursionindex = traceback.recursionindex() + if "maximum recursion depth exceeded" in str(excinfo.value): + recursionindex = traceback.recursionindex() last = traceback[-1] entries = [] extraline = None diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.4.22/py/_code/source.py new/py-1.4.25/py/_code/source.py --- old/py-1.4.22/py/_code/source.py 2014-07-17 10:51:42.000000000 +0200 +++ new/py-1.4.25/py/_code/source.py 2014-09-24 13:39:53.000000000 +0200 @@ -377,8 +377,10 @@ end = len(source.lines) while end: line = source.lines[end-1].lstrip() - if (not line or line.startswith("#") or line.startswith("else:") or - line.startswith("finally:")): + if (not line + or line.startswith("#") + or line.replace(" ", "") == "else:" + or line.replace(" ", "") == "finally:"): end -= 1 else: break diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.4.22/py/_path/common.py new/py-1.4.25/py/_path/common.py --- old/py-1.4.22/py/_path/common.py 2014-07-17 10:51:42.000000000 +0200 +++ new/py-1.4.25/py/_path/common.py 2014-09-24 13:39:53.000000000 +0200 @@ -115,17 +115,21 @@ """ return self.new(basename='').join(*args, **kwargs) + def read_binary(self): + """ read and return a bytestring from reading the path. """ + with self.open('rb') as f: + return f.read() + + def read_text(self, encoding): + """ read and return a Unicode string from reading the path. """ + with self.open("r", encoding=encoding) as f: + return f.read() + + def read(self, mode='r'): """ read and return a bytestring from reading the path. """ - if sys.version_info < (2,3): - for x in 'u', 'U': - if x in mode: - mode = mode.replace(x, '') - f = self.open(mode) - try: + with self.open(mode) as f: return f.read() - finally: - f.close() def readlines(self, cr=1): """ read and return a list of lines from the path. if cr is False, the diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.4.22/py/_path/local.py new/py-1.4.25/py/_path/local.py --- old/py-1.4.22/py/_path/local.py 2014-07-17 10:51:42.000000000 +0200 +++ new/py-1.4.25/py/_path/local.py 2014-09-24 13:39:53.000000000 +0200 @@ -1,8 +1,10 @@ """ local path implementation. """ +from __future__ import with_statement + from contextlib import contextmanager -import sys, os, re, atexit +import sys, os, re, atexit, io import py from py._path import common from stat import S_ISLNK, S_ISDIR, S_ISREG @@ -330,13 +332,15 @@ obj.strpath = normpath(strpath) return obj - def open(self, mode='r', ensure=False): + def open(self, mode='r', ensure=False, encoding=None): """ return an opened file with the given mode. If ensure is True, create parent directories if needed. """ if ensure: self.dirpath().ensure(dir=1) + if encoding: + return py.error.checked_call(io.open, self.strpath, mode, encoding=encoding) return py.error.checked_call(open, self.strpath, mode) def _fastjoin(self, name): @@ -434,6 +438,24 @@ py.error.checked_call(os.mkdir, getattr(p, "strpath", p)) return p + def write_binary(self, data, ensure=False): + """ write binary data into path. If ensure is True create + missing parent directories. + """ + if ensure: + self.dirpath().ensure(dir=1) + with self.open('wb') as f: + f.write(data) + + def write_text(self, data, encoding, ensure=False): + """ write text data into path using the specified encoding. + If ensure is True create missing parent directories. + """ + if ensure: + self.dirpath().ensure(dir=1) + with self.open('w', encoding=encoding) as f: + f.write(data) + def write(self, data, mode='w', ensure=False): """ write data into path. If ensure is True create missing parent directories. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.4.22/py.egg-info/PKG-INFO new/py-1.4.25/py.egg-info/PKG-INFO --- old/py-1.4.22/py.egg-info/PKG-INFO 2014-07-17 10:51:42.000000000 +0200 +++ new/py-1.4.25/py.egg-info/PKG-INFO 2014-09-24 13:39:53.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: py -Version: 1.4.22 +Version: 1.4.25 Summary: library with cross-python path, ini-parsing, io, code, log facilities Home-page: http://pylib.readthedocs.org/ Author: holger krekel, Ronny Pfannschmidt, Benjamin Peterson and others diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.4.22/py.egg-info/SOURCES.txt new/py-1.4.25/py.egg-info/SOURCES.txt --- old/py-1.4.22/py.egg-info/SOURCES.txt 2014-07-17 10:51:42.000000000 +0200 +++ new/py-1.4.25/py.egg-info/SOURCES.txt 2014-09-24 13:39:53.000000000 +0200 @@ -4,6 +4,7 @@ MANIFEST.in README.txt conftest.py +setup.cfg setup.py tox.ini doc/Makefile diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.4.22/setup.cfg new/py-1.4.25/setup.cfg --- old/py-1.4.22/setup.cfg 2014-07-17 10:51:42.000000000 +0200 +++ new/py-1.4.25/setup.cfg 2014-09-24 13:39:53.000000000 +0200 @@ -1,3 +1,6 @@ +[wheel] +universal = 1 + [egg_info] tag_build = tag_date = 0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.4.22/setup.py new/py-1.4.25/setup.py --- old/py-1.4.22/setup.py 2014-07-17 10:51:42.000000000 +0200 +++ new/py-1.4.25/setup.py 2014-09-24 13:39:53.000000000 +0200 @@ -7,7 +7,7 @@ name='py', description='library with cross-python path, ini-parsing, io, code, log facilities', long_description = open('README.txt').read(), - version='1.4.22', + version='1.4.25', url='http://pylib.readthedocs.org/', license='MIT license', platforms=['unix', 'linux', 'osx', 'cygwin', 'win32'], diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.4.22/testing/code/test_assertion.py new/py-1.4.25/testing/code/test_assertion.py --- old/py-1.4.22/testing/code/test_assertion.py 2014-07-17 10:51:42.000000000 +0200 +++ new/py-1.4.25/testing/code/test_assertion.py 2014-09-24 13:39:53.000000000 +0200 @@ -14,12 +14,6 @@ s = str(e) assert s.startswith('assert 2 == 3\n') -def test_assert_with_explicit_message(): - try: - assert f() == 3, "hello" - except AssertionError: - e = exvalue() - assert e.msg == 'hello' def test_assert_within_finally(): excinfo = py.test.raises(ZeroDivisionError, """ @@ -106,15 +100,6 @@ assert s.startswith("assert 42 == 100") assert "where 42 = len([" in s -def test_assert_non_string_message(): - class A: - def __str__(self): - return "hello" - try: - assert 0 == 1, A() - except AssertionError: - e = exvalue() - assert e.msg == "hello" def test_assert_keyword_arg(): def f(x=3): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.4.22/testing/code/test_code.py new/py-1.4.25/testing/code/test_code.py --- old/py-1.4.22/testing/code/test_code.py 2014-07-17 10:51:42.000000000 +0200 +++ new/py-1.4.25/testing/code/test_code.py 2014-09-24 13:39:53.000000000 +0200 @@ -132,3 +132,28 @@ fr4 = py.code.Frame(f4('a', 'b', c='d')) assert fr4.getargs(var=True) == [('x', 'a'), ('y', ('b',)), ('z', {'c': 'd'})] + + +class TestExceptionInfo: + + def test_bad_getsource(self): + try: + if False: pass + else: assert False + except AssertionError: + exci = py.code.ExceptionInfo() + assert exci.getrepr() + + +class TestTracebackEntry: + + def test_getsource(self): + try: + if False: pass + else: assert False + except AssertionError: + exci = py.code.ExceptionInfo() + entry = exci.traceback[0] + source = entry.getsource() + assert len(source) == 4 + assert 'else: assert False' in source[3] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.4.22/testing/code/test_excinfo.py new/py-1.4.25/testing/code/test_excinfo.py --- old/py-1.4.22/testing/code/test_excinfo.py 2014-07-17 10:51:42.000000000 +0200 +++ new/py-1.4.25/testing/code/test_excinfo.py 2014-09-24 13:39:53.000000000 +0200 @@ -16,7 +16,6 @@ import pytest pytest_version_info = tuple(map(int, pytest.__version__.split(".")[:3])) -pytest25 = pytest.mark.skipif(pytest_version_info < (2,5), reason="requires pytest-2.5") class TWMock: def __init__(self): @@ -151,6 +150,17 @@ recindex = traceback.recursionindex() assert recindex == 3 + def test_traceback_only_specific_recursion_errors(self, monkeypatch): + def f(n): + if n == 0: + raise RuntimeError("hello") + f(n-1) + + excinfo = pytest.raises(RuntimeError, f, 100) + monkeypatch.delattr(excinfo.traceback.__class__, "recursionindex") + repr = excinfo.getrepr() + assert "RuntimeError: hello" in str(repr.reprcrash) + def test_traceback_no_recursion_index(self): def do_stuff(): raise RuntimeError @@ -244,15 +254,6 @@ assert msg.startswith('ValueError') assert msg.endswith("world") -@pytest25 -def test_excinfo_exconly_unicode_AssertionError(): - val = py.builtin._totext('£€', 'utf-8') - def fail(): - raise AssertionError(val) - excinfo = py.test.raises(Exception, fail) - msg = excinfo.exconly(tryshort=True) - assert msg == 'AssertionError: ' + val - def test_excinfo_repr(): excinfo = py.test.raises(ValueError, h) s = repr(excinfo) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.4.22/testing/code/test_source.py new/py-1.4.25/testing/code/test_source.py --- old/py-1.4.22/testing/code/test_source.py 2014-07-17 10:51:42.000000000 +0200 +++ new/py-1.4.25/testing/code/test_source.py 2014-09-24 13:39:53.000000000 +0200 @@ -489,6 +489,14 @@ source = getstatement(0, "raise ValueError\n#hello") assert str(source) == "raise ValueError" +def test_single_line_else(): + source = getstatement(1, "if False: 2\nelse: 3") + assert str(source) == "else: 3" + +def test_single_line_finally(): + source = getstatement(1, "try: 1\nfinally: 3") + assert str(source) == "finally: 3" + def XXXtest_multiline(): source = getstatement(0, """\ raise ValueError( diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.4.22/testing/io_/test_terminalwriter.py new/py-1.4.25/testing/io_/test_terminalwriter.py --- old/py-1.4.22/testing/io_/test_terminalwriter.py 2014-07-17 10:51:42.000000000 +0200 +++ new/py-1.4.25/testing/io_/test_terminalwriter.py 2014-09-24 13:39:53.000000000 +0200 @@ -54,6 +54,7 @@ def test_terminalwriter_dumb_term_no_markup(monkeypatch): monkeypatch.setattr(os, 'environ', {'TERM': 'dumb', 'PATH': ''}) class MyFile: + closed = False def isatty(self): return True monkeypatch.setattr(sys, 'stdout', MyFile()) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.4.22/testing/path/test_local.py new/py-1.4.25/testing/path/test_local.py --- old/py-1.4.22/testing/path/test_local.py 2014-07-17 10:51:42.000000000 +0200 +++ new/py-1.4.25/testing/path/test_local.py 2014-09-24 13:39:53.000000000 +0200 @@ -801,3 +801,30 @@ x.write(part.encode(sys.getdefaultencoding())) assert x.read() == part.encode(sys.getdefaultencoding()) +class TestBinaryAndTextMethods: + def test_read_binwrite(self, tmpdir): + x = tmpdir.join("hello") + part = py.builtin._totext("hällo", "utf8") + part_utf8 = part.encode("utf8") + x.write_binary(part_utf8) + assert x.read_binary() == part_utf8 + s = x.read_text(encoding="utf8") + assert s == part + assert py.builtin._istext(s) + + def test_read_textwrite(self, tmpdir): + x = tmpdir.join("hello") + part = py.builtin._totext("hällo", "utf8") + part_utf8 = part.encode("utf8") + x.write_text(part, encoding="utf8") + assert x.read_binary() == part_utf8 + assert x.read_text(encoding="utf8") == part + + def test_default_encoding(self, tmpdir): + x = tmpdir.join("hello") + # Can't use UTF8 as the default encoding (ASCII) doesn't support it + part = py.builtin._totext("hello", "ascii") + x.write_text(part, "ascii") + s = x.read_text("ascii") + assert s == part + assert type(s) == type(part) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.4.22/testing/path/test_svnwc.py new/py-1.4.25/testing/path/test_svnwc.py --- old/py-1.4.22/testing/path/test_svnwc.py 2014-07-17 10:51:42.000000000 +0200 +++ new/py-1.4.25/testing/path/test_svnwc.py 2014-09-24 13:39:53.000000000 +0200 @@ -338,7 +338,7 @@ somefile = root.join('somefile') somefile.ensure(file=True) # not yet added to repo - py.test.raises((py.process.cmdexec.Error, ValueError), 'somefile.lock()') + py.test.raises(Exception, 'somefile.lock()') somefile.write('foo') somefile.commit('test') assert somefile.check(versioned=True) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.4.22/tox.ini new/py-1.4.25/tox.ini --- old/py-1.4.22/tox.ini 2014-07-17 10:51:42.000000000 +0200 +++ new/py-1.4.25/tox.ini 2014-09-24 13:39:53.000000000 +0200 @@ -1,5 +1,5 @@ [tox] -envlist=py26,py27,py32,py33,external +envlist=py26,py27,py33,py34,external # py27-xdist causes problems with svn, py25 requires virtualenv==1.9.1 #indexserver= # default=http://pypi.testrun.org -- To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-commit+help@opensuse.org
participants (1)
-
root@hilbert.suse.de