+sub memo ($$$) {
+ my ($memos,$key,$code) = @_;
+ return $memos->{$key} if exists $memos->{$key};
+ debug("----- $key");
+ $memos->{$key} = $code->();
+}
+
+sub merge_base ($$) {
+ my ($r,$s) = @_; # refs, ideally
+ our %memos;
+ return memo(\%memos, "$r $s", sub {
+ run_git_1line(qw(merge-base), $r, $s);
+ });
+}
+
+sub committ_date ($) {
+ my ($ref) = @_;
+ my $l = run_git_1line(qw(git-log --date=raw -n1 --pretty=format:%cd), $ref);
+ $l =~ m/^(\d+)\s/ or die;
+ return $l;
+}
+