autoconf-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Autotest function usage


From: Ralf Wildenhues
Subject: Re: Autotest function usage
Date: Sun, 18 Nov 2007 16:55:08 +0100
User-agent: Mutt/1.5.13 (2006-08-11)

Hello Paolo, all,

* Ralf Wildenhues wrote on Sun, Oct 21, 2007 at 02:36:55PM CEST:
> 2007-10-20  Paolo Bonzini  <address@hidden>
>       and Ralf Wildenhues  <address@hidden>
>  
>       * lib/autotest/general.m4 (at_func_test): Remove.
>       (AT_INIT): Pre-extract test groups into separate files.
>       (AT_CLEANUP): Source pre-extracted file instead of calling at_func_test.
>       Remove at-test-source files together with the $at_group_dir.

My testing revealed that this totally trashes performance with borked
shells like AIX sh.  As in: the time from `sh ./testsuite' until the
first test starts is expected to be around half an hour.  Compare with:
less than 20 seconds with bash, and 7 seconds with sh and the
at_func_test way of extracting tests, both on the same system.

I know we generally optimize for decent systems, but a few percent gain
at best, if even at all, seem too little a rationale for such a huge
loss.  Especially since before this, we actually had comparably decent
performance with this shell.

OK to revert?  (Asking this before considering Paolo's other patch;
I haven't tested that one much yet.)

Cheers,
Ralf

> diff --git a/lib/autotest/general.m4 b/lib/autotest/general.m4
> index 29834f1..49026f2 100644
> --- a/lib/autotest/general.m4
> +++ b/lib/autotest/general.m4
> @@ -310,15 +310,6 @@ at_func_diff_devnull ()
>    $at_diff "$at_devnull" "$[1]"
>  }
>  
> -# at_func_test NUMBER
> -# -------------------
> -# Parse out test NUMBER from the tail of this file.
> -at_func_test ()
> -{
> -  sed -n 
> '/address@hidden:@AT_START_'$[1]'$/,/address@hidden:@AT_STOP_'$[1]'$/p' 
> "$at_myself" \
> -       > "$at_test_source"
> -}
> -
>  # at_func_create_debugging_script
>  # -------------------------------
>  # Create the debugging script $at_group_dir/run which will reproduce the
> @@ -413,7 +404,7 @@ at_status_file=$at_suite_dir/at-status
>  at_stdout=$at_suite_dir/at-stdout
>  at_stder1=$at_suite_dir/at-stder1
>  at_stderr=$at_suite_dir/at-stderr
> -# The file containing the function to run a test group.
> +# The stem for files containing a test group.
>  at_test_source=$at_suite_dir/at-test-source
>  # The file containing dates.
>  at_times_file=$at_suite_dir/at-times
> @@ -853,6 +844,31 @@ else
>    at_diff=diff
>  fi
>  
> +[{
> +  echo 'BEGIN {'
> +  for at_group in $at_groups; do
> +    at_group_normalized=$at_group
> +    ]_AT_NORMALIZE_TEST_GROUP_NUMBER(at_group_normalized)[
> +    echo "  outfile[\"$at_group\"] = 
> \"$at_test_source-$at_group_normalized\""
> +  done
> +  echo '}
> +emit == 0 && /address@hidden:@AT_START_/ {
> +  test = substr($ 0, 11);
> +  if (outfile[test]) emit = 1
> +}
> +emit != 0 && /address@hidden:@AT_STOP_/ {
> +  if (outfile[test]) close (outfile[test])
> +  emit = 0
> +}
> +emit != 0 { print > outfile[test] }
> +'
> +}] > "$at_test_source.awk"
> +
> +# Extract test group that will be run from the tail of this file
> +if awk -f "$at_test_source.awk" "$at_myself"; then :; else
> +  AS_ECHO(["$as_me: unable to parse test groups"]) >&2
> +  exit 1
> +fi
>  
>  m4_text_box([Driver loop.])
>  for at_group in $at_groups
> @@ -888,10 +904,7 @@ do
>      at_tee_pipe='cat >> "$at_group_log"'
>    fi
>  
> -  if at_func_test $at_group && . "$at_test_source"; then :; else
> -    AS_ECHO(["$as_me: unable to parse test group: $at_group"]) >&2
> -    at_failed=:
> -  fi
> +  . "$at_test_source-$at_group_normalized"
>  
>    # Be sure to come back to the suite directory, in particular
>    # since below we might `rm' the group directory we are in currently.
> @@ -954,9 +967,12 @@ _ATEOF
>        # Cleanup the group directory, unless the user wants the files.
>        if $at_debug_p ; then
>       at_func_create_debugging_script
> -      elif test -d "$at_group_dir"; then
> -     find "$at_group_dir" -type d ! -perm -700 -exec chmod u+rwx \{\} \;
> -     rm -fr "$at_group_dir"
> +      else
> +     if test -d "$at_group_dir"; then
> +       find "$at_group_dir" -type d ! -perm -700 -exec chmod u+rwx \{\} \;
> +       rm -fr "$at_group_dir"
> +        fi
> +     rm -f "$at_test_source-$at_group_normalized"
>        fi
>        ;;
>      *)




reply via email to

[Prev in Thread] Current Thread [Next in Thread]