Hello community,

here is the log from the commit of package python-pbr for openSUSE:Factory 
checked in at 2017-07-04 11:56:33
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-pbr (Old)
 and      /work/SRC/openSUSE:Factory/.python-pbr.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-pbr"

Tue Jul  4 11:56:33 2017 rev:29 rq:507246 version:3.1.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-pbr/python-pbr-doc.changes        
2017-04-19 18:06:49.571787337 +0200
+++ /work/SRC/openSUSE:Factory/.python-pbr.new/python-pbr-doc.changes   
2017-07-04 11:56:35.464595048 +0200
@@ -1,0 +2,16 @@
+Thu Jun 29 16:16:36 UTC 2017 - [email protected]
+
+- update to 3.1.1:
+  * Restore previous IP binding
+  * allow user to override the output location of api docs
+  * fix tests based on API change in Sphinx
+  * Updated from global requirements
+  * Add binding option for WSGI server
+  * Ignore index URL lines in requirements.txt files
+
+-------------------------------------------------------------------
+Fri Jun 23 15:21:37 UTC 2017 - [email protected]
+
+- drop upstreamed make_oslosphinx_optional.patch
+
+-------------------------------------------------------------------
--- /work/SRC/openSUSE:Factory/python-pbr/python-pbr.changes    2017-04-19 
18:06:49.699769234 +0200
+++ /work/SRC/openSUSE:Factory/.python-pbr.new/python-pbr.changes       
2017-07-04 11:56:35.752554524 +0200
@@ -1,0 +2,35 @@
+Thu Jun 29 16:16:36 UTC 2017 - [email protected]
+
+- update to 3.1.1:
+  * Restore previous IP binding
+  * allow user to override the output location of api docs
+  * fix tests based on API change in Sphinx
+  * Updated from global requirements
+  * Add binding option for WSGI server
+  * Ignore index URL lines in requirements.txt files
+
+-------------------------------------------------------------------
+Thu May 18 11:36:19 UTC 2017 - [email protected]
+
+- Update to pbr-3.0.1:
+  * builddoc: uses the new Sphinx 1.6 code for multiple builder
+  * Updated from global requirements
+  * Fix missing comment from previous change
+  * trivial: Add note about multiple builders support
+  * Remove 'build\_sphinx\_latex'
+  * Stop building man pages by default
+  * docs: Use definition lists
+  * add image.nonlocal\_uri to the list of warnings ignored
+  * doc: Document Sphinx integration
+  * add changelog to published documentation
+  * Lazy import pkg\_resources
+  * Add Changelog build handling for invalid chars
+  * Initialize sphinx config using application instead of config
+  * Make oslosphinx optional
+  * Updated from global requirements
+  * Also generate XML coverage report
+  * Update to a newer hacking library
+- drop 0001-Initialize-sphinx-config-using-application-instead-o.patch
+  Upstream
+
+-------------------------------------------------------------------

Old:
----
  0001-Initialize-sphinx-config-using-application-instead-o.patch
  make_oslosphinx_optional.patch
  pbr-2.0.0.tar.gz

New:
----
  pbr-3.1.1.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-pbr-doc.spec ++++++
--- /var/tmp/diff_new_pack.rwR1az/_old  2017-07-04 11:56:36.652427887 +0200
+++ /var/tmp/diff_new_pack.rwR1az/_new  2017-07-04 11:56:36.656427325 +0200
@@ -18,7 +18,7 @@
 
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 Name:           python-pbr-doc
-Version:        2.0.0
+Version:        3.1.1
 Release:        0
 Summary:        Documentation for python-pbr
 License:        Apache-2.0
@@ -26,8 +26,6 @@
 Url:            http://pypi.python.org/pypi/pbr
 Source:         
https://files.pythonhosted.org/packages/source/p/pbr/pbr-%{version}.tar.gz
 Source1:        python-pbr-rpmlintrc
-# make_oslosphinx_optional.patch - https://review.openstack.org/#/c/443555/
-Patch1:         make_oslosphinx_optional.patch
 BuildRequires:  fdupes
 # Documentation requirements:
 BuildRequires:  python3-Sphinx >= 1.1.2
@@ -41,7 +39,6 @@
 
 %prep
 %setup -q -n pbr-%{version}
-%patch1 -p1
 # Get rid of ugly build-time deps that require network:
 sed -i "s/, 'sphinx\.ext\.intersphinx'//" doc/source/conf.py
 

++++++ python-pbr.spec ++++++
--- /var/tmp/diff_new_pack.rwR1az/_old  2017-07-04 11:56:36.692422259 +0200
+++ /var/tmp/diff_new_pack.rwR1az/_new  2017-07-04 11:56:36.700421134 +0200
@@ -22,7 +22,7 @@
 
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 Name:           python-pbr
-Version:        2.0.0
+Version:        3.1.1
 Release:        0
 Summary:        Python Build Reasonableness
 License:        Apache-2.0
@@ -30,8 +30,6 @@
 Url:            http://pypi.python.org/pypi/pbr
 Source:         
https://files.pythonhosted.org/packages/source/p/pbr/pbr-%{version}.tar.gz
 Source1:        python-pbr-rpmlintrc
-# PATCH-FIX-UPSTREAM 
0001-Initialize-sphinx-config-using-application-instead-o.patch~- 
https://review.openstack.org/#/c/448455/
-Patch1:         0001-Initialize-sphinx-config-using-application-instead-o.patch
 BuildRequires:  %{python_module devel}
 BuildRequires:  %{python_module pip >= 1.4}
 BuildRequires:  fdupes
@@ -40,7 +38,6 @@
 %if %{with test}
 #BuildRequires:  python-coverage >= 3.6
 BuildRequires:  %{python_module fixtures >= 1.3.1}
-BuildRequires:  %{python_module hacking >= 0.9.2}
 BuildRequires:  %{python_module mock >= 1.2}
 BuildRequires:  %{python_module python-subunit >= 0.0.18}
 BuildRequires:  %{python_module six >= 1.9.0}
@@ -67,7 +64,6 @@
 
 %prep
 %setup -q -n pbr-%{version}
-%patch1 -p1
 # Get rid of ugly build-time deps that require network:
 sed -i "s/, 'sphinx\.ext\.intersphinx'//" doc/source/conf.py
 

++++++ pbr-2.0.0.tar.gz -> pbr-3.1.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pbr-2.0.0/AUTHORS new/pbr-3.1.1/AUTHORS
--- old/pbr-2.0.0/AUTHORS       2017-03-01 04:32:42.000000000 +0100
+++ new/pbr-3.1.1/AUTHORS       2017-06-21 11:44:14.000000000 +0200
@@ -1,6 +1,8 @@
+A40351 <[email protected]>
 Akihiro Motoki <[email protected]>
 Alex Gaynor <[email protected]>
 Alexander Makarov <[email protected]>
+Alfredo Moralejo <[email protected]>
 Andreas Jaeger <[email protected]>
 Andrew Bogott <[email protected]>
 Angus Salkeld <[email protected]>
@@ -35,6 +37,7 @@
 Erik M. Bray <[email protected]>
 Eugene Kirpichov <[email protected]>
 Florian Wilhelm <[email protected]>
+Gage Hugo <[email protected]>
 Gary Kotton <[email protected]>
 Giampaolo Lauria <[email protected]>
 Ian Cordasco <[email protected]>
@@ -65,7 +68,9 @@
 Maru Newby <[email protected]>
 Masaki Matsushita <[email protected]>
 Matt Riedemann <[email protected]>
+Matthew Montgomery <[email protected]>
 Matthew Treinish <[email protected]>
+Mehdi Abaakouk <[email protected]>
 Michael Basnight <[email protected]>
 Michael Still <[email protected]>
 Mike Heald <[email protected]>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pbr-2.0.0/ChangeLog new/pbr-3.1.1/ChangeLog
--- old/pbr-2.0.0/ChangeLog     2017-03-01 04:32:42.000000000 +0100
+++ new/pbr-3.1.1/ChangeLog     2017-06-21 11:44:14.000000000 +0200
@@ -1,12 +1,56 @@
 CHANGES
 =======
 
+3.1.1
+-----
+
+* Restore previous IP binding
+
+3.1.0
+-----
+
+* allow user to override the output location of api docs
+* fix tests based on API change in Sphinx
+* Updated from global requirements
+* Add binding option for WSGI server
+* Ignore index URL lines in requirements.txt files
+
+3.0.1
+-----
+
+* builddoc: uses the new Sphinx 1.6 code for multiple builder
+* Updated from global requirements
+* Fix missing comment from previous change
+* trivial: Add note about multiple builders support
+
+3.0.0
+-----
+
+* Remove 'build\_sphinx\_latex'
+* Stop building man pages by default
+* docs: Use definition lists
+* add image.nonlocal\_uri to the list of warnings ignored
+* doc: Document Sphinx integration
+* add changelog to published documentation
+
+2.1.0
+-----
+
+* Lazy import pkg\_resources
+* Add Changelog build handling for invalid chars
+* Initialize sphinx config using application instead of config
+* Make oslosphinx optional
+* Updated from global requirements
+* Also generate XML coverage report
+* Update to a newer hacking library
+
 2.0.0
 -----
 
 * tox: Don't set skipsdist=True
 * Stop using 'warnerrors'
 * doc: Clarify sections in 'setup.cfg'
+* Remove testr entry point
 * Updated from global requirements
 * Remove discover from test-requirements
 * Add Constraints support
@@ -61,7 +105,7 @@
 * package: fix wrong catch in email parsing
 * Sort 'pbr freeze' output
 * Do not convert git tags when searching history
-* Include wsgi_scripts in generated wheels
+* Include wsgi\_scripts in generated wheels
 * Correct the indentation in the classifiers example
 * Do not silently drop markers that fail to evaluate
 * Clarifications around tags and version numbers
@@ -95,7 +139,7 @@
 -----
 
 * Handle the case where cmd.distribution has no pbr attribute
-* test_integration cleanups
+* test\_integration cleanups
 * Remove redundant testscenarios glue
 * Add standard code coverage configuration file
 * Add shields.io version/downloads links/badges into README.rst
@@ -109,7 +153,7 @@
 1.7.0
 -----
 
-* Have pbr egg_info.writer check PBR is enabled
+* Have pbr egg\_info.writer check PBR is enabled
 
 1.6.0
 -----
@@ -132,7 +176,7 @@
 * Updated from global requirements
 * Updated from global requirements
 * Show how long the git querying takes
-* Add wsgi_scripts support to PBR
+* Add wsgi\_scripts support to PBR
 * Updated from global requirements
 
 1.3.0
@@ -141,9 +185,9 @@
 * Wrap env markers in parens
 * Updated from global requirements
 * Add more documentation around building docs
-* Expose a 'rpm_version' extra command
+* Expose a 'rpm\_version' extra command
 * Updated from global requirements
-* Use string for 'OS_TEST_TIMEOUT' default
+* Use string for 'OS\_TEST\_TIMEOUT' default
 * Updated from global requirements
 * This documents the use of comments that work between 2.6, 2.7 and 3.4
 
@@ -151,20 +195,20 @@
 -----
 
 * Strip markers from test requirements
-* Add build_sphinx test coverage
+* Add build\_sphinx test coverage
 
 1.1.1
 -----
 
-* Revert "Remove sphinx_config.init_values() manual call"
+* Revert "Remove sphinx\_config.init\_values() manual call"
 
 1.1.0
 -----
 
 * Fix test case to be runnable with gnupg 2.1
-* More explicit data_files install location docs
+* More explicit data\_files install location docs
 * Move CapturedSubprocess fixture to base
-* Remove sphinx_config.init_values() manual call
+* Remove sphinx\_config.init\_values() manual call
 * Updated from global requirements
 * builddoc: allow to use fnmatch-style exclusion for autodoc
 * doc: add some basic doc about pbr doc options
@@ -174,7 +218,7 @@
 1.0.1
 -----
 
-* Remove self.pre_run calls in packaging.py
+* Remove self.pre\_run calls in packaging.py
 * Add kerberos deps to build the kerberos wheel
 * Update hacking to 0.10.x series
 
@@ -192,7 +236,7 @@
 ------
 
 * Issue #1450210: Preversioning rc tag handling
-* Stop testing setup.py easy_install behaviour
+* Stop testing setup.py easy\_install behaviour
 * Test pip install -e of projects
 * Build all the wheels in one pass rather than many
 * Improve integration.sh
@@ -220,8 +264,8 @@
 0.10.7
 ------
 
-* _get_revno only returns a commit count
-* Move write_pbr_json to avoid issues with nose
+* \_get\_revno only returns a commit count
+* Move write\_pbr\_json to avoid issues with nose
 * Properly check for git before getting git dir
 * Port in git sha changes from 0.10 line
 
@@ -233,7 +277,7 @@
 0.10.5
 ------
 
-* Move write_pbr_json to avoid issues with nose
+* Move write\_pbr\_json to avoid issues with nose
 
 0.10.4
 ------
@@ -260,7 +304,7 @@
 * Add user.name to git config in tests
 * Honour validly tagged versions
 * autodoc: allow to exclude modules from auto-generation
-* tests: factorize has_opt handling
+* tests: factorize has\_opt handling
 * Support reading versions from wheels
 * Only consider tags that look like versions
 * Refactor oneline changelog walking
@@ -271,7 +315,7 @@
 * Allow for inclusion of authors and changelog when building docs
 * Work toward Python 3.4 support and testing
 * Accept capitalized Sem-Ver headers
-* use get_boolean_option for warnerrors
+* use get\_boolean\_option for warnerrors
 * Handle more legacy version numbers
 * Look for and process sem-ver pseudo headers in git
 * Raise an error if preversion versions are too low
@@ -297,7 +341,7 @@
 * Restore Monkeypatched Distribution Instance
 * Register testr as a distutil entry point
 * Check for git before querying it for a version
-* Allow _run_cmd to run commands in any directory
+* Allow \_run\_cmd to run commands in any directory
 * Make setUp fail if sdist fails
 * Permit pre-release versions with git metadata
 * Un-nest some sections of code
@@ -311,7 +355,7 @@
 0.8.1
 -----
 
-* pbr/testr_command.py: Add logging
+* pbr/testr\_command.py: Add logging
 * Documentation updates
 * Fixed a typo in the documentation
 * Make source configurable when using --coverage
@@ -322,7 +366,7 @@
 0.8.0
 -----
 
-* Use unicode_literals import instead of u'unicode' notation
+* Use unicode\_literals import instead of u'unicode' notation
 * Add support for nested requirements files
 * Remove pip version specifier
 * Make tools/integration.sh take a branch
@@ -332,14 +376,14 @@
 0.7.0
 -----
 
-* Factor run_cmd out of the base class
-* Return the real class in VersionInfo __repr__
+* Factor run\_cmd out of the base class
+* Return the real class in VersionInfo \_\_repr\_\_
 * Fix up some docstrings
 * Init sphinx config values before accessing them
 * Remove copyright from empty files
 * Declare support for Python versions in setup.cfg
 * Updated from global requirements
-* Remove unused _parse_mailmap()
+* Remove unused \_parse\_mailmap()
 * Add support for python 3-<3.3
 * Remove tox locale overrides
 * Do not force log verbosity level to info
@@ -378,7 +422,7 @@
 0.5.22
 ------
 
-* Move base test case logic out of __init__.py
+* Move base test case logic out of \_\_init\_\_.py
 * Comply with pep440
 * Prevent ordereddict installation on 2.7
 * Do not pass unicode where byte strings are wanted
@@ -386,8 +430,8 @@
 * Get rid of PyPI URL override in integration test
 * Add a test for command registration
 * Switch away from tearDown for BaseTests
-* Fix test_changelog when git isn't globally setup
-* Rework run_shell_command
+* Fix test\_changelog when git isn't globally setup
+* Rework run\_shell\_command
 * Update tox config to use latest upgrades
 * Add a hint for users who don't have git installed
 * Add pypy to tox.ini
@@ -403,16 +447,16 @@
 0.5.21
 ------
 
-* Replace setuptools_git with a smarter approach
+* Replace setuptools\_git with a smarter approach
 * Clean up some style warnings
 * Consume the OpenStack mirror by default
 * Correct typo
 * Improve AUTHORS file generation
-* Ensure _run_shell_command always returns same type
+* Ensure \_run\_shell\_command always returns same type
 * Hierarchical sphinx API documentation generation
 * Add support for classmethod console scripts
-* Add skip_pip_install to setup.cfg
-* Remove missing_reuqires optimization
+* Add skip\_pip\_install to setup.cfg
+* Remove missing\_reuqires optimization
 * Use the same logic everywhere for requirements files
 
 0.5.20
@@ -423,14 +467,14 @@
 * Install jeepyb and requirements from REPODIR
 * Stop trying to install old pip and setuptools
 * Add support for globbing in data files
-* Revert include_package_data change
-* Also patch easy_install script creation
+* Revert include\_package\_data change
+* Also patch easy\_install script creation
 * Loop over test output for better readability
 * Add more documentation
 * We force installs via pip, we should declare it
 * Fix python 3.3 tests
-* Replace entry_points console_scripts
-* Fix integer_types type under python 3
+* Replace entry\_points console\_scripts
+* Fix integer\_types type under python 3
 * Remove the need to specify the pbr hook
 * Move d2to1 more into the source tree
 * Set defaults directly in option processing
@@ -477,7 +521,7 @@
 0.5.15
 ------
 
-* Use pip instead of easy_install for installation
+* Use pip instead of easy\_install for installation
 * Skip git-checkout related tests when .git is missing
 * Refactor hooks file
 
@@ -489,7 +533,7 @@
 0.5.12
 ------
 
-* Explicitly install install_requires
+* Explicitly install install\_requires
 * More python3 compatibility
 * python3: Use six everywhere
 * Add vim and emacs files to .gitignore
@@ -502,7 +546,7 @@
 
 * Fix author and changelog skipping
 * Fix doc autoindexing
-* Changed _get_git_directory() to use git itself
+* Changed \_get\_git\_directory() to use git itself
 * python3: Python3.x compatibility
 * Cosmetic doc fixes
 * Make parse errors meaningful
@@ -529,7 +573,7 @@
 0.5.6
 -----
 
-* Using __file__ was getting the wrong location
+* Using \_\_file\_\_ was getting the wrong location
 * Add support for configuring pbr sphinx options
 * Add support for warnings=errors
 * Fix authors generation from co-authored-by
@@ -554,7 +598,7 @@
 * Put stdout capture in the base test class
 * Amended README testing instructions
 * Update README with test running instructions
-* Move setup_requires to setup_requires_dist
+* Move setup\_requires to setup\_requires\_dist
 * Move sphinx to test-reuqirements
 * Deal with Sphinx import ordering
 * Add a better todo comment
@@ -569,7 +613,7 @@
 * Fix things up to work with nova
 * Split out oslo.packaging
 * Fix two minor style things
-* Fixes #20. Make sure the manifest_maker monkeypatch only occurs once and 
that it gets all its required locals encapsulated. This is why I hate any sort 
of monkey-patching, but it appears to be the only way to get this feature 
working
+* Fixes #20. Make sure the manifest\_maker monkeypatch only occurs once and 
that it gets all its required locals encapsulated. This is why I hate any sort 
of monkey-patching, but it appears to be the only way to get this feature 
working
 * Fix 'except as' statements that were breaking things in Python 2.5
 * Somehow neglected to include extra-file.txt used in the test for #15. Also 
moved the info log message that was causing othere tests to fail to only appear 
when commands are run that actually affect the manifest generation
 * Yet another Python 2.5 fix; I really ought to just set up my own 2.5 
installation
@@ -577,9 +621,9 @@
 * Adds six.py and makes the necessary tweaks to improve support for using 
d2to1 natively across Python versions
 * Fix 'except as' statements that were breaking things in Python 2.5
 * Somehow neglected to include extra-file.txt used in the test for #15. Also 
moved the info log message that was causing othere tests to fail to only appear 
when commands are run that actually affect the manifest generation
-* Adds support for the tests_require keyword from setuptools.  Tested by 
eating our own dogfood -- ./setup.py test now works for d2to1's own setup
+* Adds support for the tests\_require keyword from setuptools.  Tested by 
eating our own dogfood -- ./setup.py test now works for d2to1's own setup
 * support test suite and test tests-require
-* Patch manifest_maker to support extra_files--this is really the only way I 
can see to do this at all sensibly
+* Patch manifest\_maker to support extra\_files--this is really the only way I 
can see to do this at all sensibly
 * This is a test that should really work to test this feature
 * openstack.common.setup: fails to get version from git
 * Use oslo-config-2013.1b3
@@ -590,7 +634,7 @@
 * Remove openstack.common.db.common
 * Add missing DBDuplicateEntry
 * Import sqlalchemy session/models/utils
-* Implements import_group
+* Implements import\_group
 * Fix Pep8 Warning
 * Fixes "is not", "not in" syntax usage
 * setup: count revs for revno if there are no tags
@@ -599,8 +643,8 @@
 * Use revno and git sha for pre-release versioning
 * Add env var version override for packagers
 * trivial pep whitespace fix
-* Remove write_requirements
-* Rolling back to previous version of resolve_name; it's possible this can 
fail in the presence of a broken namespace package, but I want to make sure 
that's the case before trying to fix it
+* Remove write\_requirements
+* Rolling back to previous version of resolve\_name; it's possible this can 
fail in the presence of a broken namespace package, but I want to make sure 
that's the case before trying to fix it
 * Stop using no longer valid -E option for pip
 * oops - now compatible with python 3
 * use regexp to parse the mailmap
@@ -621,7 +665,7 @@
 * Add deprecated --logfile common opt
 * Allow nova and others to override some logging defaults
 * Fixing the trim for ListOp when reading from config file
-* Fix set_default() with boolean CLI options
+* Fix set\_default() with boolean CLI options
 * Rename utils.py to strutils.py
 * Improve cfg's argparse sub-parsers support
 * Make project pyflakes clean
@@ -630,15 +674,15 @@
 * Hide the GroupAttr conf and group attributes
 * Fix broken --help with CommonConfigOpts
 * updating sphinx documentation
-* Don't reference argparse._StoreAction
+* Don't reference argparse.\_StoreAction
 * Fix minor coding style issue
 * Remove ConfigCliParser class
 * Add support for positional arguments
 * Use stock argparse behaviour for optional args
 * Use stock argparse --usage behaviour
 * Use stock argparse --version behaviour
-* Remove add_option() method
-* Completely remove cfg's disable_interspersed_args()
+* Remove add\_option() method
+* Completely remove cfg's disable\_interspersed\_args()
 * argparse support for cfg
 * Remove openstack.common.config and extensions
 * Fixes setup compatibility issue on Windows
@@ -649,41 +693,41 @@
 * cfg: fix required if option has a dash
 * Fix a couple of file handle leaks, using with statements
 * Ignore the stackforge jenkins email address
-* Extracted parse_host_port into network_utils
+* Extracted parse\_host\_port into network\_utils
 * Add the rpc service and delete manager
 * Some changes I made weeks ago but forgot to commit
 * Added a method for parsing host:port pairs
 * Add basic periodic task infrastructure
 * Move manager.py and service.py into common
 * cfg: clean up None value handling
-* Allow set_default and set_override to use None
+* Allow set\_default and set\_override to use None
 * Tilde expansion for --config-file and --config-dir
 * Add multiple-driver support to the notifier api
 * Fix errors reported by pyflakes
-* Add import_opt() method to ConfigOpts
+* Add import\_opt() method to ConfigOpts
 * Remove unused imports
-* Modifies _is_opt_registered fcn to check for duplicate opts
+* Modifies \_is\_opt\_registered fcn to check for duplicate opts
 * fix bug lp:1019348,update openstack-common to support pep8 1.3
 * cfg: allow empty config values
-* Add SKIP_GENERATE_AUTHORS option to setup.py
-* Add SKIP_WRITE_GIT_CHANGELOG option to setup.py
+* Add SKIP\_GENERATE\_AUTHORS option to setup.py
+* Add SKIP\_WRITE\_GIT\_CHANGELOG option to setup.py
 * Fix missing gettextutils in several modules
 * Fix up pre-versioning based on testing in glance
 * cfg: Fix typo in documentation
 * Fix mailmap
-* Split read_versioninfo into a method
+* Split read\_versioninfo into a method
 * Add common logging and notification
 * Add support for tag based versioning
 * Skip argparse when injecting requirements
 * Update common code to support pep 1.3. bug 1014216
-* Add autodoc generation to the build_sphinx command
+* Add autodoc generation to the build\_sphinx command
 * Use 'is not None' instead of '!= None'
 * Adds support for bol and eol spaces to ini files
 * Add support to include config aliases
 * Create testutils with skip decorators
 * cfg: add a global CONF object
 * cfg: add generators for iterating over all options
-* cfg: move constructor args to __call__() args
+* cfg: move constructor args to \_\_call\_\_() args
 * Added support for proper bare URLs
 * Backslash continuation removal (common folsom-1)
 * Alphabetize imports in openstack/common/cfg.py
@@ -693,26 +737,26 @@
 * cfg: use a list comprehension instead of map()
 * Encapsulate common sdist actions into a cmdclass
 * Truly handle mailmap entries for all combinations
-* New ConfigOpts.find_file() for locating conf files
+* New ConfigOpts.find\_file() for locating conf files
 * Handle authors existed before VCS was around
 * Support for directory source of config files
 * Provide file extension when when looking for files
 * Some refactoring of the cfg cache
 * Add caching to openstack.common.cfg
 * Add AUTHORS generation function
-* Change behavior in utils.import_object()
-* Move auth_str_equal() to a new authutils module
+* Change behavior in utils.import\_object()
+* Move auth\_str\_equal() to a new authutils module
 * Create openstack.common.timeutils
 * Typofix, OptionGroup should be OptGroup
 * Use absolute import for iniparser
 * Make 'yes' also a true boolean
 * Finish implementing MultiStrOpt
 * Avoid leaking secrets into config logging
-* Add auth_str_equal() to common utils
+* Add auth\_str\_equal() to common utils
 * Fix bug 954488
 * fix restructuredtext formatting in docstrings
-* Add ConfigOpts.print_help()
-* Fixes a bug where entry_points in a setup.py are blanked out if there are no 
entry points defined in setup.cfg
+* Add ConfigOpts.print\_help()
+* Fixes a bug where entry\_points in a setup.py are blanked out if there are 
no entry points defined in setup.cfg
 * Promote more complete support for ISO 8601 time
 * cfg: fix a small comment typo
 * Several changes that I accidentally committed to d2to1's old repository. See 
the changes to the changelog for more details
@@ -731,18 +775,18 @@
 * Add support to cfg for disabling interspersed args
 * Add new cfg module
 * import should not return an instance of the class
-* use isinstance and types.*
-* make fix_path a real function so it can be mock'd
+* use isinstance and types.\*
+* make fix\_path a real function so it can be mock'd
 * remove unused imports
 * merge in upstream
 * port execute and utcnow functions from nova
-* pull parse_mailmap str_dict_replace from nova
+* pull parse\_mailmap str\_dict\_replace from nova
 * reog from import merge
 * Rajaram/Vinkesh|Default xmlns for extension serialization can be overriden, 
added default factory for extension middleware
 * Rajaram/Vinkesh | Copied tests for wsgi from nova. Added default 
content/accept types in Request which can be overridden by projects. Copied 
tests for XML serialization of Extension Controller's action from nova
 * Rajaram/Vinkesh | Fixed the extension bug where custom collection actions' 
routes  in resource extension were not getting registered
 * Vinkesh/Rajaram|Added nova's extension framework into common and tests for it
-* Rajaram|renamed AppBaseException to OpenstackException and 
app_config_dir_name to config_dir as per jaypipes' feedback
+* Rajaram|renamed AppBaseException to OpenstackException and 
app\_config\_dir\_name to config\_dir as per jaypipes' feedback
 * Rajaram/Vinkesh | Removed references to Glance in code
 * Adding syslog support
 * Add some more generic middleware, request context, utils, and versioning. 
Add basic template for server binary
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pbr-2.0.0/PKG-INFO new/pbr-3.1.1/PKG-INFO
--- old/pbr-2.0.0/PKG-INFO      2017-03-01 04:32:42.000000000 +0100
+++ new/pbr-3.1.1/PKG-INFO      2017-06-21 11:44:14.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: pbr
-Version: 2.0.0
+Version: 3.1.1
 Summary: Python Build Reasonableness
 Home-page: http://docs.openstack.org/developer/pbr/
 Author: OpenStack
@@ -42,6 +42,7 @@
         * Documentation: http://docs.openstack.org/developer/pbr
         * Source: http://git.openstack.org/cgit/openstack-dev/pbr
         * Bugs: http://bugs.launchpad.net/pbr
+        * Change Log: https://docs.openstack.org/developer/pbr/history.html
         
         .. _d2to1: https://pypi.python.org/pypi/d2to1
         .. _distutils2: https://pypi.python.org/pypi/Distutils2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pbr-2.0.0/README.rst new/pbr-3.1.1/README.rst
--- old/pbr-2.0.0/README.rst    2017-03-01 04:31:14.000000000 +0100
+++ new/pbr-3.1.1/README.rst    2017-06-21 11:41:48.000000000 +0200
@@ -34,6 +34,7 @@
 * Documentation: http://docs.openstack.org/developer/pbr
 * Source: http://git.openstack.org/cgit/openstack-dev/pbr
 * Bugs: http://bugs.launchpad.net/pbr
+* Change Log: https://docs.openstack.org/developer/pbr/history.html
 
 .. _d2to1: https://pypi.python.org/pypi/d2to1
 .. _distutils2: https://pypi.python.org/pypi/Distutils2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pbr-2.0.0/doc/source/conf.py 
new/pbr-3.1.1/doc/source/conf.py
--- old/pbr-2.0.0/doc/source/conf.py    2017-03-01 04:31:14.000000000 +0100
+++ new/pbr-3.1.1/doc/source/conf.py    2017-06-21 11:41:48.000000000 +0200
@@ -8,8 +8,14 @@
 
 # Add any Sphinx extension module names here, as strings. They can be
 # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
-extensions = ['sphinx.ext.autodoc',
-              'oslosphinx']
+extensions = ['sphinx.ext.autodoc']
+# make oslosphinx optional to not increase the needed dependencies
+try:
+    import oslosphinx
+except ImportError:
+    pass
+else:
+    extensions.append('oslosphinx')
 
 # autodoc generation is a bit aggressive and a nuisance when doing heavy
 # text edit cycles.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pbr-2.0.0/doc/source/history.rst 
new/pbr-3.1.1/doc/source/history.rst
--- old/pbr-2.0.0/doc/source/history.rst        1970-01-01 01:00:00.000000000 
+0100
+++ new/pbr-3.1.1/doc/source/history.rst        2017-06-21 11:41:48.000000000 
+0200
@@ -0,0 +1,5 @@
+=================
+ Release History
+=================
+
+.. include:: ../../ChangeLog
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pbr-2.0.0/doc/source/index.rst 
new/pbr-3.1.1/doc/source/index.rst
--- old/pbr-2.0.0/doc/source/index.rst  2017-03-01 04:31:14.000000000 +0100
+++ new/pbr-3.1.1/doc/source/index.rst  2017-06-21 11:41:48.000000000 +0200
@@ -201,6 +201,7 @@
     keywords =
         setup
         distutils
+
     [files]
     packages =
         pbr
@@ -209,18 +210,19 @@
         etc/init =
             pbr.packaging.conf
             pbr.version.conf
+
     [entry_points]
     console_scripts =
         pbr = pbr.cmd:main
     pbr.config.drivers =
         plain = pbr.cfg.driver:Plain
 
-pbr provides its own section in these documents, ostensibly called `pbr`. Most
-other sections are provided by setuptools and may influence either the build
-itself or the output of various `setuptools commands`__. The remaining sections
-are provided by libraries that provide setuptools extensions, such as
-`extract_mesages` (provided by `Babel`__) or `sphinx_build` (provided by
-`Sphinx`__). Some of these are described below.
+`pbr` provides its own section in these documents, ostensibly called ``pbr``,
+and provides a custom version of Sphinx's ``build_sphinx`` section. Most other
+sections are provided by setuptools and may influence either the build itself
+or the output of various `setuptools commands`__. The remaining sections are
+provided by libraries that provide setuptools extensions, such as
+``extract_mesages`` (provided by `Babel`__). Some of these are described below.
 
 __ 
https://setuptools.readthedocs.io/en/latest/setuptools.html#command-reference
 __ http://babel.pocoo.org/en/latest/setup.html
@@ -248,57 +250,82 @@
 using three fundamental keys: ``packages``, ``namespace_packages``, and
 ``data_files``.
 
-``packages`` is a list of top-level packages that should be installed. The
-behavior of packages is similar to ``setuptools.find_packages`` in that it
-recurses the python package hierarchy below the given top level and installs
-all of it. If ``packages`` is not specified, it defaults to the value of the
-``name`` field given in the ``[metadata]`` section.
-
-``namespace_packages`` is the same, but is a list of packages that provide
-namespace packages.
-
-``data_files`` lists files to be installed. The format is an indented block
-that contains key value pairs which specify target directory and source file
-to install there. More than one source file for a directory may be indicated
-with a further indented list. Source files are stripped of leading directories.
-Additionally, `pbr` supports a simple file globbing syntax for installing
-entire directory structures, thus::
-
- [files]
- data_files =
-     etc/pbr = etc/pbr/*
-     etc/neutron =
-         etc/api-paste.ini
-         etc/dhcp-agent.ini
-     etc/init.d = neutron.init
-
-will result in `/etc/neutron` containing `api-paste.ini` and `dhcp-agent.ini`,
-both of which pbr will expect to find in the `etc` directory in the root of
-the source tree. Additionally, `neutron.init` from that dir will be installed
-in `/etc/init.d`. All of the files and directories located under `etc/pbr` in
-the source tree will be installed into `/etc/pbr`.
-
-Note that this behavior is relative to the effective root of the environment
-into which the packages are installed, so depending on available permissions
-this could be the actual system-wide `/etc` directory or just a top-level `etc`
-subdirectory of a virtualenv.
+``packages``
+
+  A list of top-level packages that should be installed. The behavior of
+  packages is similar to ``setuptools.find_packages`` in that it recurses the
+  python package hierarchy below the given top level and installs all of it. If
+  ``packages`` is not specified, it defaults to the value of the ``name`` field
+  given in the ``[metadata]`` section.
+
+``namespace_packages``
+
+  Similar to ``packages``, but is a list of packages that provide namespace
+  packages.
+
+``data_files``
+
+  A list of files to be installed. The format is an indented block that
+  contains key value pairs which specify target directory and source file to
+  install there. More than one source file for a directory may be indicated
+  with a further indented list. Source files are stripped of leading
+  directories.  Additionally, `pbr` supports a simple file globbing syntax for
+  installing entire directory structures, thus::
+
+   [files]
+   data_files =
+       etc/pbr = etc/pbr/*
+       etc/neutron =
+           etc/api-paste.ini
+           etc/dhcp-agent.ini
+       etc/init.d = neutron.init
+
+  will result in `/etc/neutron` containing `api-paste.ini` and 
`dhcp-agent.ini`,
+  both of which pbr will expect to find in the `etc` directory in the root of
+  the source tree. Additionally, `neutron.init` from that dir will be installed
+  in `/etc/init.d`. All of the files and directories located under `etc/pbr` in
+  the source tree will be installed into `/etc/pbr`.
+
+  Note that this behavior is relative to the effective root of the environment
+  into which the packages are installed, so depending on available permissions
+  this could be the actual system-wide `/etc` directory or just a top-level
+  `etc` subdirectory of a virtualenv.
 
 pbr
 ~~~
 
-The ``pbr`` section controls pbr specific options and behaviours.
+The ``pbr`` section controls `pbr` specific options and behaviours.
+
+``autodoc_tree_index_modules``
+
+  A boolean option controlling whether `pbr` should generate an index of
+  modules using `sphinx-apidoc`. By default, all files except `setup.py` are
+  included, but this can be overridden using the ``autodoc_tree_excludes``
+  option.
+
+``autodoc_tree_excludes``
+
+  A list of modules to exclude when building documentation using
+  `sphinx-apidoc`. Defaults to ``[setup.py]``. Refer to the `sphinx-apidoc man
+  page`_ for more information.
+
+``autodoc_index_modules``
+
+  A boolean option controlling whether `pbr` should itself generates
+  documentation for Python modules of the project. By default, all found Python
+  modules are included; some of them can be excluded by listing them in
+  ``autodoc_exclude_modules``.
+
+``autodoc_exclude_modules``
 
-The ``autodoc_tree_index_modules`` is a boolean option controlling whether pbr
-should generate an index of modules using ``sphinx-apidoc``. By default,
-`setup.py` is excluded. The list of excluded modules can be specified with the
-``autodoc_tree_excludes`` option. See the `sphinx-apidoc man page`_ for more
-information.
-
-The ``autodoc_index_modules`` is a boolean option controlling whether `pbr`
-should itself generates documentation for Python modules of the project. By
-default, all found Python modules are included; some of them can be excluded
-by listing them in ``autodoc_exclude_modules``. This list of modules can
-contains `fnmatch` style pattern (e.g. `myapp.tests.*`) to exclude some 
modules.
+  A list of modules to exclude when building module documentation using `pbr`.
+  `fnmatch` style pattern (e.g. `myapp.tests.*`) can be used.
+
+``api_doc_dir``
+
+  A subdirectory inside the ``build_sphinx.source_dir`` where
+  auto-generated API documentation should be written, if
+  ``autodoc_index_modules`` is set to True. Defaults to ``"api"``.
 
 .. note::
 
@@ -310,6 +337,69 @@
    set. See the `Sphinx build configuration file`_ documentation for more
    information on configuring Sphinx.
 
+.. versionchanged:: 2.0
+
+   The ``pbr`` section used to take a ``warnerrors`` option that would enable
+   the ``-W`` (Turn warnings into errors.) option when building Sphinx. This
+   feature was broken in 1.10 and was removed in pbr 2.0 in favour of the
+   ``[build_sphinx] warning-is-error`` provided in Sphinx 1.5+.
+
+build_sphinx
+~~~~~~~~~~~~
+
+The ``build_sphinx`` section is a version of the ``build_sphinx`` setuptools
+plugin provided with Sphinx. This plugin extends the original plugin to add the
+following:
+
+- Automatic generation of module documentation using the apidoc__ tool
+
+- Automatic configuration of the `project`, `version` and `release` settings
+  using information from `pbr` itself
+
+- Support for multiple builders using the ``builders`` configuration option
+
+  .. note::
+
+     Sphinx 1.6 adds support for multiple builders using the default `builder`
+     option. You should refer to this file for more information.
+
+The version of ``build_sphinx`` provided by `pbr` provides a single additional
+option.
+
+``builders``
+
+  A space or comma separated list of builders to run. For example, to build
+  both HTML and man page documentation, you would define the following in your
+  `setup.cfg`:
+
+  .. code-block:: ini
+
+      [build_sphinx]
+      builders = html,man
+      source-dir = doc/source
+      build-dir = doc/build
+      all-files = 1
+
+``source_dir``
+
+  The path to the source directory where the Sphinx documentation tree
+  is.
+
+For information on the remaining options, refer to the `Sphinx
+documentation`__. In addition, the ``autodoc_index_modules``,
+``autodoc_tree_index_modules``, ``autodoc_exclude_modules`` and
+``autodoc_tree_excludes`` options in the ``pbr`` section will affect the output
+of the automatic module documentation generation.
+
+.. versionchanged:: 3.0
+
+   The ``build_sphinx`` plugin used to default to building both HTML and man
+   page output. This is no longer the case, and you should explicitly set
+   ``builders`` to ``html man`` if you wish to retain this behavior.
+
+__ http://www.sphinx-doc.org/en/stable/man/sphinx-apidoc.html
+__ http://www.sphinx-doc.org/en/stable/setuptools.html
+
 entry_points
 ~~~~~~~~~~~~
 
@@ -390,6 +480,53 @@
     testing =
         quux:python_version=='2.7'
 
+
+Testing
+-------
+
+`pbr` overrides the ``setuptools`` hook ``test`` (i.e. ``setup.py test``). The
+following sequence is followed:
+
+#. If a ``.testr.conf`` file exists and `testrepository
+   <https://pypi.python.org/pypi/testrepository>`__ is installed, `pbr`
+   will use it as the test runner.  See the ``testr`` documentation
+   for more details.
+
+   .. note::
+
+     This is separate to ``setup.py testr`` (note the extra ``r``) which
+     is provided directly by the ``testrepository`` package.  Be careful
+     as there is some overlap of command arguments.
+
+#. Although deprecated, if ``[nosetests]`` is defined in ``setup.cfg``
+   and `nose <http://nose.readthedocs.io/en/latest/>`__ is installed,
+   the ``nose`` runner will be used.
+
+#. In other cases no override will be installed and the ``test``
+   command will revert to `setuptools
+   
<http://setuptools.readthedocs.io/en/latest/setuptools.html#test-build-package-and-run-a-unittest-suite>`__.
+
+A typical usage would be in ``tox.ini`` such as::
+
+  [tox]
+  minversion = 2.0
+  skipsdist = True
+  envlist = py33,py34,py35,py26,py27,pypy,pep8,docs
+
+  [testenv]
+  usedevelop = True
+  setenv =
+    VIRTUAL_ENV={envdir}
+    CLIENT_NAME=pbr
+  deps = .
+       -r{toxinidir}/test-requirements.txt
+  commands =
+    python setup.py test --testr-args='{posargs}'
+
+The argument ``--coverage`` will set ``PYTHON`` to ``coverage run`` to
+produce a coverage report.  ``--coverage-package-name`` can be used to
+modify or narrow the packages traced.
+
 Additional Docs
 ===============
 
@@ -401,6 +538,7 @@
    testing
    compatibility
    api/modules
+   history
 
 Indices and tables
 ==================
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pbr-2.0.0/pbr/builddoc.py 
new/pbr-3.1.1/pbr/builddoc.py
--- old/pbr-2.0.0/pbr/builddoc.py       2017-03-01 04:31:14.000000000 +0100
+++ new/pbr-3.1.1/pbr/builddoc.py       2017-06-21 11:41:48.000000000 +0200
@@ -17,9 +17,7 @@
 from distutils import log
 import fnmatch
 import os
-import pkg_resources
 import sys
-import warnings
 
 try:
     import cStringIO
@@ -29,7 +27,6 @@
 try:
     from sphinx import apidoc
     from sphinx import application
-    from sphinx import config
     from sphinx import setup_command
 except Exception as e:
     # NOTE(dhellmann): During the installation of docutils, setuptools
@@ -66,16 +63,19 @@
 
 class LocalBuildDoc(setup_command.BuildDoc):
 
-    builders = ['html', 'man']
+    builders = ['html']
     command_name = 'build_sphinx'
     sphinx_initialized = False
 
     def _get_source_dir(self):
         option_dict = self.distribution.get_option_dict('build_sphinx')
+        pbr_option_dict = self.distribution.get_option_dict('pbr')
+        _, api_doc_dir = pbr_option_dict.get('api_doc_dir', (None, 'api'))
         if 'source_dir' in option_dict:
-            source_dir = os.path.join(option_dict['source_dir'][1], 'api')
+            source_dir = os.path.join(option_dict['source_dir'][1],
+                                      api_doc_dir)
         else:
-            source_dir = 'doc/source/api'
+            source_dir = 'doc/source/' + api_doc_dir
         if not os.path.exists(source_dir):
             os.makedirs(source_dir)
         return source_dir
@@ -134,20 +134,12 @@
             confoverrides['release'] = self.release
         if self.today:
             confoverrides['today'] = self.today
-        sphinx_config = config.Config(self.config_dir, 'conf.py', {}, [])
-        sphinx_ver = pkg_resources.parse_version(
-            pkg_resources.get_distribution("sphinx").version)
-        if sphinx_ver > pkg_resources.parse_version('1.2.3'):
-            sphinx_config.init_values(warnings.warn)
-        else:
-            sphinx_config.init_values()
-        if self.builder == 'man' and len(
-                getattr(sphinx_config, 'man_pages', '')) == 0:
-            return
         if self.sphinx_initialized:
             confoverrides['suppress_warnings'] = [
                 'app.add_directive', 'app.add_role',
-                'app.add_generic_role', 'app.add_node']
+                'app.add_generic_role', 'app.add_node',
+                'image.nonlocal_uri',
+            ]
         app = application.Sphinx(
             self.source_dir, self.config_dir,
             self.builder_target_dir, self.doctree_dir,
@@ -194,6 +186,14 @@
                         "autodoc_exclude_modules",
                         [None, ""])[1].split()))
 
+        # TODO(stephenfin): Deprecate this functionality once we depend on
+        # Sphinx 1.6, which includes a similar feature, in g-r
+        # https://github.com/sphinx-doc/sphinx/pull/3476
+        self.finalize_options()
+        if hasattr(self, "builder_target_dirs"):
+            # Sphinx >= 1.6.1
+            return setup_command.BuildDoc.run(self)
+        # Sphinx < 1.6
         for builder in self.builders:
             self.builder = builder
             self.finalize_options()
@@ -234,8 +234,3 @@
         # handle Sphinx < 1.5.0
         if not hasattr(self, 'warning_is_error'):
             self.warning_is_error = False
-
-
-class LocalBuildLatex(LocalBuildDoc):
-    builders = ['latex']
-    command_name = 'build_sphinx_latex'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pbr-2.0.0/pbr/git.py new/pbr-3.1.1/pbr/git.py
--- old/pbr-2.0.0/pbr/git.py    2017-03-01 04:31:14.000000000 +0100
+++ new/pbr-3.1.1/pbr/git.py    2017-06-21 11:41:48.000000000 +0200
@@ -143,6 +143,26 @@
     return None
 
 
+def _clean_changelog_message(msg):
+    """Cleans any instances of invalid sphinx wording.
+
+    This escapes/removes any instances of invalid characters
+    that can be interpreted by sphinx as a warning or error
+    when translating the Changelog into an HTML file for
+    documentation building within projects.
+
+    * Escapes '_' which is interpreted as a link
+    * Escapes '*' which is interpreted as a new line
+    * Escapes '`' which is interpreted as a literal
+    """
+
+    msg = msg.replace('*', '\*')
+    msg = msg.replace('_', '\_')
+    msg = msg.replace('`', '\`')
+
+    return msg
+
+
 def _iter_changelog(changelog):
     """Convert a oneline log iterator to formatted strings.
 
@@ -166,6 +186,7 @@
         if not msg.startswith("Merge "):
             if msg.endswith("."):
                 msg = msg[:-1]
+            msg = _clean_changelog_message(msg)
             yield current_release, "* %(msg)s\n" % dict(msg=msg)
         first_line = False
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pbr-2.0.0/pbr/hooks/commands.py 
new/pbr-3.1.1/pbr/hooks/commands.py
--- old/pbr-2.0.0/pbr/hooks/commands.py 2017-03-01 04:31:14.000000000 +0100
+++ new/pbr-3.1.1/pbr/hooks/commands.py 2017-06-21 11:41:48.000000000 +0200
@@ -49,7 +49,6 @@
 
         if packaging.have_sphinx():
             self.add_command('pbr.builddoc.LocalBuildDoc')
-            self.add_command('pbr.builddoc.LocalBuildLatex')
 
         if os.path.exists('.testr.conf') and packaging.have_testr():
             # There is a .testr.conf file. We want to use it.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pbr-2.0.0/pbr/packaging.py 
new/pbr-3.1.1/pbr/packaging.py
--- old/pbr-2.0.0/pbr/packaging.py      2017-03-01 04:31:14.000000000 +0100
+++ new/pbr-3.1.1/pbr/packaging.py      2017-06-21 11:41:49.000000000 +0200
@@ -102,6 +102,10 @@
         if (not line.strip()) or line.startswith('#'):
             continue
 
+        # Ignore index URL lines
+        if re.match(r'^\s*(-i|--index-url|--extra-index-url).*', line):
+            continue
+
         # Handle nested requirements files such as:
         # -r other-requirements.txt
         if line.startswith('-r'):
@@ -282,12 +286,15 @@
     import wsgiref.simple_server as wss
 
     my_ip = socket.gethostbyname(socket.gethostname())
+
     parser = argparse.ArgumentParser(
         description=%(import_target)s.__doc__,
         formatter_class=argparse.ArgumentDefaultsHelpFormatter,
-        usage='%%(prog)s [-h] [--port PORT] -- [passed options]')
+        usage='%%(prog)s [-h] [--port PORT] [--host IP] -- [passed options]')
     parser.add_argument('--port', '-p', type=int, default=8000,
                         help='TCP port to listen on')
+    parser.add_argument('--host', '-b', default='',
+                        help='IP to bind the server to')
     parser.add_argument('args',
                         nargs=argparse.REMAINDER,
                         metavar='-- [passed options]',
@@ -301,11 +308,11 @@
         else:
             parser.error("unrecognized arguments: %%s" %% ' '.join(args.args))
     sys.argv[1:] = args.args
-    server = wss.make_server('', args.port, %(invoke_target)s())
+    server = wss.make_server(args.host, args.port, %(invoke_target)s())
 
     print("*" * 80)
     print("STARTING test server %(module_name)s.%(invoke_target)s")
-    url = "http://%%s:%%d/"; %% (my_ip, server.server_port)
+    url = "http://%%s:%%d/"; %% (server.server_name, server.server_port)
     print("Available at %%s" %% url)
     print("DANGER! For testing only, do not use in production")
     print("*" * 80)
@@ -536,11 +543,9 @@
     # Import the symbols from their new home so the package API stays
     # compatible.
     LocalBuildDoc = builddoc.LocalBuildDoc
-    LocalBuildLatex = builddoc.LocalBuildLatex
 except ImportError:
     _have_sphinx = False
     LocalBuildDoc = None
-    LocalBuildLatex = None
 
 
 def have_sphinx():
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pbr-2.0.0/pbr/testr_command.py 
new/pbr-3.1.1/pbr/testr_command.py
--- old/pbr-2.0.0/pbr/testr_command.py  2017-03-01 04:31:14.000000000 +0100
+++ new/pbr-3.1.1/pbr/testr_command.py  2017-06-21 11:41:48.000000000 +0200
@@ -26,16 +26,18 @@
 # license you chose for the specific language governing permissions and
 # limitations under that license.
 
-"""setuptools/distutils commands to run testr via setup.py
+"""setuptools/distutils command to run testr via setup.py
+
+PBR will hook in the Testr class to provide "setup.py test" when
+.testr.conf is present in the repository (see pbr/hooks/commands.py).
+
+If we are activated but testrepository is not installed, we provide a
+sensible error.
+
+You can pass --coverage which will also export PYTHON='coverage run
+--source <your package>' and automatically combine the coverage from
+each testr backend test runner after the run completes.
 
-Currently provides 'testr' which runs tests using testr. You can pass
---coverage which will also export PYTHON='coverage run --source <your package>'
-and automatically combine the coverage from each testr backend test runner
-after the run completes.
-
-To use, just use setuptools/distribute and depend on testr, and it should be
-picked up automatically (as the commands are exported in the testrepository
-package metadata.
 """
 
 from distutils import cmd
@@ -133,6 +135,7 @@
         logger.debug("_coverage_after called")
         os.system("coverage combine")
         os.system("coverage html -d ./cover %s" % self.omit)
+        os.system("coverage xml -o ./cover/coverage.xml %s" % self.omit)
 
 
 class TestrFake(cmd.Command):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pbr-2.0.0/pbr/tests/test_packaging.py 
new/pbr-3.1.1/pbr/tests/test_packaging.py
--- old/pbr-2.0.0/pbr/tests/test_packaging.py   2017-03-01 04:31:14.000000000 
+0100
+++ new/pbr-3.1.1/pbr/tests/test_packaging.py   2017-06-21 11:41:48.000000000 
+0200
@@ -270,8 +270,8 @@
 
     def setUp(self):
         super(TestPackagingInGitRepoWithCommit, self).setUp()
-        repo = self.useFixture(TestRepo(self.package_dir))
-        repo.commit()
+        self.repo = self.useFixture(TestRepo(self.package_dir))
+        self.repo.commit()
 
     def test_authors(self):
         self.run_setup('sdist', allow_fail=False)
@@ -287,6 +287,29 @@
         # One commit, something should be in the ChangeLog list
         self.assertNotEqual(body, '')
 
+    def test_changelog_handles_astrisk(self):
+        self.repo.commit(message_content="Allow *.openstack.org to work")
+        self.run_setup('sdist', allow_fail=False)
+        with open(os.path.join(self.package_dir, 'ChangeLog'), 'r') as f:
+            body = f.read()
+        self.assertIn('\*', body)
+
+    def test_changelog_handles_dead_links_in_commit(self):
+        self.repo.commit(message_content="See os_ for to_do about qemu_.")
+        self.run_setup('sdist', allow_fail=False)
+        with open(os.path.join(self.package_dir, 'ChangeLog'), 'r') as f:
+            body = f.read()
+        self.assertIn('os\_', body)
+        self.assertIn('to\_do', body)
+        self.assertIn('qemu\_', body)
+
+    def test_changelog_handles_backticks(self):
+        self.repo.commit(message_content="Allow `openstack.org` to `work")
+        self.run_setup('sdist', allow_fail=False)
+        with open(os.path.join(self.package_dir, 'ChangeLog'), 'r') as f:
+            body = f.read()
+        self.assertIn('\`', body)
+
     def test_manifest_exclude_honoured(self):
         self.run_setup('sdist', allow_fail=False)
         with open(os.path.join(
@@ -463,6 +486,19 @@
             self.assertEqual(False, git._git_is_installed())
 
 
+class TestIndexInRequirements(base.BaseTestCase):
+
+    def test_index_in_requirement(self):
+        tempdir = tempfile.mkdtemp()
+        requirements = os.path.join(tempdir, 'requirements.txt')
+        with open(requirements, 'w') as f:
+            f.write('-i https://myindex.local')
+            f.write('  --index-url https://myindex.local')
+            f.write(' --extra-index-url https://myindex.local')
+        result = packaging.parse_requirements([requirements])
+        self.assertEqual([], result)
+
+
 class TestNestedRequirements(base.BaseTestCase):
 
     def test_nested_requirement(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pbr-2.0.0/pbr/tests/test_setup.py 
new/pbr-3.1.1/pbr/tests/test_setup.py
--- old/pbr-2.0.0/pbr/tests/test_setup.py       2017-03-01 04:31:14.000000000 
+0100
+++ new/pbr-3.1.1/pbr/tests/test_setup.py       2017-06-21 11:41:48.000000000 
+0200
@@ -165,7 +165,7 @@
             self.assertIn("------", changelog_contents)
             self.assertIn("Refactor hooks file", changelog_contents)
             self.assertIn(
-                "Bug fix: create_stack() fails when waiting",
+                "Bug fix: create\_stack() fails when waiting",
                 changelog_contents)
             self.assertNotIn("Refactor hooks file.", changelog_contents)
             self.assertNotIn("182feb3", changelog_contents)
@@ -179,7 +179,7 @@
             self.assertNotIn("ev)il", changelog_contents)
             self.assertNotIn("e(vi)l", changelog_contents)
             self.assertNotIn('Merge "', changelog_contents)
-            self.assertNotIn('1_foo.1', changelog_contents)
+            self.assertNotIn('1\_foo.1', changelog_contents)
 
     def test_generate_authors(self):
         author_old = u"Foo Foo <[email protected]>"
@@ -224,17 +224,29 @@
             self.assertTrue(co_author in authors)
 
 
+class _SphinxConfig(object):
+    man_pages = ['foo']
+
+
 class BaseSphinxTest(base.BaseTestCase):
 
     def setUp(self):
         super(BaseSphinxTest, self).setUp()
 
+        # setup_command requires the Sphinx instance to have some
+        # attributes that aren't set normally with the way we use the
+        # class (because we replace the constructor). Add default
+        # values directly to the class definition.
+        import sphinx.application
+        sphinx.application.Sphinx.messagelog = []
+        sphinx.application.Sphinx.statuscode = 0
+
         self.useFixture(fixtures.MonkeyPatch(
             "sphinx.application.Sphinx.__init__", lambda *a, **kw: None))
         self.useFixture(fixtures.MonkeyPatch(
             "sphinx.application.Sphinx.build", lambda *a, **kw: None))
         self.useFixture(fixtures.MonkeyPatch(
-            "sphinx.config.Config.man_pages", ['foo']))
+            "sphinx.application.Sphinx.config", _SphinxConfig))
         self.useFixture(fixtures.MonkeyPatch(
             "sphinx.config.Config.init_values", lambda *a: None))
         self.useFixture(fixtures.MonkeyPatch(
@@ -304,9 +316,8 @@
         build_doc = packaging.LocalBuildDoc(self.distr)
         build_doc.finalize_options()
 
-        self.assertEqual(2, len(build_doc.builders))
+        self.assertEqual(1, len(build_doc.builders))
         self.assertIn('html', build_doc.builders)
-        self.assertIn('man', build_doc.builders)
 
         build_doc = packaging.LocalBuildDoc(self.distr)
         build_doc.builders = ''
@@ -365,6 +376,78 @@
         self.assertEqual(["builder1", "builder2"], build_doc.builders)
 
 
+class APIAutoDocTest(base.BaseTestCase):
+
+    def setUp(self):
+        super(APIAutoDocTest, self).setUp()
+
+        # setup_command requires the Sphinx instance to have some
+        # attributes that aren't set normally with the way we use the
+        # class (because we replace the constructor). Add default
+        # values directly to the class definition.
+        import sphinx.application
+        sphinx.application.Sphinx.messagelog = []
+        sphinx.application.Sphinx.statuscode = 0
+
+        self.useFixture(fixtures.MonkeyPatch(
+            "sphinx.application.Sphinx.__init__", lambda *a, **kw: None))
+        self.useFixture(fixtures.MonkeyPatch(
+            "sphinx.application.Sphinx.build", lambda *a, **kw: None))
+        self.useFixture(fixtures.MonkeyPatch(
+            "sphinx.application.Sphinx.config", _SphinxConfig))
+        self.useFixture(fixtures.MonkeyPatch(
+            "sphinx.config.Config.init_values", lambda *a: None))
+        self.useFixture(fixtures.MonkeyPatch(
+            "sphinx.config.Config.__init__", lambda *a: None))
+        from distutils import dist
+        self.distr = dist.Distribution()
+        self.distr.packages = ("fake_package",)
+        self.distr.command_options["build_sphinx"] = {
+            "source_dir": ["a", "."]}
+        self.sphinx_options = self.distr.command_options["build_sphinx"]
+        pkg_fixture = fixtures.PythonPackage(
+            "fake_package", [("fake_module.py", b""),
+                             ("another_fake_module_for_testing.py", b""),
+                             ("fake_private_module.py", b"")])
+        self.useFixture(pkg_fixture)
+        self.useFixture(base.DiveDir(pkg_fixture.base))
+        self.pbr_options = self.distr.command_options.setdefault('pbr', {})
+        self.pbr_options["autodoc_index_modules"] = ('setup.cfg', 'True')
+
+    def test_default_api_build_dir(self):
+        build_doc = packaging.LocalBuildDoc(self.distr)
+        build_doc.run()
+
+        print('PBR OPTIONS:', self.pbr_options)
+        print('DISTR OPTIONS:', self.distr.command_options)
+
+        self.assertTrue(os.path.exists("api/autoindex.rst"))
+        self.assertTrue(os.path.exists("api/fake_package.fake_module.rst"))
+        self.assertTrue(
+            os.path.exists(
+                "api/fake_package.fake_private_module.rst"))
+        self.assertTrue(
+            os.path.exists(
+                "api/fake_package.another_fake_module_for_testing.rst"))
+
+    def test_different_api_build_dir(self):
+        # Options have to come out of the settings dict as a tuple
+        # showing the source and the value.
+        self.pbr_options['api_doc_dir'] = (None, 'contributor/api')
+        build_doc = packaging.LocalBuildDoc(self.distr)
+        build_doc.run()
+
+        print('PBR OPTIONS:', self.pbr_options)
+        print('DISTR OPTIONS:', self.distr.command_options)
+
+        self.assertTrue(os.path.exists("contributor/api/autoindex.rst"))
+        self.assertTrue(
+            os.path.exists("contributor/api/fake_package.fake_module.rst"))
+        self.assertTrue(
+            os.path.exists(
+                "contributor/api/fake_package.fake_private_module.rst"))
+
+
 class ParseRequirementsTestScenarios(base.BaseTestCase):
 
     versioned_scenarios = [
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pbr-2.0.0/pbr/version.py new/pbr-3.1.1/pbr/version.py
--- old/pbr-2.0.0/pbr/version.py        2017-03-01 04:31:14.000000000 +0100
+++ new/pbr-3.1.1/pbr/version.py        2017-06-21 11:41:48.000000000 +0200
@@ -22,8 +22,6 @@
 import operator
 import sys
 
-import pkg_resources
-
 
 def _is_int(string):
     try:
@@ -435,6 +433,9 @@
         record associated with the package, and if there is no such record
         falls back to the logic sdist would use.
         """
+        # Lazy import because pkg_resources is costly to import so defer until
+        # we absolutely need it.
+        import pkg_resources
         try:
             requirement = pkg_resources.Requirement.parse(self.package)
             provider = pkg_resources.get_provider(requirement)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pbr-2.0.0/pbr.egg-info/PKG-INFO 
new/pbr-3.1.1/pbr.egg-info/PKG-INFO
--- old/pbr-2.0.0/pbr.egg-info/PKG-INFO 2017-03-01 04:32:42.000000000 +0100
+++ new/pbr-3.1.1/pbr.egg-info/PKG-INFO 2017-06-21 11:44:14.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: pbr
-Version: 2.0.0
+Version: 3.1.1
 Summary: Python Build Reasonableness
 Home-page: http://docs.openstack.org/developer/pbr/
 Author: OpenStack
@@ -42,6 +42,7 @@
         * Documentation: http://docs.openstack.org/developer/pbr
         * Source: http://git.openstack.org/cgit/openstack-dev/pbr
         * Bugs: http://bugs.launchpad.net/pbr
+        * Change Log: https://docs.openstack.org/developer/pbr/history.html
         
         .. _d2to1: https://pypi.python.org/pypi/d2to1
         .. _distutils2: https://pypi.python.org/pypi/Distutils2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pbr-2.0.0/pbr.egg-info/SOURCES.txt 
new/pbr-3.1.1/pbr.egg-info/SOURCES.txt
--- old/pbr-2.0.0/pbr.egg-info/SOURCES.txt      2017-03-01 04:32:42.000000000 
+0100
+++ new/pbr-3.1.1/pbr.egg-info/SOURCES.txt      2017-06-21 11:44:14.000000000 
+0200
@@ -12,6 +12,7 @@
 tox.ini
 doc/source/compatibility.rst
 doc/source/conf.py
+doc/source/history.rst
 doc/source/index.rst
 doc/source/packagers.rst
 doc/source/semver.rst
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pbr-2.0.0/pbr.egg-info/entry_points.txt 
new/pbr-3.1.1/pbr.egg-info/entry_points.txt
--- old/pbr-2.0.0/pbr.egg-info/entry_points.txt 2017-03-01 04:32:42.000000000 
+0100
+++ new/pbr-3.1.1/pbr.egg-info/entry_points.txt 2017-06-21 11:44:14.000000000 
+0200
@@ -1,9 +1,6 @@
 [console_scripts]
 pbr = pbr.cmd.main:main
 
-[distutils.commands]
-testr = pbr.testr_command:Testr
-
 [distutils.setup_keywords]
 pbr = pbr.core:pbr
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pbr-2.0.0/setup.cfg new/pbr-3.1.1/setup.cfg
--- old/pbr-2.0.0/setup.cfg     2017-03-01 04:32:42.000000000 +0100
+++ new/pbr-3.1.1/setup.cfg     2017-06-21 11:44:14.000000000 +0200
@@ -41,8 +41,6 @@
 [entry_points]
 distutils.setup_keywords = 
        pbr = pbr.core:pbr
-distutils.commands = 
-       testr = pbr.testr_command:Testr
 egg_info.writers = 
        pbr.json = pbr.pbr_json:write_pbr_json
 console_scripts = 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pbr-2.0.0/test-requirements.txt 
new/pbr-3.1.1/test-requirements.txt
--- old/pbr-2.0.0/test-requirements.txt 2017-03-01 04:31:14.000000000 +0100
+++ new/pbr-3.1.1/test-requirements.txt 2017-06-21 11:41:48.000000000 +0200
@@ -1,12 +1,12 @@
 # The order of packages is significant, because pip processes them in the order
 # of appearance. Changing the order has an impact on the overall integration
 # process, which may cause wedges in the gate later.
-coverage>=4.0 # Apache-2.0
+coverage!=4.4,>=4.0 # Apache-2.0
 fixtures>=3.0.0 # Apache-2.0/BSD
-hacking<0.11,>=0.10.0
+hacking!=0.13.0,<0.14,>=0.12.0 # Apache-2.0
 mock>=2.0 # BSD
 python-subunit>=0.0.18 # Apache-2.0/BSD
-sphinx>=1.5.1 # BSD
+sphinx!=1.6.1,>=1.5.1 # BSD
 oslosphinx>=4.7.0 # Apache-2.0
 six>=1.9.0 # MIT
 testrepository>=0.0.18 # Apache-2.0/BSD
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pbr-2.0.0/tox.ini new/pbr-3.1.1/tox.ini
--- old/pbr-2.0.0/tox.ini       2017-03-01 04:31:14.000000000 +0100
+++ new/pbr-3.1.1/tox.ini       2017-06-21 11:41:48.000000000 +0200
@@ -11,7 +11,7 @@
     CLIENT_NAME=pbr
 deps = -r{toxinidir}/test-requirements.txt
 commands =
-  python setup.py testr --testr-args='{posargs}'
+  python setup.py test --testr-args='{posargs}'
 
 [tox:jenkins]
 sitepackages = True
@@ -24,7 +24,7 @@
 
 [testenv:cover]
 commands =
-  python setup.py testr --coverage
+  python setup.py test --coverage
 
 [testenv:venv]
 commands = {posargs}


Reply via email to