mirror of
https://github.com/moparisthebest/pacman
synced 2024-08-13 17:03:46 -04:00
pkgdelta: implement requirments for delta generation
Big deltas or deltas for very small packages are not needed so we should check that and not generate any. Signed-off-by: Florian Pritz <bluewind@xinu.at> Signed-off-by: Dan McGee <dan@archlinux.org>
This commit is contained in:
parent
70d425c1d3
commit
839953f111
@ -11,7 +11,7 @@ pkgdelta - package delta generation utility
|
|||||||
|
|
||||||
Synopsis
|
Synopsis
|
||||||
--------
|
--------
|
||||||
'pkgdelta' [-q] <package1> <package2>
|
'pkgdelta' [options] <package1> <package2>
|
||||||
|
|
||||||
|
|
||||||
Description
|
Description
|
||||||
@ -27,6 +27,16 @@ significantly.
|
|||||||
|
|
||||||
Options
|
Options
|
||||||
-------
|
-------
|
||||||
|
*--max-delta-size <ratio>*::
|
||||||
|
Only create delta files if the delta is smaller than ratio * package_size.
|
||||||
|
Possible values: 0.0 to 2.0.
|
||||||
|
Recommended values: 0.2 to 0.9.
|
||||||
|
Default value: 0.7
|
||||||
|
|
||||||
|
*--min-pkg-size <size>*::
|
||||||
|
Minimal size of the package file in bytes to be considered for delta creation.
|
||||||
|
Default value: 1048576 bytes = 1MiB
|
||||||
|
|
||||||
*-q, \--quiet*::
|
*-q, \--quiet*::
|
||||||
Be quiet. Do not output anything but warnings and errors.
|
Be quiet. Do not output anything but warnings and errors.
|
||||||
|
|
||||||
|
@ -30,6 +30,13 @@ myver='@PACKAGE_VERSION@'
|
|||||||
|
|
||||||
QUIET=0
|
QUIET=0
|
||||||
|
|
||||||
|
# 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
|
# ensure we have a sane umask set
|
||||||
umask 0022
|
umask 0022
|
||||||
|
|
||||||
@ -46,6 +53,8 @@ This delta file can then be added to a database using repo-add.\n\n")"
|
|||||||
echo
|
echo
|
||||||
printf -- "$(gettext "Options:\n")"
|
printf -- "$(gettext "Options:\n")"
|
||||||
printf -- " -q ""$(gettext "quiet\n")"
|
printf -- " -q ""$(gettext "quiet\n")"
|
||||||
|
printf -- " --min-pkg-size ""$(gettext "minimal of package before deltas are generated (bytes)\n")"
|
||||||
|
printf -- " --max-delta-size ""$(gettext "percent of new package above which the delta will be discarded\n")"
|
||||||
}
|
}
|
||||||
|
|
||||||
version() {
|
version() {
|
||||||
@ -56,6 +65,10 @@ This is free software; see the source for copying conditions.\n\
|
|||||||
There is NO WARRANTY, to the extent permitted by law.\n")"
|
There is NO WARRANTY, to the extent permitted by law.\n")"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
isnumeric() {
|
||||||
|
[[ $1 != *[!0-9]* ]]
|
||||||
|
}
|
||||||
|
|
||||||
read_pkginfo()
|
read_pkginfo()
|
||||||
{
|
{
|
||||||
pkgname= pkgver= arch=
|
pkgname= pkgver= arch=
|
||||||
@ -96,6 +109,13 @@ create_xdelta()
|
|||||||
newver="$pkgver"
|
newver="$pkgver"
|
||||||
newarch="$arch"
|
newarch="$arch"
|
||||||
|
|
||||||
|
pkgsize="$(@SIZECMD@ -L "$newfile")"
|
||||||
|
|
||||||
|
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
|
if [[ $oldname != "$newname" ]]; then
|
||||||
error "$(gettext "The package names don't match : '%s' and '%s'")" "$oldname" "$newname"
|
error "$(gettext "The package names don't match : '%s' and '%s'")" "$oldname" "$newname"
|
||||||
return 1
|
return 1
|
||||||
@ -119,10 +139,19 @@ create_xdelta()
|
|||||||
if (( ret )); then
|
if (( ret )); then
|
||||||
error "$(gettext "Delta could not be created.")"
|
error "$(gettext "Delta could not be created.")"
|
||||||
return 1
|
return 1
|
||||||
else
|
fi
|
||||||
|
|
||||||
|
deltasize="$(@SIZECMD@ -L "$deltafile")"
|
||||||
|
|
||||||
|
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"
|
msg "$(gettext "Generated delta : '%s'")" "$deltafile"
|
||||||
(( QUIET )) && echo "$deltafile"
|
(( QUIET )) && echo "$deltafile"
|
||||||
fi
|
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -134,6 +163,23 @@ while (( $# )); do
|
|||||||
-h|--help) usage; exit 0 ;;
|
-h|--help) usage; exit 0 ;;
|
||||||
-V|--version) version; exit 0 ;;
|
-V|--version) version; exit 0 ;;
|
||||||
-q|--quiet) QUIET=1;;
|
-q|--quiet) QUIET=1;;
|
||||||
|
--min-pkg-size)
|
||||||
|
if ! isnumeric "$2"; then
|
||||||
|
echo "invalid argument '$2' for option -- '$1'"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
min_pkg_size=$2
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--max-delta-size)
|
||||||
|
arg=$(echo "$2" | awk '{print $1 * 100}')
|
||||||
|
if ! isnumeric "$arg" || (($arg > 200)); then
|
||||||
|
echo "invalid argument '$2' for option -- '$1'"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
max_delta_size=$arg
|
||||||
|
shift
|
||||||
|
;;
|
||||||
--) shift; args+=("$@"); break 2 ;;
|
--) shift; args+=("$@"); break 2 ;;
|
||||||
-*) echo "invalid option -- '$1'"; usage; exit 1 ;;
|
-*) echo "invalid option -- '$1'"; usage; exit 1 ;;
|
||||||
*) args+=("$1");;
|
*) args+=("$1");;
|
||||||
|
Loading…
Reference in New Issue
Block a user