symbian-qemu-0.9.1-12/python-2.6.1/Tools/scripts/linktree.py
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 #! /usr/bin/env python
       
     2 
       
     3 # linktree
       
     4 #
       
     5 # Make a copy of a directory tree with symbolic links to all files in the
       
     6 # original tree.
       
     7 # All symbolic links go to a special symbolic link at the top, so you
       
     8 # can easily fix things if the original source tree moves.
       
     9 # See also "mkreal".
       
    10 #
       
    11 # usage: mklinks oldtree newtree
       
    12 
       
    13 import sys, os
       
    14 
       
    15 LINK = '.LINK' # Name of special symlink at the top.
       
    16 
       
    17 debug = 0
       
    18 
       
    19 def main():
       
    20     if not 3 <= len(sys.argv) <= 4:
       
    21         print 'usage:', sys.argv[0], 'oldtree newtree [linkto]'
       
    22         return 2
       
    23     oldtree, newtree = sys.argv[1], sys.argv[2]
       
    24     if len(sys.argv) > 3:
       
    25         link = sys.argv[3]
       
    26         link_may_fail = 1
       
    27     else:
       
    28         link = LINK
       
    29         link_may_fail = 0
       
    30     if not os.path.isdir(oldtree):
       
    31         print oldtree + ': not a directory'
       
    32         return 1
       
    33     try:
       
    34         os.mkdir(newtree, 0777)
       
    35     except os.error, msg:
       
    36         print newtree + ': cannot mkdir:', msg
       
    37         return 1
       
    38     linkname = os.path.join(newtree, link)
       
    39     try:
       
    40         os.symlink(os.path.join(os.pardir, oldtree), linkname)
       
    41     except os.error, msg:
       
    42         if not link_may_fail:
       
    43             print linkname + ': cannot symlink:', msg
       
    44             return 1
       
    45         else:
       
    46             print linkname + ': warning: cannot symlink:', msg
       
    47     linknames(oldtree, newtree, link)
       
    48     return 0
       
    49 
       
    50 def linknames(old, new, link):
       
    51     if debug: print 'linknames', (old, new, link)
       
    52     try:
       
    53         names = os.listdir(old)
       
    54     except os.error, msg:
       
    55         print old + ': warning: cannot listdir:', msg
       
    56         return
       
    57     for name in names:
       
    58         if name not in (os.curdir, os.pardir):
       
    59             oldname = os.path.join(old, name)
       
    60             linkname = os.path.join(link, name)
       
    61             newname = os.path.join(new, name)
       
    62             if debug > 1: print oldname, newname, linkname
       
    63             if os.path.isdir(oldname) and \
       
    64                not os.path.islink(oldname):
       
    65                 try:
       
    66                     os.mkdir(newname, 0777)
       
    67                     ok = 1
       
    68                 except:
       
    69                     print newname + \
       
    70                           ': warning: cannot mkdir:', msg
       
    71                     ok = 0
       
    72                 if ok:
       
    73                     linkname = os.path.join(os.pardir,
       
    74                                             linkname)
       
    75                     linknames(oldname, newname, linkname)
       
    76             else:
       
    77                 os.symlink(linkname, newname)
       
    78 
       
    79 if __name__ == '__main__':
       
    80     sys.exit(main())