diff mbox series

[Unstable] UBUNTU: [Packaging] Rewrite debian/scripts/misc/insert-changes.pl in Python

Message ID 20211101094005.24497-1-juergh@canonical.com
State New
Headers show
Series [Unstable] UBUNTU: [Packaging] Rewrite debian/scripts/misc/insert-changes.pl in Python | expand

Commit Message

Juerg Haefliger Nov. 1, 2021, 9:40 a.m. UTC
Rewrite the insert-changes.pl script in Python to get us one step closer
to dropping Perl as an Ubuntu kernel build dependency.

Signed-off-by: Juerg Haefliger <juergh@canonical.com>
---
 debian/rules.d/1-maintainer.mk        |  2 +-
 debian/scripts/misc/insert-changes    | 35 ++++++++++++++++++++++
 debian/scripts/misc/insert-changes.pl | 43 ---------------------------
 3 files changed, 36 insertions(+), 44 deletions(-)
 create mode 100755 debian/scripts/misc/insert-changes
 delete mode 100755 debian/scripts/misc/insert-changes.pl

Comments

Tim Gardner Nov. 1, 2021, 5:38 p.m. UTC | #1
Acked-by: Tim Gardner <tim.gardner@canonical.com>

Looks like it oughta work. It should be obvious if it doesn't.

On 11/1/21 3:40 AM, Juerg Haefliger wrote:
> Rewrite the insert-changes.pl script in Python to get us one step closer
> to dropping Perl as an Ubuntu kernel build dependency.
> 
> Signed-off-by: Juerg Haefliger <juergh@canonical.com>
> ---
>   debian/rules.d/1-maintainer.mk        |  2 +-
>   debian/scripts/misc/insert-changes    | 35 ++++++++++++++++++++++
>   debian/scripts/misc/insert-changes.pl | 43 ---------------------------
>   3 files changed, 36 insertions(+), 44 deletions(-)
>   create mode 100755 debian/scripts/misc/insert-changes
>   delete mode 100755 debian/scripts/misc/insert-changes.pl
> 
> diff --git a/debian/rules.d/1-maintainer.mk b/debian/rules.d/1-maintainer.mk
> index 7c13fcdaa98a..5917b89bbd49 100644
> --- a/debian/rules.d/1-maintainer.mk
> +++ b/debian/rules.d/1-maintainer.mk
> @@ -113,7 +113,7 @@ printchanges:
>   	$(DROOT)/scripts/misc/git-ubuntu-log $(ubuntu_log_opts)
>   
>   insertchanges: autoreconstruct finalchecks
> -	@perl -w -f $(DROOT)/scripts/misc/insert-changes.pl $(DROOT) $(DEBIAN)
> +	$(DROOT)/scripts/misc/insert-changes $(DROOT) $(DEBIAN)
>   
>   autoreconstruct:
>   	# No need for reconstruct for -rc kernels since we don't upload an
> diff --git a/debian/scripts/misc/insert-changes b/debian/scripts/misc/insert-changes
> new file mode 100755
> index 000000000000..284b6788cc13
> --- /dev/null
> +++ b/debian/scripts/misc/insert-changes
> @@ -0,0 +1,35 @@
> +#!/usr/bin/python3
> +
> +import os
> +import sys
> +
> +from subprocess import check_output
> +
> +droot = 'debian'
> +if len(sys.argv) > 1:
> +    droot = sys.argv[1]
> +
> +debian = 'debian'
> +if len(sys.argv) > 2:
> +    debian = sys.argv[2]
> +
> +rules = os.path.join(droot, 'rules')
> +changelog = os.path.join(debian, 'changelog')
> +changelog_new = os.path.join(debian, 'changelog.new')
> +
> +# Generate the list of new changes
> +changes = check_output(['make', '-s', '-f', rules, 'printchanges']).decode('UTF-8')
> +
> +# Insert the new changes into the changelog
> +with open(changelog) as orig, open(changelog_new, 'w') as new:
> +    printed = False
> +    for line in orig:
> +        if line.startswith('  CHANGELOG: '):
> +            if not printed:
> +                printed = True
> +                new.write(changes)
> +        else:
> +            new.write(line)
> +
> +# Replace the original changelog with the new one
> +os.rename(changelog_new, changelog)
> diff --git a/debian/scripts/misc/insert-changes.pl b/debian/scripts/misc/insert-changes.pl
> deleted file mode 100755
> index 4eed4e28f9d3..000000000000
> --- a/debian/scripts/misc/insert-changes.pl
> +++ /dev/null
> @@ -1,43 +0,0 @@
> -#!/usr/bin/perl -w
> -
> -my $debian;
> -$droot = $ARGV[0] if (defined $ARGV[0]);
> -$droot = 'debian' if (!defined $droot);
> -$debian = $ARGV[1] if (defined $ARGV[1]);
> -$debian = 'debian.master' if (!defined $debian);
> -
> -system("make -s -f $droot/rules printchanges > $debian/changes");
> -
> -open(CHANGELOG, "< $debian/changelog") or die "Cannot open changelog";
> -open(CHANGES, "< $debian/changes") or die "Cannot open new changes";
> -open(NEW, "> $debian/changelog.new") or die "Cannot open new changelog";
> -
> -$printed = 0;
> -my $skip_newline = 0;
> -
> -while (<CHANGELOG>) {
> -	if (/^  CHANGELOG: /) {
> -		next if $printed;
> -
> -		$skip_newline = 1;
> -		while (<CHANGES>) {
> -			$skip_newline = 0;
> -			print NEW;
> -		}
> -
> -		$printed = 1;
> -	} else {
> -		if (/^$/ && $skip_newline == 1) {
> -			$skip_newline = 0;
> -			next;
> -		}
> -		print NEW;
> -	}
> -}
> -
> -close(NEW);
> -close(CHANGES);
> -close(CHANGELOG);
> -
> -rename("$debian/changelog.new", "$debian/changelog");
> -unlink("$debian/changes");
>
Thadeu Lima de Souza Cascardo Nov. 1, 2021, 6:04 p.m. UTC | #2
On Mon, Nov 01, 2021 at 10:40:05AM +0100, Juerg Haefliger wrote:
> Rewrite the insert-changes.pl script in Python to get us one step closer
> to dropping Perl as an Ubuntu kernel build dependency.
> 
> Signed-off-by: Juerg Haefliger <juergh@canonical.com>
> ---
>  debian/rules.d/1-maintainer.mk        |  2 +-
>  debian/scripts/misc/insert-changes    | 35 ++++++++++++++++++++++
>  debian/scripts/misc/insert-changes.pl | 43 ---------------------------
>  3 files changed, 36 insertions(+), 44 deletions(-)
>  create mode 100755 debian/scripts/misc/insert-changes
>  delete mode 100755 debian/scripts/misc/insert-changes.pl
> 
> diff --git a/debian/rules.d/1-maintainer.mk b/debian/rules.d/1-maintainer.mk
> index 7c13fcdaa98a..5917b89bbd49 100644
> --- a/debian/rules.d/1-maintainer.mk
> +++ b/debian/rules.d/1-maintainer.mk
> @@ -113,7 +113,7 @@ printchanges:
>  	$(DROOT)/scripts/misc/git-ubuntu-log $(ubuntu_log_opts)
>  
>  insertchanges: autoreconstruct finalchecks
> -	@perl -w -f $(DROOT)/scripts/misc/insert-changes.pl $(DROOT) $(DEBIAN) 
> +	$(DROOT)/scripts/misc/insert-changes $(DROOT) $(DEBIAN)
>  
>  autoreconstruct:
>  	# No need for reconstruct for -rc kernels since we don't upload an
> diff --git a/debian/scripts/misc/insert-changes b/debian/scripts/misc/insert-changes
> new file mode 100755
> index 000000000000..284b6788cc13
> --- /dev/null
> +++ b/debian/scripts/misc/insert-changes
> @@ -0,0 +1,35 @@
> +#!/usr/bin/python3
> +
> +import os
> +import sys
> +
> +from subprocess import check_output
> +
> +droot = 'debian'
> +if len(sys.argv) > 1:
> +    droot = sys.argv[1]
> +
> +debian = 'debian'

Should be
debian = 'debian.master'

> +if len(sys.argv) > 2:
> +    debian = sys.argv[2]
> +
> +rules = os.path.join(droot, 'rules')
> +changelog = os.path.join(debian, 'changelog')
> +changelog_new = os.path.join(debian, 'changelog.new')
> +
> +# Generate the list of new changes
> +changes = check_output(['make', '-s', '-f', rules, 'printchanges']).decode('UTF-8')
> +

Once again, I wonder if we can make this better: make calling a script
calling make calling a script. Make is good when you have a dependency
tree, but that is not the case here. I am just thinking that we should
consider the option where we keep these tools in tree, and still allow them
to be run from make if we really care, but have cranky start calling them
directly.

> +# Insert the new changes into the changelog
> +with open(changelog) as orig, open(changelog_new, 'w') as new:
> +    printed = False
> +    for line in orig:
> +        if line.startswith('  CHANGELOG: '):
> +            if not printed:
> +                printed = True
> +                new.write(changes)
> +        else:
> +            new.write(line)
> +

The newline flag is missing here. It has certainly caused a regression, after I
gave it a try.

Cascardo.

> +# Replace the original changelog with the new one
> +os.rename(changelog_new, changelog)
> diff --git a/debian/scripts/misc/insert-changes.pl b/debian/scripts/misc/insert-changes.pl
> deleted file mode 100755
> index 4eed4e28f9d3..000000000000
> --- a/debian/scripts/misc/insert-changes.pl
> +++ /dev/null
> @@ -1,43 +0,0 @@
> -#!/usr/bin/perl -w
> -
> -my $debian;
> -$droot = $ARGV[0] if (defined $ARGV[0]);
> -$droot = 'debian' if (!defined $droot);
> -$debian = $ARGV[1] if (defined $ARGV[1]);
> -$debian = 'debian.master' if (!defined $debian);
> -
> -system("make -s -f $droot/rules printchanges > $debian/changes");
> -
> -open(CHANGELOG, "< $debian/changelog") or die "Cannot open changelog";
> -open(CHANGES, "< $debian/changes") or die "Cannot open new changes";
> -open(NEW, "> $debian/changelog.new") or die "Cannot open new changelog";
> -
> -$printed = 0;
> -my $skip_newline = 0;
> -
> -while (<CHANGELOG>) {
> -	if (/^  CHANGELOG: /) {
> -		next if $printed;
> -
> -		$skip_newline = 1;
> -		while (<CHANGES>) {
> -			$skip_newline = 0;
> -			print NEW;
> -		}
> -
> -		$printed = 1;
> -	} else {
> -		if (/^$/ && $skip_newline == 1) {
> -			$skip_newline = 0;
> -			next;
> -		}
> -		print NEW;
> -	}
> -}
> -
> -close(NEW);
> -close(CHANGES);
> -close(CHANGELOG);
> -
> -rename("$debian/changelog.new", "$debian/changelog");
> -unlink("$debian/changes");
> -- 
> 2.30.2
> 
> 
> -- 
> kernel-team mailing list
> kernel-team@lists.ubuntu.com
> https://lists.ubuntu.com/mailman/listinfo/kernel-team
Juerg Haefliger Nov. 2, 2021, 7:45 a.m. UTC | #3
On Mon, 1 Nov 2021 15:04:17 -0300
Thadeu Lima de Souza Cascardo <cascardo@canonical.com> wrote:

> On Mon, Nov 01, 2021 at 10:40:05AM +0100, Juerg Haefliger wrote:
> > Rewrite the insert-changes.pl script in Python to get us one step closer
> > to dropping Perl as an Ubuntu kernel build dependency.
> > 
> > Signed-off-by: Juerg Haefliger <juergh@canonical.com>
> > ---
> >  debian/rules.d/1-maintainer.mk        |  2 +-
> >  debian/scripts/misc/insert-changes    | 35 ++++++++++++++++++++++
> >  debian/scripts/misc/insert-changes.pl | 43 ---------------------------
> >  3 files changed, 36 insertions(+), 44 deletions(-)
> >  create mode 100755 debian/scripts/misc/insert-changes
> >  delete mode 100755 debian/scripts/misc/insert-changes.pl
> > 
> > diff --git a/debian/rules.d/1-maintainer.mk b/debian/rules.d/1-maintainer.mk
> > index 7c13fcdaa98a..5917b89bbd49 100644
> > --- a/debian/rules.d/1-maintainer.mk
> > +++ b/debian/rules.d/1-maintainer.mk
> > @@ -113,7 +113,7 @@ printchanges:
> >  	$(DROOT)/scripts/misc/git-ubuntu-log $(ubuntu_log_opts)
> >  
> >  insertchanges: autoreconstruct finalchecks
> > -	@perl -w -f $(DROOT)/scripts/misc/insert-changes.pl $(DROOT) $(DEBIAN) 
> > +	$(DROOT)/scripts/misc/insert-changes $(DROOT) $(DEBIAN)
> >  
> >  autoreconstruct:
> >  	# No need for reconstruct for -rc kernels since we don't upload an
> > diff --git a/debian/scripts/misc/insert-changes b/debian/scripts/misc/insert-changes
> > new file mode 100755
> > index 000000000000..284b6788cc13
> > --- /dev/null
> > +++ b/debian/scripts/misc/insert-changes
> > @@ -0,0 +1,35 @@
> > +#!/usr/bin/python3
> > +
> > +import os
> > +import sys
> > +
> > +from subprocess import check_output
> > +
> > +droot = 'debian'
> > +if len(sys.argv) > 1:
> > +    droot = sys.argv[1]
> > +
> > +debian = 'debian'  
> 
> Should be
> debian = 'debian.master'

Indeed.

 
> > +if len(sys.argv) > 2:
> > +    debian = sys.argv[2]
> > +
> > +rules = os.path.join(droot, 'rules')
> > +changelog = os.path.join(debian, 'changelog')
> > +changelog_new = os.path.join(debian, 'changelog.new')
> > +
> > +# Generate the list of new changes
> > +changes = check_output(['make', '-s', '-f', rules, 'printchanges']).decode('UTF-8')
> > +  
> 
> Once again, I wonder if we can make this better: make calling a script
> calling make calling a script. Make is good when you have a dependency
> tree, but that is not the case here. I am just thinking that we should
> consider the option where we keep these tools in tree, and still allow them
> to be run from make if we really care, but have cranky start calling them
> directly.

Good point. Will look into it.

 
> > +# Insert the new changes into the changelog
> > +with open(changelog) as orig, open(changelog_new, 'w') as new:
> > +    printed = False
> > +    for line in orig:
> > +        if line.startswith('  CHANGELOG: '):
> > +            if not printed:
> > +                printed = True
> > +                new.write(changes)
> > +        else:
> > +            new.write(line)
> > +  
> 
> The newline flag is missing here. It has certainly caused a regression, after I
> gave it a try.

What regression is that? The output looks just fine to me. No double empty
lines in the modified changelog entry.

Oh, if debian.master/changes is empty? When would that happen?

...Juerg


> Cascardo.
> 
> > +# Replace the original changelog with the new one
> > +os.rename(changelog_new, changelog)
> > diff --git a/debian/scripts/misc/insert-changes.pl b/debian/scripts/misc/insert-changes.pl
> > deleted file mode 100755
> > index 4eed4e28f9d3..000000000000
> > --- a/debian/scripts/misc/insert-changes.pl
> > +++ /dev/null
> > @@ -1,43 +0,0 @@
> > -#!/usr/bin/perl -w
> > -
> > -my $debian;
> > -$droot = $ARGV[0] if (defined $ARGV[0]);
> > -$droot = 'debian' if (!defined $droot);
> > -$debian = $ARGV[1] if (defined $ARGV[1]);
> > -$debian = 'debian.master' if (!defined $debian);
> > -
> > -system("make -s -f $droot/rules printchanges > $debian/changes");
> > -
> > -open(CHANGELOG, "< $debian/changelog") or die "Cannot open changelog";
> > -open(CHANGES, "< $debian/changes") or die "Cannot open new changes";
> > -open(NEW, "> $debian/changelog.new") or die "Cannot open new changelog";
> > -
> > -$printed = 0;
> > -my $skip_newline = 0;
> > -
> > -while (<CHANGELOG>) {
> > -	if (/^  CHANGELOG: /) {
> > -		next if $printed;
> > -
> > -		$skip_newline = 1;
> > -		while (<CHANGES>) {
> > -			$skip_newline = 0;
> > -			print NEW;
> > -		}
> > -
> > -		$printed = 1;
> > -	} else {
> > -		if (/^$/ && $skip_newline == 1) {
> > -			$skip_newline = 0;
> > -			next;
> > -		}
> > -		print NEW;
> > -	}
> > -}
> > -
> > -close(NEW);
> > -close(CHANGES);
> > -close(CHANGELOG);
> > -
> > -rename("$debian/changelog.new", "$debian/changelog");
> > -unlink("$debian/changes");
> > -- 
> > 2.30.2
> > 
> > 
> > -- 
> > kernel-team mailing list
> > kernel-team@lists.ubuntu.com
> > https://lists.ubuntu.com/mailman/listinfo/kernel-team
Thadeu Lima de Souza Cascardo Nov. 2, 2021, 10:10 a.m. UTC | #4
On Tue, Nov 02, 2021 at 08:45:38AM +0100, Juerg Haefliger wrote:
> On Mon, 1 Nov 2021 15:04:17 -0300
> Thadeu Lima de Souza Cascardo <cascardo@canonical.com> wrote:
> 
> > On Mon, Nov 01, 2021 at 10:40:05AM +0100, Juerg Haefliger wrote:
> > > Rewrite the insert-changes.pl script in Python to get us one step closer
> > > to dropping Perl as an Ubuntu kernel build dependency.
> > > 
> > > Signed-off-by: Juerg Haefliger <juergh@canonical.com>
> > > ---
> > >  debian/rules.d/1-maintainer.mk        |  2 +-
> > >  debian/scripts/misc/insert-changes    | 35 ++++++++++++++++++++++
> > >  debian/scripts/misc/insert-changes.pl | 43 ---------------------------
> > >  3 files changed, 36 insertions(+), 44 deletions(-)
> > >  create mode 100755 debian/scripts/misc/insert-changes
> > >  delete mode 100755 debian/scripts/misc/insert-changes.pl
> > > 
> > > diff --git a/debian/rules.d/1-maintainer.mk b/debian/rules.d/1-maintainer.mk
> > > index 7c13fcdaa98a..5917b89bbd49 100644
> > > --- a/debian/rules.d/1-maintainer.mk
> > > +++ b/debian/rules.d/1-maintainer.mk
> > > @@ -113,7 +113,7 @@ printchanges:
> > >  	$(DROOT)/scripts/misc/git-ubuntu-log $(ubuntu_log_opts)
> > >  
> > >  insertchanges: autoreconstruct finalchecks
> > > -	@perl -w -f $(DROOT)/scripts/misc/insert-changes.pl $(DROOT) $(DEBIAN) 
> > > +	$(DROOT)/scripts/misc/insert-changes $(DROOT) $(DEBIAN)
> > >  
> > >  autoreconstruct:
> > >  	# No need for reconstruct for -rc kernels since we don't upload an
> > > diff --git a/debian/scripts/misc/insert-changes b/debian/scripts/misc/insert-changes
> > > new file mode 100755
> > > index 000000000000..284b6788cc13
> > > --- /dev/null
> > > +++ b/debian/scripts/misc/insert-changes
> > > @@ -0,0 +1,35 @@
> > > +#!/usr/bin/python3
> > > +
> > > +import os
> > > +import sys
> > > +
> > > +from subprocess import check_output
> > > +
> > > +droot = 'debian'
> > > +if len(sys.argv) > 1:
> > > +    droot = sys.argv[1]
> > > +
> > > +debian = 'debian'  
> > 
> > Should be
> > debian = 'debian.master'
> 
> Indeed.
> 
>  
> > > +if len(sys.argv) > 2:
> > > +    debian = sys.argv[2]
> > > +
> > > +rules = os.path.join(droot, 'rules')
> > > +changelog = os.path.join(debian, 'changelog')
> > > +changelog_new = os.path.join(debian, 'changelog.new')
> > > +
> > > +# Generate the list of new changes
> > > +changes = check_output(['make', '-s', '-f', rules, 'printchanges']).decode('UTF-8')
> > > +  
> > 
> > Once again, I wonder if we can make this better: make calling a script
> > calling make calling a script. Make is good when you have a dependency
> > tree, but that is not the case here. I am just thinking that we should
> > consider the option where we keep these tools in tree, and still allow them
> > to be run from make if we really care, but have cranky start calling them
> > directly.
> 
> Good point. Will look into it.
> 
>  
> > > +# Insert the new changes into the changelog
> > > +with open(changelog) as orig, open(changelog_new, 'w') as new:
> > > +    printed = False
> > > +    for line in orig:
> > > +        if line.startswith('  CHANGELOG: '):
> > > +            if not printed:
> > > +                printed = True
> > > +                new.write(changes)
> > > +        else:
> > > +            new.write(line)
> > > +  
> > 
> > The newline flag is missing here. It has certainly caused a regression, after I
> > gave it a try.
> 
> What regression is that? The output looks just fine to me. No double empty
> lines in the modified changelog entry.
> 
> Oh, if debian.master/changes is empty? When would that happen?
> 
> ...Juerg
> 

Whenever we rebase from a master kernel and do not have a tracking bug. Which
happens ever so often when there are CVEs-only releases.

Cascardo.

> 
> > Cascardo.
> > 
> > > +# Replace the original changelog with the new one
> > > +os.rename(changelog_new, changelog)
> > > diff --git a/debian/scripts/misc/insert-changes.pl b/debian/scripts/misc/insert-changes.pl
> > > deleted file mode 100755
> > > index 4eed4e28f9d3..000000000000
> > > --- a/debian/scripts/misc/insert-changes.pl
> > > +++ /dev/null
> > > @@ -1,43 +0,0 @@
> > > -#!/usr/bin/perl -w
> > > -
> > > -my $debian;
> > > -$droot = $ARGV[0] if (defined $ARGV[0]);
> > > -$droot = 'debian' if (!defined $droot);
> > > -$debian = $ARGV[1] if (defined $ARGV[1]);
> > > -$debian = 'debian.master' if (!defined $debian);
> > > -
> > > -system("make -s -f $droot/rules printchanges > $debian/changes");
> > > -
> > > -open(CHANGELOG, "< $debian/changelog") or die "Cannot open changelog";
> > > -open(CHANGES, "< $debian/changes") or die "Cannot open new changes";
> > > -open(NEW, "> $debian/changelog.new") or die "Cannot open new changelog";
> > > -
> > > -$printed = 0;
> > > -my $skip_newline = 0;
> > > -
> > > -while (<CHANGELOG>) {
> > > -	if (/^  CHANGELOG: /) {
> > > -		next if $printed;
> > > -
> > > -		$skip_newline = 1;
> > > -		while (<CHANGES>) {
> > > -			$skip_newline = 0;
> > > -			print NEW;
> > > -		}
> > > -
> > > -		$printed = 1;
> > > -	} else {
> > > -		if (/^$/ && $skip_newline == 1) {
> > > -			$skip_newline = 0;
> > > -			next;
> > > -		}
> > > -		print NEW;
> > > -	}
> > > -}
> > > -
> > > -close(NEW);
> > > -close(CHANGES);
> > > -close(CHANGELOG);
> > > -
> > > -rename("$debian/changelog.new", "$debian/changelog");
> > > -unlink("$debian/changes");
> > > -- 
> > > 2.30.2
> > > 
> > > 
> > > -- 
> > > kernel-team mailing list
> > > kernel-team@lists.ubuntu.com
> > > https://lists.ubuntu.com/mailman/listinfo/kernel-team  
>
diff mbox series

Patch

diff --git a/debian/rules.d/1-maintainer.mk b/debian/rules.d/1-maintainer.mk
index 7c13fcdaa98a..5917b89bbd49 100644
--- a/debian/rules.d/1-maintainer.mk
+++ b/debian/rules.d/1-maintainer.mk
@@ -113,7 +113,7 @@  printchanges:
 	$(DROOT)/scripts/misc/git-ubuntu-log $(ubuntu_log_opts)
 
 insertchanges: autoreconstruct finalchecks
-	@perl -w -f $(DROOT)/scripts/misc/insert-changes.pl $(DROOT) $(DEBIAN) 
+	$(DROOT)/scripts/misc/insert-changes $(DROOT) $(DEBIAN)
 
 autoreconstruct:
 	# No need for reconstruct for -rc kernels since we don't upload an
diff --git a/debian/scripts/misc/insert-changes b/debian/scripts/misc/insert-changes
new file mode 100755
index 000000000000..284b6788cc13
--- /dev/null
+++ b/debian/scripts/misc/insert-changes
@@ -0,0 +1,35 @@ 
+#!/usr/bin/python3
+
+import os
+import sys
+
+from subprocess import check_output
+
+droot = 'debian'
+if len(sys.argv) > 1:
+    droot = sys.argv[1]
+
+debian = 'debian'
+if len(sys.argv) > 2:
+    debian = sys.argv[2]
+
+rules = os.path.join(droot, 'rules')
+changelog = os.path.join(debian, 'changelog')
+changelog_new = os.path.join(debian, 'changelog.new')
+
+# Generate the list of new changes
+changes = check_output(['make', '-s', '-f', rules, 'printchanges']).decode('UTF-8')
+
+# Insert the new changes into the changelog
+with open(changelog) as orig, open(changelog_new, 'w') as new:
+    printed = False
+    for line in orig:
+        if line.startswith('  CHANGELOG: '):
+            if not printed:
+                printed = True
+                new.write(changes)
+        else:
+            new.write(line)
+
+# Replace the original changelog with the new one
+os.rename(changelog_new, changelog)
diff --git a/debian/scripts/misc/insert-changes.pl b/debian/scripts/misc/insert-changes.pl
deleted file mode 100755
index 4eed4e28f9d3..000000000000
--- a/debian/scripts/misc/insert-changes.pl
+++ /dev/null
@@ -1,43 +0,0 @@ 
-#!/usr/bin/perl -w
-
-my $debian;
-$droot = $ARGV[0] if (defined $ARGV[0]);
-$droot = 'debian' if (!defined $droot);
-$debian = $ARGV[1] if (defined $ARGV[1]);
-$debian = 'debian.master' if (!defined $debian);
-
-system("make -s -f $droot/rules printchanges > $debian/changes");
-
-open(CHANGELOG, "< $debian/changelog") or die "Cannot open changelog";
-open(CHANGES, "< $debian/changes") or die "Cannot open new changes";
-open(NEW, "> $debian/changelog.new") or die "Cannot open new changelog";
-
-$printed = 0;
-my $skip_newline = 0;
-
-while (<CHANGELOG>) {
-	if (/^  CHANGELOG: /) {
-		next if $printed;
-
-		$skip_newline = 1;
-		while (<CHANGES>) {
-			$skip_newline = 0;
-			print NEW;
-		}
-
-		$printed = 1;
-	} else {
-		if (/^$/ && $skip_newline == 1) {
-			$skip_newline = 0;
-			next;
-		}
-		print NEW;
-	}
-}
-
-close(NEW);
-close(CHANGES);
-close(CHANGELOG);
-
-rename("$debian/changelog.new", "$debian/changelog");
-unlink("$debian/changes");