From a457ccd24f7960b61528b2a2a7a2ed8f0d5c2389 Mon Sep 17 00:00:00 2001 From: Juerg Haefliger Date: Mon, 4 Dec 2023 14:04:50 +0100 Subject: [PATCH] UBUNTU: [Packaging] scripts: Rewrite insert-ubuntu-changes in Python Jira: https://warthogs.atlassian.net/browse/KERNTT-666 Signed-off-by: Juerg Haefliger Acked-by: Dimitri John Ledkov Signed-off-by: Dimitri John Ledkov --- debian/scripts/misc/insert-ubuntu-changes | 131 +++++++++------------- 1 file changed, 56 insertions(+), 75 deletions(-) diff --git a/debian/scripts/misc/insert-ubuntu-changes b/debian/scripts/misc/insert-ubuntu-changes index 20864874ddba..557d4e2d0b8c 100755 --- a/debian/scripts/misc/insert-ubuntu-changes +++ b/debian/scripts/misc/insert-ubuntu-changes @@ -1,83 +1,64 @@ -#!/usr/bin/perl +#!/usr/bin/env python3 -if ($#ARGV != 2 && $#ARGV != 3) { - die "Usage: $0 []\n"; -} -if ($#ARGV == 2) { - push(@ARGV, "debian.master/changelog") -} -my ($changelog, $end, $start, $source_changelog) = @ARGV; +import re +import os +import sys -$end =~ s/^\D+//; -$start =~ s/^\D+//; +def version_cmp(a, b): + a = re.split(r"[\.-]+", a) + b = re.split(r"[\.-]+", b) + i = 0 + while True: + if len(a) <= i: + if len(b) <= i: + return 0 + return -1 + if len(b) <= i: + return 1 + if int(a[i]) < int(b[i]): + return -1 + if int(a[i]) > int(b[i]): + return 1 + i += 1 -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; - } - } -} +if len(sys.argv) == 4: + sys.argv.append("debian.master/changelog") -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); +if len(sys.argv) == 5: + changelog, end, start, source_changelog = sys.argv[1:] +else: + print("Usage: insert-ubuntu-changes []") + sys.exit(1) - next if (/^\s*$/); - next if (/^\s--/); - next if (/^\s\s[^\*\s]/); +changes = [] +output = False +with open(source_changelog) as fh: + for line in fh: + m = re.match(r"^\S+\s+\((.*)\)", line) + if m: + if version_cmp(m.group(1), end) <= 0: + break + if m.group(1) == start: + output = True + if output: + changes.append("\n") + changes.append(" [ Ubuntu: {} ]\n".format(m.group(1))) + changes.append("\n") + continue - push(@changes, $_); -} -close(CHG); + if output and re.match(r"^( * | | )\S", line): + changes.append(line) -open(CHANGELOG, "< $changelog") or die "Cannot open changelog"; -open(NEW, "> $changelog.new") or die "Cannot open new changelog"; +printed = 3 +with open(changelog + ".new", "w") as fh_new: + with open(changelog) as fh: + for line in fh: + if line.startswith(" CHANGELOG: "): + printed -= 1 + fh_new.write(line) + if printed == 0: + fh_new.write("".join(changes)) + continue + fh_new.write(line) -$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"); +os.rename(changelog + ".new", changelog)