summaryrefslogtreecommitdiffhomepage
path: root/build/find-cherry-pick-candidates.pl
blob: 658c499fa4579f6c72bb96d1df43568b143f7019 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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;