
Hello, I'm new to Python, and I'm very impressed with the potential of this language to simplify much of the software my company provides. As a first project, I'm looking to replace some tricky scripts written in csh for setting up our tool hierarchies. An example is a script to construct a "mock hierarchy" out of some patch files and links to a production hierarchy. Our hierarchies are typically two gigabytes, thousands of files, lots of strange links, many of which are broken. So the script needs to be fairly robust. The functions in 'shutil' won't do it. 'copytree' works, but the cost is a huge amount of disk space. A mock hierarchy takes not much more space than the patch files themselves. After a brief search on the Python website, I couldn't find a suitable utility, and decided to write my own (see below). It seems like this could be a useful, general-purpose addition to 'shutil'. I've tested this on a large hierarchy on a Solaris workstation, and it seems to work. There are some dark corners which worry me however, so I thought I would get some advice from the experts. Has anything like this already been done or is it planned? Would a function like this be a useful addition to 'shutil'? I'm intending to continue work on it, and will be glad to contribute it to the library. import os, sys from os.path import * def linktree(oldtree, newtree): """linktree(oldtree, newtree) -> None Leave 'oldtree' undisturbed. Recursively add links to 'newtree', until it looks just like 'oldtree', but with the new files patched in. """ names = os.listdir(oldtree) print 'Candidates: ', names for name in names: oldpath = abspath(join(oldtree, name)) newpath = abspath(join(newtree, name)) if not exists(newpath) and not islink(newpath): if not exists(oldpath): # Don't link to a bad link. print '*** Error ***\nPath does not exist:\n', oldpath continue print 'New link: ', newpath os.symlink(oldpath, newpath) # OK if oldpath is a good link. elif isfile(newpath) and not islink(newpath): print 'As is: ', newpath pass # Leave new files as is. elif isdir(newpath) and not islink(newpath): print 'Down one level \n', newpath linktree(oldpath, newpath) # Recursive call print 'Up one level' else: print '*** Error ***\nNot a file or directory:\n', newpath - Dave ************************************************************* * * David MacQuigg * email: macquigg@cadence.com * * * Principal Product Engineer * phone: USA 520-721-4583 * * * * Analog Artist * * * * * 9320 East Mikelyn Lane * * * * Cadence Design Systems, Inc. * Tucson, Arizona 85710 * ************************************************************* *

Sorry, you've reached the python *developers* list. For review of your code, you're better off in comp.lang.python. If you want to contribute a patch, please check here: http://www.python.org/dev/devfaq.html#patches --Guido van Rossum (home page: http://www.python.org/~guido/)

Sorry, you've reached the python *developers* list. For review of your code, you're better off in comp.lang.python. If you want to contribute a patch, please check here: http://www.python.org/dev/devfaq.html#patches --Guido van Rossum (home page: http://www.python.org/~guido/)
participants (2)
-
David MacQuigg
-
Guido van Rossum