|
|
@ -3,23 +3,38 @@ |
|
|
|
use strict; |
|
|
|
use English; |
|
|
|
|
|
|
|
my (@pkg, %opr, %pri, %dep, %rep, %rdp, %ign, %lop, %deldeps); |
|
|
|
my (@pkg, %opr, %pri, %dep, %rep, %rdp, %ign, %lop, %deldeps, %bas); |
|
|
|
my @useddeps; # deps used for visualization of cross dependencies |
|
|
|
my %pkg_redone; # packages built in stages 6-8 |
|
|
|
|
|
|
|
foreach (@ARGV) { $ign{$_} = 1; } |
|
|
|
my $config = ""; |
|
|
|
|
|
|
|
while ($_ = shift @ARGV) { |
|
|
|
if ( $_ eq "-cfg" ) { |
|
|
|
$config = shift @ARGV; |
|
|
|
} else { |
|
|
|
$ign{$_} = 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
print "Reading package priorities ...\n"; |
|
|
|
open(F, "./scripts/Create-PkgList |") || die $!; |
|
|
|
if ( $config eq "" ) { |
|
|
|
open(F, "./scripts/Create-PkgList |") || die $!; |
|
|
|
} else { |
|
|
|
open(F, "< config/$config/packages") || die $!; |
|
|
|
} |
|
|
|
while (<F>) { |
|
|
|
@_ = split /\s+/; |
|
|
|
next if $_[1] =~ /[1234]/ or $_[1] !~ /5/; |
|
|
|
$pkg_redone{$_[4]} = 1 if $_[1] =~ /[678]/; |
|
|
|
next if defined $ign{$_[3]} || defined $ign{$_[4]}; |
|
|
|
$opr{$_[4]} = $_[2]; |
|
|
|
$pri{$_[4]} = $_[2]; |
|
|
|
$rep{$_[4]} = $_[3]; |
|
|
|
$pkg[$#pkg+1] = $_[4]; |
|
|
|
my ($b, $p) = ($_[4], $_[4]); |
|
|
|
($b, $p) = ($1, $2) if $_[4] =~ /(.*)=(.*)/; |
|
|
|
$opr{$p} = $_[2]; |
|
|
|
$pri{$p} = $_[2]; |
|
|
|
$rep{$p} = $_[3]; |
|
|
|
$bas{$p} = $b; |
|
|
|
$pkg[$#pkg+1] = $p; |
|
|
|
} |
|
|
|
close F; |
|
|
|
|
|
|
@ -152,31 +167,52 @@ for $iteration (1..99) { |
|
|
|
$lop{$looplog} = $iteration; |
|
|
|
} |
|
|
|
|
|
|
|
sub patchfile($$$$) { |
|
|
|
my ($tmpfile, $descfile, $re1, $re2) = @_; |
|
|
|
|
|
|
|
if ( ! open(IN, $descfile) ) |
|
|
|
{ print "ERROR: $descfile: $!\n"; return; } |
|
|
|
if ( ! open(OUT, ">$tmpfile") ) |
|
|
|
{ print "ERROR: $descfile: $!\n"; close IN; return; } |
|
|
|
$did_something = 0; |
|
|
|
while (<IN>) { |
|
|
|
$did_something = 1 if eval "s/$re1/$re2/i"; |
|
|
|
print OUT; |
|
|
|
} |
|
|
|
close IN; close OUT; |
|
|
|
if (not $did_something) { |
|
|
|
print "ERROR: Can't patch $descfile!\n"; |
|
|
|
print "ERROR: Regex was s/$re1/$re2/\n"; |
|
|
|
} |
|
|
|
system("diff -u0 ./$descfile $tmpfile >> dependencies.patch"); |
|
|
|
} |
|
|
|
|
|
|
|
sub setpri($$$$$$) { |
|
|
|
my ($pri, $opr, $rep, $bas, $package, $tmpfile) = @_; |
|
|
|
|
|
|
|
if ($bas eq "cpan") { |
|
|
|
my $r = $package; $r =~ s/^cpan-//g; $r =~ s/-/(-|::)/g; |
|
|
|
patchfile($tmpfile, "package/import/cpan/hosted_cpan.txt", |
|
|
|
"$opr ($r)", "$pri \$1"); |
|
|
|
patchfile($tmpfile, "package/import/cpan/hosted_cpan.cfg", |
|
|
|
"(pkgfork cpan $package .*) $opr;", "\$1 $pri;"); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
patchfile($tmpfile, "package/$rep/$bas/$package.desc", |
|
|
|
"(\\[P\\] . \\S+) $opr", "\$1 $pri"); |
|
|
|
} |
|
|
|
|
|
|
|
if ( $did_something ) { |
|
|
|
print "\nCreate dependencies.patch ...\n"; |
|
|
|
my $tmpfile = `mktemp`; chomp $tmpfile; |
|
|
|
unlink "dependencies.patch"; |
|
|
|
|
|
|
|
foreach $package (@pkg) { |
|
|
|
if ($pri{$package} != $opr{$package}) { |
|
|
|
my $descfile = "package/$rep{$package}/". |
|
|
|
"$package/$package.desc"; |
|
|
|
open(IN, $descfile) || die $!; |
|
|
|
open(OUT, ">$tmpfile") || die $!; |
|
|
|
$did_something = 0; |
|
|
|
my $re1 = "(\\[P\\] . \\S+) $opr{$package}"; |
|
|
|
my $re2 = "\$1 $pri{$package}"; |
|
|
|
while (<IN>) { |
|
|
|
$did_something = 1 if eval "s/$re1/$re2/"; |
|
|
|
print OUT; |
|
|
|
} |
|
|
|
close IN; close OUT; |
|
|
|
if (not $did_something) { |
|
|
|
print "ERROR: Can't patch $descfile!\n"; |
|
|
|
print "ERROR: Regex was s/$re1/$re2/\n"; |
|
|
|
if ($pri{$package} != $opr{$package}) { |
|
|
|
print "Setting priority $pri{$package} on package $rep{$package}/$bas{$package}=$package.\n"; |
|
|
|
setpri($pri{$package}, $opr{$package}, $rep{$package}, $bas{$package}, $package, $tmpfile); |
|
|
|
} |
|
|
|
system("diff -u0 ./$descfile $tmpfile >> dependencies.patch"); |
|
|
|
} |
|
|
|
} |
|
|
|
unlink $tmpfile; |
|
|
|
print "Done. Please check moves manually bofore applying the patch.\n"; |
|
|
|