#!/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-query # TODO: port or rewrite apt-file # https://bugzilla.altlinux.org/show_bug.cgi?id=14449 # see also epm-search-file local_content_filelist() { local SYSARCH SYSARCH=$(uname -m) [ "$SYSARCH" = "x86_64" ] || SYSARCH=i586 local REPODIR=/var/ftp/pub/ALTLinux/Sisyphus local CI=$REPODIR/$SYSARCH/base/contents_index local CINOA=$REPODIR/noarch/base/contents_index #local OUTCMD="less" #[ -n "$USETTY" ] || OUTCMD="cat" OUTCMD="cat" test -r $CI && test -r $CINOA || fatal "Can't locate $CI or $CINOA" { [ -n "$USETTY" ] && echo "Search in $CI and $CINOA for $1..." grep -h -- ".*$1$" $CI $CINOA | sed -e "s|\(.*\)\t\(.*\)|\1|g" } | $OUTCMD } __epm_filelist_remote() { [ -z "$*" ] && return case $PMTYPE in apt-rpm) # TODO: use RESTful interface to prometeus? See ALT bug #29496 docmd_foreach local_content_filelist $@ ;; *) fatal "Query filelist for non installed packages does not realized" ;; esac } __epm_filelist_file() { local CMD [ -z "$*" ] && return # TODO: allow a new packages case $(get_package_type $1) in rpm) CMD="rpm -qlp" ;; deb) CMD="dpkg --contents" ;; *) fatal "Have no suitable query command for $PMTYPE" ;; esac docmd $CMD $@ | less } __epm_filelist_name() { local CMD [ -z "$*" ] && return case $PMTYPE in apt-rpm) CMD="rpm -ql" ;; apt-dpkg) CMD="dpkg -L" ;; yum-rpm) CMD="rpm -ql" ;; urpm-rpm) CMD="rpm -ql" ;; zypper-rpm) CMD="rpm -ql" ;; android) CMD="pm list packages -f" ;; conary) CMD="conary query --ls" ;; pacman) docmd pacman -Ql $pkg_names | sed -e "s|.* ||g" | less return ;; emerge) assure_exists equery CMD="equery files" ;; slackpkg) is_installed $pkg_names || fatal "Query filelist for non installed packages does not realized" docmd awk 'BEGIN{desk=1}{if(/^FILE LIST:$/){desk=0} else if (desk==0) {print}}' /var/log/packages/${pkg_filenames}* | less return ;; *) fatal "Have no suitable query command for $PMTYPE" ;; esac # TODO: add less docmd $CMD $pkg_names && return is_installed $pkg_names || __epm_filelist_remote $pkg_names } epm_filelist() { [ -n "$pkg_filenames" ] || fatal "Run query without names" __epm_filelist_file $pkg_files || return __epm_filelist_name $pkg_names || return }