tag 634848 + patch
thanks
Hi Jelmer (2011.07.20_17:10:13_+0200)
> FWIW bzr-builddeb has some code for this that I've been meaning to
> upstream into python-debian.
Here's a patch that does that.
Jelmer: It looks like your current code doesn't deal with bug lists that
span lines.
SR
--
Stefano Rivera
http://tumbleweed.org.za/
H: +27 21 465 6908 C: +27 72 419 8559 UCT: x3127
diff --git a/lib/debian/changelog.py b/lib/debian/changelog.py
index 93c348f..b7e68cd 100644
--- a/lib/debian/changelog.py
+++ b/lib/debian/changelog.py
@@ -128,6 +128,25 @@ class ChangeBlock(object):
changes.append(change)
self._changes = changes
+ def _get_bugs_closed_generic(self, type_re):
+ changes = u' '.join(self._changes)
+ bugs = []
+ for match in type_re.finditer(changes):
+ closes_list = match.group(0)
+ for match in re.finditer("\d+", closes_list):
+ bugs.append(int(match.group(0)))
+ return bugs
+
+ def _get_bugs_closed(self):
+ return self._get_bugs_closed_generic(closes)
+
+ bugs_closed = property(_get_bugs_closed)
+
+ def _get_lp_bugs_closed(self):
+ return self._get_bugs_closed_generic(closeslp)
+
+ lp_bugs_closed = property(_get_lp_bugs_closed)
+
def __unicode__(self):
# TODO(jsw): Switch to StringIO or a list to join at the end.
block = ""
@@ -183,6 +202,9 @@ vim_variables = re.compile('^vim:', re.IGNORECASE)
cvs_keyword = re.compile('^\$\w+:.*\$')
comments = re.compile('^\# ')
more_comments = re.compile('^/\*.*\*/')
+closes = re.compile('closes:\s*(?:bug)?\#?\s?\d+(?:,\s*(?:bug)?\#?\s?\d+)*',
+ re.IGNORECASE)
+closeslp = re.compile('lp:\s+\#\d+(?:,\s*\#\d+)*', re.IGNORECASE)
old_format_re1 = re.compile('^(\w+\s+\w+\s+\d{1,2} \d{1,2}:\d{1,2}:\d{1,2}'
'\s+[\w\s]*\d{4})\s+(.*)\s+(<|\()(.*)(\)|>)')
diff --git a/lib/debian/deb822.py b/lib/debian/deb822.py
index 4c5b74e..c4ad14c 100644
--- a/lib/debian/deb822.py
+++ b/lib/debian/deb822.py
@@ -308,6 +308,9 @@ class Deb822(Deb822Dict):
necessary in order to properly interpret the strings.)
"""
+ if isinstance(sequence, basestring):
+ sequence = sequence.splitlines()
+
if _have_apt_pkg and use_apt_pkg and isinstance(sequence, file):
parser = apt_pkg.TagFile(sequence)
for section in parser:
diff --git a/tests/test_changelog b/tests/test_changelog
index 1924339..8aada8d 100644
--- a/tests/test_changelog
+++ b/tests/test_changelog
@@ -1,7 +1,9 @@
gnutls13 (1:1.4.1-1) unstable; urgency=HIGH
[ James Westby ]
- * New upstream release.
+ * New upstream release. Closes: #123, #456,
+ #789. LP: #1234, #2345,
+ #3456
* Remove the following patches as they are now included upstream:
- 10_certtoolmanpage.diff
- 15_fixcompilewarning.diff
diff --git a/tests/test_changelog.py b/tests/test_changelog.py
index 65e7d66..94b1728 100755
--- a/tests/test_changelog.py
+++ b/tests/test_changelog.py
@@ -55,7 +55,9 @@ class ChangelogTests(unittest.TestCase):
"""gnutls13 (1:1.4.1-1) unstable; urgency=HIGH
[ James Westby ]
- * New upstream release.
+ * New upstream release. Closes: #123, #456,
+ #789. LP: #1234, #2345,
+ #3456
* Remove the following patches as they are now included upstream:
- 10_certtoolmanpage.diff
- 15_fixcompilewarning.diff
@@ -161,6 +163,14 @@ class ChangelogTests(unittest.TestCase):
self.assertEqual(c.epoch, '1')
self.assertEqual(str(c.version), c.full_version)
+ def test_bugs_closed(self):
+ f = open('test_changelog')
+ c = changelog.Changelog(f)
+ f.close()
+ block = next(iter(c))
+ self.assertEqual(block.bugs_closed, [123, 456, 789])
+ self.assertEqual(block.lp_bugs_closed, [1234, 2345, 3456])
+
def test_allow_full_stops_in_distribution(self):
f = open('test_changelog_full_stops')
c = changelog.Changelog(f)
diff --git a/tests/test_deb822.py b/tests/test_deb822.py
index c3806bd..8f23e78 100755
--- a/tests/test_deb822.py
+++ b/tests/test_deb822.py
@@ -821,6 +821,16 @@ Description: python modules to work with Debian-related data formats
UNPARSED_PARAGRAPHS_WITH_COMMENTS.splitlines(), use_apt_pkg=False))
self._test_iter_paragraphs_comments(paragraphs)
+ def test_iter_paragraphs_string_comments_use_apt_pkg(self):
+ paragraphs = list(deb822.Deb822.iter_paragraphs(
+ UNPARSED_PARAGRAPHS_WITH_COMMENTS, use_apt_pkg=True))
+ self._test_iter_paragraphs_comments(paragraphs)
+
+ def test_iter_paragraphs_string_comments_native(self):
+ paragraphs = list(deb822.Deb822.iter_paragraphs(
+ UNPARSED_PARAGRAPHS_WITH_COMMENTS, use_apt_pkg=False))
+ self._test_iter_paragraphs_comments(paragraphs)
+
class TestPkgRelations(unittest.TestCase):