[Python-checkins] distutils2: Merged with Tarek's repository
tarek.ziade
python-checkins at python.org
Sun Aug 8 11:50:48 CEST 2010
tarek.ziade pushed 85a805a00f82 to distutils2:
http://hg.python.org/distutils2/rev/85a805a00f82
changeset: 518:85a805a00f82
parent: 517:6c333edc198e
parent: 375:fdc0f44dc5ec
user: Jeremy Kloth <jeremy.kloth at gmail.com>
date: Sat Jul 17 19:33:50 2010 -0600
summary: Merged with Tarek's repository
files:
diff --git a/src/distutils2/converter/fixers/fix_imports.py b/src/distutils2/converter/fixers/fix_imports.py
--- a/src/distutils2/converter/fixers/fix_imports.py
+++ b/src/distutils2/converter/fixers/fix_imports.py
@@ -36,11 +36,16 @@
pattern = []
next = imp.next_sibling
while next is not None:
+ # Get the first child if we have a Node
+ if not hasattr(next, "value"):
+ next = next.children[0]
pattern.append(next.value)
if not hasattr(next, "next_sibling"):
next.next_sibling = next.get_next_sibling()
next = next.next_sibling
- if pattern == ['import', 'setup']:
+
+ if set(pattern).issubset(set(
+ ['import', ',', 'setup', 'find_packages'])):
imp.value = 'distutils2.core'
imp.changed()
diff --git a/src/distutils2/tests/conversions/05_after.py b/src/distutils2/tests/conversions/05_after.py
new file mode 100644
--- /dev/null
+++ b/src/distutils2/tests/conversions/05_after.py
@@ -0,0 +1,137 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#
+# Copyright (C) 2003-2009 Edgewall Software
+# All rights reserved.
+#
+# This software is licensed as described in the file COPYING, which
+# you should have received as part of this distribution. The terms
+# are also available at http://trac.edgewall.org/wiki/TracLicense.
+#
+# This software consists of voluntary contributions made by many
+# individuals. For the exact contribution history, see the revision
+# history and logs, available at http://trac.edgewall.org/log/.
+
+from distutils2.core import setup, find_packages
+
+extra = {}
+
+try:
+ import babel
+
+ extractors = [
+ ('**.py', 'python', None),
+ ('**/templates/**.html', 'genshi', None),
+ ('**/templates/**.txt', 'genshi',
+ {'template_class': 'genshi.template:NewTextTemplate'}),
+ ]
+ extra['message_extractors'] = {
+ 'trac': extractors,
+ 'tracopt': extractors,
+ }
+
+ from trac.util.dist import get_l10n_js_cmdclass
+ extra['cmdclass'] = get_l10n_js_cmdclass()
+
+except ImportError, e:
+ pass
+
+setup(
+ name = 'Trac',
+ version = '0.12.1',
+ summary = 'Integrated SCM, wiki, issue tracker and project environment',
+ description = """
+Trac is a minimalistic web-based software project management and bug/issue
+tracking system. It provides an interface to the Subversion revision control
+systems, an integrated wiki, flexible issue tracking and convenient report
+facilities.
+""",
+ author = 'Edgewall Software',
+ author_email = 'info at edgewall.com',
+ license = 'BSD',
+ home_page = 'http://trac.edgewall.org/',
+ download_url = 'http://trac.edgewall.org/wiki/TracDownload',
+ classifiers = [
+ 'Environment :: Web Environment',
+ 'Framework :: Trac',
+ 'Intended Audience :: Developers',
+ 'License :: OSI Approved :: BSD License',
+ 'Operating System :: OS Independent',
+ 'Programming Language :: Python',
+ 'Topic :: Software Development :: Bug Tracking',
+ 'Topic :: Software Development :: Version Control',
+ ],
+
+ packages = find_packages(exclude=['*.tests']),
+ package_data = {
+ '': ['templates/*'],
+ 'trac': ['htdocs/*.*', 'htdocs/README', 'htdocs/js/*.*',
+ 'htdocs/js/messages/*.*', 'htdocs/css/*.*',
+ 'htdocs/guide/*', 'locale/*/LC_MESSAGES/messages.mo'],
+ 'trac.wiki': ['default-pages/*'],
+ 'trac.ticket': ['workflows/*.ini'],
+ },
+
+ test_suite = 'trac.test.suite',
+ zip_safe = True,
+
+ requires_dist = [
+ 'setuptools>=0.6b1',
+ 'Genshi>=0.6',
+ ],
+ extras_require = {
+ 'Babel': ['Babel>=0.9.5'],
+ 'Pygments': ['Pygments>=0.6'],
+ 'reST': ['docutils>=0.3'],
+ 'SilverCity': ['SilverCity>=0.9.4'],
+ 'Textile': ['textile>=2.0'],
+ },
+
+ entry_points = """
+ [console_scripts]
+ trac-admin = trac.admin.console:run
+ tracd = trac.web.standalone:main
+
+ [trac.plugins]
+ trac.about = trac.about
+ trac.admin.console = trac.admin.console
+ trac.admin.web_ui = trac.admin.web_ui
+ trac.attachment = trac.attachment
+ trac.db.mysql = trac.db.mysql_backend
+ trac.db.postgres = trac.db.postgres_backend
+ trac.db.sqlite = trac.db.sqlite_backend
+ trac.mimeview.patch = trac.mimeview.patch
+ trac.mimeview.pygments = trac.mimeview.pygments[Pygments]
+ trac.mimeview.rst = trac.mimeview.rst[reST]
+ trac.mimeview.silvercity = trac.mimeview.silvercity[SilverCity]
+ trac.mimeview.txtl = trac.mimeview.txtl[Textile]
+ trac.prefs = trac.prefs.web_ui
+ trac.search = trac.search.web_ui
+ trac.ticket.admin = trac.ticket.admin
+ trac.ticket.query = trac.ticket.query
+ trac.ticket.report = trac.ticket.report
+ trac.ticket.roadmap = trac.ticket.roadmap
+ trac.ticket.web_ui = trac.ticket.web_ui
+ trac.timeline = trac.timeline.web_ui
+ trac.versioncontrol.admin = trac.versioncontrol.admin
+ trac.versioncontrol.svn_authz = trac.versioncontrol.svn_authz
+ trac.versioncontrol.svn_fs = trac.versioncontrol.svn_fs
+ trac.versioncontrol.svn_prop = trac.versioncontrol.svn_prop
+ trac.versioncontrol.web_ui = trac.versioncontrol.web_ui
+ trac.web.auth = trac.web.auth
+ trac.web.session = trac.web.session
+ trac.wiki.admin = trac.wiki.admin
+ trac.wiki.interwiki = trac.wiki.interwiki
+ trac.wiki.macros = trac.wiki.macros
+ trac.wiki.web_ui = trac.wiki.web_ui
+ trac.wiki.web_api = trac.wiki.web_api
+ tracopt.mimeview.enscript = tracopt.mimeview.enscript
+ tracopt.mimeview.php = tracopt.mimeview.php
+ tracopt.perm.authz_policy = tracopt.perm.authz_policy
+ tracopt.perm.config_perm_provider = tracopt.perm.config_perm_provider
+ tracopt.ticket.commit_updater = tracopt.ticket.commit_updater
+ tracopt.ticket.deleter = tracopt.ticket.deleter
+ """,
+
+ **extra
+)
diff --git a/src/distutils2/tests/conversions/05_before.py b/src/distutils2/tests/conversions/05_before.py
new file mode 100755
--- /dev/null
+++ b/src/distutils2/tests/conversions/05_before.py
@@ -0,0 +1,137 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#
+# Copyright (C) 2003-2009 Edgewall Software
+# All rights reserved.
+#
+# This software is licensed as described in the file COPYING, which
+# you should have received as part of this distribution. The terms
+# are also available at http://trac.edgewall.org/wiki/TracLicense.
+#
+# This software consists of voluntary contributions made by many
+# individuals. For the exact contribution history, see the revision
+# history and logs, available at http://trac.edgewall.org/log/.
+
+from setuptools import setup, find_packages
+
+extra = {}
+
+try:
+ import babel
+
+ extractors = [
+ ('**.py', 'python', None),
+ ('**/templates/**.html', 'genshi', None),
+ ('**/templates/**.txt', 'genshi',
+ {'template_class': 'genshi.template:NewTextTemplate'}),
+ ]
+ extra['message_extractors'] = {
+ 'trac': extractors,
+ 'tracopt': extractors,
+ }
+
+ from trac.util.dist import get_l10n_js_cmdclass
+ extra['cmdclass'] = get_l10n_js_cmdclass()
+
+except ImportError, e:
+ pass
+
+setup(
+ name = 'Trac',
+ version = '0.12.1',
+ description = 'Integrated SCM, wiki, issue tracker and project environment',
+ long_description = """
+Trac is a minimalistic web-based software project management and bug/issue
+tracking system. It provides an interface to the Subversion revision control
+systems, an integrated wiki, flexible issue tracking and convenient report
+facilities.
+""",
+ author = 'Edgewall Software',
+ author_email = 'info at edgewall.com',
+ license = 'BSD',
+ url = 'http://trac.edgewall.org/',
+ download_url = 'http://trac.edgewall.org/wiki/TracDownload',
+ classifiers = [
+ 'Environment :: Web Environment',
+ 'Framework :: Trac',
+ 'Intended Audience :: Developers',
+ 'License :: OSI Approved :: BSD License',
+ 'Operating System :: OS Independent',
+ 'Programming Language :: Python',
+ 'Topic :: Software Development :: Bug Tracking',
+ 'Topic :: Software Development :: Version Control',
+ ],
+
+ packages = find_packages(exclude=['*.tests']),
+ package_data = {
+ '': ['templates/*'],
+ 'trac': ['htdocs/*.*', 'htdocs/README', 'htdocs/js/*.*',
+ 'htdocs/js/messages/*.*', 'htdocs/css/*.*',
+ 'htdocs/guide/*', 'locale/*/LC_MESSAGES/messages.mo'],
+ 'trac.wiki': ['default-pages/*'],
+ 'trac.ticket': ['workflows/*.ini'],
+ },
+
+ test_suite = 'trac.test.suite',
+ zip_safe = True,
+
+ install_requires = [
+ 'setuptools>=0.6b1',
+ 'Genshi>=0.6',
+ ],
+ extras_require = {
+ 'Babel': ['Babel>=0.9.5'],
+ 'Pygments': ['Pygments>=0.6'],
+ 'reST': ['docutils>=0.3'],
+ 'SilverCity': ['SilverCity>=0.9.4'],
+ 'Textile': ['textile>=2.0'],
+ },
+
+ entry_points = """
+ [console_scripts]
+ trac-admin = trac.admin.console:run
+ tracd = trac.web.standalone:main
+
+ [trac.plugins]
+ trac.about = trac.about
+ trac.admin.console = trac.admin.console
+ trac.admin.web_ui = trac.admin.web_ui
+ trac.attachment = trac.attachment
+ trac.db.mysql = trac.db.mysql_backend
+ trac.db.postgres = trac.db.postgres_backend
+ trac.db.sqlite = trac.db.sqlite_backend
+ trac.mimeview.patch = trac.mimeview.patch
+ trac.mimeview.pygments = trac.mimeview.pygments[Pygments]
+ trac.mimeview.rst = trac.mimeview.rst[reST]
+ trac.mimeview.silvercity = trac.mimeview.silvercity[SilverCity]
+ trac.mimeview.txtl = trac.mimeview.txtl[Textile]
+ trac.prefs = trac.prefs.web_ui
+ trac.search = trac.search.web_ui
+ trac.ticket.admin = trac.ticket.admin
+ trac.ticket.query = trac.ticket.query
+ trac.ticket.report = trac.ticket.report
+ trac.ticket.roadmap = trac.ticket.roadmap
+ trac.ticket.web_ui = trac.ticket.web_ui
+ trac.timeline = trac.timeline.web_ui
+ trac.versioncontrol.admin = trac.versioncontrol.admin
+ trac.versioncontrol.svn_authz = trac.versioncontrol.svn_authz
+ trac.versioncontrol.svn_fs = trac.versioncontrol.svn_fs
+ trac.versioncontrol.svn_prop = trac.versioncontrol.svn_prop
+ trac.versioncontrol.web_ui = trac.versioncontrol.web_ui
+ trac.web.auth = trac.web.auth
+ trac.web.session = trac.web.session
+ trac.wiki.admin = trac.wiki.admin
+ trac.wiki.interwiki = trac.wiki.interwiki
+ trac.wiki.macros = trac.wiki.macros
+ trac.wiki.web_ui = trac.wiki.web_ui
+ trac.wiki.web_api = trac.wiki.web_api
+ tracopt.mimeview.enscript = tracopt.mimeview.enscript
+ tracopt.mimeview.php = tracopt.mimeview.php
+ tracopt.perm.authz_policy = tracopt.perm.authz_policy
+ tracopt.perm.config_perm_provider = tracopt.perm.config_perm_provider
+ tracopt.ticket.commit_updater = tracopt.ticket.commit_updater
+ tracopt.ticket.deleter = tracopt.ticket.deleter
+ """,
+
+ **extra
+)
diff --git a/src/distutils2/tests/test_util.py b/src/distutils2/tests/test_util.py
--- a/src/distutils2/tests/test_util.py
+++ b/src/distutils2/tests/test_util.py
@@ -4,6 +4,8 @@
from copy import copy
from StringIO import StringIO
import subprocess
+import tempfile
+import time
from distutils2.errors import (DistutilsPlatformError,
DistutilsByteCompileError,
@@ -257,7 +259,10 @@
def test_newer(self):
self.assertRaises(DistutilsFileError, util.newer, 'xxx', 'xxx')
-
+ self.newer_f1 = tempfile.NamedTemporaryFile()
+ time.sleep(1)
+ self.newer_f2 = tempfile.NamedTemporaryFile()
+ self.assertTrue(util.newer(self.newer_f2.name, self.newer_f1.name))
def test_find_packages(self):
# let's create a structure we want to scan:
diff --git a/src/distutils2/tests/test_version.py b/src/distutils2/tests/test_version.py
--- a/src/distutils2/tests/test_version.py
+++ b/src/distutils2/tests/test_version.py
@@ -3,7 +3,7 @@
import os
from distutils2.version import NormalizedVersion as V
-from distutils2.version import IrrationalVersionError
+from distutils2.version import HugeMajorVersionNumError, IrrationalVersionError
from distutils2.version import suggest_normalized_version as suggest
from distutils2.version import VersionPredicate
from distutils2.tests.support import unittest
@@ -22,6 +22,10 @@
(V('1.0.dev345'), '1.0.dev345'),
(V('1.0.post456.dev623'), '1.0.post456.dev623'))
+ def test_repr(self):
+
+ self.assertEqual(repr(V('1.0')), "NormalizedVersion('1.0')")
+
def test_basic_versions(self):
for v, s in self.versions:
@@ -44,6 +48,12 @@
for s in irrational:
self.assertRaises(IrrationalVersionError, V, s)
+ def test_huge_version(self):
+
+ self.assertEquals(str(V('1980.0')), '1980.0')
+ self.assertRaises(HugeMajorVersionNumError, V, '1981.0')
+ self.assertEquals(str(V('1981.0', error_on_huge_major_num=False)), '1981.0')
+
def test_comparison(self):
r"""
>>> V('1.2.0') == '1.2'
@@ -51,12 +61,33 @@
...
TypeError: cannot compare NormalizedVersion and str
+ >>> V('1.2') < '1.3'
+ Traceback (most recent call last):
+ ...
+ TypeError: cannot compare NormalizedVersion and str
+
>>> V('1.2.0') == V('1.2')
True
>>> V('1.2.0') == V('1.2.3')
False
+ >>> V('1.2.0') != V('1.2.3')
+ True
>>> V('1.2.0') < V('1.2.3')
True
+ >>> V('1.2.0') < V('1.2.0')
+ False
+ >>> V('1.2.0') <= V('1.2.0')
+ True
+ >>> V('1.2.0') <= V('1.2.3')
+ True
+ >>> V('1.2.3') <= V('1.2.0')
+ False
+ >>> V('1.2.0') >= V('1.2.0')
+ True
+ >>> V('1.2.3') >= V('1.2.0')
+ True
+ >>> V('1.2.0') >= V('1.2.3')
+ False
>>> (V('1.0') > V('1.0b2'))
True
>>> (V('1.0') > V('1.0c2') > V('1.0c1') > V('1.0b2') > V('1.0b1')
@@ -101,6 +132,7 @@
self.assertEqual(suggest('1.0c2'), '1.0c2')
self.assertEqual(suggest('walla walla washington'), None)
self.assertEqual(suggest('2.4c1'), '2.4c1')
+ self.assertEqual(suggest('v1.0'), '1.0')
# from setuptools
self.assertEqual(suggest('0.4a1.r10'), '0.4a1.post10')
@@ -151,6 +183,8 @@
self.assertFalse(VersionPredicate('Hey (<=2.5)').match('2.6.0'))
self.assertTrue(VersionPredicate('Hey (>=2.5)').match('2.5.1'))
+ self.assertRaises(ValueError, VersionPredicate, '')
+
# XXX need to silent the micro version in this case
#assert not VersionPredicate('Ho (<3.0,!=2.6)').match('2.6.3')
@@ -164,11 +198,21 @@
for version in other_versions:
self.assertFalse(V(version).is_final)
+class VersionWhiteBoxTestCase(unittest.TestCase):
+
+ def test_parse_numdots(self):
+ # For code coverage completeness, as pad_zeros_length can't be set or
+ # influenced from the public interface
+ self.assertEquals(V('1.0')._parse_numdots('1.0', '1.0',
+ pad_zeros_length=3),
+ [1, 0, 0])
+
def test_suite():
#README = os.path.join(os.path.dirname(__file__), 'README.txt')
#suite = [doctest.DocFileSuite(README), unittest.makeSuite(VersionTestCase)]
- suite = [unittest.makeSuite(VersionTestCase)]
+ suite = [unittest.makeSuite(VersionTestCase),
+ unittest.makeSuite(VersionWhiteBoxTestCase)]
return unittest.TestSuite(suite)
if __name__ == "__main__":
diff --git a/src/distutils2/version.py b/src/distutils2/version.py
--- a/src/distutils2/version.py
+++ b/src/distutils2/version.py
@@ -379,8 +379,6 @@
def __init__(self, predicate):
predicate = predicate.strip()
match = _PLAIN_VERSIONS.match(predicate)
- if match is None:
- raise ValueError('Bad predicate "%s"' % predicate)
self.name = None
predicates = match.groups()[0]
self.predicates = [_split_predicate(pred.strip())
@@ -391,8 +389,6 @@
def __init__(self, predicate):
predicate = predicate.strip()
match = _PLAIN_VERSIONS.match(predicate)
- if match is None:
- raise ValueError('Bad predicate "%s"' % predicate)
self.name = None
self.predicates = _split_predicate(match.groups()[0])
diff --git a/src/runtests-cov.py b/src/runtests-cov.py
new file mode 100755
--- /dev/null
+++ b/src/runtests-cov.py
@@ -0,0 +1,105 @@
+#!/usr/bin/env python
+"""Tests for distutils2.
+
+The tests for distutils2 are defined in the distutils2.tests package.
+"""
+
+# TODO:
+
+# The coverage report is only accurate when ran inside a virtualenv
+# created with the --no-site-packages option. When it's not the case,
+# the built-in ignore list is not accurate and third party packages
+# show-up in the report, lowering the overall coverage.
+
+# One particular problem it docutils on Ubuntu which has a __file__
+# starting with /usr/lib/python2.6 while the path in the coverage
+# report starts with /usr/share/pyshared.
+
+import sys
+from os.path import dirname
+from optparse import OptionParser
+
+def parse_opts():
+ parser = OptionParser(usage="%prog [OPTIONS]",
+ description="run the distutils2 unittests")
+
+ parser.add_option("-q", "--quiet", help="do not print verbose messages",
+ action="store_true", default=False)
+ parser.add_option("-c", "--coverage", action="store_true", default=False,
+ help="produce a coverage report at the end of the run")
+ parser.add_option("-r", "--report", action="store_true", default=False,
+ help="produce a coverage report from the last test run")
+ parser.add_option("-m", "--show-missing", action="store_true",
+ default=False,
+ help=("Show line numbers of statements in each module "
+ "that weren't executed."))
+
+ opts, args = parser.parse_args()
+ return opts, args
+
+def coverage_report(opts):
+ import coverage
+ import unittest2
+ import docutils
+ cov = coverage.coverage()
+ cov.load()
+
+ cov.report(omit_prefixes=["distutils2/tests",
+ "runtests",
+ "distutils2/_backport",
+ dirname(unittest2.__file__),
+ dirname(dirname(docutils.__file__))],
+ show_missing=opts.show_missing)
+
+
+def test_main():
+ opts, args = parse_opts()
+ verbose = not opts.quiet
+ ret = 0
+
+ if opts.coverage or opts.report:
+ import coverage
+
+ if opts.coverage:
+ cov = coverage.coverage()
+ cov.erase()
+ cov.start()
+ if not opts.report:
+ ret = run_tests(verbose)
+ if opts.coverage:
+ cov.stop()
+ cov.save()
+
+ if opts.report or opts.coverage:
+ coverage_report(opts)
+
+ return ret
+
+def run_tests(verbose):
+ import distutils2.tests
+ from distutils2.tests import run_unittest, reap_children, TestFailed
+ from distutils2._backport.tests import test_suite as btest_suite
+ # XXX just supporting -q right now to enable detailed/quiet output
+ if len(sys.argv) > 1:
+ verbose = sys.argv[-1] != '-q'
+ else:
+ verbose = 1
+ try:
+ try:
+ run_unittest([distutils2.tests.test_suite(), btest_suite()],
+ verbose_=verbose)
+ return 0
+ except TestFailed:
+ return 1
+ finally:
+ reap_children()
+
+if __name__ == "__main__":
+ try:
+ from distutils2.tests.support import unittest
+ except ImportError:
+ sys.stderr.write('Error: You have to install unittest2')
+ sys.exit(1)
+
+ sys.exit(test_main())
+
--
Repository URL: http://hg.python.org/distutils2
More information about the Python-checkins
mailing list