epm-provides 2.92 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
#!/bin/sh
#
# Copyright (C) 2013  Etersoft
# Copyright (C) 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/>.
#

Vitaly Lipatov's avatar
Vitaly Lipatov committed
20
load_helper epm-query
21
load_helper epm-print
Vitaly Lipatov's avatar
Vitaly Lipatov committed
22

23
epm_provides_files()
24
{
25 26
    local pkg_files="$*"
    [ -n "$pkg_files" ] || return
27

28
    local PKGTYPE="$(get_package_type $pkg_files)"
Vitaly Lipatov's avatar
Vitaly Lipatov committed
29

30 31 32 33 34 35 36 37 38 39 40 41 42 43
    case $PKGTYPE in
        rpm)
            assure_exists rpm
            docmd rpm -q --provides -p $pkg_files
            ;;
        deb)
            assure_exists dpkg
            # FIXME: will we provide ourself?
            docmd dpkg -I $pkg_files | grep "^ *Provides:" | sed "s|^ *Provides:||g"
            ;;
        *)
            fatal "Have no suitable command for $PMTYPE"
            ;;
    esac
44
}
45

46 47 48

epm_provides_names()
{
49 50 51
    local pkg_names="$*"
    local CMD
    [ -n "$pkg_names" ] || return
52 53 54

# by package name
case $PMTYPE in
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
    apt-rpm)
        # FIXME: need fix for a few names case
        # TODO: separate this function to two section
        if is_installed $pkg_names ; then
            CMD="rpm -q --provides"
        else
            EXTRA_SHOWDOCMD=' | grep "Provides:"'
            docmd apt-cache show $pkg_names | grep "Provides:"
            return
        fi
        ;;
    urpm-rpm|zypper-rpm|yum-rpm|dnf-rpm)
        if is_installed $pkg_names ; then
            CMD="rpm -q --provides"
        else
            fatal "FIXME: use hi level commands"
        fi
        ;;
    emerge)
        assure_exists equery
        CMD="equery files"
        ;;
#    yum-rpm)
#        CMD="yum deplist"
#        ;;
    pkgng)
        CMD="pkg info -b"
        ;;
    apt-dpkg)
        # FIXME: need fix for a few names case
        if is_installed $pkg_names ; then
            showcmd dpkg -s $pkg_names
            a='' dpkg -s $pkg_names | grep "^Provides:" | sed "s|^Provides:||g"
            return
        else
            EXTRA_SHOWDOCMD=' | grep "Provides:"'
            docmd apt-cache show $pkg_names | grep "Provides:" | sed -e 's|, |\n|g' | grep -v "^Provides:"
            return
        fi
        ;;
    *)
        fatal "Have no suitable command for $PMTYPE"
        ;;
98 99
esac

100
docmd $CMD $pkg_names
101 102

}
103 104 105

epm_provides()
{
106
    [ -n "$pkg_filenames" ] || fatal "Provides: package name is missed"
Vitaly Lipatov's avatar
Vitaly Lipatov committed
107

108 109 110
    epm_provides_files $pkg_files
    # shellcheck disable=SC2046
    epm_provides_names $(print_name $pkg_names)
111
}