[git-buildpackage] extra newline in gbp.deb.changelog
Guido Günther
agx at sigxcpu.org
Tue Nov 7 09:56:18 CET 2017
Hi Ken,
On Mon, Nov 06, 2017 at 03:21:46PM -0700, Ken Dreyer wrote:
> Here's a really simple debian/changelog file:
>
> $ cat debian/changelog
> testpkg (1.0.0-1) xenial; urgency=low
>
> * Initial package
>
> -- Ken Dreyer <kdreyer at redhat.com> Tue, 06 Jun 2017 14:46:37 -0600
>
>
> The following code works slightly differently between Python 2 (eg.
> git-buildpackage 0.7.2) and Python 3 (with gbp master):
>
> from gbp.deb.changelog import ChangeLog
> clog = ChangeLog(filename='debian/changelog')
> clog['Changes']
>
> In Python 2 (old gbp versions), the clog['Changes'] string is not
> prefixed with a newline. It simply starts with the first line of
> debian/changelog (well, prefixed by dpkg-parsechangelog's
> indentation). In Python 3 (gbp master), the string always starts with
> a spurious newline as the first character.
>
> The key difference is that Python 2's message_from_string() would
> discard the newline that dpkg-parsechangelog prints after "Changes:".
> Python 3 does not discard this newline.
>
> I'm not sure what is more "correct".
>
> Does it make sense for gbp to go back to the old behavior?
>
> We could do something like:
>
> diff --git a/gbp/deb/changelog.py b/gbp/deb/changelog.py
> index 33d83c1..e6c9176 100644
> --- a/gbp/deb/changelog.py
> +++ b/gbp/deb/changelog.py
> @@ -118,6 +118,11 @@ class ChangeLog(object):
> cp['Upstream-Version'], cp['Debian-Version'] =
> cp['NoEpoch-Version'].rsplit('-', 1)
> else:
> cp['Debian-Version'] = cp['NoEpoch-Version']
> + # py3's email.message_from_string() saves dpkg-parsechangelog's
> + # first newline from the "Changes" field.
> + changes = cp['Changes'].lstrip("\n")
> + del cp['Changes']
> + cp['Changes'] = changes
> except TypeError:
> raise ParseChangeLogError(output.split('\n')[0])
That makes sense. I've pushed this with a testcase added.
> If not, I can handle this difference in my wrapper application. I'm
> curious what others think about this.
>
> My end goal is to get the actual "Changes" (bulleted items) in the
> /debian/changelog file. Maybe I should make my application just scan
The current classes aren't very comfortable when it comes to that but
what about adding a method that returns already parsed entries by
extending the ChangelogSection class?
Cheers,
-- Guido
> all text "Changes" text until it finds " .\n", since that is
> unchanging here.
More information about the git-buildpackage
mailing list