Hello,

On Tue, Oct 04, 2005 at 12:17:54PM -0700, Paul Eggert wrote:
> Why do you need the "-type l -prune" here?  Can't that be omitted?
> "find" doesn't follow symlinks.

the question is whether `-type d' can be true for symlinked directory,
on some system.

> Also, as a minor efficiency thing, if $at_suite_dir is not a directory
> then you don't need to invoke rm at all;

Yes.

Can we use `-perm -700' to avoid most of the chmod's?
That would be a bigger optimization.

A proposed patch attached.

Stepan
2005-10-05  Ralf Wildenhues  <[EMAIL PROTECTED]>
            Stepan Kasal  <[EMAIL PROTECTED]>

        * lib/autotest/general.m4 (AT_INIT): When ensuring writability
        before the removals of test dirs, use `find' to avoid modification
        of symlinked directories.

Index: lib/autotest/general.m4
===================================================================
RCS file: /cvsroot/autoconf/autoconf/lib/autotest/general.m4,v
retrieving revision 1.193
diff -u -r1.193 general.m4
--- lib/autotest/general.m4     4 Oct 2005 09:14:12 -0000       1.193
+++ lib/autotest/general.m4     5 Oct 2005 08:52:25 -0000
@@ -276,7 +276,8 @@
        ;;
 
     --clean | -c )
-       test -d "$at_suite_dir" && chmod -R u+rwx "$at_suite_dir"
+       test -d "$at_suite_dir" &&
+         find "$at_suite_dir" -type d ! -perm -700 -exec chmod u+rwx \{\} \;
        rm -f -r "$at_suite_dir" "$at_suite_log"
        exit 0
        ;;
@@ -670,8 +671,10 @@
       # Create a fresh directory for the next test group, and enter.
       at_group_dir=$at_suite_dir/$at_group_normalized
       at_group_log=$at_group_dir/$as_me.log
-      test -d $at_group_dir && chmod -R u+rwx $at_group_dir
-      rm -f -r $at_group_dir
+      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
       mkdir $at_group_dir ||
        AS_ERROR([cannot create $at_group_dir])
       cd $at_group_dir
@@ -764,10 +767,11 @@
          echo "$at_log_msg" >&AS_MESSAGE_LOG_FD
 
          # Cleanup the group directory, unless the user wants the files.
-         $at_debug_p || {
-           test -d $at_group_dir && chmod -R u+rwx $at_group_dir
-           rm -f -r $at_group_dir
-         }
+         $at_debug_p ||
+           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
          ;;
        *)
          # Upon failure, include the log into the testsuite's global

Reply via email to