#!/usr/bin/perl if ($#ARGV != 2 && $#ARGV != 3) { die "Usage: $0 []\n"; } if ($#ARGV == 2) { push(@ARGV, "debian.master/changelog") } my ($changelog, $end, $start, $source_changelog) = @ARGV; $end =~ s/^\D+//; $start =~ s/^\D+//; sub version_cmp($$) { my @a = split(/[\.-]+/, $_[0]); my @b = split(/[\.-]+/, $_[1]); for (my $i = 1;; $i++) { if (!defined $a[$i]) { if (!defined $b[$i]) { return 0; } return -1; } if (!defined $b[$i]) { return 1; } if ($a[$i] < $b[$i]) { return -1; } if ($a[$i] > $b[$i]) { return 1; } } } my @changes = (); my $output = 0; open(CHG, "<$source_changelog") || open(CHG, ") { if (/^\S+\s+\((.*)\)/) { if (version_cmp($1, $end) <= 0) { last; } if ($1 eq $start) { $output = 1; } if ($output) { push(@changes, "\n [ Ubuntu: $1 ]\n\n"); next; } } next if ($output == 0); next if (/^\s*$/); next if (/^\s--/); next if (/^\s\s[^\*\s]/); push(@changes, $_); } close(CHG); open(CHANGELOG, "< $changelog") or die "Cannot open changelog"; open(NEW, "> $changelog.new") or die "Cannot open new changelog"; $printed = 3; while () { if (/^ CHANGELOG: /) { $printed--; print NEW; if ($printed == 0) { print NEW @changes; } next; } print NEW; } close(NEW); close(CHANGELOG); rename("$changelog.new", "$changelog");