[python-paver] Update to upstream 1.2.1 and fix a problem with the dry run wrappers and non-string args
Toshio くらとみ
toshio at fedoraproject.org
Wed Jul 24 01:14:26 UTC 2013
commit 0efee23c6de2ca82eb0ad602a23b9182d6ed8af2
Author: Toshio Kuratomi <toshio at fedoraproject.org>
Date: Tue Jul 23 18:14:08 2013 -0700
Update to upstream 1.2.1 and fix a problem with the dry run wrappers and non-string args
.gitignore | 1 +
paver-dry-wrapper-non-string-fix.patch | 13 +
paver-unbundle.patch | 1075 +-------------------------------
python-paver.spec | 9 +-
sources | 2 +-
5 files changed, 51 insertions(+), 1049 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index 54488da..9cb74c4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,4 @@ Paver-1.0.3.tar.gz
/Paver-1.1.0.tar.gz
/Paver-1.1.1.tar.gz
/Paver-1.2.0.tar.gz
+/Paver-1.2.1.tar.gz
diff --git a/paver-dry-wrapper-non-string-fix.patch b/paver-dry-wrapper-non-string-fix.patch
new file mode 100644
index 0000000..89287a9
--- /dev/null
+++ b/paver-dry-wrapper-non-string-fix.patch
@@ -0,0 +1,13 @@
+Index: Paver-1.2.1/paver/path.py
+===================================================================
+--- Paver-1.2.1.orig/paver/path.py
++++ Paver-1.2.1/paver/path.py
+@@ -63,7 +63,7 @@ def _make_wrapper(name, func):
+ global _silence_nested_calls
+ msg = None
+ if not _silence_nested_calls:
+- msg = name + ' ' + ' '.join(args)
++ msg = name + ' ' + ' '.join(map(repr, args))
+ try:
+ _silence_nested_calls = True
+ return dry(msg, func, *args, **kwds)
diff --git a/paver-unbundle.patch b/paver-unbundle.patch
index acd926b..65085bf 100644
--- a/paver-unbundle.patch
+++ b/paver-unbundle.patch
@@ -1,77 +1,7 @@
-Index: Paver-1.2.0/paver/doctools.py
+Index: Paver-1.2.1/paver/doctools.py
===================================================================
---- Paver-1.2.0.orig/paver/doctools.py
-+++ Paver-1.2.0/paver/doctools.py
-@@ -29,7 +29,7 @@ def _get_paths():
- builddir.mkdir_p()
- srcdir = docroot / opts.get("sourcedir", "")
- if not srcdir.exists():
-- raise BuildFailure("Sphinx source file dir (%s) does not exist"
-+ raise BuildFailure("Sphinx source file dir (%s) does not exist"
- % srcdir)
- htmldir = builddir / "html"
- htmldir.mkdir_p()
-@@ -55,7 +55,7 @@ def html():
- raise BuildFailure('install sphinx to build html docs')
- options.order('sphinx', add_rest=True)
- paths = _get_paths()
-- sphinxopts = ['', '-b', 'html', '-d', paths.doctrees,
-+ sphinxopts = ['', '-b', 'html', '-d', paths.doctrees,
- paths.srcdir, paths.htmldir]
- dry("sphinx-build %s" % (" ".join(sphinxopts),), sphinx.main, sphinxopts)
-
-@@ -76,41 +76,41 @@ class SectionedFile(object):
- """Loads a file into memory and keeps track of all of the
- sections found in the file. Sections are started with a
- line that looks like this::
--
-+
- [[[section SECTIONNAME]]]
--
-+
- Anything else can appear on the line outside of the brackets
- (so if you're in a source code file, you can put the section marker
- in a comment). The entire lines containing the section markers are
- not included when you request the text from the file.
--
-+
- An end of section marker looks like this::
--
-+
- [[[endsection]]]
--
-+
- Sections can be nested. If you do nest sections, you will use
- dotted notation to refer to the inner sections. For example,
- a "dessert" section within an "order" section would be referred
- to as "order.dessert".
--
-+
- The SectionedFile provides dictionary-style access to the
- sections. If you have a SectionedFile named 'sf',
- sf[sectionname] will give you back a string of that section
- of the file, including any inner sections. There won't
- be any section markers in that string.
--
-+
- You can get the text of the whole file via the ``all`` property
- (for example, ``sf.all``).
--
-+
- Section names must be unique across the file, but inner section
- names are kept track of by the full dotted name. So you can
- have a "dessert" section that is contained within two different
- outer sections.
--
-+
- Ending a section without starting one or ending the file without
- ending a section will yield BuildFailures.
- """
--
-+
- def __init__(self, filename=None, from_string=None):
- """Initialize this SectionedFile object from a file or string.
- If ``from_string`` is provided, that is the text that will
+--- Paver-1.2.1.orig/paver/doctools.py
++++ Paver-1.2.1/paver/doctools.py
@@ -121,26 +121,29 @@ class SectionedFile(object):
self.contents = []
self.sections = {}
@@ -106,196 +36,10 @@ Index: Paver-1.2.0/paver/doctools.py
output_lineno)
stack.append(section)
sectionname = ".".join(stack)
-@@ -158,7 +161,7 @@ class SectionedFile(object):
- except IndexError:
- raise BuildFailure("""End section marker with no starting marker
- (in file '%s', at line %s)""" % (self.filename, real_lineno))
-- debug("Section %s end at %s (%s)", section, real_lineno,
-+ debug("Section %s end at %s (%s)", section, real_lineno,
- output_lineno)
- sections[sectionname].append(output_lineno)
- else:
-@@ -169,9 +172,9 @@ class SectionedFile(object):
- if stack:
- section = ".".join(stack)
- raise BuildFailure("""No end marker for section '%s'
--(in file '%s', starts at line %s)""" % (section, self.filename,
-+(in file '%s', starts at line %s)""" % (section, self.filename,
- sections[section][0]))
--
-+
- def __getitem__(self, key):
- """Look up a section, and return the text of the section."""
- try:
-@@ -180,14 +183,14 @@ class SectionedFile(object):
- raise BuildFailure("No section '%s' in file '%s'" %
- (key, self.filename))
- return "".join(self.contents[pos[1]:pos[2]])
--
-+
- def __len__(self):
- """Number of sections available in the file."""
- return len(self.sections)
--
-+
- def keys(self):
- return self.sections.keys()
--
-+
- @property
- def all(self):
- """Property to get access to the whole file."""
-@@ -199,26 +202,26 @@ _default_include_marker = dict(
-
- class Includer(object):
- """Looks up SectionedFiles relative to the basedir.
--
-+
- When called with a filename and an optional section, the Includer
- will:
--
-+
- 1. look up that file relative to the basedir in a cache
- 2. load it as a SectionedFile if it's not in the cache
- 3. return the whole file if section is None
- 4. return just the section desired if a section is requested
--
-+
- If a cog object is provided at initialization, the text will be
- output (via cog's out) rather than returned as
- a string.
--
-+
- You can pass in include_markers which is a dictionary that maps
- file extensions to the single line comment character for that
- file type. If there is an include marker available, then
- output like:
--
-+
- # section 'sectionname' from 'file.py'
--
-+
- There are some default include markers. If you don't pass
- in anything, no include markers will be displayed. If you
- pass in an empty dictionary, the default ones will
-@@ -233,7 +236,7 @@ class Includer(object):
- self.basedir = path(basedir)
- self.cog = cog
- self.files = {}
--
-+
- def __call__(self, fn, section=None):
- f = self.files.get(fn)
- if f is None:
-@@ -279,23 +282,23 @@ def _runcog(options, uncog=False):
- c.options.bDeleteCode = options.get("delete_code", False)
- includedir = options.get('includedir', None)
- if includedir:
-- include = Includer(includedir, cog=c,
-+ include = Includer(includedir, cog=c,
- include_markers=options.get("include_markers"))
- # load cog's namespace with our convenience functions.
- c.options.defines['include'] = include
- c.options.defines['sh'] = _cogsh(c)
--
-+
- c.options.defines.update(options.get("defines", {}))
-
- c.sBeginSpec = options.get('beginspec', '[[[cog')
- c.sEndSpec = options.get('endspec', ']]]')
- c.sEndOutput = options.get('endoutput', '[[[end]]]')
--
-+
- basedir = options.get('basedir', None)
- if basedir is None:
- basedir = path(options.get('docroot', "docs")) / options.get('sourcedir', "")
- basedir = path(basedir)
--
-+
- pattern = options.get("pattern", "*.rst")
- if pattern:
- files = basedir.walkfiles(pattern)
-@@ -303,31 +306,31 @@ def _runcog(options, uncog=False):
- files = basedir.walkfiles()
- for f in files:
- dry("cog %s" % f, c.processOneFile, f)
--
-+
-
- @task
- def cog(options):
-- """Runs the cog code generator against the files matching your
-+ """Runs the cog code generator against the files matching your
- specification. By default, cog will run against any .rst files
- in your Sphinx document root. Full documentation for Cog is
- here:
--
-+
- http://nedbatchelder.com/code/cog/
--
-+
- In a nutshell, you put blocks in your file that look like
- this:
--
-+
- [[[cog cog.outl("Hi there!")
- ]]]
- [[[end]]]
--
-+
- Cog will replace the space between ]]] and [[[end]]] with
- the generated output. In this case, Hi there!
--
-+
- Here are the options available for the cog task. These are
- looked up in the 'cog' options section by default. The
- 'sphinx' option set is also searched.
--
-+
- basedir
- directory to look in for files to cog. If not set,
- 'docroot' is looked up.
-@@ -336,7 +339,7 @@ def cog(options):
- includedir
- If you have external files to include in your
- documentation, setting includedir to the root
-- of those files will put a paver.doctools.Includer
-+ of those files will put a paver.doctools.Includer
- in your Cog namespace as 'include'. This lets you
- easily include files and sections of files. Here's
- an example usage::
-@@ -365,9 +368,9 @@ def cog(options):
- For example, 'py' maps to '# '. If there is a known
- include marker for a given file, then a comment
- will be displayed along the lines of:
--
-+
- # section 'SECTIONNAME' in file 'foo.py'
--
-+
- If this option is not set, these lines will not
- be displayed at all. If this option is set to an
- empty dictionary, the default include markers
-@@ -375,13 +378,13 @@ def cog(options):
- extension -> include marker settings.
- """
- _runcog(options)
--
-+
- @task
- def uncog(options):
- """Remove the Cog generated code from files. Often, you will want to
- do this before committing code under source control, because you
- don't generally want generated code in your version control system.
--
-+
- This takes the same options as the cog task. Look there for
- more information.
- """
-Index: Paver-1.2.0/paver/misctasks.py
+Index: Paver-1.2.1/paver/misctasks.py
===================================================================
---- Paver-1.2.0.orig/paver/misctasks.py
-+++ Paver-1.2.0/paver/misctasks.py
+--- Paver-1.2.1.orig/paver/misctasks.py
++++ Paver-1.2.1/paver/misctasks.py
@@ -1,7 +1,10 @@
"""Miscellaneous tasks that don't fit into one of the other groupings."""
import pkgutil
@@ -308,37 +52,10 @@ Index: Paver-1.2.0/paver/misctasks.py
from os.path import join, dirname, exists, abspath
from paver.easy import dry, task
from paver.tasks import VERSION, cmdopts
-@@ -13,7 +16,7 @@ if exists(_docsdir):
- """Open your web browser and display Paver's documentation."""
- import webbrowser
- webbrowser.open("file://%s" % join(abspath(_docsdir), 'index.html') )
--
-+
- @task
- @cmdopts([('versioned_name', '', 'Determine if minilib uses version in its name')],
- share_with=['generate_setup'])
-@@ -31,7 +34,7 @@ def minilib(options):
- purpose is to avoid import error while using different versions of minilib
- with easy_install
- (default False)
--
-+
- extra_files
- list of other paver modules to include (don't include the .py
- extension). By default, the following modules are included:
-@@ -68,7 +71,7 @@ def minilib(options):
- @cmdopts([('versioned_name', '', 'Determine if setup refers to minilib with version in its name')],
- share_with=['minilib'])
- def generate_setup(options):
-- """Generates a setup.py file that uses paver behind the scenes. This
-+ """Generates a setup.py file that uses paver behind the scenes. This
- setup.py file will look in the directory that the user is running it
- in for a paver-minilib.zip and will add that to sys.path if available.
- Otherwise, it will just assume that paver is available."""
-Index: Paver-1.2.0/paver/setuputils.py
+Index: Paver-1.2.1/paver/setuputils.py
===================================================================
---- Paver-1.2.0.orig/paver/setuputils.py
-+++ Paver-1.2.0/paver/setuputils.py
+--- Paver-1.2.1.orig/paver/setuputils.py
++++ Paver-1.2.1/paver/setuputils.py
@@ -14,7 +14,10 @@ except ImportError:
from distutils.errors import DistutilsModuleError
_Distribution = dist.Distribution
@@ -351,89 +68,10 @@ Index: Paver-1.2.0/paver/setuputils.py
from paver.options import Bunch
-@@ -93,7 +96,7 @@ def find_package_data(
-
- Note patterns use wildcards, or can be exact paths (including
- leading ``./``), and all searching is case-insensitive.
--
-+
- This function is by Ian Bicking.
- """
-
-@@ -160,7 +163,7 @@ class DistutilsTask(tasks.Task):
- self.negative_opt = getattr(command_class, "negative_opt", {})
- # Parse distutils config files.
- distribution.parse_config_files()
--
-+
- def __call__(self, *args, **kw):
- options = tasks.environment.options.get(self.shortname, {})
- opt_dict = self.distribution.get_option_dict(self.command_name)
-@@ -173,11 +176,11 @@ class DistutilsTask(tasks.Task):
- _extra_command_dispatch[cmd_class](self.distribution, self.command_name)
- else:
- self.distribution.run_command(self.command_name)
--
-+
- @property
- def description(self):
- return self.command_class.description
--
-+
- def _get_shortname(taskname):
- dotindex = taskname.rfind(".")
- if dotindex > -1:
-@@ -185,7 +188,7 @@ def _get_shortname(taskname):
- else:
- command_name = taskname
- return command_name
--
-+
- class DistutilsTaskFinder(object):
- def get_task(self, taskname):
- dist = _get_distribution()
-@@ -195,7 +198,7 @@ class DistutilsTaskFinder(object):
- except DistutilsModuleError:
- return None
- return DistutilsTask(dist, command_name, command_class)
--
-+
- def get_tasks(self):
- dist = _get_distribution()
- if has_setuptools:
-@@ -209,7 +212,7 @@ class DistutilsTaskFinder(object):
- # py2app command
- tasks.environment.info("Could not load entry point: %s", ep)
- dist.get_command_list()
-- return set(DistutilsTask(dist, key, value)
-+ return set(DistutilsTask(dist, key, value)
- for key, value in dist.cmdclass.items())
-
- def _get_distribution():
-@@ -255,7 +258,7 @@ def _debug(message, *args):
- def _base_log(level, message, *args):
- """Displays a message at the given log level"""
- tasks.environment._log(level, message, args)
--
-+
- # monkeypatch the distutils logging to go through Paver's logging
- log.log = _base_log
- log.debug = _debug
-@@ -267,8 +270,8 @@ log.fatal = _error
-
- if has_setuptools:
- __ALL__.extend(["find_packages"])
--
-+
- from setuptools import find_packages
- else:
- import distutils.core
--
-+
-Index: Paver-1.2.0/paver/tasks.py
+Index: Paver-1.2.1/paver/tasks.py
===================================================================
---- Paver-1.2.0.orig/paver/tasks.py
-+++ Paver-1.2.0/paver/tasks.py
+--- Paver-1.2.1.orig/paver/tasks.py
++++ Paver-1.2.1/paver/tasks.py
@@ -11,8 +11,12 @@ import traceback
from os.path import *
@@ -446,13 +84,13 @@ Index: Paver-1.2.0/paver/tasks.py
+except ImportError:
+ import paver.deps.six as six
+ from paver.deps.six import print_
+ from paver.version import VERSION
# using six.moves is complicated because we include it and it's thus not at
- # the top level
-Index: Paver-1.2.0/paver/tests/test_doctools.py
+Index: Paver-1.2.1/paver/tests/test_doctools.py
===================================================================
---- Paver-1.2.0.orig/paver/tests/test_doctools.py
-+++ Paver-1.2.0/paver/tests/test_doctools.py
+--- Paver-1.2.1.orig/paver/tests/test_doctools.py
++++ Paver-1.2.1/paver/tests/test_doctools.py
@@ -2,7 +2,10 @@ from __future__ import with_statement
import sys
@@ -465,55 +103,10 @@ Index: Paver-1.2.0/paver/tests/test_doctools.py
from paver.easy import *
from paver import doctools, tasks, options
-@@ -74,7 +77,7 @@ Second one.
- assert str(e) == """section 'foo' redefined
- (in file 'None', first section at line 2, second at line 6)""", \
- "error was: %s" % (str(e))
--
-+
-
- def test_endmarker_without_start():
- myfile = """
-@@ -107,7 +110,7 @@ def test_whole_file():
- Hi there.
- Yo.
- """, "All was: %s" % (f.all)
--
-+
- def test_bad_section():
- f = doctools.SectionedFile(from_string="")
- try:
-@@ -117,7 +120,7 @@ def test_bad_section():
- e = sys.exc_info()[1]
- assert str(e) == "No section 'foo' in file 'None'", \
- "Error: '%s'" % (str(e))
--
-+
- def test_include_lookup():
- basedir = path(__file__).dirname() / "data"
- include = doctools.Includer(basedir, include_markers={})
-@@ -135,7 +138,7 @@ print "Hi!"
- assert second == """# section 'second.inner' in file 't2.py'
- print sys.path
- """, "Second was '%s'" % (second)
--
-+
- def test_cogging():
- _no25()
- env = tasks.Environment(doctools)
-@@ -157,7 +160,7 @@ def test_cogging():
- with open(textfile) as f:
- data = f.read()
- assert "print sys.path" not in data
--
-+
- def test_cogging_with_markers_removed():
- _no25()
- env = tasks.Environment(doctools)
-Index: Paver-1.2.0/paver/tests/test_easy.py
+Index: Paver-1.2.1/paver/tests/test_easy.py
===================================================================
---- Paver-1.2.0.orig/paver/tests/test_easy.py
-+++ Paver-1.2.0/paver/tests/test_easy.py
+--- Paver-1.2.1.orig/paver/tests/test_easy.py
++++ Paver-1.2.1/paver/tests/test_easy.py
@@ -1,5 +1,8 @@
import sys
-from paver.deps.six import b
@@ -524,10 +117,10 @@ Index: Paver-1.2.0/paver/tests/test_easy.py
from mock import patch, Mock
from paver import easy
from subprocess import PIPE, STDOUT
-Index: Paver-1.2.0/paver/tests/test_setuputils.py
+Index: Paver-1.2.1/paver/tests/test_setuputils.py
===================================================================
---- Paver-1.2.0.orig/paver/tests/test_setuputils.py
-+++ Paver-1.2.0/paver/tests/test_setuputils.py
+--- Paver-1.2.1.orig/paver/tests/test_setuputils.py
++++ Paver-1.2.1/paver/tests/test_setuputils.py
@@ -1,5 +1,8 @@
from distutils.core import Command
-from paver.deps.six import print_
@@ -538,97 +131,10 @@ Index: Paver-1.2.0/paver/tests/test_setuputils.py
from paver.setuputils import install_distutils_tasks, \
DistutilsTaskFinder, _get_distribution, \
-@@ -14,18 +17,18 @@ class _sdist(Command):
- user_options = [("foo", "f", "Foo"), ("no-foo", None, "No Foo")]
- boolean_options = ['foo']
- negative_opt = {'no-foo' : 'foo'}
--
-+
- def initialize_options(self):
- self.foo = False
--
-+
- def finalize_options(self):
- pass
--
-+
- def run(self):
- _sdist.called = True
- _sdist.foo_set = self.foo
- _sdist.fin = self.get_finalized_command("sdist")
--
-+
- @classmethod
- def reset(cls):
- cls.called = False
-@@ -42,13 +45,13 @@ def test_override_distutils_command():
- @tasks.task
- def sdist():
- pass
--
-+
- env = _set_environment(sdist=sdist)
- env.options = options.Bunch(setup=options.Bunch())
--
-+
- install_distutils_tasks()
- d = _get_distribution()
--
-+
- d.cmdclass['sdist'] = _sdist
- tasks._process_commands(['sdist', 'paver.tests.test_setuputils.sdist', '-f'])
- assert sdist.called
-@@ -70,24 +73,24 @@ def test_distutils_task_finder():
-
- def test_task_with_distutils_dep():
- _sdist.reset()
--
-+
- @tasks.task
- @tasks.needs("paver.tests.test_setuputils.sdist")
- def sdist():
- assert _sdist.called
--
-+
- env = _set_environment(sdist=sdist)
- env.options = options.Bunch(setup=options.Bunch())
- install_distutils_tasks()
- d = _get_distribution()
- d.cmdclass['sdist'] = _sdist
--
-+
- task_obj = env.get_task('sdist')
- assert task_obj == sdist
- needs_obj = env.get_task(task_obj.needs[0])
- assert isinstance(needs_obj, DistutilsTask)
- assert needs_obj.command_class == _sdist
--
-+
- tasks._process_commands(['sdist', "-f"])
- assert sdist.called
- assert _sdist.called
-@@ -95,7 +98,7 @@ def test_task_with_distutils_dep():
- print_("Cmd is: %s" % cmd)
- assert cmd.foo
- assert _sdist.foo_set
--
-+
- def test_distutils_tasks_should_not_get_extra_options():
- _sdist.reset()
- env = _set_environment()
-@@ -103,7 +106,7 @@ def test_distutils_tasks_should_not_get_
- install_distutils_tasks()
- d = _get_distribution()
- d.cmdclass['sdist'] = _sdist
--
-+
- tasks._process_commands(['sdist'])
- assert _sdist.called
- assert not _sdist.foo_set
-Index: Paver-1.2.0/paver/tests/test_tasks.py
+Index: Paver-1.2.1/paver/tests/test_tasks.py
===================================================================
---- Paver-1.2.0.orig/paver/tests/test_tasks.py
-+++ Paver-1.2.0/paver/tests/test_tasks.py
+--- Paver-1.2.1.orig/paver/tests/test_tasks.py
++++ Paver-1.2.1/paver/tests/test_tasks.py
@@ -2,7 +2,10 @@ from __future__ import with_statement
import os
from pprint import pprint
@@ -641,535 +147,10 @@ Index: Paver-1.2.0/paver/tests/test_tasks.py
from paver import setuputils, misctasks, tasks, options
-@@ -15,18 +18,18 @@ def test_basic_dependencies():
- @tasks.task
- def t1():
- pass
--
-+
- t1.called = False
- t1.t2_was_called = False
--
-+
- @tasks.task
- @tasks.needs('t1')
- def t2():
- assert t1.called
- t1.t2_was_called = True
--
-+
- _set_environment(t1 = t1, t2=t2)
--
-+
- assert hasattr(tasks.environment.pavement, 't1')
- t2()
- assert t1.t2_was_called
-@@ -38,42 +41,42 @@ def global_t1():
- def test_longname_resolution_in_dependencies():
- global_t1.called = False
- global_t1.t2_was_called = False
--
-+
- @tasks.task
- @tasks.needs('paver.tests.test_tasks.global_t1')
- def t2():
- assert global_t1.called
- global_t1.t2_was_called = True
--
-+
- _set_environment(t2=t2)
- t2()
- assert global_t1.t2_was_called
--
-+
- def test_chained_dependencies():
- called = [False, False, False, False]
--
-+
- @tasks.task
- def t1():
- assert called == [False, False, False, False]
- called[0] = True
--
-+
- @tasks.task
- @tasks.needs('t1')
- def t2():
- assert called == [True, False, False, False]
- called[1] = True
--
-+
- @tasks.task
- def t3():
- assert called == [True, True, False, False]
- called[2] = True
--
-+
- @tasks.task
- @tasks.needs('t2', 't3')
- def t4():
- assert called == [True, True, True, False]
- called[3] = True
--
-+
- _set_environment(t1=t1,t2=t2,t3=t3,t4=t4)
- t4()
- assert called == [True, True, True, True], "Called was: %s" % (called)
-@@ -82,51 +85,51 @@ def test_backwards_compatible_needs():
- @tasks.task
- def t():
- pass
--
-+
- @tasks.task
- @tasks.needs(['t'])
- def t2():
- pass
--
-+
- @tasks.task
- @tasks.needs('t')
- def t3():
- pass
--
-+
- env = _set_environment(t=t, t2=t2, t3=t3)
- t3()
- assert t.called
- t.called = False
--
-+
- t2()
- assert t.called
-
- def test_tasks_dont_repeat():
- called = [0, 0, 0, 0]
--
-+
- @tasks.task
- def t1():
- assert called == [0, 0, 0, 0]
- called[0] += 1
--
-+
- @tasks.task
- @tasks.needs('t1')
- def t2():
- assert called == [1, 0, 0, 0]
- called[1] += 1
--
-+
- @tasks.task
- @tasks.needs('t1')
- def t3():
- assert called == [1, 1, 0, 0]
- called[2] += 1
--
-+
- @tasks.task
- @tasks.needs('t2', 't3')
- def t4():
- assert called == [1, 1, 1, 0]
- called[3] += 1
--
-+
- _set_environment(t1=t1,t2=t2,t3=t3,t4=t4)
- t4()
- assert called == [1, 1, 1, 1]
-@@ -135,7 +138,7 @@ def test_basic_command_line():
- @tasks.task
- def t1():
- pass
--
-+
- _set_environment(t1=t1)
- try:
- tr, args = tasks._parse_command_line(['foo'])
-@@ -143,31 +146,31 @@ def test_basic_command_line():
- assert False, "Expected BuildFailure exception for unknown task"
- except tasks.BuildFailure:
- pass
--
-+
- task, args = tasks._parse_command_line(['t1'])
- assert task == t1
--
-+
- task, args = tasks._parse_command_line(['t1', 't2'])
- assert task == t1
- assert args == ['t2']
--
-+
- def test_list_tasks():
- from paver import doctools
--
-+
- @tasks.task
- def t1():
- pass
--
-+
- _set_environment(t1=t1, doctools=doctools)
- task_list = tasks.environment.get_tasks()
- assert t1 in task_list
- assert doctools.html in task_list
--
-+
- def test_environment_insertion():
- @tasks.task
- def t1(env):
- pass
--
-+
- _set_environment(t1=t1)
- t1()
- assert t1.called
-@@ -176,20 +179,20 @@ def test_add_options_to_environment():
- @tasks.task
- def t1(options):
- assert options.foo == 1
--
-+
- @tasks.task
- def t2(options, env):
- assert options.foo == 1
- assert env.options == options
--
-+
- environment = _set_environment(t1=t1, t2=t2)
- environment.options.foo = 1
--
-+
- t1()
- t2()
- assert t1.called
- assert t2.called
--
-+
- def test_shortname_access():
- environment = _set_environment(tasks=tasks)
- task = environment.get_task("help")
-@@ -214,39 +217,39 @@ def test_task_command_line_options():
- def t1(options):
- assert options.foo == "1"
- assert options.t1.foo == "1"
--
-+
- environment = _set_environment(t1=t1)
- tasks._process_commands(['t1', '--foo', '1'])
- assert t1.called
--
-+
- def test_setting_of_options_with_equals():
- @tasks.task
- def t1(options):
- assert options.foo == '1'
- assert not hasattr(options, 'bar')
--
-+
- @tasks.task
- def t2(options):
- assert options.foo == '1'
- assert options.bar == '2'
--
-+
- environment = _set_environment(t1=t1, t2=t2)
- tasks._process_commands(['foo=1', 't1', 'bar=2', 't2'])
- assert t1.called
- assert t2.called
--
-+
- def test_options_inherited_via_needs():
- @tasks.task
- @tasks.cmdopts([('foo=', 'f', "Foo!")])
- def t1(options):
- assert options.t1.foo == "1"
--
-+
- @tasks.task
- @tasks.needs('t1')
- @tasks.cmdopts([('bar=', 'b', "Bar!")])
- def t2(options):
- assert options.t2.bar == '2'
--
-+
- environment = _set_environment(t1=t1, t2=t2)
- tasks._process_commands("t2 --foo 1 -b 2".split())
- assert t1.called
-@@ -257,7 +260,7 @@ def test_options_inherited_via_needs_eve
- @tasks.cmdopts([('foo=', 'f', "Foo!")])
- def t1(options):
- assert options.t1.foo == "1"
--
-+
- @tasks.task
- @tasks.needs('t1')
- @tasks.cmdopts([('bar=', 'b', "Bar!")])
-@@ -269,25 +272,25 @@ def test_options_inherited_via_needs_eve
- @tasks.cmdopts([('spam=', 's', "Spam!")])
- def t3(options):
- assert options.t3.spam == '3'
--
-+
- environment = _set_environment(t1=t1, t2=t2, t3=t3)
- tasks._process_commands("t3 --foo 1 -b 2 -s 3".split())
- assert t1.called
- assert t2.called
- assert t3.called
--
-+
- def test_options_shouldnt_overlap():
- @tasks.task
- @tasks.cmdopts([('foo=', 'f', "Foo!")])
- def t1(options):
- assert False
--
-+
- @tasks.task
- @tasks.needs('t1')
- @tasks.cmdopts([('force=', 'f', "Force!")])
- def t2(options):
- assert False
--
-+
- environment = _set_environment(t1=t1, t2=t2)
- try:
- tasks._process_commands("t2 -f 1".split())
-@@ -300,13 +303,13 @@ def test_options_shouldnt_overlap_when_b
- @tasks.cmdopts([('foo=', 'f', "Foo!")])
- def t1(options):
- assert False
--
-+
- @tasks.task
- @tasks.needs('t1')
- @tasks.cmdopts([('force=', 'f', "Force!")], share_with=['nonexisting_task'])
- def t2(options):
- assert False
--
-+
- environment = _set_environment(t1=t1, t2=t2)
- try:
- tasks._process_commands("t2 -f 1".split())
-@@ -319,13 +322,13 @@ def test_options_may_overlap_if_explicit
- @tasks.cmdopts([('foo=', 'f', "Foo!")])
- def t1(options):
- assert options.t1.foo == "1"
--
-+
- @tasks.task
- @tasks.needs('t1')
- @tasks.cmdopts([('foo=', 'f', "Foo!")], share_with=['t1'])
- def t2(options):
- assert options.t2.foo == "1"
--
-+
- environment = _set_environment(t1=t1, t2=t2)
-
- tasks._process_commands("t2 -f 1".split())
-@@ -338,13 +341,13 @@ def test_exactly_same_parameters_must_be
- @tasks.cmdopts([('foo=', 'f', "Foo!")])
- def t1(options):
- assert False
--
-+
- @tasks.task
- @tasks.needs('t1')
- @tasks.cmdopts([('force=', 'f', "Force!")], share_with=['t1'])
- def t2(options):
- assert False
--
-+
- environment = _set_environment(t1=t1, t2=t2)
- try:
- tasks._process_commands("t2 -f 1".split())
-@@ -486,17 +489,17 @@ def test_optional_args_in_tasks():
- tasks._process_commands(['t1', 't2'])
- assert t1.called
- assert t2.called
--
-+
- def test_debug_logging():
- @tasks.task
- def t1(debug):
- debug("Hi %s", "there")
--
-+
- env = _set_environment(t1=t1, patch_print=True)
- tasks._process_commands(['-v', 't1'])
- assert env.patch_captured[-1] == "Hi there"
- env.patch_captured = []
--
-+
- tasks._process_commands(['t1'])
- assert env.patch_captured[-1] != "Hi there"
-
-@@ -504,35 +507,35 @@ def test_base_logging():
- @tasks.task
- def t1(info):
- info("Hi %s", "you")
--
-+
- env = _set_environment(t1=t1, patch_print=True)
- tasks._process_commands(['t1'])
- assert env.patch_captured[-1] == 'Hi you'
- env.patch_captured = []
--
-+
- tasks._process_commands(['-q', 't1'])
- assert not env.patch_captured
--
-+
- def test_error_show_up_no_matter_what():
- @tasks.task
- def t1(error):
- error("Hi %s", "error")
--
-+
- env = _set_environment(t1=t1, patch_print=True)
- tasks._process_commands(['t1'])
- assert env.patch_captured[-1] == "Hi error"
- env.patch_captured = []
--
-+
- tasks._process_commands(['-q', 't1'])
- assert env.patch_captured[-1] == "Hi error"
--
-+
- def test_all_messages_for_a_task_are_captured():
- @tasks.task
- def t1(debug, error):
- debug("This is debug msg")
- error("This is error msg")
- raise tasks.BuildFailure("Yo, problem, yo")
--
-+
- env = _set_environment(t1=t1, patch_print=True)
- try:
- tasks._process_commands(['t1'])
-@@ -552,7 +555,7 @@ def test_messages_with_formatting_and_no
-
- tasks._process_commands(['-q', 't1'])
- assert env.patch_captured[-1] == "This is a %s message"
--
-+
- def test_alternate_pavement_option():
- env = _set_environment()
- tasks._parse_global_options([])
-@@ -574,7 +577,7 @@ def test_captured_output_shows_up_on_exc
- def t1(debug, error):
- debug("Dividing by zero!")
- 1/0
--
-+
- env = _set_environment(t1=t1, patch_print=True, patch_exit=1)
- try:
- tasks._process_commands(['t1'])
-@@ -582,7 +585,7 @@ def test_captured_output_shows_up_on_exc
- except FakeExitException:
- assert "Dividing by zero!" in "\n".join(env.patch_captured)
- assert env.exit_code == 1
--
-+
- def test_calling_subpavement():
- @tasks.task
- def private_t1(options):
-@@ -590,7 +593,7 @@ def test_calling_subpavement():
- tasks.call_pavement(subpavement, "t1")
- # our options should not be mangled
- assert options.foo == 2
--
-+
- env = _set_environment(private_t1=private_t1)
- tasks._process_commands(['private_t1'])
- # the value should be set by the other pavement, which runs
-@@ -602,14 +605,14 @@ class MyTaskFinder(object):
- if name == "foo":
- return self.foo
- return None
--
-+
- def get_tasks(self):
- return set([self.foo])
--
-+
- @tasks.task
- def foo(self):
- self.foo_called = True
--
-+
- def test_task_finders():
- env = _set_environment()
- mtf = MyTaskFinder()
-@@ -618,11 +621,11 @@ def test_task_finders():
- assert t == mtf.foo
- all_tasks = env.get_tasks()
- assert mtf.foo in all_tasks
--
-+
- def test_calling_a_function_rather_than_task():
- def foo():
- pass
--
-+
- env = _set_environment(foo=foo)
- try:
- tasks._process_commands(['foo'])
-@@ -650,28 +653,28 @@ def test_description_retrieval_trial():
- @tasks.task
- def t1():
- """ Task it is """
--
-+
- assert t1.description == "Task it is"
-
- def test_description_empty_without_docstring():
- @tasks.task
- def t1():
- pass
--
-+
- assert t1.description == ""
-
- def test_description_retrieval_first_sentence():
- @tasks.task
- def t1():
- """ Task it is. Not with another sentence. """
--
-+
- assert t1.description == "Task it is"
-
- def test_description_retrieval_first_sentence_even_with_version_numbers():
- @tasks.task
- def t1():
- """ Task it is, installs Django 1.0. Not with another sentence. """
--
-+
- assert t1.description == "Task it is, installs Django 1.0"
-
- def test_auto_task_is_not_run_with_noauto():
-@@ -686,7 +689,7 @@ def test_auto_task_is_not_run_with_noaut
-
- _set_environment(auto=auto, t1=t1)
- tasks._process_commands(['t1'], auto_pending=True)
--
-+
- assert t1.called
- assert not auto.called, "t1 is decorated with no_auto, it should not be called"
-
-@@ -712,7 +715,7 @@ def test_task_can_be_called_repeatedly()
- info(options.args[0])
-
- env = _set_environment(t1=t1, patch_print=True)
--
-+
- tasks._process_commands(['t1', 'spam'])
- tasks._process_commands(['t1', 'eggs'])
-
-Index: Paver-1.2.0/paver/tests/utils.py
+Index: Paver-1.2.1/paver/tests/utils.py
===================================================================
---- Paver-1.2.0.orig/paver/tests/utils.py
-+++ Paver-1.2.0/paver/tests/utils.py
+--- Paver-1.2.1.orig/paver/tests/utils.py
++++ Paver-1.2.1/paver/tests/utils.py
@@ -1,5 +1,8 @@
import types
-import paver.deps.six as six
diff --git a/python-paver.spec b/python-paver.spec
index cf10edd..9c97b70 100644
--- a/python-paver.spec
+++ b/python-paver.spec
@@ -4,7 +4,7 @@
%global srcname Paver
Name: python-paver
-Version: 1.2.0
+Version: 1.2.1
Release: 1%{?dist}
Summary: Python-based build/distribution/deployment scripting tool
@@ -16,6 +16,9 @@ URL: http://www.blueskyonmars.com/projects/paver/
Source0: http://pypi.python.org/packages/source/P/%{srcname}/%{srcname}-%{version}.tar.gz
# Unbundle python-six
Patch0: paver-unbundle.patch
+# Fix for nonstring args to a dry run (for instance, octal value for chmod)
+# https://github.com/paver/paver/commit/c7489dfa8be5967e8a88876425502a2df98106a6#diff-0
+Patch1: paver-dry-wrapper-non-string-fix.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildArch: noarch
@@ -60,6 +63,7 @@ now much easier.
%setup -q -n %{srcname}-%{version}
%patch0 -p1
+%patch1 -p1
rm paver/deps/six*
@@ -93,6 +97,9 @@ rm -rf %{buildroot}
%changelog
+* Tue Jul 23 2013 Toshio Kuratomi <toshio at fedoraproject.org> - 1.2.1-1
+- Update to upstream 1.2.1 and fix a problem with the dry run wrappers and non-string args
+
* Mon Feb 25 2013 Toshio Kuratomi <toshio at fedoraproject.org> - 1.2.0-1
- Update to upstream 1.2.0 release
- samefile patch merged upstream
diff --git a/sources b/sources
index c2ad7e0..ae8a7b4 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-96d5c962347a47590626aad2bf7a34a0 Paver-1.2.0.tar.gz
+78d0cea13e41a31fcb347cf37ea4577f Paver-1.2.1.tar.gz
More information about the scm-commits
mailing list