#!/bin/sh # # Copyright (C) 2013-2016 Etersoft # Copyright (C) 2013-2016 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/>. # __check_command_in_path() { PATH=$PATH:/sbin:/usr/sbin which "$1" 2>/dev/null } # copied from strings # CHECKME: the same like estrlist has ? # Note: used egrep! write '[0-9]+(first|two)', not '[0-9]\+...' rhas() { echo "$1" | egrep -q -- "$2" } # copied from strings is_dirpath() { [ "$1" = "." ] && return $? rhas "$1" "/" } __epm_need_update() { local PACKAGE="$1" local PACKAGEVERSION="$2" [ -n "$PACKAGEVERSION" ] || return 0 load_helper epm-query is_installed "$PACKAGE" || return 0 load_helper epm-print # epm print version for package N local INSTALLEDVERSION=$(query_package_field "version" "$PACKAGE") # if needed >= installed, return 0 [ "$(compare_version "$PACKAGEVERSION" "$INSTALLEDVERSION")" -gt 0 ] && return 0 return 1 } __epm_assure_checking() { local CMD="$1" local PACKAGE="$2" local PACKAGEVERSION="$3" [ -n "$PACKAGEVERSION" ] && return 1 if is_dirpath "$CMD" ; then if [ -e "$CMD" ] ; then if [ -n "$verbose" ] ; then info "File or directory $CMD is already exists." epm qf "$CMD" fi return 0 fi [ -n "$PACKAGE" ] || fatal "You need run with package name param when use with absolute path" return 1 fi if __check_command_in_path "$CMD" >/dev/null ; then if [ -n "$verbose" ] ; then local compath="$(__check_command_in_path "$1")" info "Command $CMD is exists: $compath" epm qf "$compath" fi return 0 fi return 1 } # Do fast checking for command and install package if the command does not exist # $1 - command name # $2 - [package name] # $3 - [needed package version] __epm_assure() { local CMD="$1" local PACKAGE="$2" local PACKAGEVERSION="$3" [ -n "$PACKAGE" ] || PACKAGE="$1" __epm_assure_checking $CMD $PACKAGE $PACKAGEVERSION && return 0 info "Installing appropriate package for $CMD command..." __epm_need_update $PACKAGE $PACKAGEVERSION || return 0 docmd epm --auto install $PACKAGE || return [ -n "$PACKAGEVERSION" ] || return 0 # check if we couldn't update and still need update __epm_need_update $PACKAGE $PACKAGEVERSION && return 1 return 0 } epm_assure() { [ -n "$pkg_filenames" ] || fatal "Assure: Missing params. Check $0 --help for info." # use helper func for extract separate params __epm_assure $(eval echo $quoted_args) }