[Debtags-commits] [svn] r1489 - central-database/branches/alioth/webfrontend

Enrico Zini enrico at costa.debian.org
Mon Nov 14 15:38:17 UTC 2005


Author: enrico
Date: Mon Nov 14 15:38:12 2005
New Revision: 1489

Modified:
   central-database/branches/alioth/webfrontend/Engine.pm
   central-database/branches/alioth/webfrontend/search.cgi
Log:
Words in the search are ANDed.  This time for real, it seems.
Sort order is maintained in the tag lists.


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 15:38:12 2005
@@ -412,11 +412,11 @@
 #		&main::msg("Checking words %s inside\n%s\n%s\n%s\n", join(',',@{$parms->{words}}), $p->name, $p->sdesc, $p->ldesc) if $verbose;
 		for my $w (@{$parms->{words}})
 		{
-			my $re = qr/$w/io;
-			return undef if 
-				$p->name() !~ $re ||
-				$p->sdesc() !~ $re ||
-				$p->ldesc() !~ $re;
+			my $re = qr/$w/i;
+			return undef if !(
+				$p->name() =~ $re ||
+				$p->sdesc() =~ $re ||
+				$p->ldesc() =~ $re);
 		}
 	}
 
@@ -424,6 +424,34 @@
 	return 1;
 }
 
+sub matchTag ($$)
+{
+	my ($parms, $t) = @_;
+
+#	my $verbose = ($t->name eq 'works-with::mail');
+
+	if ($parms->{words})
+	{
+#		&main::msg("MTW %s: %s in\n%s\n%s\n", $t->name, join(', ', @{$parms->{words}}), $t->sdesc(), $t->ldesc()) if $verbose;
+		for my $w (@{$parms->{words}})
+		{
+			my $re = qr/$w/i;
+#			&main::msg("MTW %s: checking %s\n", $t->name, $w) if $verbose;
+#			&main::msg("MTW %s: HAS %s in name\n", $t->name, $w) if $verbose && $t->name() =~ $re;
+#			&main::msg("MTW %s: HAS %s in sdesc\n", $t->name, $w) if $verbose && $t->sdesc() =~ $re;
+#			&main::msg("MTW %s: HAS %s in ldesc\n", $t->name, $w) if $verbose && $t->ldesc() =~ $re;
+			return undef if !(
+				$t->name() =~ $re ||
+				$t->sdesc() =~ $re ||
+				$t->ldesc() =~ $re);
+		}
+#		&main::msg("MTW %s: MATCHED %s\n", $t->name, join(', ', @{$parms->{words}})) if $verbose;
+	}
+
+	return 1;
+}
+
+
 # Search for packages using zero or more of the following parameters:
 #
 #   tags => [ tag1, tag2.. ]
@@ -454,15 +482,30 @@
 {
 	my ($max_tags, $search) = @_;
 	my %tags;
+#	my %specialTags = map { $_->name => 1 } grep { matchTag({words => $search->{words}}, $_) } tags();
+#	&main::msg("specialTags: %s\n", join(', ', keys %specialTags));
 	for my $p (grep { matchPackage($search, $_) } packages())
 	{
 #		&main::msg("Found %s\n", $p->name());
-		for my $tag ($p->tags())
+		for my $t ($p->tags())
 		{
-			++$tags{$tag->name()} if $tag->name() !~ /^(special|made-of|uitoolkit)::/;
+			if ($t->name() !~ /^(special|made-of|uitoolkit)::/)
+			{
+#				if (exists $specialTags{$t->name})
+#				{
+#					#&main::msg("Special tag: %s\n", $t->name);
+#					$tags{$t->name()} += 1;
+#				} else {
+					++$tags{$t->name()}
+#				}
+			}
 		}
 	}
 	my @res = (sort { $tags{$b} <=> $tags{$a} } keys %tags)[0 .. $max_tags];
+#	for my $tag (@res)
+#	{
+#		&main::msg("%d: %s\n", $tags{$tag}, $tag);
+#	}
 	while (!findPackages({tags => [tag(@res)], notags => $search->{notags}}))
 	{
 #		&main::msg("No entries with %s, trying to remove %s\n", join(',', at res), $res[$#res]);

Modified: central-database/branches/alioth/webfrontend/search.cgi
==============================================================================
--- central-database/branches/alioth/webfrontend/search.cgi	(original)
+++ central-database/branches/alioth/webfrontend/search.cgi	Mon Nov 14 15:38:12 2005
@@ -144,14 +144,14 @@
 
 # Only take input tags once, and validate them
 {
-	my %tags = map { $_ => 1 } @want_tags;
-	@want_tags = Engine::tag(sort keys %tags);
+	my %seen;
+	@want_tags = Engine::tag(grep { exists $seen{$_} ? undef : $seen{$_} = 1, 1 } @want_tags);
 
-	%tags = map { $_ => 1 } @unwant_tags;
-	@unwant_tags = Engine::tag(sort keys %tags);
+	%seen = ();
+	@unwant_tags = Engine::tag(grep { exists $seen{$_} ? undef : $seen{$_} = 1, 1 } @unwant_tags);
 
-	%tags = map { $_ => 1 } @ignore_tags;
-	@ignore_tags = Engine::tag(sort keys %tags);
+	%seen = ();
+	@ignore_tags = Engine::tag(grep { exists $seen{$_} ? undef : $seen{$_} = 1, 1 } @ignore_tags);
 }
 
 sub linkself (@)



More information about the Debtags-commits mailing list