diff --git a/pbr/packaging.py b/pbr/packaging.py index 8e9c9aeb..474d0130 100644 --- a/pbr/packaging.py +++ b/pbr/packaging.py @@ -692,12 +692,14 @@ def _get_increment_kwargs(git_dir, tag): # git log output affecting out ability to have working sem ver headers. changelog = git._run_git_command(['log', '--pretty=%B', version_spec], git_dir) - header_len = len('sem-ver:') - commands = [line[header_len:].strip() for line in changelog.split('\n') - if line.lower().strip().startswith('sem-ver:')] symbols = set() - for command in commands: - symbols.update([symbol.strip() for symbol in command.split(',')]) + header = 'sem-ver:' + for line in changelog.split("\n"): + line = line.lower().strip() + if not line.lower().strip().startswith(header): + continue + new_symbols = line[len(header):].strip().split(",") + symbols.update([symbol.strip() for symbol in new_symbols]) def _handle_symbol(symbol, symbols, impact): if symbol in symbols: diff --git a/pbr/tests/test_packaging.py b/pbr/tests/test_packaging.py index 346540bb..c719d1e2 100644 --- a/pbr/tests/test_packaging.py +++ b/pbr/tests/test_packaging.py @@ -672,6 +672,27 @@ class TestVersions(base.BaseTestCase): version = packaging._get_version_from_git() self.assertThat(version, matchers.StartsWith('2.0.0.dev1')) + def test_multi_inline_symbols_no_space(self): + self.repo.commit() + self.repo.tag('1.2.3') + self.repo.commit('Sem-ver: feature,api-break') + version = packaging._get_version_from_git() + self.assertThat(version, matchers.StartsWith('2.0.0.dev1')) + + def test_multi_inline_symbols_spaced(self): + self.repo.commit() + self.repo.tag('1.2.3') + self.repo.commit('Sem-ver: feature, api-break') + version = packaging._get_version_from_git() + self.assertThat(version, matchers.StartsWith('2.0.0.dev1')) + + def test_multi_inline_symbols_reversed(self): + self.repo.commit() + self.repo.tag('1.2.3') + self.repo.commit('Sem-ver: api-break,feature') + version = packaging._get_version_from_git() + self.assertThat(version, matchers.StartsWith('2.0.0.dev1')) + def test_leading_space(self): self.repo.commit() self.repo.tag('1.2.3') @@ -679,6 +700,18 @@ class TestVersions(base.BaseTestCase): version = packaging._get_version_from_git() self.assertThat(version, matchers.StartsWith('2.0.0.dev1')) + def test_leading_space_multiline(self): + self.repo.commit() + self.repo.tag('1.2.3') + self.repo.commit( + ( + ' Some cool text\n' + ' sem-ver: api-break' + ) + ) + version = packaging._get_version_from_git() + self.assertThat(version, matchers.StartsWith('2.0.0.dev1')) + def test_leading_characters_symbol_not_found(self): self.repo.commit() self.repo.tag('1.2.3') diff --git a/releasenotes/notes/fix-symbols-leading-spaces-f68928d75a8f0997.yaml b/releasenotes/notes/fix-symbols-leading-spaces-f68928d75a8f0997.yaml new file mode 100644 index 00000000..f15c9ee9 --- /dev/null +++ b/releasenotes/notes/fix-symbols-leading-spaces-f68928d75a8f0997.yaml @@ -0,0 +1,5 @@ +--- +fixes: + - | + Fix an issue where symbols that were indented + would produce an incorrect version. \ No newline at end of file