only show recent releases on the current series pages

Change the scanner to stop looking at history when it encounters the
base of a branch matching branch_name_re. This causes less history to
appear on the "current series" or "unreleased" pages.

Change-Id: I7b309b549a90eb30d6c2206caef83996557ecd4b
Signed-off-by: Doug Hellmann <doug@doughellmann.com>
This commit is contained in:
Doug Hellmann
2017-02-01 13:55:06 -05:00
parent 1db83bde73
commit d464c7e114
3 changed files with 99 additions and 26 deletions

View File

@@ -0,0 +1,7 @@
---
features:
- |
The scanner for the "current" branch (usually master) now stops when it
encounters the base of an earlier branch matching the branch_name_re config
option. This results in less history appearing on the unreleased pages,
while still actually showing the current series and any unreleased notes.

View File

@@ -698,14 +698,8 @@ class Scanner(object):
"Return true if the file exists at the given commit."
return bool(self.get_file_at_commit(filename, sha))
def _get_earlier_branch(self, branch):
"Return the name of the branch created before the given branch."
# FIXME(dhellmann): Assumes branches come in order based on
# name. That may not be true for projects that branch based on
# version numbers instead of names.
if branch.startswith('origin/'):
branch = branch[7:]
LOG.debug('looking for the branch before %s', branch)
def _get_series_branches(self):
"Get branches matching the branch_name_re config option."
refs = self._repo.get_refs()
LOG.debug('refs %s', list(refs.keys()))
branch_names = set()
@@ -718,7 +712,17 @@ class Scanner(object):
name = r[11:]
if name and self.branch_name_re.search(name):
branch_names.add(name)
branch_names = list(sorted(branch_names))
return list(sorted(branch_names))
def _get_earlier_branch(self, branch):
"Return the name of the branch created before the given branch."
# FIXME(dhellmann): Assumes branches come in order based on
# name. That may not be true for projects that branch based on
# version numbers instead of names.
if branch.startswith('origin/'):
branch = branch[7:]
LOG.debug('looking for the branch before %s', branch)
branch_names = self._get_series_branches()
if branch not in branch_names:
LOG.debug('Could not find branch %r among %s',
branch, branch_names)
@@ -801,9 +805,15 @@ class Scanner(object):
collapse_pre_releases = self.conf.collapse_pre_releases
stop_at_branch_base = self.conf.stop_at_branch_base
LOG.info('scanning %s/%s (branch=%s)',
LOG.info('scanning %s/%s (branch=%s earliest_version=%s)',
reporoot.rstrip('/'), notesdir.lstrip('/'),
branch or '*current*')
branch or '*current*', earliest_version)
# Determine the current version, which might be an unreleased or
# dev version if there are unreleased commits at the head of the
# branch in question.
current_version = self._get_current_version(branch)
LOG.debug('current repository version: %s' % current_version)
# Determine all of the tags known on the branch, in their date
# order. We scan the commit history in topological order to ensure
@@ -823,11 +833,21 @@ class Scanner(object):
collapse_pre_releases, branch)
# If the user has not told us where to stop, try to work it
# out for ourselves. If branch is set and is not "master",
# then we want to stop at the version before the tag at the
# base of the branch, which involves a bit of searching.
if (stop_at_branch_base and
(not earliest_version) and branch and (branch != 'master')):
# out for ourselves.
if not branch and not earliest_version and stop_at_branch_base:
# On the current branch, stop at the point where the most
# recent branch was created, if we can find one.
LOG.debug('working on current branch without earliest_version')
branches = self._get_series_branches()
if branches:
LOG.debug('looking at base of %s to stop scanning master',
branches[-1])
scan_stop_tag = self._get_branch_base(branches[-1])
earliest_version = current_version
elif branch and stop_at_branch_base and not earliest_version:
# If branch is set and is not "master",
# then we want to stop at the version before the tag at the
# base of the branch, which involves a bit of searching.
LOG.debug('determining earliest_version from branch')
branch_base = self._get_branch_base(branch)
scan_stop_tag = self._find_scan_stop_point(
@@ -854,14 +874,10 @@ class Scanner(object):
if scan_stop_tag:
LOG.info('stopping scan at %s', scan_stop_tag)
# Determine the current version, which might be an unreleased or
# dev version if there are unreleased commits at the head of the
# branch in question. Since the version may not already be known,
# make sure it is in the list of versions by date. And since it is
# the most recent version, go ahead and insert it at the front of
# the list.
current_version = self._get_current_version(branch)
LOG.debug('current repository version: %s' % current_version)
# Since the version may not already be known, make sure it is
# in the list of versions by date. And since it is the most
# recent version, go ahead and insert it at the front of the
# list.
if current_version not in versions_by_date:
versions_by_date.insert(0, current_version)
versions_by_date.insert(0, '*working-copy*')

View File

@@ -606,6 +606,58 @@ class BasicTest(Base):
raw_results,
)
def test_stop_on_master_with_other_branch(self):
self._make_python_package()
self._add_notes_file()
self.repo.git('tag', '-s', '-m', 'first tag', '1.0.0')
self._add_notes_file()
self.repo.git('tag', '-s', '-m', 'middle tag', '2.0.0')
self._add_notes_file()
self.repo.git('tag', '-s', '-m', 'last tag', '3.0.0')
self.repo.git('branch', 'stable/a')
f4 = self._add_notes_file()
self.c.override(
earliest_version=None,
)
self.scanner = scanner.Scanner(self.c)
raw_results = self.scanner.get_notes_by_version()
results = {
k: [f for (f, n) in v]
for (k, v) in raw_results.items()
}
self.assertEqual(
{'3.0.0-1': [f4],
},
results,
)
def test_stop_on_master_without_limits_or_branches(self):
self._make_python_package()
f1 = self._add_notes_file()
self.repo.git('tag', '-s', '-m', 'first tag', '1.0.0')
f2 = self._add_notes_file()
self.repo.git('tag', '-s', '-m', 'middle tag', '2.0.0')
f3 = self._add_notes_file()
self.repo.git('tag', '-s', '-m', 'last tag', '3.0.0')
f4 = self._add_notes_file()
self.c.override(
earliest_version=None,
)
self.scanner = scanner.Scanner(self.c)
raw_results = self.scanner.get_notes_by_version()
results = {
k: [f for (f, n) in v]
for (k, v) in raw_results.items()
}
self.assertEqual(
{'3.0.0-1': [f4],
'3.0.0': [f3],
'2.0.0': [f2],
'1.0.0': [f1],
},
results,
)
class FileContentsTest(Base):
@@ -1059,8 +1111,6 @@ class BranchTest(Base):
}
self.assertEqual(
{
'1.0.0': [self.f1],
'2.0.0': [self.f2],
'2.0.0-1': [f21],
},
results,