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: == 1 == SZEDER: real 0m0.007s user 0m0.003s sys 0m0.000s felipec: real 0m0.000s user 0m0.000s sys 0m0.000s == 10 == SZEDER: real 0m0.004s user 0m0.003s sys 0m0.001s felipec: real 0m0.000s user 0m0.000s sys 0m0.000s == 100 == SZEDER: real 0m0.005s user 0m0.002s sys 0m0.002s felipec: real 0m0.002s user 0m0.002s sys 0m0.000s == 1000 == SZEDER: real 0m0.010s user 0m0.008s sys 0m0.001s felipec: real 0m0.018s user 0m0.017s sys 0m0.001s == 10000 == SZEDER: real 0m0.062s user 0m0.060s sys 0m0.003s felipec: real 0m0.175s user 0m0.174s sys 0m0.000s == 100000 == SZEDER: real 0m0.595s user 0m0.593s sys 0m0.021s felipec: real 0m1.848s user 0m1.843s sys 0m0.003s == 1000000 == SZEDER: real 0m6.258s user 0m6.241s sys 0m0.215s felipec: real 0m18.191s user 0m18.115s sys 0m0.045s -- 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