On Tue, Apr 08, 2008 at 01:45:30PM +1000, Anthony Towns wrote:
> FWIW, attached is something that'll take a directory of changesets
> (".") and either die with an error if there's a problem, or print out
> the order they should be applied in.*sigh* Cheers, aj
#!/usr/bin/perl -w
use strict;
my $dir = ".";
my $head = undef;
my %next = ();
my %prev = ();
opendir DIR, "$dir" or die "can't opendir $dir";
while (my $chset = readdir DIR) {
next if ($chset eq "." || $chset eq "..");
my $path = "$dir/$chset";
next if (! -r $path);
open CHSET, "< $path" or die "can't open $path";
while(<CHSET>) {
chomp;
next unless /^Prev-Changeset:\s*(\S.*)$/;
my $p = $1;
$prev{$chset} = $p;
if (defined $next{$p}) {
die "branch: $p -> $chset and $next{$p}";
}
$next{$p} = $chset;
last;
}
if (not defined $prev{$chset}) {
if (defined $head) {
die "multipled heads: $chset, $head\n";
}
$head = $chset;
}
close CHSET;
}
my @res = ($head);
for (my $c = $head; defined $next{$c}; $c = $next{$c}) {
push @res, $next{$c};
}
if (scalar(@res) lt scalar(keys %prev)) {
die "some changesets in a loop";
}
print join(",", @res)."\n";
signature.asc
Description: Digital signature

