#!/usr/bin/perl -w
use strict;
use Git;
use Error qw(:try);

my $repo = Git->repository();

my $amend = (scalar @ARGV > 0) ? ("'" . shift(@ARGV) . "'") : '';

while (my $SHA=<>) {
	chomp $SHA;

	git_cmd_try {
		$SHA = $repo->command_oneline('rev-parse', $SHA);
	} "bad SHA";

	$repo->command_noisy('describe', '--exact-match', '--contains', $SHA);

	$ENV{'EDITOR'} = qq(stable_commitmsg $SHA $amend);
	try {
		print scalar($repo->command_oneline('cherry-pick', '-e', $SHA)),
		      "\n";
	} catch Git::Error::Command with {
		my $E = shift;
		die "cherry-pick failed with " . $E->value() . "\n" .
			"after fixing up, run:\n" .
			qq(EDITOR="$ENV{'EDITOR'}" git commit -a\n);
	}
}

1;
