You need to sign in or sign up before continuing.
epm-update 5.36 KB
Newer Older
1 2
#!/bin/sh
#
3 4
# Copyright (C) 2012, 2014, 2016-2017, 2023  Etersoft
# Copyright (C) 2012, 2014, 2016-2017, 2023  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
#

# copied from korinf/tools/run-script/scripts/update

22
load_helper epm-sh-warmup
23
load_helper epm-check_updated_repo
24

25 26 27 28 29
# TODO: restore mirroring
get_latest_version()
{
    URL="https://eepm.ru/app-versions"
    #update_url_if_need_mirrored
30 31 32
    local var
    var="$(epm tool eget -q -O- "$URL/$1")" || return
    echo "$var" | head -n1 | cut -d" " -f1
33 34 35 36
}

__check_for_epm_version()
{
37
    # skip update checking for eepm from repo (ALT bug #44314)
38
    [ "$BASEDISTRNAME" = "alt" ] &&  [ "$DISTRVERSION" != "Sisyphus" ] && epm status --original eepm && return
39

40
    local latest="$(get_latest_version eepm)"
41 42
    #[ -z "$latest" ] && return
    local res="$(epm print compare "$EPMVERSION" "$latest")"
43
    [ "$res" = "-1" ] && info 'Latest EPM version in Korinf repository is $latest. You have version $EPMVERSION running.' && info "You can update eepm with \$ epm ei command."
44 45
}

46 47 48
__save_available_packages()
{
    [ -d "$epm_vardir" ] || return 0
49

50
    # TODO: ignore in docker
51 52
    # update list only if the system supports bash completion
    [ -d /etc/bash_completion.d ] || return 0
53

54 55 56
    # HACK: too much time (5 minutes) on deb systems in a docker
    [ $PMTYPE = "apt-dpkg" ] && return 0

57
    info "Retrieving list of all available packages (for autocompletion) ..."
58 59 60 61
    load_helper epm-list_available
    short=--short epm_list_available | sort | sudorun tee $epm_vardir/available-packages >/dev/null
}

62 63 64 65 66 67 68 69 70
__epm_update_content_index()
{
case $BASEDISTRNAME in
    "alt")
        load_helper epm-sh-altlinux-contents-index
        update_alt_contents_index
        return
        ;;
esac
71

72 73
case $PMTYPE in
    apt-dpkg)
74
        is_command apt-file || return 0
75
        try_assure_exists apt-file || return 0
76 77 78 79 80 81 82
        sudocmd apt-file update
        ;;
esac

}

__epm_update()
83
{
84 85

    info "Running update the package index files from remote package repository database ..."
86

87
local ret=0
88 89
warmup_hibase

90 91
case $BASEDISTRNAME in
    "alt")
92 93 94
        # TODO: hack against cd to cwd in apt-get on ALT
        cd /
        sudocmd apt-get update
95
        ret="$?"
96
        cd - >/dev/null
97 98 99 100 101
        if [ "$ret" != "0" ] && [ -z "$quiet" ] ; then
            warning "There are some errors with repo info updating. Check apt repos:"
            docmd epm repo list
            warning "Also check if you have an internet connection (ping to the problem site)"
        fi
102 103 104 105 106 107 108 109 110 111 112 113
        return $ret
        ;;
esac


case $PMTYPE in
    apt-rpm)
        # TODO: hack against cd to cwd in apt-get on ALT
        cd /
        sudocmd apt-get update
        ret="$?"
        cd - >/dev/null
114
        return $ret
115 116 117
        ;;
    apt-dpkg)
        sudocmd apt-get update || return
118 119
        # apt-get update retrieve Contents file too
        #sudocmd apt-file update
120 121 122 123 124 125 126 127 128 129 130 131 132 133
        ;;
    packagekit)
        docmd pkcon refresh
        ;;
    #snappy)
    #    sudocmd snappy
    #    ;;
    aptitude-dpkg)
        sudocmd aptitude update || return
        ;;
    yum-rpm)
        # just skipped
        [ -z "$verbose" ] || info "update command is stubbed for yum"
        ;;
134
    dnf-rpm|dnf5-rpm)
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 160 161 162 163 164 165 166 167 168 169 170 171 172 173
        # just skipped
        [ -z "$verbose" ] || info "update command is stubbed for dnf"
        ;;
    urpm-rpm)
        sudocmd urpmi.update -a
        ;;
    pacman)
        sudocmd pacman -S -y
        ;;
    aura)
        sudocmd aura -A -y
        ;;
    zypper-rpm)
        sudocmd zypper $(subst_option non_interactive --non-interactive) refresh
        ;;
    emerge)
        sudocmd emerge --sync
        ;;
    slackpkg)
        sudocmd /usr/sbin/slackpkg -batch=on update
        ;;
    deepsolver-rpm)
        sudocmd ds-update
        ;;
    npackd)
        sudocmd packdcl detect # get packages from MSI database
        ;;
    homebrew)
        docmd brew update
        ;;
    opkg)
        sudocmd opkg update
        ;;
    eopkg)
        sudocmd eopkg update-repo
        ;;
    apk)
        sudocmd apk update
        ;;
174 175 176
    nix)
        sudocmd nix-channel --update
        ;;
177 178 179 180 181 182 183 184 185 186 187 188 189 190
    pkgsrc)
        # portsnap extract for the first time?
        sudocmd portsnap fetch update
        ;;
    aptcyg)
        sudocmd apt-cyg update
        ;;
    xbps)
        sudocmd xbps-install -S
        ;;
    winget)
        sudocmd winget source update
        ;;
    *)
191
        fatal 'Have no suitable update command for $PMTYPE'
192
        ;;
193
esac
194 195 196 197 198 199 200 201 202 203
}


epm_update()
{
    if [ "$1" = "--content-index" ] ; then
        __epm_update_content_index
        return
    fi

204 205 206 207 208 209
    # update with args is the alias for upgrade
    if [ -n "$*" ] ; then
        epm upgrade "$@"
        return
    fi

210 211 212
    __epm_update "$@" || return

    __epm_touch_pkg
213

214
    __save_available_packages
215

216
    __epm_update_content_index
217

218
    return 0
219
}