diff options
author | Fabian Groffen <grobian@gentoo.org> | 2017-08-24 14:46:04 +0200 |
---|---|---|
committer | Fabian Groffen <grobian@gentoo.org> | 2017-08-28 08:23:43 +0200 |
commit | 4dc6f7494af1bcb6a051add9abb827087fd9e9e7 (patch) | |
tree | b595b333b2e0bd3ea7d1b71307b1950570005459 | |
parent | RepoConfigLoader: Fix compatibility with Python 3.7 (bug #629146). (diff) | |
download | portage-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.sh | 53 |
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 |