Hello community, here is the log from the commit of package python-reno for openSUSE:Factory checked in at 2020-08-13 10:12:36 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-reno (Old) and /work/SRC/openSUSE:Factory/.python-reno.new.3399 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-reno" Thu Aug 13 10:12:36 2020 rev:9 rq:825343 version:3.1.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-reno/python-reno.changes 2020-04-19 21:49:34.728093892 +0200 +++ /work/SRC/openSUSE:Factory/.python-reno.new.3399/python-reno.changes 2020-08-13 10:12:41.742586292 +0200 @@ -1,0 +2,17 @@ +Fri Jun 5 19:31:53 UTC 2020 - Dirk Mueller <dmuel...@suse.com> + +- update 3.1.0 + * Set parallel\_read\_safe to True + * Handle empty config files + * Add cache support for release dates + * Remove future imports + * Keep scanning master branch after first shared commit + * Sort config options + * Add support for release dates + * sphinxext: Support rootdir discovery without git + * Use unittest.mock instead of third party mock + * tox: Suppress output + * do not include external svgs from readme in docs + * Update hacking for Python3 + +------------------------------------------------------------------- Old: ---- reno-3.0.1.tar.gz New: ---- reno-3.1.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-reno.spec ++++++ --- /var/tmp/diff_new_pack.HCcBfO/_old 2020-08-13 10:12:44.378587941 +0200 +++ /var/tmp/diff_new_pack.HCcBfO/_new 2020-08-13 10:12:44.382587944 +0200 @@ -19,7 +19,7 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} %define skip_python2 1 Name: python-reno -Version: 3.0.1 +Version: 3.1.0 Release: 0 Summary: RElease NOtes manager License: Apache-2.0 ++++++ reno-3.0.1.tar.gz -> reno-3.1.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/reno-3.0.1/AUTHORS new/reno-3.1.0/AUTHORS --- old/reno-3.0.1/AUTHORS 2020-04-01 21:33:22.000000000 +0200 +++ new/reno-3.1.0/AUTHORS 2020-05-14 18:13:05.000000000 +0200 @@ -30,12 +30,14 @@ Mike Perez <thin...@gmail.com> Monty Taylor <mord...@inaugust.com> Nguyen Hai Truong <truon...@vn.fujitsu.com> +Niraj Tolia <nto...@kasten.io> Paul Belanger <pabelan...@redhat.com> Rajath Agasthya <rajathagast...@gmail.com> Sahid Orentino Ferdjaoui <sahid.ferdja...@canonical.com> Sean McGinnis <sean.mcgin...@gmail.com> Sharat Sharma <sharat.sha...@nectechnologies.in> Stephen Finucane <sfinu...@redhat.com> +Stephen Finucane <stephen...@redhat.com> Swapnil Kulkarni (coolsvap) <m...@coolsvap.net> Thanh Ha <zxi...@linux.com> Thomas Bechtold <tbecht...@suse.com> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/reno-3.0.1/ChangeLog new/reno-3.1.0/ChangeLog --- old/reno-3.0.1/ChangeLog 2020-04-01 21:33:22.000000000 +0200 +++ new/reno-3.1.0/ChangeLog 2020-05-14 18:13:05.000000000 +0200 @@ -1,6 +1,22 @@ CHANGES ======= +3.1.0 +----- + +* Set parallel\_read\_safe to True +* Handle empty config files +* Add cache support for release dates +* Remove future imports +* Keep scanning master branch after first shared commit +* Sort config options +* Add support for release dates +* sphinxext: Support rootdir discovery without git +* Use unittest.mock instead of third party mock +* tox: Suppress output +* do not include external svgs from readme in docs +* Update hacking for Python3 + 3.0.1 ----- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/reno-3.0.1/PKG-INFO new/reno-3.1.0/PKG-INFO --- old/reno-3.0.1/PKG-INFO 2020-04-01 21:33:22.000000000 +0200 +++ new/reno-3.1.0/PKG-INFO 2020-05-14 18:13:05.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: reno -Version: 3.0.1 +Version: 3.1.0 Summary: RElease NOtes manager Home-page: https://docs.openstack.org/reno/latest/ Author: OpenStack diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/reno-3.0.1/doc/source/index.rst new/reno-3.1.0/doc/source/index.rst --- old/reno-3.0.1/doc/source/index.rst 2020-04-01 21:32:27.000000000 +0200 +++ new/reno-3.1.0/doc/source/index.rst 2020-05-14 18:12:18.000000000 +0200 @@ -1,4 +1,5 @@ .. include:: ../../README.rst + :end-before: Project Meta-data EuroPython 2018 Presentation ============================ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/reno-3.0.1/lower-constraints.txt new/reno-3.1.0/lower-constraints.txt --- old/reno-3.0.1/lower-constraints.txt 2020-04-01 21:32:27.000000000 +0200 +++ new/reno-3.1.0/lower-constraints.txt 2020-05-14 18:12:18.000000000 +0200 @@ -2,4 +2,4 @@ dulwich==0.15.0 PyYAML==3.10.0 Sphinx==1.6.1 -stestr==2.0.0 +stestr==2.1.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/reno-3.0.1/releasenotes/notes/keep-scanning-past-branchpoint-61f72023c32cf0b3.yaml new/reno-3.1.0/releasenotes/notes/keep-scanning-past-branchpoint-61f72023c32cf0b3.yaml --- old/reno-3.0.1/releasenotes/notes/keep-scanning-past-branchpoint-61f72023c32cf0b3.yaml 1970-01-01 01:00:00.000000000 +0100 +++ new/reno-3.1.0/releasenotes/notes/keep-scanning-past-branchpoint-61f72023c32cf0b3.yaml 2020-05-14 18:12:18.000000000 +0200 @@ -0,0 +1,10 @@ +--- +features: + - | + If no earliest version is provided for a branch, reno will scan commits + on the branch in reverse order, attempting to find a common ancestor + with the master branch. Once found, the last common commit - the branch + point - is checked for a tag. Previously, if no tag was found, reno + would stop scanning. This was problematic for instances where a branch + was not created at the tagged commit but rather some commits later. + Reno will now continue scanning until it finds a tag. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/reno-3.0.1/releasenotes/notes/release-date-3a1dec42c91a3f0b.yaml new/reno-3.1.0/releasenotes/notes/release-date-3a1dec42c91a3f0b.yaml --- old/reno-3.0.1/releasenotes/notes/release-date-3a1dec42c91a3f0b.yaml 1970-01-01 01:00:00.000000000 +0100 +++ new/reno-3.1.0/releasenotes/notes/release-date-3a1dec42c91a3f0b.yaml 2020-05-14 18:12:18.000000000 +0200 @@ -0,0 +1,5 @@ +--- +features: + - | + Add an option, ``add_release_date``, to print the release dates for every + version. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/reno-3.0.1/releasenotes/notes/sphinx-with-tarballs-d3215fc6831c3516.yaml new/reno-3.1.0/releasenotes/notes/sphinx-with-tarballs-d3215fc6831c3516.yaml --- old/reno-3.0.1/releasenotes/notes/sphinx-with-tarballs-d3215fc6831c3516.yaml 1970-01-01 01:00:00.000000000 +0100 +++ new/reno-3.1.0/releasenotes/notes/sphinx-with-tarballs-d3215fc6831c3516.yaml 2020-05-14 18:12:18.000000000 +0200 @@ -0,0 +1,9 @@ +--- +fixes: + - | + Previously, it was not possible build documentation that used the + ``release-notes`` Sphinx extension from tarballs. The Sphinx extension + will now search the following directories, relative to the working + directory of the ``sphinx-build`` tool, to find the release notes + directory: ``.``, ``..``, and ``../..``. This only applies when it is + not possible to discover this information using git. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/reno-3.0.1/reno/_exts/show_reno_config.py new/reno-3.1.0/reno/_exts/show_reno_config.py --- old/reno-3.0.1/reno/_exts/show_reno_config.py 2020-04-01 21:32:27.000000000 +0200 +++ new/reno-3.1.0/reno/_exts/show_reno_config.py 2020-05-14 18:12:18.000000000 +0200 @@ -31,7 +31,7 @@ def _format_option_help(options): "Produce RST lines for the configuration options." - for opt in options: + for opt in sorted(options, key=lambda opt: opt.name): yield '``{}``'.format(opt.name) for l in _multi_line_string(opt.help, ' '): yield l diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/reno-3.0.1/reno/cache.py new/reno-3.1.0/reno/cache.py --- old/reno-3.0.1/reno/cache.py 2020-04-01 21:32:27.000000000 +0200 +++ new/reno-3.1.0/reno/cache.py 2020-05-14 18:12:18.000000000 +0200 @@ -54,6 +54,10 @@ {'version': k, 'files': v} for k, v in notes.items() ], + 'dates': [ + {'version': k, 'date': v} + for k, v in s.get_version_dates().items() + ], 'file-contents': file_contents, } return cache diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/reno-3.0.1/reno/config.py new/reno-3.1.0/reno/config.py --- old/reno-3.0.1/reno/config.py 2020-04-01 21:32:27.000000000 +0200 +++ new/reno-3.1.0/reno/config.py 2020-05-14 18:12:18.000000000 +0200 @@ -64,9 +64,15 @@ The template used by reno new to create a note. """)), + Opt('add_release_date', False, + textwrap.dedent("""\ + Should the report include release date (True) based on + the date of objects associated with the release tag. + """)), + Opt('release_tag_re', textwrap.dedent('''\ - ((?:v?[\d.ab]|rc)+) # digits, a, b, and rc cover regular and + ((?:v?[\\d.ab]|rc)+) # digits, a, b, and rc cover regular and # pre-releases '''), textwrap.dedent("""\ @@ -77,7 +83,7 @@ Opt('pre_release_tag_re', textwrap.dedent('''\ - (?P<pre_release>\.v?\d+(?:[ab]|rc)+\d*)$ + (?P<pre_release>\\.v?\\d+(?:[ab]|rc)+\\d*)$ '''), textwrap.dedent("""\ The regex pattern used to check if a valid release version tag @@ -228,7 +234,8 @@ except IOError as err: self._report_failure_config_file(filename, err) else: - self.override(**self._contents) + if self._contents: + self.override(**self._contents) def _report_missing_config_files(self, filenames): # NOTE(dhellmann): This is extracted so we can mock it for diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/reno-3.0.1/reno/create.py new/reno-3.1.0/reno/create.py --- old/reno-3.0.1/reno/create.py 2020-04-01 21:32:27.000000000 +0200 +++ new/reno-3.1.0/reno/create.py 2020-05-14 18:12:18.000000000 +0200 @@ -10,8 +10,6 @@ # License for the specific language governing permissions and limitations # under the License. -from __future__ import print_function - import os import subprocess diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/reno-3.0.1/reno/formatter.py new/reno-3.1.0/reno/formatter.py --- old/reno-3.0.1/reno/formatter.py 2020-04-01 21:32:27.000000000 +0200 +++ new/reno-3.1.0/reno/formatter.py 2020-05-14 18:12:18.000000000 +0200 @@ -10,8 +10,6 @@ # License for the specific language governing permissions and limitations # under the License. -from __future__ import print_function - def _indent_for_list(text, prefix=' '): """Indent some text to make it work as a list entry. @@ -71,6 +69,10 @@ report.append('=' * len(version_title)) report.append('') + if config.add_release_date: + report.append('Release Date: ' + loader.get_version_date(version)) + report.append('') + # Add the preludes. notefiles = loader[version] prelude_name = config.prelude_section_name diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/reno-3.0.1/reno/linter.py new/reno-3.1.0/reno/linter.py --- old/reno-3.0.1/reno/linter.py 2020-04-01 21:32:27.000000000 +0200 +++ new/reno-3.1.0/reno/linter.py 2020-05-14 18:12:18.000000000 +0200 @@ -10,8 +10,6 @@ # License for the specific language governing permissions and limitations # under the License. -from __future__ import print_function - import glob import logging import os.path diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/reno-3.0.1/reno/lister.py new/reno-3.1.0/reno/lister.py --- old/reno-3.0.1/reno/lister.py 2020-04-01 21:32:27.000000000 +0200 +++ new/reno-3.1.0/reno/lister.py 2020-05-14 18:12:18.000000000 +0200 @@ -10,8 +10,6 @@ # License for the specific language governing permissions and limitations # under the License. -from __future__ import print_function - import logging from reno import loader diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/reno-3.0.1/reno/loader.py new/reno-3.1.0/reno/loader.py --- old/reno-3.0.1/reno/loader.py 2020-04-01 21:32:27.000000000 +0200 +++ new/reno-3.1.0/reno/loader.py 2020-05-14 18:12:18.000000000 +0200 @@ -11,6 +11,7 @@ # under the License. import collections +from datetime import datetime import logging import os.path @@ -55,6 +56,7 @@ self._cache = None self._scanner = None self._scanner_output = None + self._tags_to_dates = None self._cache_filename = get_cache_filename(conf) self._load_data() @@ -76,9 +78,14 @@ (n['version'], n['files']) for n in self._cache['notes'] ) + self._tags_to_dates = collections.OrderedDict( + (n['version'], n['date']) + for n in self._cache['dates'] + ) else: self._scanner = scanner.Scanner(self._config) self._scanner_output = self._scanner.get_notes_by_version() + self._tags_to_dates = self._scanner.get_version_dates() @property def versions(self): @@ -89,6 +96,13 @@ "Return data about the files that should go into a given version." return self._scanner_output[version] + def get_version_date(self, version): + "Return release data for a version." + if version in self._tags_to_dates.keys(): + date = datetime.fromtimestamp(self._tags_to_dates[version]) + return date.strftime("%Y-%m-%d") + return "Unknown" + def parse_note_file(self, filename, sha): """Return the data structure encoded in the note file. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/reno-3.0.1/reno/report.py new/reno-3.1.0/reno/report.py --- old/reno-3.0.1/reno/report.py 2020-04-01 21:32:27.000000000 +0200 +++ new/reno-3.1.0/reno/report.py 2020-05-14 18:12:18.000000000 +0200 @@ -10,8 +10,6 @@ # License for the specific language governing permissions and limitations # under the License. -from __future__ import print_function - from reno import formatter from reno import loader diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/reno-3.0.1/reno/scanner.py new/reno-3.1.0/reno/scanner.py --- old/reno-3.0.1/reno/scanner.py 2020-04-01 21:32:27.000000000 +0200 +++ new/reno-3.1.0/reno/scanner.py 2020-05-14 18:12:18.000000000 +0200 @@ -10,8 +10,6 @@ # License for the specific language governing permissions and limitations # under the License. -from __future__ import print_function - import collections import fnmatch import logging @@ -391,6 +389,7 @@ # Populated by _load_tags(). _all_tags = None _shas_to_tags = None + _tags_to_dates = None def _get_commit_from_tag(self, tag, tag_sha): """Return the commit referenced by the tag and when it was tagged.""" @@ -434,9 +433,11 @@ if k.startswith(b'refs/tags/') } self._shas_to_tags = {} + self._tags_to_dates = {} for tag, tag_sha in self._all_tags.items(): tagged_sha, date = self._get_commit_from_tag(tag, tag_sha) self._shas_to_tags.setdefault(tagged_sha, []).append((tag, date)) + self._tags_to_dates[tag] = date def get_tags_on_commit(self, sha): "Return the tag(s) on a commit, in application order." @@ -659,13 +660,13 @@ c.commit.sha().hexdigest().encode('ascii')) if tags: return tags[-1] - else: - # Naughty, naughty, branching without tagging. - LOG.info( - ('There is no tag on commit %s at the base of %s. ' - 'Branch scan short-cutting is disabled.'), - c.commit.sha().hexdigest(), branch) - return None + + # Naughty, naughty, branching without tagging. + LOG.info( + 'There is no tag on commit %s at the base of %s. ' + 'Branch scan short-cutting is disabled.', + c.commit.sha().hexdigest(), branch, + ) return None def _topo_traversal(self, branch): @@ -759,8 +760,8 @@ # later, as long as we haven't already processed # it. first_parent = entry.commit.parents[0] - if (first_parent not in todo and - first_parent not in emitted): + if (first_parent not in todo + and first_parent not in emitted): todo.appendleft(first_parent) continue @@ -917,6 +918,12 @@ return candidate return None + def get_version_dates(self): + "Return a dict mapping versions to dates." + if self._repo._tags_to_dates is not None: + return self._repo._tags_to_dates.copy() + return {} + def get_notes_by_version(self, branch=None): """Return an OrderedDict mapping versions to lists of notes files. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/reno-3.0.1/reno/setup_command.py new/reno-3.1.0/reno/setup_command.py --- old/reno-3.0.1/reno/setup_command.py 2020-04-01 21:32:27.000000000 +0200 +++ new/reno-3.1.0/reno/setup_command.py 2020-05-14 18:12:18.000000000 +0200 @@ -20,6 +20,8 @@ - https://github.com/pypa/setuptools/blob/v36.0.0/setuptools/command/sdist.py """ +import typing + from distutils import cmd from distutils import errors from distutils import log @@ -102,7 +104,7 @@ # unicode, causing finalize_options to fail if invoked again. Workaround # for http://bugs.python.org/issue19570 def _ensure_stringlike(self, option, what, default=None): - # type: (unicode, unicode, Any) -> Any + # type: (typing.unicode, typing.unicode, typing.Any) -> typing.Any val = getattr(self, option) if val is None: setattr(self, option, default) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/reno-3.0.1/reno/sphinxext.py new/reno-3.1.0/reno/sphinxext.py --- old/reno-3.0.1/reno/sphinxext.py 2020-04-01 21:32:27.000000000 +0200 +++ new/reno-3.1.0/reno/sphinxext.py 2020-05-14 18:12:18.000000000 +0200 @@ -9,18 +9,16 @@ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. -from __future__ import unicode_literals - import os.path from docutils import nodes from docutils.parsers import rst from docutils.parsers.rst import directives from docutils import statemachine +from dulwich import repo from sphinx.util import logging from sphinx.util.nodes import nested_parse_with_titles -from dulwich import repo import reno from reno import config from reno import defaults @@ -50,16 +48,35 @@ 'unreleased-version-title': directives.unchanged, } - def run(self): - title = ' '.join(self.content) - branch = self.options.get('branch') - reporoot_opt = self.options.get('reporoot', '.') + def _find_reporoot(self, reporoot_opt, relnotessubdir_opt): + """Find root directory of project.""" reporoot = os.path.abspath(reporoot_opt) # When building on RTD.org the root directory may not be # the current directory, so look for it. - reporoot = repo.Repo.discover(reporoot).path - relnotessubdir = self.options.get('relnotessubdir', - defaults.RELEASE_NOTES_SUBDIR) + try: + return repo.Repo.discover(reporoot).path + except Exception: + pass + + for root in ('.', '..', '../..'): + if os.path.exists(os.path.join(root, relnotessubdir_opt)): + return root + + raise Exception( + 'Could not discover root directory; tried: %s' % ', '.join([ + os.path.abspath(root) for root in ('.', '..', '../..') + ]) + ) + + def run(self): + title = ' '.join(self.content) + branch = self.options.get('branch') + relnotessubdir = self.options.get( + 'relnotessubdir', defaults.RELEASE_NOTES_SUBDIR, + ) + reporoot = self._find_reporoot( + self.options.get('reporoot', '.'), relnotessubdir, + ) ignore_notes = [ name.strip() for name in self.options.get('ignore-notes', '').split(',') @@ -126,6 +143,6 @@ app.add_directive('release-notes', ReleaseNotesDirective) metadata_dict = { 'version': reno.__version__, - 'parallel_read_safe': False + 'parallel_read_safe': True } return metadata_dict diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/reno-3.0.1/reno/tests/test_cache.py new/reno-3.1.0/reno/tests/test_cache.py --- old/reno-3.0.1/reno/tests/test_cache.py 2020-04-01 21:32:27.000000000 +0200 +++ new/reno-3.1.0/reno/tests/test_cache.py 2020-05-14 18:12:18.000000000 +0200 @@ -13,10 +13,11 @@ # under the License. import collections +from unittest import mock + import fixtures import textwrap -import mock from reno import cache from reno import config @@ -58,12 +59,19 @@ def _get_note_body(self, filename, sha): return self.note_bodies.get(filename, '') + def _get_dates(self): + return {'1.0.0': 1547874431} + def setUp(self): super(TestCache, self).setUp() self.useFixture( fixtures.MockPatch('reno.scanner.Scanner.get_file_at_commit', new=self._get_note_body) ) + self.useFixture( + fixtures.MockPatch('reno.scanner.Scanner.get_version_dates', + new=self._get_dates) + ) self.c = config.Config('.') @mock.patch('reno.scanner.Scanner.get_notes_by_version') @@ -72,6 +80,7 @@ mock_get_notes.side_effect = self.scanner_output mock_get_branches.return_value = ['stable/1.0'] expected = { + 'dates': [{'version': '1.0.0', 'date': 1547874431}], 'notes': [ {'version': '0.0.0', 'files': [('note1', 'shaA')]}, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/reno-3.0.1/reno/tests/test_config.py new/reno-3.1.0/reno/tests/test_config.py --- old/reno-3.0.1/reno/tests/test_config.py 2020-04-01 21:32:27.000000000 +0200 +++ new/reno-3.1.0/reno/tests/test_config.py 2020-05-14 18:12:18.000000000 +0200 @@ -13,6 +13,7 @@ # under the License. import argparse import os +from unittest import mock import fixtures @@ -21,8 +22,6 @@ from reno import main from reno.tests import base -import mock - class TestConfig(base.TestCase): EXAMPLE_CONFIG = """ @@ -95,6 +94,14 @@ config_path = self.tempdir.join('reno.yaml') self._test_load_file(config_path) + def test_load_file_empty(self): + config_path = self.tempdir.join('reno.yaml') + with open(config_path, 'w') as fd: + fd.write('# Add reno config here') + self.addCleanup(os.unlink, config_path) + c = config.Config(self.tempdir.path) + self.assertEqual(True, c.collapse_pre_releases) + def test_get_default(self): d = config.Config.get_default('notesdir') self.assertEqual('notes', d) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/reno-3.0.1/reno/tests/test_create.py new/reno-3.1.0/reno/tests/test_create.py --- old/reno-3.0.1/reno/tests/test_create.py 2020-04-01 21:32:27.000000000 +0200 +++ new/reno-3.1.0/reno/tests/test_create.py 2020-05-14 18:12:18.000000000 +0200 @@ -12,9 +12,10 @@ # License for the specific language governing permissions and limitations # under the License. +from unittest import mock + import fixtures import io -import mock from reno import create from reno.tests import base diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/reno-3.0.1/reno/tests/test_exts.py new/reno-3.1.0/reno/tests/test_exts.py --- old/reno-3.0.1/reno/tests/test_exts.py 2020-04-01 21:32:27.000000000 +0200 +++ new/reno-3.1.0/reno/tests/test_exts.py 2020-05-14 18:12:18.000000000 +0200 @@ -100,7 +100,7 @@ opt = config.Opt( 'release_tag_re', textwrap.dedent('''\ - ((?:[\d.ab]|rc)+) # digits, a, b, and rc cover regular and + ((?:[\\d.ab]|rc)+) # digits, a, b, and rc cover regular and # pre-releases '''), textwrap.dedent("""\ @@ -120,7 +120,7 @@ :: - ((?:[\d.ab]|rc)+) # digits, a, b, and rc cover regular and + ((?:[\\d.ab]|rc)+) # digits, a, b, and rc cover regular and # pre-releases """) self.assertEqual(expected, actual) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/reno-3.0.1/reno/tests/test_formatter.py new/reno-3.1.0/reno/tests/test_formatter.py --- old/reno-3.0.1/reno/tests/test_formatter.py 2020-04-01 21:32:27.000000000 +0200 +++ new/reno-3.1.0/reno/tests/test_formatter.py 2020-05-14 18:12:18.000000000 +0200 @@ -12,7 +12,7 @@ # License for the specific language governing permissions and limitations # under the License. -import mock +from unittest import mock from reno import config from reno import formatter diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/reno-3.0.1/reno/tests/test_loader.py new/reno-3.1.0/reno/tests/test_loader.py --- old/reno-3.0.1/reno/tests/test_loader.py 2020-04-01 21:32:27.000000000 +0200 +++ new/reno-3.1.0/reno/tests/test_loader.py 2020-05-14 18:12:18.000000000 +0200 @@ -14,9 +14,9 @@ import logging import textwrap +from unittest import mock import fixtures -import mock import yaml from reno import config diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/reno-3.0.1/reno/tests/test_scanner.py new/reno-3.1.0/reno/tests/test_scanner.py --- old/reno-3.0.1/reno/tests/test_scanner.py 2020-04-01 21:32:27.000000000 +0200 +++ new/reno-3.1.0/reno/tests/test_scanner.py 2020-05-14 18:12:18.000000000 +0200 @@ -12,8 +12,6 @@ # License for the specific language governing permissions and limitations # under the License. -from __future__ import unicode_literals - import itertools import logging import os.path @@ -21,11 +19,11 @@ import subprocess import time import unittest +from unittest import mock from dulwich import diff_tree from dulwich import objects import fixtures -import mock from testtools.content import text_content from reno import config @@ -68,7 +66,7 @@ def setUp(self): super(GPGKeyFixture, self).setUp() tempdir = self.useFixture(fixtures.TempDir()) - gnupg_version_re = re.compile('^gpg\s.*\s([\d+])\.([\d+])\.([\d+])') + gnupg_version_re = re.compile(r'^gpg\s.*\s([\d+])\.([\d+])\.([\d+])') gnupg_version = utils.check_output(['gpg', '--version'], cwd=tempdir.path) for line in gnupg_version.split('\n'): @@ -1271,10 +1269,19 @@ self.repo.git('tag', '-d', '2.0.0') self._add_notes_file('slug4') self.repo.git('checkout', 'master') - self.assertIsNone( - self.scanner._get_branch_base('not-master') + self.assertEqual( + '1.0.0', + self.scanner._get_branch_base('not-master'), ) + def test_no_tags(self): + # remove all tags from before the branch + self.repo.git('tag', '-d', '2.0.0') + self.repo.git('tag', '-d', '1.0.0') + self._add_notes_file('slug4') + self.repo.git('checkout', 'master') + self.assertIsNone(self.scanner._get_branch_base('not-master')) + class BranchTest(Base): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/reno-3.0.1/reno/tests/test_utils.py new/reno-3.1.0/reno/tests/test_utils.py --- old/reno-3.0.1/reno/tests/test_utils.py 2020-04-01 21:32:27.000000000 +0200 +++ new/reno-3.1.0/reno/tests/test_utils.py 2020-05-14 18:12:18.000000000 +0200 @@ -12,7 +12,7 @@ # License for the specific language governing permissions and limitations # under the License. -import mock +from unittest import mock from reno.tests import base from reno import utils diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/reno-3.0.1/reno.egg-info/PKG-INFO new/reno-3.1.0/reno.egg-info/PKG-INFO --- old/reno-3.0.1/reno.egg-info/PKG-INFO 2020-04-01 21:33:22.000000000 +0200 +++ new/reno-3.1.0/reno.egg-info/PKG-INFO 2020-05-14 18:13:05.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: reno -Version: 3.0.1 +Version: 3.1.0 Summary: RElease NOtes manager Home-page: https://docs.openstack.org/reno/latest/ Author: OpenStack diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/reno-3.0.1/reno.egg-info/SOURCES.txt new/reno-3.1.0/reno.egg-info/SOURCES.txt --- old/reno-3.0.1/reno.egg-info/SOURCES.txt 2020-04-01 21:33:22.000000000 +0200 +++ new/reno-3.1.0/reno.egg-info/SOURCES.txt 2020-05-14 18:13:05.000000000 +0200 @@ -60,11 +60,13 @@ releasenotes/notes/ignore-notes-option-9d0bde540fbcdf22.yaml releasenotes/notes/ignore-null-merges-56b7a8ed9b20859e.yaml releasenotes/notes/include-working-copy-d0aed2e77bb095e6.yaml +releasenotes/notes/keep-scanning-past-branchpoint-61f72023c32cf0b3.yaml releasenotes/notes/log-levels-and-sphinx-161-6efe0d291718a657.yaml releasenotes/notes/no-show-source-option-ee02766b26fe53be.yaml releasenotes/notes/null-merge-infinite-loop-670367094ad83e19.yaml releasenotes/notes/optional-oslosphinx-55843a7f80a14e58.yaml releasenotes/notes/reference-name-mangling-3c845ebf88af6944.yaml +releasenotes/notes/release-date-3a1dec42c91a3f0b.yaml releasenotes/notes/repodir-config-file-b6b8edc2975964fc.yaml releasenotes/notes/report-title-option-f0875bfdbc54dd7b.yaml releasenotes/notes/reverse-slug-order-4c5f94e72d4f6fb9.yaml @@ -73,6 +75,7 @@ releasenotes/notes/show-less-unreleased-802781a1a3bf110e.yaml releasenotes/notes/show-note-filename-in-report-a1118c917588b58d.yaml releasenotes/notes/sphinx-extension-4a092b4102370246.yaml +releasenotes/notes/sphinx-with-tarballs-d3215fc6831c3516.yaml releasenotes/notes/stable-section-anchors-d99258b6df39c0fa.yaml releasenotes/notes/stop-scanning-branch-e5a8937c248acc99.yaml releasenotes/notes/stop-scanning-branch-option-6a0156b183814d7f.yaml diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/reno-3.0.1/reno.egg-info/pbr.json new/reno-3.1.0/reno.egg-info/pbr.json --- old/reno-3.0.1/reno.egg-info/pbr.json 2020-04-01 21:33:22.000000000 +0200 +++ new/reno-3.1.0/reno.egg-info/pbr.json 2020-05-14 18:13:05.000000000 +0200 @@ -1 +1 @@ -{"git_version": "bd3886a", "is_release": true} \ No newline at end of file +{"git_version": "cc09e3d", "is_release": true} \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/reno-3.0.1/reno.egg-info/requires.txt new/reno-3.1.0/reno.egg-info/requires.txt --- old/reno-3.0.1/reno.egg-info/requires.txt 2020-04-01 21:33:22.000000000 +0200 +++ new/reno-3.1.0/reno.egg-info/requires.txt 2020-05-14 18:13:05.000000000 +0200 @@ -7,7 +7,6 @@ docutils>=0.11 [test] -mock>=1.2 coverage!=4.4,>=4.0 python-subunit>=0.0.18 openstackdocstheme>=1.11.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/reno-3.0.1/test-requirements.txt new/reno-3.1.0/test-requirements.txt --- old/reno-3.0.1/test-requirements.txt 2020-04-01 21:32:27.000000000 +0200 +++ new/reno-3.1.0/test-requirements.txt 2020-05-14 18:12:18.000000000 +0200 @@ -2,7 +2,6 @@ # of appearance. Changing the order has an impact on the overall integration # process, which may cause wedges in the gate later. -mock>=1.2 coverage!=4.4,>=4.0 # Apache-2.0 python-subunit>=0.0.18 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/reno-3.0.1/tox.ini new/reno-3.1.0/tox.ini --- old/reno-3.0.1/tox.ini 2020-04-01 21:32:27.000000000 +0200 +++ new/reno-3.1.0/tox.ini 2020-05-14 18:12:18.000000000 +0200 @@ -12,11 +12,11 @@ -r{toxinidir}/test-requirements.txt .[sphinx] commands = - stestr run --slowest {posargs} + stestr run --slowest --suppress-attachments {posargs} [testenv:pep8] deps = {[testenv]deps} - hacking >= 1.1.0,<1.2.0 + hacking >= 3.0.0,<3.1.0 commands = flake8 reno -q lint @@ -53,8 +53,8 @@ [flake8] # E123, E125 skipped as they are invalid PEP-8. - +# W503 line break before binary operator show-source = True -ignore = E123,E125 +ignore = E123,E125,W503 builtins = _ exclude=.venv,.git,.tox,dist,doc,*lib/python*,*egg,build