This is an automated email from the git hooks/post-receive script. guillem pushed a commit to branch main in repository dpkg.
View the commit online: https://git.dpkg.org/cgit/dpkg/dpkg.git/commit/?id=4451627cbc2c6b5af42c55aea22d2bcd709a5d74 commit 4451627cbc2c6b5af42c55aea22d2bcd709a5d74 Author: Guillem Jover <[email protected]> AuthorDate: Thu Sep 2 05:54:48 2021 +0200 dpkg-mergechangelogs: Add new --merge-unreleased option Closes: #582921 --- man/dpkg-mergechangelogs.pod | 11 ++++++ scripts/Makefile.am | 5 +++ scripts/dpkg-mergechangelogs.pl | 43 ++++++++++++++-------- scripts/t/merge_changelogs.t | 10 ++++- scripts/t/merge_changelogs/ch-unreleased-a | 12 ++++++ scripts/t/merge_changelogs/ch-unreleased-b | 12 ++++++ scripts/t/merge_changelogs/ch-unreleased-merged | 24 ++++++++++++ .../t/merge_changelogs/ch-unreleased-merged-basic | 25 +++++++++++++ scripts/t/merge_changelogs/ch-unreleased-old | 5 +++ 9 files changed, 131 insertions(+), 16 deletions(-) diff --git a/man/dpkg-mergechangelogs.pod b/man/dpkg-mergechangelogs.pod index 4fd300b81..3db49ae48 100644 --- a/man/dpkg-mergechangelogs.pod +++ b/man/dpkg-mergechangelogs.pod @@ -48,6 +48,17 @@ content of the entry). =over +=item B<--merge-unreleased> + +Ignore the version number when the entries are marked as B<UNRELEASED> +(since dpkg 1.21.0). + +This is useful when you have diverging development for versions that have +not yet been released. For instance 2.1-1 is released, then development +happens for the new 2.2-1 and then for 2.3-1, where it makes sense to just +end with a coalesced entry for 2.3-1 including all the development done in +2.2-1. + =item B<-m>, B<--merge-prereleases> Drop the part after the last tilde in the version number when doing diff --git a/scripts/Makefile.am b/scripts/Makefile.am index ac9ab5d3b..1d5308115 100644 --- a/scripts/Makefile.am +++ b/scripts/Makefile.am @@ -383,6 +383,11 @@ test_data = \ t/merge_changelogs/ch-merged-basic \ t/merge_changelogs/ch-merged-pr \ t/merge_changelogs/ch-merged-pr-basic \ + t/merge_changelogs/ch-unreleased-a \ + t/merge_changelogs/ch-unreleased-b \ + t/merge_changelogs/ch-unreleased-merged \ + t/merge_changelogs/ch-unreleased-merged-basic \ + t/merge_changelogs/ch-unreleased-old \ t/mk/debian/changelog \ t/mk/architecture.mk \ t/mk/buildflags.mk \ diff --git a/scripts/dpkg-mergechangelogs.pl b/scripts/dpkg-mergechangelogs.pl index 6216edabb..ca233714d 100755 --- a/scripts/dpkg-mergechangelogs.pl +++ b/scripts/dpkg-mergechangelogs.pl @@ -66,18 +66,22 @@ sub usage { Options: -m, --merge-prereleases merge pre-releases together, ignores everything - after the last '~' in the version. + after the last '~' in the version. + --merge-unreleased merge UNRELEASED entries together, ignoring their + version numbers. -?, --help show this help message. --version show the version. "), $Dpkg::PROGNAME; } my $merge_prereleases; +my $merge_unreleased; my @options_spec = ( 'help|?' => sub { usage(); exit(0) }, 'version' => sub { version(); exit(0) }, 'merge-prereleases|m' => \$merge_prereleases, + 'merge-unreleased' => \$merge_unreleased, ); { @@ -151,12 +155,12 @@ exit $exitcode; sub get_items_to_merge { my @items = (shift @o, shift @a, shift @b); my @arrays = (\@o, \@a, \@b); - my $minver; + my $minitem; foreach my $i (0 .. 2) { - if (defined $minver and defined $items[$i]) { - my $cmp = compare_versions($minver, $items[$i]->get_version()); + if (defined $minitem and defined $items[$i]) { + my $cmp = compare_versions($minitem, $items[$i]); if ($cmp > 0) { - $minver = $items[$i]->get_version(); + $minitem = $items[$i]; foreach my $j (0 .. $i - 1) { unshift @{$arrays[$j]}, $items[$j]; $items[$j] = undef; @@ -166,7 +170,7 @@ sub get_items_to_merge { $items[$i] = undef; } } else { - $minver = $items[$i]->get_version() if defined $items[$i]; + $minitem = $items[$i] if defined $items[$i]; } } return @items; @@ -177,21 +181,30 @@ sub get_items_to_merge { # on which they are based. sub compare_versions { my ($a, $b) = @_; + return 0 if not defined $a and not defined $b; return 1 if not defined $b; return -1 if not defined $a; - $a = $a->get_version() if ref($a) and $a->isa('Dpkg::Changelog::Entry'); - $b = $b->get_version() if ref($b) and $b->isa('Dpkg::Changelog::Entry'); + + my ($av, $bv) = ($a, $b); + + $av = $a->get_version() if ref $a and $a->isa('Dpkg::Changelog::Entry'); + $bv = $b->get_version() if ref $b and $b->isa('Dpkg::Changelog::Entry'); + + if ($merge_unreleased) { + return 0 if $a->get_distributions() eq 'UNRELEASED' and + $b->get_distributions() eq 'UNRELEASED'; + } # Backports are not real prereleases. - $a =~ s/~(bpo|deb)/+$1/; - $b =~ s/~(bpo|deb)/+$1/; + $av =~ s/~(bpo|deb)/+$1/; + $bv =~ s/~(bpo|deb)/+$1/; if ($merge_prereleases) { - $a =~ s/~[^~]*$//; - $b =~ s/~[^~]*$//; + $av =~ s/~[^~]*$//; + $bv =~ s/~[^~]*$//; } - $a = Dpkg::Version->new($a); - $b = Dpkg::Version->new($b); - return $a <=> $b; + $av = Dpkg::Version->new($av); + $bv = Dpkg::Version->new($bv); + return $av <=> $bv; } # Merge changelog entries smartly by merging individually the different diff --git a/scripts/t/merge_changelogs.t b/scripts/t/merge_changelogs.t index dfb7521b0..3f76d5df6 100644 --- a/scripts/t/merge_changelogs.t +++ b/scripts/t/merge_changelogs.t @@ -16,7 +16,7 @@ use strict; use warnings; -use Test::More tests => 3; +use Test::More tests => 4; use File::Spec; use File::Compare; @@ -51,9 +51,17 @@ my @input = ("$datadir/ch-old", "$datadir/ch-a", "$datadir/ch-b"); if ($has_alg_merge) { test_merge("$datadir/ch-merged", @input); test_merge("$datadir/ch-merged-pr", '-m', @input); + test_merge("$datadir/ch-unreleased-merged", '--merge-unreleased', + ("$datadir/ch-unreleased-old", + "$datadir/ch-unreleased-a", + "$datadir/ch-unreleased-b")); } else { test_merge("$datadir/ch-merged-basic", @input); test_merge("$datadir/ch-merged-pr-basic", '-m', @input); + test_merge("$datadir/ch-unreleased-merged-basic", '--merge-unreleased', + ("$datadir/ch-unreleased-old", + "$datadir/ch-unreleased-a", + "$datadir/ch-unreleased-b")); } test_merge("$datadir/ch-badver-merged", ("$datadir/ch-badver-old", "$datadir/ch-badver-a", "$datadir/ch-badver-b")); diff --git a/scripts/t/merge_changelogs/ch-unreleased-a b/scripts/t/merge_changelogs/ch-unreleased-a new file mode 100644 index 000000000..d86d3ffb2 --- /dev/null +++ b/scripts/t/merge_changelogs/ch-unreleased-a @@ -0,0 +1,12 @@ +test (1.2-0) UNRELEASED; urgency=low + + * New upstream release. + - Adds a new feature. + + -- Dpkg Developers <[email protected]> Thu, 02 Sep 2021 05:26:30 +0200 + +test (1.0-1) unstable; urgency=low + + * Initial release. + + -- Dpkg Developers <[email protected]> Wed, 20 Aug 1997 00:36:28 +0000 diff --git a/scripts/t/merge_changelogs/ch-unreleased-b b/scripts/t/merge_changelogs/ch-unreleased-b new file mode 100644 index 000000000..96263e317 --- /dev/null +++ b/scripts/t/merge_changelogs/ch-unreleased-b @@ -0,0 +1,12 @@ +test (1.1-1) UNRELEASED; urgency=low + + * New upstream release. + - Fixes a random bug. + + -- Dpkg Developers <[email protected]> Wed, 01 Sep 2021 05:27:48 +0200 + +test (1.0) unstable; urgency=low + + * Initial release. + + -- Dpkg Developers <[email protected]> Wed, 20 Aug 1997 00:36:28 +0000 diff --git a/scripts/t/merge_changelogs/ch-unreleased-merged b/scripts/t/merge_changelogs/ch-unreleased-merged new file mode 100644 index 000000000..5fbf86636 --- /dev/null +++ b/scripts/t/merge_changelogs/ch-unreleased-merged @@ -0,0 +1,24 @@ +<<<<<<< +test (1.2-0) UNRELEASED; urgency=low +======= +test (1.1-1) UNRELEASED; urgency=low +>>>>>>> + + * New upstream release. +<<<<<<< + - Adds a new feature. +======= + - Fixes a random bug. +>>>>>>> + +<<<<<<< + -- Dpkg Developers <[email protected]> Thu, 02 Sep 2021 05:26:30 +0200 +======= + -- Dpkg Developers <[email protected]> Wed, 01 Sep 2021 05:27:48 +0200 +>>>>>>> + +test (1.0-1) unstable; urgency=low + + * Initial release. + + -- Dpkg Developers <[email protected]> Wed, 20 Aug 1997 00:36:28 +0000 diff --git a/scripts/t/merge_changelogs/ch-unreleased-merged-basic b/scripts/t/merge_changelogs/ch-unreleased-merged-basic new file mode 100644 index 000000000..dd6938c10 --- /dev/null +++ b/scripts/t/merge_changelogs/ch-unreleased-merged-basic @@ -0,0 +1,25 @@ +<<<<<<< +test (1.2-0) UNRELEASED; urgency=low +======= +test (1.1-1) UNRELEASED; urgency=low +>>>>>>> + +<<<<<<< + * New upstream release. + - Adds a new feature. +======= + * New upstream release. + - Fixes a random bug. +>>>>>>> + +<<<<<<< + -- Dpkg Developers <[email protected]> Thu, 02 Sep 2021 05:26:30 +0200 +======= + -- Dpkg Developers <[email protected]> Wed, 01 Sep 2021 05:27:48 +0200 +>>>>>>> + +test (1.0-1) unstable; urgency=low + + * Initial release. + + -- Dpkg Developers <[email protected]> Wed, 20 Aug 1997 00:36:28 +0000 diff --git a/scripts/t/merge_changelogs/ch-unreleased-old b/scripts/t/merge_changelogs/ch-unreleased-old new file mode 100644 index 000000000..e9377c3be --- /dev/null +++ b/scripts/t/merge_changelogs/ch-unreleased-old @@ -0,0 +1,5 @@ +test (1.0) unstable; urgency=low + + * Initial release. + + -- Dpkg Developers <[email protected]> Wed, 20 Aug 1997 00:36:28 +0000 -- Dpkg.Org's dpkg

