aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFabian Groffen <grobian@gentoo.org>2017-08-24 14:46:04 +0200
committerFabian Groffen <grobian@gentoo.org>2017-08-28 08:23:43 +0200
commit4dc6f7494af1bcb6a051add9abb827087fd9e9e7 (patch)
treeb595b333b2e0bd3ea7d1b71307b1950570005459
parentRepoConfigLoader: Fix compatibility with Python 3.7 (bug #629146). (diff)
downloadportage-4dc6f749.tar.gz
portage-4dc6f749.tar.bz2
portage-4dc6f749.zip
__dyn_install: improve reporting of build and image sizes
Prior to this commit, the reported sizes would look like: * Final size of build directory: 34942 KiB * Final size of installed tree: 5627 KiB Because the sizes aren't aligned, it is hard to (visually) compare them. On top of this, because the numbers are sometimes bigger, print a human friendly size after the KiB size if applicable, like so: * Final size of build directory: 1906 KiB (1.8 MiB) * Final size of installed tree: 7 KiB It should be noted that in case both sizes have a human-readable variant, they are also aligned. The helper functions are defined and used in a subshell to avoid pollution of the caller's environment. Reviewed-by: Zac Medico <zmedico@gentoo.org>
-rw-r--r--bin/phase-functions.sh53
1 files changed, 49 insertions, 4 deletions
diff --git a/bin/phase-functions.sh b/bin/phase-functions.sh
index dfd8733c8..ce174ba91 100644
--- a/bin/phase-functions.sh
+++ b/bin/phase-functions.sh
@@ -598,10 +598,55 @@ __dyn_install() {
# record build & installed size in build log
if type -P du &>/dev/null; then
- local sz=( $(du -ks "${WORKDIR}") )
- einfo "Final size of build directory: ${sz[0]} KiB"
- sz=( $(du -ks "${D}") )
- einfo "Final size of installed tree: ${sz[0]} KiB"
+ local nsz=( $(du -ks "${WORKDIR}") )
+ local isz=( $(du -ks "${D}") )
+
+ # subshell to avoid polluting the caller env with the helper
+ # functions below
+ (
+ # align $1 to the right to the width of the widest of $1 and $2
+ padl() {
+ local s1=$1
+ local s2=$2
+ local width=${#s1}
+ [[ ${#s2} -gt ${width} ]] && width=${#s2}
+ printf "%*s" ${width} "${s1}"
+ }
+
+ # transform number in KiB into MiB, GiB or TiB based on size
+ human() {
+ local s1=$1
+ local units=( KiB MiB GiB TiB )
+
+ s1=$((s1 * 10))
+ while [[ ${s1} -gt 10240 && ${#units[@]} -gt 1 ]] ; do
+ s1=$((s1 / 1024 ))
+ units=( ${units[@]:1} )
+ done
+
+ local r=${s1: -1}
+ s1=$((s1 / 10))
+ printf "%s.%s %s" "${s1}" "${r}" "${units[0]}"
+ }
+
+ size() {
+ local s1=$1
+ local s2=$2
+ local out="$(padl "${s1}" "${s2}") KiB"
+
+ if [[ ${s1} -gt 1024 ]] ; then
+ s1=$(human ${s1})
+ if [[ ${s2} -gt 1024 ]] ; then
+ s2=$(human ${s2})
+ s1=$(padl ${s1} ${s2})
+ fi
+ out+=" (${s1})"
+ fi
+ echo "${out}"
+ }
+ einfo "Final size of build directory: $(size ${nsz[0]} ${isz[0]})"
+ einfo "Final size of installed tree: $(size ${isz[0]} ${nsz[0]})"
+ )
__vecho
fi