epm-removerepo 4.6 KB
Newer Older
1 2
#!/bin/sh
#
3 4
# Copyright (C) 2012, 2017, 2020, 2021  Etersoft
# Copyright (C) 2012, 2017, 2020, 2021  Vitaly Lipatov <lav@etersoft.ru>
5
#
6 7 8
# 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
9 10 11 12 13
# (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
14
# GNU Affero General Public License for more details.
15
#
16 17
# 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/>.
18 19
#

20 21
load_helper epm-sh-altlinux

Vitaly Lipatov's avatar
Vitaly Lipatov committed
22 23 24
# remove grepped lines
__epm_removerepo_alt_grepremove()
{
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
    local rl
    # ^rpm means full string
    if [ "$1" = "all" ] || rhas "$1" "^rpm" ; then
        rl="$1"
    else
        rl="$( epm --quiet repolist 2>/dev/null | grep -F "$1")"
        [ -z "$rl" ] && warning "Can't find '$1' in the repos (see '# epm repolist' output)" && return 1
    fi
    echo "$rl" | while read rp ; do
        # TODO: print removed lines
        if [ -n "$dryrun" ] ; then
            docmd apt-repo $dryrun rm "$rp"
            continue
        fi
        if [ -z "$quiet" ] ; then
            sudocmd apt-repo $dryrun rm "$rp"
        else
            sudorun apt-repo $dryrun rm "$rp"
        fi
    done
Vitaly Lipatov's avatar
Vitaly Lipatov committed
45 46 47 48
}

__epm_removerepo_alt()
{
49 50
    local repo="$*"
    [ -n "$repo" ] || fatal "No such repo or task. Use epm repo remove <regexp|autoimports|archive|tasks|TASKNUMBER>"
Vitaly Lipatov's avatar
Vitaly Lipatov committed
51

52
    assure_exists apt-repo
Vitaly Lipatov's avatar
Vitaly Lipatov committed
53

54 55 56 57 58 59 60
    if tasknumber "$repo" >/dev/null ; then
        local tn
        for tn in $(tasknumber "$repo") ; do
            __epm_removerepo_alt_grepremove " repo/$tn/"
        done
        return
    fi
Vitaly Lipatov's avatar
Vitaly Lipatov committed
61

62
    local branch="$(echo "$DISTRVERSION" | tr "[:upper:]" "[:lower:]")"
63

64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
    case "$1" in
        autoimports)
            info "remove autoimports repo"
            [ -n "$DISTRVERSION" ] || fatal "Empty DISTRVERSION"
            repo="autoimports.$branch"
            sudocmd apt-repo $dryrun rm "$repo"
            ;;
        archive)
            info "remove archive repos"
            __epm_removerepo_alt_grepremove "archive/"
            ;;
        tasks)
            info "remove task repos"
            __epm_removerepo_alt_grepremove " repo/[0-9]+/"
            ;;
        task)
            shift
            __epm_removerepo_alt_grepremove " repo/$1/"
            ;;
        -*)
            fatal "epm removerepo: no options are supported"
            ;;
        *)
Vitaly Lipatov's avatar
Vitaly Lipatov committed
87
# TODO: if return empty for whole line, use grep
88 89 90 91
#            sudocmd apt-repo $dryrun rm "$*"
            __epm_removerepo_alt_grepremove "$*"
            ;;
    esac
Vitaly Lipatov's avatar
Vitaly Lipatov committed
92 93 94

}

95 96
epm_removerepo()
{
97

98
case $BASEDISTRNAME in
99 100 101 102 103 104 105 106 107 108 109 110 111 112
    "alt")
        __epm_removerepo_alt "$@"
        return
        ;;
    "astra")
        echo "Use workaround for AstraLinux"
        [ -n "$*" ] || fatal "empty repo name"
        # aptsources.distro.NoDistroTemplateException: Error: could not find a distribution template for AstraLinuxCE/orel
        sudocmd sed -i -e "s|.*$*.*||" /etc/apt/sources.list
        if [ -d /etc/apt/sources.list.d ] && ls /etc/apt/sources.list.d/*.list >/dev/null 2>/dev/null ; then
            sudocmd sed -i -e "s|.*$*.*||" /etc/apt/sources.list.d/*.list
        fi
        return
        ;;
113 114 115
esac;

case $PMTYPE in
116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
    apt-dpkg)
        assure_exists apt-add-repository software-properties-common
        # FIXME: it is possible there is troubles to pass the args
        sudocmd apt-add-repository --remove "$*"
        info "Check file /etc/apt/sources.list if needed"
        ;;
    aptitude-dpkg)
        info "You need remove repo from /etc/apt/sources.list"
        ;;
    yum-rpm)
        assure_exists yum-utils
        sudocmd yum-config-manager --disable "$@"
        ;;
    urpm-rpm)
        if [ "$1" = "all" ] ; then
            sudocmd urpmi.removemedia -av
            return
        fi
        sudocmd urpmi.removemedia "$@"
        ;;
    zypper-rpm)
        sudocmd zypper removerepo "$@"
        ;;
    emerge)
        sudocmd layman "-d$@"
        ;;
    pacman)
        info "You need remove repo from /etc/pacman.conf"
        ;;
    npackd)
        sudocmd npackdcl remove-repo --url="$*"
        ;;
    winget)
        sudocmd winget source remove "$@"
        ;;
    eopkg)
        sudocmd eopkg remove-repo "$@"
        ;;
    slackpkg)
        info "You need remove repo from /etc/slackpkg/mirrors"
        ;;
    *)
        fatal "Have no suitable command for $PMTYPE"
        ;;
160 161 162
esac

}