index : pacman | |
Archlinux32 fork of pacman | gitolite user |
summaryrefslogtreecommitdiff |
author | Nezmer <git@nezmer.info> | 2010-10-12 00:20:57 +0300 |
---|---|---|
committer | Dan McGee <dan@archlinux.org> | 2010-10-11 20:29:22 -0500 |
commit | bce3c8efc7a2d187984aa0e7037307b99c217fd7 (patch) | |
tree | 8eb9ead2af2a61ad0764b08e804d8471b975ce01 /contrib/pacsearch | |
parent | 7d937772313a796f4c0bff76bf1bd7d78f8ccb5a (diff) |
-rwxr-xr-x | contrib/pacsearch | 130 |
diff --git a/contrib/pacsearch b/contrib/pacsearch deleted file mode 100755 index a20df265..00000000 --- a/contrib/pacsearch +++ /dev/null @@ -1,130 +0,0 @@ -#!/usr/bin/perl -# pacsearch - Adds color and install information to a 'pacman -Ss' search -# -# Copyright (C) 2008, 2010 Dan McGee <dpmcgee@gmail.com> -# -# Based off original shell script version: -# Copyright (C) 2006-2007 Dan McGee <dpmcgee@gmail.com> -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. - -#TODO: colors flag on commandline - -use strict; -use warnings; - -my $progname = "pacsearch"; -my $version = "2.0"; - -if ($#ARGV lt 0 || $ARGV[0] eq "--help" || $ARGV[0] eq "-h") { - print "$progname - Add color and install information to a pacman -Ss search\n"; - print "Usage: $progname <pattern>\n"; - print "Example: $progname ^gnome\n"; - if ($#ARGV lt 0) { - exit 1; - } - exit 0; -} - -if ($ARGV[0] eq "--version" || $ARGV[0] eq "-v") { - print "$progname version $version\n"; - print "Copyright (C) 2006-2010 Dan McGee\n"; - exit 0; -} - -# define our colors to use when printing -my $CLR1 = "\e[0;34m"; -my $CLR2 = "\e[0;32m"; -my $CLR3 = "\e[0;35m"; -my $CLR4 = "\e[0;36m"; -my $CLR5 = "\e[0;31m"; -my $CLR6 = "\e[0;33m"; -my $CLR7 = "\e[1;36m"; -my $INST = "\e[1;31m"; -my $BASE = "\e[0m"; - -# color a "repo/pkgname pkgver" line based on the repository name -sub to_color { - my $line = shift; - # get the installed text colored first - $line =~ s/(\[.*\]$)/$INST$1$BASE/; - # and now the repo and dealings - $line =~ s/(^core\/.*)/$CLR1$1$BASE/; - $line =~ s/(^extra\/.*)/$CLR2$1$BASE/; - $line =~ s/(^community\/.*)/$CLR3$1$BASE/; - $line =~ s/(^testing\/.*)/$CLR4$1$BASE/; - $line =~ s/(^community-testing\/.*)/$CLR5$1$BASE/; - $line =~ s/(^local\/.*)/$CLR7$1$BASE/; - # any other unknown repository - $line =~ s/(^[\w-]*\/.*)/$CLR6$1$BASE/; - return $line; -} - -my %allpkgs = (); - -my $syncout = `pacman -Ss '@ARGV'`; -# split each sync search entry into its own array entry -my @syncpkgs = split(/\n^(?=\w)/m, $syncout); -# remove the extra \n from the last desc entry -if ($#syncpkgs >= 0) { - chomp($syncpkgs[$#syncpkgs]); -} - -# counter var for packages, used here and in the query loop too -my $cnt = 0; -foreach $_ (@syncpkgs) { - # we grab 4 fields here: repo, name/ver, installed, and desc - my @pkgfields = /^(.*?)\/(.*?) ?(\[.*\])?\n(.*)$/s; - # since installed is optional, we should fill it in if necessary - $pkgfields[2] = "" if not defined $pkgfields[2]; - # add a fifth 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 ]; -} - -my $queryout = `pacman -Qs '@ARGV'`; -# split each querysearch entry into its own array entry -my @querypkgs = split(/\n^(?=\w)/m, $queryout); -# remove the extra \n from the last desc entry -if ($#querypkgs >= 0) { - chomp ($querypkgs[$#querypkgs]); -} - -foreach $_ (@querypkgs) { - # we grab 4 fields here: repo, name/ver, installed, and desc - my @pkgfields = /^(.*?)\/(.*?) ?(\[.*\])?\n(.*)$/s; - # since installed is optional, we should fill it in if necessary - $pkgfields[2] = "" if not defined $pkgfields[2]; - # check if the package was listed in the sync out - if (not exists $allpkgs{$pkgfields[1]}) { - $pkgfields[2] = "[installed]"; - # add a fifth field that indicates original order (after sync) - push (@pkgfields, $cnt++); - # add our local-only package to the hash - $allpkgs{$pkgfields[1]} = [ @pkgfields ]; - } -} - -# sort by original order (the fifth field) and print -foreach $_ ( sort{ @{$allpkgs{$a}}[4] <=> @{$allpkgs{$b}}[4] } keys %allpkgs) { - my @v = @{$allpkgs{$_}}; - my $line = "$v[0]/$v[1] $v[2]"; - $line = to_color($line); - # print colorized "repo/pkgname pkgver" string with possible installed text - print "$line\n"; - print "$v[3]\n"; -} - -#vim: set noet: |