#!/bin/sh # # Copyright (C) 2012,2013 Etersoft # Copyright (C) 2012,2013 Vitaly Lipatov <lav@etersoft.ru> # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # load_helper epm-check_updated_repo __epm_search_output() { local CMD local string="$1" case $PMTYPE in apt-rpm|apt-dpkg) CMD="apt-cache search --" ;; aptitude-dpkg) CMD="aptitude search --" ;; deepsolver-rpm) CMD="ds-require --" ;; urpm-rpm) # urpmq does not support -- CMD="urpmq -y" ;; pkgsrc) CMD="pkg_info -x --" ;; emerge) CMD="emerge --search --" ;; pacman) CMD="pacman -Ss --" ;; aura) CMD="aura -As --" ;; yum-rpm) CMD="yum search --" ;; dnf-rpm) CMD="dnf search --" ;; zypper-rpm) CMD="zypper search --" ;; mpkg) CMD="mpkg search" ;; conary) CMD="conary repquery" ;; npackd) docmd npackdcl search --query="$string" --status=all return ;; chocolatey) CMD="chocolatey list" ;; slackpkg) # FIXME echo "Note: case sensitive search" CMD="/usr/sbin/slackpkg search" ;; homebrew) CMD="brew search" ;; guix) CMD="guix package -A" ;; android) CMD="pm list packages" ;; *) fatal "Have no suitable search command for $PMTYPE" ;; esac docmd $CMD $string } # produce grep sequence __epm_search_make_grep() { local i [ -z "$*" ] && return local list= local listN= for i in $@ ; do case "$i" in ^*) # will clean from ^ later (and have the bug here with empty arg if run with one ^ only) listN="$listN $i" ;; *) list="$list $i" ;; esac done #list=$(strip_spaces $list | sed -e "s/ /|/g") listN=$(strip_spaces $listN | sed -e "s/ /|/g" | sed -e "s/\^//g") [ -n "$listN" ] && echon " | egrep -i -v -- \"$listN\"" # FIXME: The World has not idea how to do grep both string # http://stackoverflow.com/questions/10110051/grep-with-two-strings-logical-and-in-regex?rq=1 for i in $list ; do # FIXME -n on MacOS? echon " | egrep -i -- \"$i\"" done if [ "$short" ] ; then echon " | sed -e \"s| .*||g\"" fi # FIXME: move from it #isatty || return local COLO="" # rule for colorife for i in $list $listN; do [ -n "$COLO" ] && COLO="$COLO|" COLO="$COLO$i" done if [ -n "$list" ] ; then echon " | egrep -i $EGREPCOLOR -- \"($COLO)\"" fi } # copied from korinf/tools/run-script/scripts/search epm_search() { [ -n "$pkg_filenames" ] || fatal "Please, use search with some argument" # it is useful for first time running update_repo_if_needed # FIXME: do it better local MGS MGS=$(eval __epm_search_make_grep $quoted_args) EXTRA_SHOWDOCMD="$MGS" eval "__epm_search_output \"$(eval get_firstarg $quoted_args)\" $MGS" }