index : pacman | |
Archlinux32 fork of pacman | gitolite user |
summaryrefslogtreecommitdiff |
author | Allan McRae <allan@archlinux.org> | 2019-03-02 15:38:50 +1000 |
---|---|---|
committer | Allan McRae <allan@archlinux.org> | 2019-03-07 11:12:12 +1000 |
commit | 2883b869c72102bf00b4dc14f663c2f322736bc0 (patch) | |
tree | c317845e473eb63062bfa8953c963471f73cf788 /scripts/pkgdelta.sh.in | |
parent | 9adb0d5b37df7ca668e23877e85431dabeea005e (diff) |
-rw-r--r-- | scripts/pkgdelta.sh.in | 234 |
diff --git a/scripts/pkgdelta.sh.in b/scripts/pkgdelta.sh.in deleted file mode 100644 index b0b0b21f..00000000 --- a/scripts/pkgdelta.sh.in +++ /dev/null @@ -1,234 +0,0 @@ -#!/bin/bash -# -# pkgdelta - create delta files for use with pacman and repo-add -# @configure_input@ -# -# Copyright (c) 2009 Xavier Chantry <shiningxc@gmail.com> -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 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 General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# - -# bash options -set -o errexit - -# gettext initialization -export TEXTDOMAIN='pacman-scripts' -export TEXTDOMAINDIR='@localedir@' - -declare -r myver='@PACKAGE_VERSION@' - -LIBRARY=${LIBRARY:-'@libmakepkgdir@'} - -# Import libmakepkg -source "$LIBRARY"/util/message.sh -source "$LIBRARY"/util/parseopts.sh - -# Options -QUIET=0 -USE_COLOR='y' - -# minimal of package before deltas are generated (bytes) -min_pkg_size=$((1024*1024)) - -# percent of new package above which the delta will be discarded -max_delta_size=70 - - -# ensure we have a sane umask set -umask 0022 - -# print usage instructions -usage() { - printf "pkgdelta (pacman) %s\n" "${myver}" - echo - printf -- "$(gettext "Usage: pkgdelta [options] <package1> <package2>\n")" - echo - printf -- "$(gettext "\ -pkgdelta will create a delta file between two packages.\n\ -This delta file can then be added to a database using repo-add.\n")" - echo - printf -- "$(gettext "Example: pkgdelta pacman-3.0.0.pkg.tar.gz pacman-3.0.1.pkg.tar.gz")\n" - echo - printf -- "$(gettext "Options:\n")" - printf -- "$(gettext " -q, --quiet minimize output\n")" - printf -- "$(gettext " --nocolor remove color from output\n")" - printf -- "$(gettext " --min-pkg-size minimum package size before deltas are generated\n")" - printf -- "$(gettext " --max-delta-size percent of new package above which the delta will be discarded\n")" -} - -version() { - printf "pkgdelta (pacman) %s\n" "$myver" - printf -- "Copyright (c) 2009 Xavier Chantry <shiningxc@gmail.com>.\n" - printf '\n' - printf -- "$(gettext "\ -This is free software; see the source for copying conditions.\n\ -There is NO WARRANTY, to the extent permitted by law.\n")" -} - -m4_include(library/human_to_size.sh) - -isnumeric() { - [[ $1 != *[!0-9]* ]] -} - -read_pkginfo() { - unset pkgver pkgname arch - while IFS='=' read -r field value; do - # skip comments and invalid lines - [[ $field = '#'* || -z $value ]] && continue - - # skip lines which aren't fields we care about - [[ $field != @(pkgver|pkgname|arch) ]] || continue - - declare -g "${field% }=${value# }" - - [[ $pkgname && $pkgver && $arch ]] && return 0 - done < <(bsdtar -xOqf "$1" .PKGINFO 2>/dev/null) - - error "$(gettext "Invalid package file '%s'.")" "$1" - return 1 -} - -# $oldfile $oldmd5 $newfile $newmd5 $deltafile $deltamd5 $deltasize -create_xdelta() -{ - local oldfile=$1 - local newfile=$2 - local \ - oldname oldver oldarch \ - newname newver newarch \ - deltafile - - read_pkginfo "$oldfile" || return 1 - oldname="$pkgname" - oldver="$pkgver" - oldarch="$arch" - read_pkginfo "$newfile" || return 1 - newname="$pkgname" - newver="$pkgver" - newarch="$arch" - - pkgsize="$(wc -c "$newfile" | cut -d' ' -f1)" - - if ((pkgsize < min_pkg_size)); then - msg "$(gettext "Skipping delta creation for small package: %s - size %s")" "$newname" "$pkgsize" - return 0 - fi - - if [[ $oldname != "$newname" ]]; then - error "$(gettext "The package names don't match : '%s' and '%s'")" "$oldname" "$newname" - return 1 - fi - - if [[ $oldarch != "$newarch" ]]; then - error "$(gettext "The package architectures don't match : '%s' and '%s'")" "$oldarch" "$newarch" - return 1 - fi - - if [[ $oldver == "$newver" ]]; then - error "$(gettext "Both packages have the same version : '%s'")" "$newver" - return 1 - fi - - msg "$(gettext "Generating delta from version %s to version %s")" "$oldver" "$newver" - deltafile=$(dirname "$newfile")/$pkgname-${oldver}_to_${newver}-$arch.delta - local ret=0 - - xdelta3 -q -f -9 -S lzma -s "$oldfile" "$newfile" "$deltafile" || ret=$? - if (( ret )); then - error "$(gettext "Delta could not be created.")" - return 1 - fi - - deltasize="$(wc -c "$deltafile" | cut -d' ' -f1)" - - if ((max_delta_size * pkgsize / 100 < deltasize)); then - msg "$(gettext "Delta package larger than maximum size. Removing.")" - rm -f "$deltafile" - return 0 - fi - - msg "$(gettext "Generated delta : '%s'")" "$deltafile" - (( QUIET )) && echo "$deltafile" - - return 0 -} - -OPT_SHORT='hqV' -OPT_LONG=('help' 'quiet' 'max-delta-size:' 'min-pkg-size:' 'nocolor' 'version') -if ! parseopts "$OPT_SHORT" "${OPT_LONG[@]}" -- "$@"; then - exit 1 -fi -set -- "${OPTRET[@]}" -unset OPT_SHORT OPT_LONG OPTRET - -# parse arguments -while :; do - case $1 in - -h|--help) - usage - exit 0 ;; - -V|--version) - version - exit 0 ;; - -q|--quiet) - QUIET=1;; - --nocolor) - USE_COLOR='n';; - --min-pkg-size) - if ! min_pkg_size=$(human_to_size "$2"); then - echo "invalid argument '$2' for option -- '$1'" - exit 1 - fi - shift ;; - --max-delta-size) - arg=$(awk -v val="$2" 'BEGIN { print val * 100 }') - if ! isnumeric "$arg" || (( arg > 200 )); then - echo "invalid argument '$2' for option -- '$1'" - exit 1 - fi - max_delta_size=$arg - shift ;; - --) - shift - break ;; - esac - shift -done - -# check if messages are to be printed using color -if [[ -t 2 && $USE_COLOR != "n" ]]; then - colorize -else - unset ALL_OFF BOLD BLUE GREEN RED YELLOW -fi - -if (( $# != 2 )); then - usage - exit 1 -fi - -for i in "$@"; do - if [[ ! -f $i ]]; then - error "$(gettext "File '%s' does not exist")" "$i" - exit 1 - fi -done - -if ! type xdelta3 &>/dev/null; then - error "$(gettext "Cannot find the xdelta3 binary! Is xdelta3 installed?")" - exit 1 -fi - -create_xdelta "$@" |