From c60cc924fff90d82e9340b96ac00b5315e622793 Mon Sep 17 00:00:00 2001 From: Rudolf Polzer Date: Sat, 28 May 2011 08:35:23 +0200 Subject: [PATCH] get rid of some subshells when finding checksums of a file --- misc/tools/cached-converter.sh | 35 ++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/misc/tools/cached-converter.sh b/misc/tools/cached-converter.sh index 43aa5b2c..104b657d 100755 --- a/misc/tools/cached-converter.sh +++ b/misc/tools/cached-converter.sh @@ -39,6 +39,36 @@ tmpdir=`mktemp -d -t cached-converter.XXXXXX` trap 'exit 1' INT trap 'rm -rf "$tmpdir"' EXIT + +use_magnet_to_acquire_checksum_faster() +# ___________________ +# ,--'' ~~~~~~~^^^~._ '. +# ,.-' ~~~~~~~~~~^^^^^~~~._._ \ +# | /^^^^^| /^^^^^^^^\\ \ \ +# ,/___ < o> < (OO) > _ \ +# /'/, |- . ----.\ +# |(|-'^^;,- ,| __ ^~~^^^^^^^; |\ +# \\` | <;_ __ |`--- ..-^^/- | || +# \`-|Oq-.____`________~='^^|__,/ ' // +# \ || | | | | \ ..-;| / '/ +# | ||#|#|the|==|game!|'^` |/' /' +# | \\\\^\***|***| \ ,,;' / +# | `-=\_\__\___\__..-' ,.- - ,/ +# | . `-_ ------ _,-'^-'^,-' +# | `-._________..--''^,-''^ +# \ ,...-'^ +# `----------'^ PROBLEM? +{ + magnet=`GIT_DIR="$git_src_repo/.git" git ls-files -s "$1"` + if [ -n "$magnet" ]; then + magnet=${magnet#* } + magnet=${magnet%% *} + sum=$sum$magnet + else + sum=$sum`git hash-object "$1"` + fi +} + lastinfiles= lastinfileshash= cached() @@ -70,9 +100,10 @@ cached() esac done if [ -n "$git_src_repo" ] && ! $evil; then - sum=`( cd "$git_src_repo"; git ls-files -s "${infile1#./}" | cut -d ' ' -f 2 | grep . ) || { echo >&2 "git-ls-files failed on $infile1"; git hash-object "$infile1"; }` + sum= + use_magnet_to_acquire_checksum_faster "${infile1#./}" if [ -n "$infile2" ]; then - sum=$sum`( cd "$git_src_repo"; git ls-files -s "${infile2#./}" | cut -d ' ' -f 2 | grep . ) || { echo >&2 "git-ls-files failed on $infile2"; git hash-object "$infile2"; }` + use_magnet_to_acquire_checksum_faster "${infile2#./}" fi else sum=`git hash-object "$infile1"` -- 2.39.2