X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;f=tb-update.pl;fp=tb-update.pl;h=d5eed35a5f52c796af1a2d918c4d48bc1379df94;hb=3ec6b37d1ae4571c56e8f228817ba829ac2ef3bc;hp=cd4e177ab00ca0ef7895429648d369ff13dc8d77;hpb=7813c2240eeb9c10032dc14f91d362b84fa5f158;p=topbloke.git diff --git a/tb-update.pl b/tb-update.pl index cd4e177..d5eed35 100755 --- a/tb-update.pl +++ b/tb-update.pl @@ -145,15 +145,41 @@ sub update_base ($) { next if $source_inc{$dep}; unless unless $anc_inc{$dep}; my $unw_dr = { Name => $dep }; + my @prune; + my $pruned = sub { + my ($commit) = @_; + return grep { commit_has_ancestor($_, $cand) } @prune; + }; + my $prune = sub { + my ($commit) = @_; + return if $pruned->($commit); + push @prune, $commit; + }; run_git(sub { my ($cand, @parents) = split; + if (dep_included_in($dep, $cand)) { + $prune->($cand); + return; + } + my @parents_with = + grep { dep_included_in($dep, $_) } @parents; + return if !@parents_with; # irrelevant merge + return if $pruned->($cand); # not interesting any more + $prune->($_) foreach @parents_with; + + + PROBLEM @prune is bad we want to know why + we have found thing not just whether found + + # return if dep_included_in($dep, $cand); - return if grep { !dep_included_in($dep, $_) } @parents; + return if # OK, it's missing from $cand but included in # all of $cand's parents. }, - qw(git-rev-list --date-order --remove-empty) + qw(git-rev-list --date-order --full-history + --remove-empty) '--pretty=format:%H %P%n', $dep, '--', '.topbloke/+included');