epm-update 5.08 KB
Newer Older
1 2
#!/bin/sh
#
Vitaly Lipatov's avatar
Vitaly Lipatov committed
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
}

Vitaly Lipatov's avatar
Vitaly Lipatov committed
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

Vitaly Lipatov's avatar
Vitaly Lipatov committed
72 73
case $PMTYPE in
    apt-dpkg)
74
        is_command apt-file || return 0
75
        try_assure_exists apt-file || return 0
Vitaly Lipatov's avatar
Vitaly Lipatov committed
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 102 103 104 105 106 107 108
        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
Vitaly Lipatov's avatar
Vitaly Lipatov committed
109
        return $ret
110 111 112
        ;;
    apt-dpkg)
        sudocmd apt-get update || return
113 114
        # apt-get update retrieve Contents file too
        #sudocmd apt-file update
115 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 160 161 162 163 164 165 166 167 168
        ;;
    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"
        ;;
    dnf-rpm)
        # 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
        ;;
169 170 171
    nix)
        sudocmd nix-channel --update
        ;;
172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187
    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
        ;;
    *)
        fatal "Have no suitable update command for $PMTYPE"
        ;;
188
esac
Vitaly Lipatov's avatar
Vitaly Lipatov committed
189 190 191 192 193 194 195 196 197 198
}


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

199 200 201 202 203 204
    # update with args is the alias for upgrade
    if [ -n "$*" ] ; then
        epm upgrade "$@"
        return
    fi

Vitaly Lipatov's avatar
Vitaly Lipatov committed
205 206 207
    __epm_update "$@" || return

    __epm_touch_pkg
208

Vitaly Lipatov's avatar
Vitaly Lipatov committed
209
    __save_available_packages
210

Vitaly Lipatov's avatar
Vitaly Lipatov committed
211
    __epm_update_content_index
212

Vitaly Lipatov's avatar
Vitaly Lipatov committed
213
    return 0
214
}