build: add script to find commits suitable for cherry picking
authorJo-Philipp Wich <jo@mein.io>
Thu, 1 Jul 2021 19:10:53 +0000 (21:10 +0200)
committerJo-Philipp Wich <jo@mein.io>
Thu, 1 Jul 2021 19:12:57 +0000 (21:12 +0200)
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
build/find-cherry-pick-candidates.pl [new file with mode: 0755]

diff --git a/build/find-cherry-pick-candidates.pl b/build/find-cherry-pick-candidates.pl
new file mode 100755 (executable)
index 0000000..658c499
--- /dev/null
@@ -0,0 +1,44 @@
+#!/usr/bin/env perl
+
+use strict;
+
+sub git {
+       my $res = undef;
+
+       if (open my $git, '-|', 'git', @_) {
+               {
+                       local $/;
+                       $res = readline $git;
+               }
+
+               chomp $res;
+               close $git;
+       }
+
+       return $res;
+}
+
+my $release_branch = git(qw(rev-parse --abbrev-ref HEAD));
+my $default_branch = system(qw(git show-ref --verify --quiet refs/heads/main)) ? 'master' : 'main';
+
+if ($release_branch eq $default_branch) {
+       printf STDERR "Please execute from a non-default branch\n";
+       exit 1;
+}
+
+open my $cherry, '-|', 'git', 'cherry', '-v', $release_branch, $default_branch;
+
+while (defined(my $line = readline $cherry)) {
+       my ($id, $subject) = $line =~ m!^\+ ([a-f0-9]+) (.*)$!;
+       next unless $id;
+
+       my $found = git('log', '-1', '-E', "--grep=(backported|cherry picked) from commit $id");
+       next if $found;
+
+       my @files = split /\n/, git('show', '--pretty=format:', '--name-only', $id);
+       next unless grep { !/\.pot?$/ } @files;
+
+       print "$id $subject\n";
+}
+
+close $cherry;