[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