[pacman-dev] [PATCH] makepkg: use --apparent-size when du supports it
Amazingly, using "sleep 1" to convince btrfs to report correct file sizes is only a 90% fix. Sometimes more sleep is needed. Instead we use the --apparent-size argument to du to get actual file sizes. This is used only on Linux as the various BSDs do not support this argument. Signed-off-by: Allan McRae <allan@archlinux.org> --- configure.ac | 2 ++ scripts/Makefile.am | 1 + scripts/makepkg.sh.in | 7 +------ 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/configure.ac b/configure.ac index 03fb015..2323669 100644 --- a/configure.ac +++ b/configure.ac @@ -300,11 +300,13 @@ GCC_GNU89_INLINE_CC INODECMD="stat -c '%i %n'" SIZECMD="stat -c %s" SEDINPLACE="sed -i" +DUFLAGS="-sk --apparent-size" case "${host_os}" in *bsd*) INODECMD="stat -f '%i %n'" SIZECMD="stat -f %z" SEDINPLACE="sed -i \"\"" + DUFLAGS="-sk" ;; esac diff --git a/scripts/Makefile.am b/scripts/Makefile.am index 2bd6411..da7047b 100644 --- a/scripts/Makefile.am +++ b/scripts/Makefile.am @@ -58,6 +58,7 @@ edit = sed \ -e 's|@SIZECMD[@]|$(SIZECMD)|g' \ -e 's|@SEDINPLACE[@]|$(SEDINPLACE)|g' \ -e 's|@DUPATH[@]|$(DUPATH)|g' \ + -e 's|@DUFLAGS[@]|$(DUFLAGS)|g' \ -e 's|@SCRIPTNAME[@]|$@|g' \ -e 's|@configure_input[@]|Generated from $@.sh.in; do not edit by hand.|g' diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in index 5822843..1e9068b 100644 --- a/scripts/makepkg.sh.in +++ b/scripts/makepkg.sh.in @@ -1704,12 +1704,7 @@ write_pkginfo() { local packager="Unknown Packager" fi - # btrfs's delayed allocation causes the stat buffers from the kernel to "lie" - # to us momentarily and report 0 blocks allocated (which is how du calculates - # size). Sleeping for a second here is about the dirtiest thing possible, - # but avoids reporting entirely bogus install sizes. - sleep 1 - local size="$(@DUPATH@ -sk)" + local size="$(@DUPATH@ @DUFLAGS@)" size="$(( ${size%%[^0-9]*} * 1024 ))" msg2 "$(gettext "Generating %s file...")" ".PKGINFO" -- 1.8.0
participants (1)
-
Allan McRae