diff options
-rwxr-xr-x | build/find-cherry-pick-candidates.pl | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/build/find-cherry-pick-candidates.pl b/build/find-cherry-pick-candidates.pl new file mode 100755 index 0000000000..658c499fa4 --- /dev/null +++ b/build/find-cherry-pick-candidates.pl @@ -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; |