[pacman-dev] [PATCHv3 7/7] pacsearch: factored -Ss and -Qs parts into one single function
Pierre Neidhardt
ambrevar at gmail.com
Sun Feb 9 13:41:45 EST 2014
Signed-off-by: Pierre Neidhardt <ambrevar at gmail.com>
---
contrib/pacsearch.in | 65 +++++++++++++++++++++++-----------------------------
1 file changed, 29 insertions(+), 36 deletions(-)
diff --git a/contrib/pacsearch.in b/contrib/pacsearch.in
index 0dad366..bcfedf0 100644
--- a/contrib/pacsearch.in
+++ b/contrib/pacsearch.in
@@ -98,44 +98,37 @@ sub print_pkg {
my %allpkgs = ();
my @pkglist = ();
-open (my $syncout, '-|', 'pacman', '-Ss', @ARGV) or exit;
-while ( readline($syncout) ) {
- # We grab the following fields: repo, name, ver, group, installed, and
- # desc. We grab leading space for 'group' and 'installed' so that we do not
- # need to test if non-empty when printing.
- my @pkgfields = /^(.*?)\/(.*?) (.*?)( \(.*?\))?( \[.*\])?$/s;
- my $desc = readline($syncout);
- # skip any non-matching line
- next if not defined $pkgfields[1];
- # since 'group' and 'installed' are optional, we should fill it in if necessary
- $pkgfields[3] = "" if not defined $pkgfields[3];
- $pkgfields[4] = "" if not defined $pkgfields[4];
- $pkgfields[5] = $desc;
- # Add each sync pkg by name/ver to a hash table.
- # Any value is good since we only check for existence.
- $allpkgs{$pkgfields[1] . $pkgfields[2]} = 1;
- push (@pkglist, \@pkgfields);
-}
-close ($syncout);
-
-open (my $queryout, '-|', 'pacman', '-Qs', @ARGV) or exit;
-while ( readline($queryout) ) {
- # We grab the same field as before, even the "installed" which is always
- # empty for local searches. This allows us to reserve a cell in @pkgfields.
- my @pkgfields = /^(.*?)\/(.*?) (.*?)( \(.*?\))?( \[.*\])?$/s;
- my $desc = readline($queryout);
- # 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] . $pkgfields[2]}) {
- # since 'group' is optional, we should fill it in if necessary
- $pkgfields[3] = "" if not defined $pkgfields[3];
- $pkgfields[4] = " [$LC_INSTALLED]";
- $pkgfields[5] = $desc;
- push (@pkglist, \@pkgfields);
+sub list_pkg {
+ my $db = shift;
+ my $installstr = shift;
+ open (my $out, '-|', 'pacman', $db , @ARGV) or exit;
+ while ( readline($out) ) {
+ # We grab the following fields: repo, name, ver, group, installed, and
+ # desc. We grab leading space for 'group' and 'installed' so that we do
+ # not need to test if non-empty when printing.
+ my @pkgfields = /^(.*?)\/(.*?) (.*?)( \(.*?\))?( \[.*\])?$/s;
+ my $desc = readline($out);
+ # skip any non-matching line
+ next if not defined $pkgfields[1];
+ my $pkgid = $pkgfields[1] . $pkgfields[2];
+ # if -Qs, check if the package was listed during list_pkg -Ss
+ if ( $db eq "-Ss" || not exists $allpkgs{$pkgid}) {
+ # since 'group' and 'installed' are optional, we should fill it in
+ # if necessary
+ $pkgfields[3] = "" if not defined $pkgfields[3];
+ $pkgfields[4] = $installstr if not defined $pkgfields[4];
+ $pkgfields[5] = $desc;
+ # Add each sync pkg by name/ver to a hash table.
+ # Any value is good since we only check for existence.
+ $allpkgs{$pkgid} = 1;
+ push (@pkglist, \@pkgfields);
+ }
}
+ close ($out);
}
-close ($queryout);
+
+list_pkg ('-Ss', "");
+list_pkg ('-Qs', " [$LC_INSTALLED]");
foreach (@pkglist) {
print_pkg (@{$_});
--
1.8.5.4
More information about the pacman-dev
mailing list