critical performance fix: remove duplicate dependency packages
authorYigang Wen <yigangx.wen@intel.com>
Mon, 8 Apr 2013 08:10:45 +0000 (16:10 +0800)
committerYigang Wen <yigangx.wen@intel.com>
Mon, 8 Apr 2013 08:10:45 +0000 (16:10 +0800)
Without this patch, package dependency and reverse depedency resolving
will take about 1-2G memory while scanning 800 Tizen packages, and
after remove duplicated packages only ~2M.

Change-Id: I220c9cb69e726e2202f98273de5b8a5cb823745a

depanneur

index a4ce3e0b5377db87166070b98773ff1ef02e26cc..078c4202313eb4bb1fbf89713af1be229f51f5d1 100755 (executable)
--- a/depanneur
+++ b/depanneur
@@ -1046,8 +1046,6 @@ sub update_pkgddeps {
         }
     }
 
-    return if ($deps_build == 0 && $rdeps_build == 0);
-
     for my $pack (sort keys %pkgddeps) {
         $pkgrddeps{$pack} = [];
     }
@@ -1082,6 +1080,8 @@ sub update_pkgddeps {
         next if (! defined($pkgddeps{$pkg}));
         for (@{$pkgddeps{$pkg}}) {
             push @{$pkgrdeps{$_}}, @{$pkgrdeps{$pkg}};
+            my %uniq_deps = map {$_,1} @{$pkgrdeps{$_}};
+            $pkgrdeps{$_} = [keys(%uniq_deps)];
         }
     }
 
@@ -1089,6 +1089,8 @@ sub update_pkgddeps {
         next if (! defined($pkgrddeps{$pkg}));
         for (@{$pkgrddeps{$pkg}}) {
             push @{$pkgdeps{$_}}, @{$pkgdeps{$pkg}};
+            my %uniq_deps = map {$_,1} @{$pkgdeps{$_}};
+            $pkgdeps{$_} = [keys(%uniq_deps)];
         }
     }
 }