From 48a78f01a84795263187cfbc71cf573c8c4596ee Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Thu, 1 Jul 2021 21:10:53 +0200 Subject: [PATCH] build: add script to find commits suitable for cherry picking Signed-off-by: Jo-Philipp Wich --- build/find-cherry-pick-candidates.pl | 44 ++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100755 build/find-cherry-pick-candidates.pl 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;