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 <[email protected]>
---
 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 [email protected]; 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


Reply via email to