From 92f8799fe1e293b6f206721757c7c66f4ededfa6 Mon Sep 17 00:00:00 2001 From: Guido Günther Date: Tue, 10 Jan 2017 15:23:37 +0100 Subject: gbp.deb.changelog: Allow to parse out changes from a specific version We don't iterate over all individual sections but rather let dpkg-parsechangelog do the hard work. --- gbp/deb/changelog.py | 14 +++++++++++--- tests/doctests/test_Changelog.py | 17 +++++++++++++++++ 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/gbp/deb/changelog.py b/gbp/deb/changelog.py index 42fcb571..ac867a93 100644 --- a/gbp/deb/changelog.py +++ b/gbp/deb/changelog.py @@ -91,9 +91,9 @@ class ChangeLog(object): self._read() self._parse() - def _parse(self): - """Parse a changelog based on the already read contents.""" - cmd = subprocess.Popen(['dpkg-parsechangelog', '-l-'], + def _run_parsechangelog(self, options=None): + options = options if options is not None else [] + cmd = subprocess.Popen(['dpkg-parsechangelog', '-l-'] + options, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) @@ -101,6 +101,11 @@ class ChangeLog(object): if cmd.returncode: raise ParseChangeLogError("Failed to parse changelog. " "dpkg-parsechangelog said:\n%s" % (errors, )) + return output + + def _parse(self): + """Parse a changelog based on the already read contents.""" + output = self._run_parsechangelog() # Parse the result of dpkg-parsechangelog (which looks like # email headers) cp = email.message_from_string(output) @@ -310,3 +315,6 @@ class ChangeLog(object): """ self.spawn_dch(msg=msg, newversion=True, version=version, author=author, email=email, distribution=distribution, dch_options=dch_options) + + def get_changes(self, since='0~'): + return self._run_parsechangelog(['-v%s' % since, '-SChanges']) diff --git a/tests/doctests/test_Changelog.py b/tests/doctests/test_Changelog.py index 9525e76d..cddf5ae7 100644 --- a/tests/doctests/test_Changelog.py +++ b/tests/doctests/test_Changelog.py @@ -223,6 +223,23 @@ def test_parse_sections(): """ +def test_get_changes(): + """ + Test if we can get changes + + Methods tested: + - L{gbp.deb.changelog.ChangeLog.__init__} + - L{gbp.deb.changelog.ChangeLog.get_changes} + + >>> import gbp.deb.changelog + >>> cl = gbp.deb.changelog.ChangeLog(cl_debian) + >>> len(cl.get_changes().split('\\n')) + 19 + >>> len(cl.get_changes('0.5.31').split('\\n')) + 7 + """ + + def test_add_section(): """ Test if we can add a section to an existing changelog -- cgit v1.2.3