[pacman-dev] [PATCH] Replace @SIZECMD@ with POSIX-compatible command
Now uses wc -c $file | cut -d' ' -f1, which works using only POSIX commands and removes the need for any platform-specific usages. Signed-off-by: Drew DeVault <sir@cmpwn.com> --- configure.ac | 5 ----- scripts/pkgdelta.sh.in | 4 ++-- scripts/repo-add.sh.in | 6 +++--- 3 files changed, 5 insertions(+), 10 deletions(-) diff --git a/configure.ac b/configure.ac index 825b29b9..ab8f53df 100644 --- a/configure.ac +++ b/configure.ac @@ -348,7 +348,6 @@ DEFAULT_DUFLAGS=" -sk --apparent-size" INODECMD="stat -c '%i %n'" OWNERCMD="stat -c '%u:%g'" MODECMD="stat -c '%a'" -SIZECMD="stat -c %s" SEDINPLACE="sed --follow-symlinks -i" STRIP_BINARIES="--strip-all" STRIP_SHARED="--strip-unneeded" @@ -358,7 +357,6 @@ case "${host_os}" in INODECMD="stat -f '%i %N'" OWNERCMD="stat -f '%u:%g'" MODECMD="stat -f '%Lp'" - SIZECMD="stat -f %z" SEDINPLACE="sed -i \"\"" DEFAULT_DUFLAGS=" -sk" ;; @@ -367,7 +365,6 @@ case "${host_os}" in INODECMD="/usr/bin/stat -f '%i %N'" OWNERCMD="/usr/bin/stat -f '%u:%g'" MODECMD="/usr/bin/stat -f '%Lp'" - SIZECMD="/usr/bin/stat -f %z" SEDINPLACE="/usr/bin/sed -i ''" DEFAULT_DUFLAGS=" -sk" STRIP_BINARIES="" @@ -380,7 +377,6 @@ AC_PATH_PROGS([DUPATH], [du], [du], [/usr/bin$PATH_SEPARATOR/bin] ) AC_SUBST(INODECMD) AC_SUBST(OWNERCMD) AC_SUBST(MODECMD) -AC_SUBST(SIZECMD) AC_SUBST(SEDINPLACE) AC_SUBST(STRIP_BINARIES) AC_SUBST(STRIP_SHARED) @@ -570,7 +566,6 @@ ${PACKAGE_NAME}: File inode command : ${INODECMD} File owner command : ${OWNERCMD} File mode command : ${MODECMD} - Filesize command : ${SIZECMD} In-place sed command : ${SEDINPLACE} libalpm version : ${LIB_VERSION} diff --git a/scripts/pkgdelta.sh.in b/scripts/pkgdelta.sh.in index 9f87185b..4500dd75 100644 --- a/scripts/pkgdelta.sh.in +++ b/scripts/pkgdelta.sh.in @@ -119,7 +119,7 @@ create_xdelta() newver="$pkgver" newarch="$arch" - pkgsize="$(@SIZECMD@ -L "$newfile")" + 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" @@ -151,7 +151,7 @@ create_xdelta() return 1 fi - deltasize="$(@SIZECMD@ -L "$deltafile")" + deltasize="$(wc -c "$deltafile" | cut -d' ' -f1)" if ((max_delta_size * pkgsize / 100 < deltasize)); then msg "$(gettext "Delta package larger than maximum size. Removing.")" diff --git a/scripts/repo-add.sh.in b/scripts/repo-add.sh.in index 6333f6a2..68edbf4b 100644 --- a/scripts/repo-add.sh.in +++ b/scripts/repo-add.sh.in @@ -153,7 +153,7 @@ db_write_delta() { # get md5sum and compressed size of package md5sum=$(md5sum "$deltafile") md5sum=${md5sum%% *} - csize=$(@SIZECMD@ -L "$deltafile") + csize=$(wc -c "$deltafile" | cut -d' ' -f1) oldfile=$(xdelta3 printhdr "$deltafile" | grep "XDELTA filename (source)" | sed 's/.*: *//') newfile=$(xdelta3 printhdr "$deltafile" | grep "XDELTA filename (output)" | sed 's/.*: *//') @@ -368,7 +368,7 @@ db_write_entry() { error "$(gettext "Cannot use armored signatures for packages: %s")" "$pkgfile.sig" return 1 fi - pgpsigsize=$(@SIZECMD@ -L "$pkgfile.sig") + pgpsigsize=$(wc -c "$pkgfile.sig" | cut -d' ' -f1) if (( pgpsigsize > 16384 )); then error "$(gettext "Invalid package signature file '%s'.")" "$pkgfile.sig" return 1 @@ -377,7 +377,7 @@ db_write_entry() { pgpsig=$(base64 "$pkgfile.sig" | tr -d '\n') fi - csize=$(@SIZECMD@ -L "$pkgfile") + csize=$(wc -c "$pkgfile" | cut -d' ' -f1) # compute checksums msg2 "$(gettext "Computing checksums...")" -- 2.12.0
On 20/03/17 12:55, Drew DeVault wrote:
Now uses wc -c $file | cut -d' ' -f1, which works using only POSIX commands and removes the need for any platform-specific usages.
I'm sure we had this in the past and changed to what we have currently. Can't remember why... compressing filesystems maybe? A
On Mon, 2017-03-20 at 15:19 +1000, Allan McRae wrote:
On 20/03/17 12:55, Drew DeVault wrote:
Now uses wc -c $file | cut -d' ' -f1, which works using only POSIX commands and removes the need for any platform-specific usages.
I'm sure we had this in the past and changed to what we have currently. Can't remember why... compressing filesystems maybe?
A
`wc -c` always shows the true size of a file -- that is, the number of bytes of information it contains, not a multiple of the block size. The compressed size can only be calculated by looking at the number of blocks allocated. This command is safe for all compressing/sparse- supporting file systems.
On 25/03/17 10:26, Mike Swanson wrote:
On Mon, 2017-03-20 at 15:19 +1000, Allan McRae wrote:
On 20/03/17 12:55, Drew DeVault wrote:
Now uses wc -c $file | cut -d' ' -f1, which works using only POSIX commands and removes the need for any platform-specific usages.
I'm sure we had this in the past and changed to what we have currently. Can't remember why... compressing filesystems maybe?
A
`wc -c` always shows the true size of a file -- that is, the number of bytes of information it contains, not a multiple of the block size. The compressed size can only be calculated by looking at the number of blocks allocated. This command is safe for all compressing/sparse- supporting file systems.
I have more time now so looked into the history of this. I submitted a patch to do this in makepkg for calculating file sizes. We moved away from this to using something like "du -sk --apparent-size $pkgdir" instead. That is only used for displaying installed sizes so does not need to be byte level accurate. I am fine to include this change to reduce cross platform complexity. A
participants (3)
-
Allan McRae
-
Drew DeVault
-
Mike Swanson