diff --git a/bin/epm b/bin/epm index c54dd1c95859e7cc7a514a2af1948de23038febb..c6036976ebd8dbdf759aec952c5fa10ba6cc855f 100755 --- a/bin/epm +++ b/bin/epm @@ -58,6 +58,7 @@ Descr="epm - EPM package manager" verbose= quiet= non_interactive= +skip_installed= epm_cmd= pkg_files= pkg_names= @@ -94,6 +95,9 @@ for opt in "$@" ; do --verbose) # HELPOPT: verbose mode verbose=1 ;; + --skip-installed) # HELPOPT: skip already install during install + skip_installed=1 + ;; --quiet) # HELPOPT: quiet mode (do not print commands before exec) quiet=1 ;; diff --git a/bin/epm-install b/bin/epm-install index bf0f4a8a9575c7a6f7cc6af91b3ac6595776547a..f082af443d1c4b53b3ff2df2776f5ad72cf076da 100644 --- a/bin/epm-install +++ b/bin/epm-install @@ -18,6 +18,32 @@ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. # +# TODO: use when run install with epm --skip-installed install +filter_out_installed_packages() +{ + [ -z "$skip_installed" ] && cat && return + + # TODO: use this more effectively way + #for i in $(cat) ; do + # rpm -q $i >/dev/null && continue + # echo $i + #done | + case $PKGFORMAT in + "rpm") + LANG=C LC_ALL=C xargs -n1 rpm -q 2>&1 | grep 'is not installed' | + sed -e 's|^.*package \(.*\) is not installed.*|\1|g' + ;; + "deb") + LANG=C LC_ALL=C xargs -n1 dpkg -L 2>&1 | grep 'is not installed.' | + sed -e 's|^Package .\(.*\). is not installed.*|\1|g' + ;; + *) + cat + ;; + esac | sed -e "s|rpm-build-altlinux-compat||g" | filter_strip_spaces +} + + # copied from etersoft-build-utils/share/eterbuild/functions/rpmpkg epm_install_names() { @@ -99,13 +125,16 @@ epm_install() { [ -n "$pkg_files$pkg_names" ] || fatal "Run install without packages" + local names=$(echo $pkg_names | filter_out_installed_packages) + local files=$(echo $pkg_files | filter_out_installed_packages) + + [ -z "$files$names" ] && echo "Skip empty install list" && return 2 + if [ -n "$non_interactive" ] ; then - epm_ni_install_names $pkg_names || return + epm_ni_install_names $names || return else - epm_install_names $pkg_names || return + epm_install_names $names || return fi - epm_install_files $pkg_files - + epm_install_files $files } -