On 06/21/2011 03:41 PM, Jim Meyering wrote:
Bernhard Voelker wrote:
...
LS_COLORS='rs=0:di=01;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=00:su=00:sg=00:ca=00:tw=00:ow=00:st=00:ex=00:mh=00:'
++ export LS_COLORS
+ strace -o log -e stat,lstat,stat64,lstat64 ls --color=always .
color-without-stat
dangle-1
dangle-2
dangle-3
log
++ wc -l
+ n_lines=5
+ case $n_lines in
+ fail=1
...
How can I help?

Thanks for testing and the report.
If you apply the patch below and rerun the test like this,

     make check -C tests TESTS=ls/stat-free-color VERBOSE=yes

then the offending strace output should help understand where
the extra stat calls are coming from.

For reference, I get this single call on Fedora 15:

     stat(".", {st_mode=S_IFDIR|0700, st_size=4096, ...}) = 0

diff --git a/tests/ls/stat-free-color b/tests/ls/stat-free-color
index b1c4744..a1f6418 100755
--- a/tests/ls/stat-free-color
+++ b/tests/ls/stat-free-color
@@ -55,7 +55,7 @@ n_lines=$(wc -l<  log)
  # Expect one or two stat calls.
  case $n_lines in
    1|2) ;;
-  *) fail=1 ;;
+  *) fail=1; cat log;;
  esac

  Exit $fail

--------------------------

It might be useful to see the entire strace output, too.
To get that, remove the "-e stat,lstat,stat64,lstat64" argument
from the strace invocation, and rerun the test.

The output of both runs is attached.
stat("/usr/lib64/mpi/gcc/openmpi/lib64") and friends is the culprit.

I can't remember to have anything un-OpenSuSE-11.4-like in my toolchain.

To me it seems that the test should count the difference of the
number of stat,lstat,stat64,lstat64 calls when run
  a) as a dummy:  ls --color=always --help
and
  b) for ".":     ls --color=always .


Have a nice day,
Berny
make: Entering directory `/media/sdb5/berny/coreutils/tests'
make  check-TESTS
make[1]: Entering directory `/media/sdb5/berny/coreutils/tests'
make[2]: Entering directory `/media/sdb5/berny/coreutils/tests'
FAIL: ls/stat-free-color
======================================================
   GNU coreutils 8.12.99-18bd: tests/test-suite.log   
======================================================

1 of 1 test failed.  

.. contents:: :depth: 2


FAIL: ls/stat-free-color (exit: 1)
==================================

++ initial_cwd_=/media/sdb5/berny/coreutils/tests
++ fail=0
+++ testdir_prefix_
+++ printf gt
++ pfx_=gt
+++ mktempd_ /media/sdb5/berny/coreutils/tests gt-stat-free-color.XXXX
+++ case $# in
+++ destdir_=/media/sdb5/berny/coreutils/tests
+++ template_=gt-stat-free-color.XXXX
+++ MAX_TRIES_=4
+++ case $destdir_ in
+++ case $template_ in
++++ unset TMPDIR
++++ mktemp -d -t -p /media/sdb5/berny/coreutils/tests gt-stat-free-color.XXXX
+++ d=/media/sdb5/berny/coreutils/tests/gt-stat-free-color.2L9D
+++ case $d in
+++ test -d /media/sdb5/berny/coreutils/tests/gt-stat-free-color.2L9D
++++ ls -dgo /media/sdb5/berny/coreutils/tests/gt-stat-free-color.2L9D
++++ tr S -
+++ perms='drwx------ 2 4096 Jun 21 15:51 
/media/sdb5/berny/coreutils/tests/gt-stat-free-color.2L9D'
+++ case $perms in
+++ test 0 = 0
+++ echo /media/sdb5/berny/coreutils/tests/gt-stat-free-color.2L9D
+++ return
++ test_dir_=/media/sdb5/berny/coreutils/tests/gt-stat-free-color.2L9D
++ cd /media/sdb5/berny/coreutils/tests/gt-stat-free-color.2L9D
++ gl_init_sh_nl_='
'
++ IFS='        
'
++ for sig_ in 1 2 3 13 15
+++ expr 1 + 128
++ eval 'trap '\''Exit 129'\'' 1'
+++ trap 'Exit 129' 1
++ for sig_ in 1 2 3 13 15
+++ expr 2 + 128
++ eval 'trap '\''Exit 130'\'' 2'
+++ trap 'Exit 130' 2
++ for sig_ in 1 2 3 13 15
+++ expr 3 + 128
++ eval 'trap '\''Exit 131'\'' 3'
+++ trap 'Exit 131' 3
++ for sig_ in 1 2 3 13 15
+++ expr 13 + 128
++ eval 'trap '\''Exit 141'\'' 13'
+++ trap 'Exit 141' 13
++ for sig_ in 1 2 3 13 15
+++ expr 15 + 128
++ eval 'trap '\''Exit 143'\'' 15'
+++ trap 'Exit 143' 15
++ trap remove_tmp_ 0
+ path_prepend_ ../src
+ test 1 '!=' 0
+ path_dir_=../src
+ case $path_dir_ in
++ cd /media/sdb5/berny/coreutils/tests/../src
++ echo /media/sdb5/berny/coreutils/src
+ abs_path_dir_=/media/sdb5/berny/coreutils/src
+ case $abs_path_dir_ in
+ 
PATH=/media/sdb5/berny/coreutils/src:/home/berny/coreutils/src:/usr/lib64/mpi/gcc/openmpi/bin:/home/berny/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/X11R6/bin:/usr/games:/usr/lib64/jvm/jre/bin
+ create_exe_shims_ /media/sdb5/berny/coreutils/src
+ case $EXEEXT in
+ return 0
+ shift
+ test 0 '!=' 0
+ export PATH
+ print_ver_ ls
+ test yes = yes
+ local i
+ for i in '$*'
+ env ls --version
ls (GNU coreutils) 8.12.99-18bd
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Richard M. Stallman and David MacKenzie.
+ require_strace_ stat
+ test 1 = 1
+ strace -V
+ strace -qe stat echo
+ require_dirent_d_type_
+ python
+ python /home/berny/coreutils/tests/d_type-check
+ for i in 1 2 3
+ ln -s nowhere dangle-1
+ for i in 1 2 3
+ ln -s nowhere dangle-2
+ for i in 1 2 3
+ ln -s nowhere dangle-3
+ cat
++ dircolors -b color-without-stat
+ eval 
'LS_COLORS='\''rs=0:di=01;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=00:su=00:sg=00:ca=00:tw=00:ow=00:st=00:ex=00:mh=00:'\'';'
 export LS_COLORS
++ 
LS_COLORS='rs=0:di=01;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=00:su=00:sg=00:ca=00:tw=00:ow=00:st=00:ex=00:mh=00:'
++ export LS_COLORS
+ strace -o log ls --color=always .
color-without-stat
dangle-1
dangle-2
dangle-3
log
++ wc -l
+ n_lines=81
+ case $n_lines in
+ fail=1
+ cat log
execve("/media/sdb5/berny/coreutils/src/ls", ["ls", "--color=always", "."], [/* 
112 vars */]) = 0
brk(0)                                  = 0x61e000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 
0x7fe74c75f000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/usr/lib64/mpi/gcc/openmpi/lib64/tls/x86_64/librt.so.1", O_RDONLY) = -1 
ENOENT (No such file or directory)
stat("/usr/lib64/mpi/gcc/openmpi/lib64/tls/x86_64", 0x7fffaa485600) = -1 ENOENT 
(No such file or directory)
open("/usr/lib64/mpi/gcc/openmpi/lib64/tls/librt.so.1", O_RDONLY) = -1 ENOENT 
(No such file or directory)
stat("/usr/lib64/mpi/gcc/openmpi/lib64/tls", 0x7fffaa485600) = -1 ENOENT (No 
such file or directory)
open("/usr/lib64/mpi/gcc/openmpi/lib64/x86_64/librt.so.1", O_RDONLY) = -1 
ENOENT (No such file or directory)
stat("/usr/lib64/mpi/gcc/openmpi/lib64/x86_64", 0x7fffaa485600) = -1 ENOENT (No 
such file or directory)
open("/usr/lib64/mpi/gcc/openmpi/lib64/librt.so.1", O_RDONLY) = -1 ENOENT (No 
such file or directory)
stat("/usr/lib64/mpi/gcc/openmpi/lib64", {st_mode=S_IFDIR|0755, st_size=4096, 
...}) = 0
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=115701, ...}) = 0
mmap(NULL, 115701, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fe74c742000
close(3)                                = 0
open("/lib64/librt.so.1", O_RDONLY)     = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\340\"\0\0\0\0\0\0"..., 
832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=47329, ...}) = 0
mmap(NULL, 2133008, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 
0x7fe74c33a000
fadvise64(3, 0, 2133008, POSIX_FADV_WILLNEED) = 0
mprotect(0x7fe74c342000, 2093056, PROT_NONE) = 0
mmap(0x7fe74c541000, 8192, PROT_READ|PROT_WRITE, 
MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x7000) = 0x7fe74c541000
close(3)                                = 0
open("/usr/lib64/mpi/gcc/openmpi/lib64/libc.so.6", O_RDONLY) = -1 ENOENT (No 
such file or directory)
open("/lib64/libc.so.6", O_RDONLY)      = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\20\355\1\0\0\0\0\0"..., 
832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=1725484, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 
0x7fe74c741000
mmap(NULL, 3591144, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 
0x7fe74bfcd000
fadvise64(3, 0, 3591144, POSIX_FADV_WILLNEED) = 0
mprotect(0x7fe74c131000, 2093056, PROT_NONE) = 0
mmap(0x7fe74c330000, 20480, PROT_READ|PROT_WRITE, 
MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x163000) = 0x7fe74c330000
mmap(0x7fe74c335000, 19432, PROT_READ|PROT_WRITE, 
MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fe74c335000
close(3)                                = 0
open("/usr/lib64/mpi/gcc/openmpi/lib64/libpthread.so.0", O_RDONLY) = -1 ENOENT 
(No such file or directory)
open("/lib64/libpthread.so.0", O_RDONLY) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 Z\0\0\0\0\0\0"..., 832) 
= 832
fstat(3, {st_mode=S_IFREG|0755, st_size=135934, ...}) = 0
mmap(NULL, 2212736, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 
0x7fe74bdb0000
fadvise64(3, 0, 2212736, POSIX_FADV_WILLNEED) = 0
mprotect(0x7fe74bdc7000, 2097152, PROT_NONE) = 0
mmap(0x7fe74bfc7000, 8192, PROT_READ|PROT_WRITE, 
MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x17000) = 0x7fe74bfc7000
mmap(0x7fe74bfc9000, 13184, PROT_READ|PROT_WRITE, 
MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fe74bfc9000
close(3)                                = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 
0x7fe74c740000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 
0x7fe74c73f000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 
0x7fe74c73e000
arch_prctl(ARCH_SET_FS, 0x7fe74c73f700) = 0
mprotect(0x7fe74bfc7000, 4096, PROT_READ) = 0
mprotect(0x7fe74c330000, 16384, PROT_READ) = 0
mprotect(0x7fe74c541000, 4096, PROT_READ) = 0
mprotect(0x61b000, 4096, PROT_READ)     = 0
mprotect(0x7fe74c760000, 4096, PROT_READ) = 0
munmap(0x7fe74c742000, 115701)          = 0
set_tid_address(0x7fe74c73f9d0)         = 8611
set_robust_list(0x7fe74c73f9e0, 0x18)   = 0
futex(0x7fffaa485e5c, FUTEX_WAKE_PRIVATE, 1) = 0
futex(0x7fffaa485e5c, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1, NULL, 
7fe74c73f700) = -1 EAGAIN (Resource temporarily unavailable)
rt_sigaction(SIGRTMIN, {0x7fe74bdb54a0, [], SA_RESTORER|SA_SIGINFO, 
0x7fe74bdbf2d0}, NULL, 8) = 0
rt_sigaction(SIGRT_1, {0x7fe74bdb5530, [], SA_RESTORER|SA_RESTART|SA_SIGINFO, 
0x7fe74bdbf2d0}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0
getrlimit(RLIMIT_STACK, {rlim_cur=8192*1024, rlim_max=RLIM_INFINITY}) = 0
brk(0)                                  = 0x61e000
brk(0x63f000)                           = 0x63f000
ioctl(1, SNDCTL_TMR_TIMEBASE or TCGETS, 0x7fffaa4859e0) = -1 ENOTTY 
(Inappropriate ioctl for device)
ioctl(1, TIOCGWINSZ, 0x7fffaa485e00)    = -1 ENOTTY (Inappropriate ioctl for 
device)
ioctl(1, TIOCGPGRP, [32743])            = -1 ENOTTY (Inappropriate ioctl for 
device)
stat(".", {st_mode=S_IFDIR|0700, st_size=4096, ...}) = 0
open(".", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 3
fcntl(3, F_GETFD)                       = 0x1 (flags FD_CLOEXEC)
getdents64(3, /* 7 entries */, 32768)   = 208
getdents64(3, /* 0 entries */, 32768)   = 0
close(3)                                = 0
fstat(1, {st_mode=S_IFREG|0644, st_size=3248, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 
0x7fe74c75e000
write(1, "color-without-stat\n\33[0m\33[01;36md"..., 90) = 90
close(1)                                = 0
munmap(0x7fe74c75e000, 4096)            = 0
close(2)                                = 0
exit_group(0)                           = ?
+ Exit 1
+ set +e
+ exit 1
+ exit 1
+ remove_tmp_
+ __st=1
+ cleanup_
+ :
+ cd /media/sdb5/berny/coreutils/tests
+ chmod -R u+rwx /media/sdb5/berny/coreutils/tests/gt-stat-free-color.2L9D
+ rm -rf /media/sdb5/berny/coreutils/tests/gt-stat-free-color.2L9D
+ exit 1
======================================
1 of 1 test failed
See tests/test-suite.log
Please report to bug-coreutils@gnu.org
======================================
make[2]: *** [test-suite.log] Error 1
make[2]: Leaving directory `/media/sdb5/berny/coreutils/tests'
make[1]: *** [check-TESTS] Error 2
make[1]: Leaving directory `/media/sdb5/berny/coreutils/tests'
make: *** [check-am] Error 2
make: Leaving directory `/media/sdb5/berny/coreutils/tests'
make: Entering directory `/media/sdb5/berny/coreutils/tests'
make  check-TESTS
make[1]: Entering directory `/media/sdb5/berny/coreutils/tests'
make[2]: Entering directory `/media/sdb5/berny/coreutils/tests'
FAIL: ls/stat-free-color
======================================================
   GNU coreutils 8.12.99-18bd: tests/test-suite.log   
======================================================

1 of 1 test failed.  

.. contents:: :depth: 2


FAIL: ls/stat-free-color (exit: 1)
==================================

++ initial_cwd_=/media/sdb5/berny/coreutils/tests
++ fail=0
+++ testdir_prefix_
+++ printf gt
++ pfx_=gt
+++ mktempd_ /media/sdb5/berny/coreutils/tests gt-stat-free-color.XXXX
+++ case $# in
+++ destdir_=/media/sdb5/berny/coreutils/tests
+++ template_=gt-stat-free-color.XXXX
+++ MAX_TRIES_=4
+++ case $destdir_ in
+++ case $template_ in
++++ unset TMPDIR
++++ mktemp -d -t -p /media/sdb5/berny/coreutils/tests gt-stat-free-color.XXXX
+++ d=/media/sdb5/berny/coreutils/tests/gt-stat-free-color.096N
+++ case $d in
+++ test -d /media/sdb5/berny/coreutils/tests/gt-stat-free-color.096N
++++ ls -dgo /media/sdb5/berny/coreutils/tests/gt-stat-free-color.096N
++++ tr S -
+++ perms='drwx------ 2 4096 Jun 21 15:50 
/media/sdb5/berny/coreutils/tests/gt-stat-free-color.096N'
+++ case $perms in
+++ test 0 = 0
+++ echo /media/sdb5/berny/coreutils/tests/gt-stat-free-color.096N
+++ return
++ test_dir_=/media/sdb5/berny/coreutils/tests/gt-stat-free-color.096N
++ cd /media/sdb5/berny/coreutils/tests/gt-stat-free-color.096N
++ gl_init_sh_nl_='
'
++ IFS='        
'
++ for sig_ in 1 2 3 13 15
+++ expr 1 + 128
++ eval 'trap '\''Exit 129'\'' 1'
+++ trap 'Exit 129' 1
++ for sig_ in 1 2 3 13 15
+++ expr 2 + 128
++ eval 'trap '\''Exit 130'\'' 2'
+++ trap 'Exit 130' 2
++ for sig_ in 1 2 3 13 15
+++ expr 3 + 128
++ eval 'trap '\''Exit 131'\'' 3'
+++ trap 'Exit 131' 3
++ for sig_ in 1 2 3 13 15
+++ expr 13 + 128
++ eval 'trap '\''Exit 141'\'' 13'
+++ trap 'Exit 141' 13
++ for sig_ in 1 2 3 13 15
+++ expr 15 + 128
++ eval 'trap '\''Exit 143'\'' 15'
+++ trap 'Exit 143' 15
++ trap remove_tmp_ 0
+ path_prepend_ ../src
+ test 1 '!=' 0
+ path_dir_=../src
+ case $path_dir_ in
++ cd /media/sdb5/berny/coreutils/tests/../src
++ echo /media/sdb5/berny/coreutils/src
+ abs_path_dir_=/media/sdb5/berny/coreutils/src
+ case $abs_path_dir_ in
+ 
PATH=/media/sdb5/berny/coreutils/src:/home/berny/coreutils/src:/usr/lib64/mpi/gcc/openmpi/bin:/home/berny/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/X11R6/bin:/usr/games:/usr/lib64/jvm/jre/bin
+ create_exe_shims_ /media/sdb5/berny/coreutils/src
+ case $EXEEXT in
+ return 0
+ shift
+ test 0 '!=' 0
+ export PATH
+ print_ver_ ls
+ test yes = yes
+ local i
+ for i in '$*'
+ env ls --version
ls (GNU coreutils) 8.12.99-18bd
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Richard M. Stallman and David MacKenzie.
+ require_strace_ stat
+ test 1 = 1
+ strace -V
+ strace -qe stat echo
+ require_dirent_d_type_
+ python
+ python /home/berny/coreutils/tests/d_type-check
+ for i in 1 2 3
+ ln -s nowhere dangle-1
+ for i in 1 2 3
+ ln -s nowhere dangle-2
+ for i in 1 2 3
+ ln -s nowhere dangle-3
+ cat
++ dircolors -b color-without-stat
+ eval 
'LS_COLORS='\''rs=0:di=01;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=00:su=00:sg=00:ca=00:tw=00:ow=00:st=00:ex=00:mh=00:'\'';'
 export LS_COLORS
++ 
LS_COLORS='rs=0:di=01;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=00:su=00:sg=00:ca=00:tw=00:ow=00:st=00:ex=00:mh=00:'
++ export LS_COLORS
+ strace -o log -e stat,lstat,stat64,lstat64 ls --color=always .
color-without-stat
dangle-1
dangle-2
dangle-3
log
++ wc -l
+ n_lines=5
+ case $n_lines in
+ fail=1
+ cat log
stat("/usr/lib64/mpi/gcc/openmpi/lib64/tls/x86_64", 0x7fffa2b83bf0) = -1 ENOENT 
(No such file or directory)
stat("/usr/lib64/mpi/gcc/openmpi/lib64/tls", 0x7fffa2b83bf0) = -1 ENOENT (No 
such file or directory)
stat("/usr/lib64/mpi/gcc/openmpi/lib64/x86_64", 0x7fffa2b83bf0) = -1 ENOENT (No 
such file or directory)
stat("/usr/lib64/mpi/gcc/openmpi/lib64", {st_mode=S_IFDIR|0755, st_size=4096, 
...}) = 0
stat(".", {st_mode=S_IFDIR|0700, st_size=4096, ...}) = 0
+ Exit 1
+ set +e
+ exit 1
+ exit 1
+ remove_tmp_
+ __st=1
+ cleanup_
+ :
+ cd /media/sdb5/berny/coreutils/tests
+ chmod -R u+rwx /media/sdb5/berny/coreutils/tests/gt-stat-free-color.096N
+ rm -rf /media/sdb5/berny/coreutils/tests/gt-stat-free-color.096N
+ exit 1
======================================
1 of 1 test failed
See tests/test-suite.log
Please report to bug-coreutils@gnu.org
======================================
make[2]: *** [test-suite.log] Error 1
make[2]: Leaving directory `/media/sdb5/berny/coreutils/tests'
make[1]: *** [check-TESTS] Error 2
make[1]: Leaving directory `/media/sdb5/berny/coreutils/tests'
make: *** [check-am] Error 2
make: Leaving directory `/media/sdb5/berny/coreutils/tests'

Reply via email to