[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