#!/usr/bin/perl -w
#
# Use: linedep.pl <changes
my %deps = ();
$| = 1;
while (<>) {
next if /^#/;
@a = split /\001/;
if ($a[3] ne 'dead' && $a[5] ne '-') {
$a[4] = 'main' if $a[4] eq 'HEAD';
for my $line (split /:/, $a[5]) {
$deps{$line}->{$a[4]} = 1;
}
}
}
print "dependencies:\n";
for (sort keys %deps) {
print "$_: ", join(' ', keys %{$deps{$_}}), "\n";
}
print "\npossible import order:\n";
my %done = (main => 1);
while (keys %deps > 0) {
my $changed = 0;
for my $line (keys %deps) {
for my $dep (keys %{$deps{$line}}) {
delete $deps{$line}->{$dep} if $done{$dep};
}
if (keys %{$deps{$line}} == 0) {
print "$line\n";
delete $deps{$line};
$done{$line} = 1;
$changed = 1;
}
}
if ($changed) {
$broke = 0;
} else {
$broke++;
}
if ($broke == 10) {
print "\nleft over dependencies:\n";
for (sort keys %deps) {
print "$_: ", join(' ', keys %{$deps{$_}}), "\n";
}
exit;
}
}