commit b0c398f1c457de816e28cf8540084885504de29b Author: Elan Ruusamäe <g...@delfi.ee> Date: Sat Jan 9 19:26:17 2016 +0200
rpm query is slow, cache it shrc.sh | 49 ++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 44 insertions(+), 5 deletions(-) --- diff --git a/shrc.sh b/shrc.sh index a384ae8..e9ea716 100755 --- a/shrc.sh +++ b/shrc.sh @@ -286,7 +286,10 @@ __bash_prompt_command() { local LIGHT_GRAY="\[\033[0;37m\]" local COLOR_NONE="\[\e[0m\]" + # if we are in rpm subdir and have exactly one .spec in the dir, include package version + __package_update_rpmversion local rpmver=$(__package_rpmversion) + local prompt="${BLUE}[${RED}\w${GREEN}${rpmver:+($rpmver)}$(__bash_parse_git_branch)${BLUE}]${COLOR_NONE} " if [ $previous_return_value -eq 0 ]; then PS1="${prompt}➔ " @@ -333,10 +336,46 @@ __bash_parse_git_branch() { fi } -# if we are in rpm subdir and have exactly one .spec in the dir, include package version -__package_rpmversion() { - if [[ $PWD =~ $(rpm -E %_topdir) ]] && [ "$(\ls *.spec 2>/dev/null | wc -w)" = 1 ]; then - # give only first version (ignore subpackages) - rpm --define "_specdir $PWD" --specfile *.spec -q --qf '%{VERSION}\n' | head -n1 +# cache requires bash 4.x +declare -A __package_update_rpmversion_cache +__package_update_rpmversion() { + # extract vars from cache + set -- ${__package_update_rpmversion_cache[$PWD]} + local specfile=$1 version=$2 mtime=$3 + + # invalidate cache + if [ -f "$specfile" ]; then + local stat + stat=$(stat -c %Y $specfile) + if [ $mtime ] && [ $stat -gt $mtime ]; then + unset version + fi + mtime=$stat + else + # reset cache, .spec may be renamed + unset version specfile fi + + # we have cached version + test -n "$version" && return + + # needs to be one file + specfile=${specfile:-$(\ls *.spec 2>/dev/null)} + if [ ! -f "$specfile" ]; then + unset __package_update_rpmversion_cache[$PWD] + return + fi + + mtime=${mtime:-$(stat -c %Y $specfile)} + + # give only first version (ignore subpackages) + version=$(rpm --define "_specdir $PWD" --specfile $specfile -q --qf '%{VERSION}\n' | head -n1) + __package_update_rpmversion_cache[$PWD]="$specfile $version $mtime" +} + +__package_rpmversion() { + # extract vars from cache + set -- ${__package_update_rpmversion_cache[$PWD]} + # print version + echo $2 } ================================================================ ---- gitweb: http://git.pld-linux.org/gitweb.cgi/packages/rpm-build-tools.git/commitdiff/b0c398f1c457de816e28cf8540084885504de29b _______________________________________________ pld-cvs-commit mailing list pld-cvs-commit@lists.pld-linux.org http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit