symbian-qemu-0.9.1-12/python-2.6.1/Demo/comparisons/systemtest.py
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 #! /usr/bin/env python
       
     2 
       
     3 # 3)  System Test
       
     4 #
       
     5 #     Given a list of directories, report any bogus symbolic links contained
       
     6 #     anywhere in those subtrees.  A bogus symbolic link is one that cannot
       
     7 #     be resolved because it points to a nonexistent or otherwise
       
     8 #     unresolvable file.  Do *not* use an external find executable.
       
     9 #     Directories may be very very deep.  Print a warning immediately if the
       
    10 #     system you're running on doesn't support symbolic links.
       
    11 
       
    12 # This implementation:
       
    13 # - takes one optional argument, using the current directory as default
       
    14 # - uses chdir to increase performance
       
    15 # - sorts the names per directory
       
    16 # - prints output lines of the form "path1 -> path2" as it goes
       
    17 # - prints error messages about directories it can't list or chdir into
       
    18 
       
    19 import os
       
    20 import sys
       
    21 from stat import *
       
    22 
       
    23 def main():
       
    24     try:
       
    25         # Note: can't test for presence of lstat -- it's always there
       
    26         dummy = os.readlink
       
    27     except AttributeError:
       
    28         print "This system doesn't have symbolic links"
       
    29         sys.exit(0)
       
    30     if sys.argv[1:]:
       
    31         prefix = sys.argv[1]
       
    32     else:
       
    33         prefix = ''
       
    34     if prefix:
       
    35         os.chdir(prefix)
       
    36         if prefix[-1:] != '/': prefix = prefix + '/'
       
    37         reportboguslinks(prefix)
       
    38     else:
       
    39         reportboguslinks('')
       
    40 
       
    41 def reportboguslinks(prefix):
       
    42     try:
       
    43         names = os.listdir('.')
       
    44     except os.error, msg:
       
    45         print "%s%s: can't list: %s" % (prefix, '.', msg)
       
    46         return
       
    47     names.sort()
       
    48     for name in names:
       
    49         if name == os.curdir or name == os.pardir:
       
    50             continue
       
    51         try:
       
    52             mode = os.lstat(name)[ST_MODE]
       
    53         except os.error:
       
    54             print "%s%s: can't stat: %s" % (prefix, name, msg)
       
    55             continue
       
    56         if S_ISLNK(mode):
       
    57             try:
       
    58                 os.stat(name)
       
    59             except os.error:
       
    60                 print "%s%s -> %s" % \
       
    61                       (prefix, name, os.readlink(name))
       
    62         elif S_ISDIR(mode):
       
    63             try:
       
    64                 os.chdir(name)
       
    65             except os.error, msg:
       
    66                 print "%s%s: can't chdir: %s" % \
       
    67                       (prefix, name, msg)
       
    68                 continue
       
    69             try:
       
    70                 reportboguslinks(prefix + name + '/')
       
    71             finally:
       
    72                 os.chdir('..')
       
    73 
       
    74 main()