#!/bin/sh # # Copyright (C) 2009, 2012 Etersoft # Copyright (C) 2009, 2012 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-search_file # copied from etersoft-build-utils/bin/rpmqf # use and modify TOFILE recursively __do_query_real_file() { local LINKTO1 LINKTO local TOFILE # get canonical path if [ -e "$1" ] ; then TOFILE=$1 else TOFILE=`which $1 2>/dev/null || echo $1` if [ "$TOFILE" != "$1" ] ; then echo "Note: $1 is placed as $TOFILE" fi fi # get value of symbolic link if [ -L "$TOFILE" ] ; then __do_query $TOFILE LINKTO=`readlink "$TOFILE"` echo "Note: $TOFILE is link to $LINKTO" __do_query_real_file "$LINKTO" fi FULLFILEPATH=`realpath $TOFILE` } dpkg_print_name_version() { local ver i for i in $* ; do ver=$(dpkg -s $i 2>/dev/null | grep "Version:" | sed -e "s|Version: ||g") if [ -z "$ver" ] ; then echo "$i" else echo "$i-$ver" fi done } __do_query() { local CMD case $PMTYPE in apt-rpm) CMD="rpm -qf" ;; apt-dpkg) showcmd dpkg -S $1 dpkg_print_name_version $(dpkg -S $1 | grep -v "^diversion by" | sed -e "s|:.*||") return ;; yum-rpm|urpm-rpm) CMD="rpm -qf" ;; zypper-rpm) CMD="rpm -qf" ;; emerge) CMD="equery belongs" ;; pacman) CMD="pacman -Qo" ;; slackpkg) # note: need remove leading slash for grep docmd grep -R -- "$(echo $@ | sed -e 's|^/\+||g')" /var/log/packages | sed -e "s|/var/log/packages/||g" return ;; ipkg) CMD="ipkg files" ;; *) fatal "Do not known query command for $PMTYPE" ;; esac docmd $CMD $@ } __do_short_query() { local CMD case $PMTYPE in *-rpm) CMD="rpm -qf --queryformat %{NAME}\n" ;; NOapt-dpkg) showcmd dpkg -S $1 dpkg_print_name_version $(dpkg -S $1 | sed -e "s|:.*||" | grep -v "^diversion by") return ;; NOemerge) CMD="equery belongs" ;; NOpacman) CMD="pacman -Qo" ;; NOslackpkg) # note: need remove leading slash for grep docmd grep -R "$(echo $@ | sed -e 's|^/\+||g')" /var/log/packages | sed -e "s|/var/log/packages/||g" return ;; *) fatal "Do not known query command for $PMTYPE" ;; esac docmd $CMD $@ } epm_query_file() { # in short mode print handle only real names and do short output # TODO: move to separate command? if [ -n "$short" ] ; then [ -n "$pkg_files" ] || fatal "Run query without file names (needed path to files)" __do_short_query $pkg_files return fi # file can exists or not [ -n "$pkg_filenames" ] || fatal "Run query without file names" for pkg in $pkg_filenames ; do __do_query_real_file "$pkg" __do_query $FULLFILEPATH || pkg_filenames=$pkg epm_search_file done }