On Sat, Nov 17, 2012 at 8:08 PM, Felipe Contreras <felipe.contreras@xxxxxxxxx> wrote: > On Sat, Nov 17, 2012 at 3:14 PM, SZEDER Gábor <szeder@xxxxxxxxxx> wrote: >> On Sat, Nov 17, 2012 at 12:50:39PM +0100, Felipe Contreras wrote: >>> On Sat, Nov 17, 2012 at 12:05 PM, SZEDER Gábor <szeder@xxxxxxxxxx> wrote: >>> >>> > __gitcomp_nl () >>> > { >>> > local IFS=$'\n' >>> > - COMPREPLY=($(compgen -P "${2-}" -S "${4- }" -W "$1" -- "${3-$cur}")) >>> > + COMPREPLY=($(awk -v pfx="${2-}" -v sfx="${4- }" -v cur="${3-$cur}" ' >>> > + BEGIN { >>> > + FS="\n"; >>> > + len=length(cur); >>> > + } >>> > + { >>> > + if (cur == substr($1, 1, len)) >>> > + print pfx$1sfx; >>> > + }' <<< "$1" )) >>> > } >>> >>> Does this really perform better than my alternative? >>> >>> + for x in $1; do >>> + if [[ "$x" = "$3"* ]]; then >>> + COMPREPLY+=("$2$x$4") >>> + fi >>> + done >> >> It does: >> >> My version: >> >> $ refs="$(for i in {0..9999} ; do echo branch$i ; done)" >> $ time __gitcomp_nl "$refs" >> >> real 0m0.109s >> user 0m0.096s >> sys 0m0.012s >> >> Yours: >> >> $ time __gitcomp_nl "$refs" >> >> real 0m0.321s >> user 0m0.312s >> sys 0m0.008s > > Yeah, for 10000 refs, which is not the common case: And this beats both in every case: while read -r x; do if [[ "$x" == "$3"* ]]; then COMPREPLY+=("$2$x$4") fi done <<< $1 == 1 == one: real 0m0.004s user 0m0.003s sys 0m0.000s two: real 0m0.000s user 0m0.000s sys 0m0.000s == 10 == one: real 0m0.005s user 0m0.002s sys 0m0.002s two: real 0m0.000s user 0m0.000s sys 0m0.000s == 100 == one: real 0m0.005s user 0m0.004s sys 0m0.000s two: real 0m0.001s user 0m0.000s sys 0m0.000s == 1000 == one: real 0m0.010s user 0m0.008s sys 0m0.001s two: real 0m0.004s user 0m0.004s sys 0m0.000s == 10000 == one: real 0m0.061s user 0m0.057s sys 0m0.005s two: real 0m0.045s user 0m0.044s sys 0m0.000s == 100000 == one: real 0m0.582s user 0m0.575s sys 0m0.022s two: real 0m0.487s user 0m0.482s sys 0m0.004s == 1000000 == one: real 0m6.305s user 0m6.284s sys 0m0.216s two: real 0m5.268s user 0m5.194s sys 0m0.065s -- Felipe Contreras -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html