forked from lix-project/lix
* Huge speedup in patch propagation (20 minutes or so to 3 seconds).
This commit is contained in:
parent
4c63f9fe04
commit
50bdec410a
|
@ -348,11 +348,22 @@ foreach my $p (keys %dstOutPaths) {
|
||||||
# patches that produce either paths in the destination or paths that
|
# patches that produce either paths in the destination or paths that
|
||||||
# can be used as the base for other useful patches).
|
# can be used as the base for other useful patches).
|
||||||
|
|
||||||
|
print "propagating patches...\n";
|
||||||
|
|
||||||
my $changed;
|
my $changed;
|
||||||
do {
|
do {
|
||||||
# !!! we repeat this to reach the transitive closure; inefficient
|
# !!! we repeat this to reach the transitive closure; inefficient
|
||||||
$changed = 0;
|
$changed = 0;
|
||||||
|
|
||||||
|
print "loop\n";
|
||||||
|
|
||||||
|
my %dstBasePaths;
|
||||||
|
foreach my $q (keys %dstPatches) {
|
||||||
|
foreach my $patch (@{$dstPatches{$q}}) {
|
||||||
|
$dstBasePaths{$patch->{basePath}} = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
foreach my $p (keys %srcPatches) {
|
foreach my $p (keys %srcPatches) {
|
||||||
my $patchList = $srcPatches{$p};
|
my $patchList = $srcPatches{$p};
|
||||||
|
|
||||||
|
@ -360,22 +371,18 @@ do {
|
||||||
|
|
||||||
# Is path $p included in the destination? If so, include
|
# Is path $p included in the destination? If so, include
|
||||||
# patches that produce it.
|
# patches that produce it.
|
||||||
$include = 1 if (defined $dstNarFiles{$p});
|
$include = 1 if defined $dstNarFiles{$p};
|
||||||
|
|
||||||
# Is path $p a path that serves as a base for paths in the
|
# Is path $p a path that serves as a base for paths in the
|
||||||
# destination? If so, include patches that produce it.
|
# destination? If so, include patches that produce it.
|
||||||
foreach my $q (keys %dstPatches) {
|
# !!! check baseHash
|
||||||
foreach my $patch (@{$dstPatches{$q}}) {
|
$include = 1 if defined $dstBasePaths{$p};
|
||||||
# !!! check baseHash
|
|
||||||
$include = 1 if ($p eq $patch->{basePath});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($include) {
|
if ($include) {
|
||||||
foreach my $patch (@{$patchList}) {
|
foreach my $patch (@{$patchList}) {
|
||||||
$changed = 1 if addPatch \%dstPatches, $p, $patch;
|
$changed = 1 if addPatch \%dstPatches, $p, $patch;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue