[pacman-dev] [PATCHv3 2/7] pacsearch: indexing by 'name version' instead of 'name'

Pierre Neidhardt ambrevar at gmail.com
Sun Feb 9 13:41:40 EST 2014


In the old pacsearch, packages were identified uniquely by pkgfields[1], which
contained pkgname+pkgver. Since commit 4d13558 pkgver is stored in pkgfields[2],
and packages have been identified with pkgfields[1] only. Because of that
packages with a different version would appear once only.

This fixes the regression by identifying packages with both pkgfields[1] and
pkgfields[2].

Signed-off-by: Pierre Neidhardt <ambrevar at gmail.com>
---
 contrib/pacsearch.in | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/contrib/pacsearch.in b/contrib/pacsearch.in
index 71e0107..d3d461f 100644
--- a/contrib/pacsearch.in
+++ b/contrib/pacsearch.in
@@ -124,7 +124,7 @@ foreach $_ (@syncpkgs) {
 	# add a last field that indicates original order
 	push (@pkgfields, $cnt++);
 	# add each sync pkg by name/ver to a hash table for quick lookup
-	$allpkgs{$pkgfields[1]} = [ @pkgfields ];
+	$allpkgs{$pkgfields[1] . $pkgfields[2]} = [ @pkgfields ];
 }
 
 my $queryout = `pacman -Qs '@ARGV'`;
@@ -141,14 +141,14 @@ foreach $_ (@querypkgs) {
 	# skip any non-matching line
 	next if not defined $pkgfields[1];
 	# check if the package was listed in the sync out
-	if (not exists $allpkgs{$pkgfields[1]}) {
+	if (not exists $allpkgs{$pkgfields[1] . $pkgfields[2]}) {
 		# since 'group' is optional, we should fill it in if necessary
 		$pkgfields[3] = "" if not defined $pkgfields[3];
 		$pkgfields[4] = "[$LC_INSTALLED]";
 		# add a last field that indicates original order (after sync)
 		push (@pkgfields, $cnt++);
 		# add our local-only package to the hash
-		$allpkgs{$pkgfields[1]} = [ @pkgfields ];
+		$allpkgs{$pkgfields[1] . $pkgfields[2]} = [ @pkgfields ];
 	}
 }
 
-- 
1.8.5.4



More information about the pacman-dev mailing list