[Debtags-commits] [svn] r1495 -
central-database/branches/alioth/webfrontend
Enrico Zini
enrico at costa.debian.org
Mon Nov 14 21:02:25 UTC 2005
Author: enrico
Date: Mon Nov 14 21:02:23 2005
New Revision: 1495
Modified:
central-database/branches/alioth/webfrontend/Engine.pm
Log:
Improved resync algorithm
Modified: central-database/branches/alioth/webfrontend/Engine.pm
==============================================================================
--- central-database/branches/alioth/webfrontend/Engine.pm (original)
+++ central-database/branches/alioth/webfrontend/Engine.pm Mon Nov 14 21:02:23 2005
@@ -754,13 +754,6 @@
# Delete the packages that are not in the package database anymore
for my $pkg (keys %deleted)
{
- my $p = getPackage($pkg);
- for my $tag ($p->{tags})
- {
- $db->{tags}{$tag} =
- [ grep { $_->{name} ne $pkg } @{$db->{tags}{$tag}} ];
- }
- delete $db->{pkgs}{$pkg};
delete $packages{$pkg};
}
}
@@ -828,16 +821,9 @@
}
close IN;
- # Delete the packages that are not in the package database anymore
+ # Delete the tags that are not in the vocabulary anymore
for my $tag (keys %deleted)
{
- my $t = getTag($tag);
- for my $pkg (@{$t->{pkgs}})
- {
- $db->{pkgs}{$pkg}{tags} =
- [ grep { $_->{name} ne $tag } @{$db->{pkgs}{$pkg}{tags}} ];
- }
- delete $db->{tags}{$tag};
delete $tags{$tag};
}
}
@@ -986,11 +972,42 @@
tie %facets, 'GDBM_File', $FACETS, &GDBM_WRITER, 0664;
tie %tags, 'GDBM_File', $TAGS, &GDBM_WRITER, 0664;
+ resyncPackages($pkgs);
+ resyncVocabulary($vocab);
+
lockdb();
$db = retrieve($DEBTAGS);
- resyncPackages($pkgs);
- resyncVocabulary($vocab);
+ # Cleanup $db with what has been deleted
+ my @deleted;
+ for my $pkg (keys %{$db->{pkgs}})
+ {
+ push @deleted, $pkg if not exists $packages{$pkg};
+ }
+ for my $pkg (@deleted)
+ {
+ # Delete the package from all tags that reference it
+ for my $tag (map { $_->{name} } @{$db->{pkgs}{$pkg}{tags}})
+ {
+ $db->{tags}{$tag}{pkgs} =
+ [ grep { $_->{name} ne $pkg } @{$db->{tags}{$tag}{pkgs}} ];
+ }
+ delete $db->{pkgs}{$pkg};
+ }
+ @deleted = ();
+ for my $tag (keys %{$db->{tags}})
+ {
+ push @deleted, $tag if not exists $tags{$tag};
+ }
+ for my $tag (@deleted)
+ {
+ for my $pkg (map { $_->{name} } @{$db->{tags}{$tag}{pkgs}})
+ {
+ $db->{pkgs}{$pkg}{tags} =
+ [ grep { $_->{name} ne $tag } @{$db->{pkgs}{$pkg}{tags}} ];
+ }
+ delete $db->{tags}{$tag};
+ }
# Generate missing special::not-yet-tagged tags
for my $pkg (keys %packages)
More information about the Debtags-commits
mailing list