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

Reply via email to