* Fix the quadratic performance in substitute().

svn path=/nixpkgs/trunk/; revision=7488
This commit is contained in:
Eelco Dolstra 2006-12-27 17:14:00 +00:00
parent eb98a4c328
commit 592cb44e52

View File

@ -180,7 +180,9 @@ substitute() {
local params=("$@") local params=("$@")
local sedArgs=() local sedScript=$NIX_BUILD_TOP/.sedargs
rm -f $sedScript
touch $sedScript
local n p pattern replacement varName local n p pattern replacement varName
@ -191,25 +193,26 @@ substitute() {
pattern=${params[$((n + 1))]} pattern=${params[$((n + 1))]}
replacement=${params[$((n + 2))]} replacement=${params[$((n + 2))]}
n=$((n + 2)) n=$((n + 2))
sedArgs=("${sedArgs[@]}" "-e" "s^$pattern^$replacement^g") echo "s^$pattern^$replacement^g" >> $sedScript
sedArgs=("${sedArgs[@]}" "-e" )
fi fi
if test "$p" = "--subst-var"; then if test "$p" = "--subst-var"; then
varName=${params[$((n + 1))]} varName=${params[$((n + 1))]}
n=$((n + 1)) n=$((n + 1))
sedArgs=("${sedArgs[@]}" "-e" "s^@${varName}@^${!varName}^g") echo "s^@${varName}@^${!varName}^g" >> $sedScript
fi fi
if test "$p" = "--subst-var-by"; then if test "$p" = "--subst-var-by"; then
varName=${params[$((n + 1))]} varName=${params[$((n + 1))]}
replacement=${params[$((n + 2))]} replacement=${params[$((n + 2))]}
n=$((n + 2)) n=$((n + 2))
sedArgs=("${sedArgs[@]}" "-e" "s^@${varName}@^$replacement^g") echo "s^@${varName}@^$replacement^g" >> $sedScript
fi fi
done done
sed "${sedArgs[@]}" < "$input" > "$output".tmp sed -f $sedScript < "$input" > "$output".tmp
if test -x "$output"; then if test -x "$output"; then
chmod +x "$output".tmp chmod +x "$output".tmp
fi fi