summaryrefslogtreecommitdiff
path: root/sys/src/cmd/python/Tools/scripts/linktree.py
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@localhost>2011-05-03 11:25:13 +0000
committercinap_lenrek <cinap_lenrek@localhost>2011-05-03 11:25:13 +0000
commit458120dd40db6b4df55a4e96b650e16798ef06a0 (patch)
tree8f82685be24fef97e715c6f5ca4c68d34d5074ee /sys/src/cmd/python/Tools/scripts/linktree.py
parent3a742c699f6806c1145aea5149bf15de15a0afd7 (diff)
add hg and python
Diffstat (limited to 'sys/src/cmd/python/Tools/scripts/linktree.py')
-rwxr-xr-xsys/src/cmd/python/Tools/scripts/linktree.py80
1 files changed, 80 insertions, 0 deletions
diff --git a/sys/src/cmd/python/Tools/scripts/linktree.py b/sys/src/cmd/python/Tools/scripts/linktree.py
new file mode 100755
index 000000000..995f2efa9
--- /dev/null
+++ b/sys/src/cmd/python/Tools/scripts/linktree.py
@@ -0,0 +1,80 @@
+#! /usr/bin/env python
+
+# linktree
+#
+# Make a copy of a directory tree with symbolic links to all files in the
+# original tree.
+# All symbolic links go to a special symbolic link at the top, so you
+# can easily fix things if the original source tree moves.
+# See also "mkreal".
+#
+# usage: mklinks oldtree newtree
+
+import sys, os
+
+LINK = '.LINK' # Name of special symlink at the top.
+
+debug = 0
+
+def main():
+ if not 3 <= len(sys.argv) <= 4:
+ print 'usage:', sys.argv[0], 'oldtree newtree [linkto]'
+ return 2
+ oldtree, newtree = sys.argv[1], sys.argv[2]
+ if len(sys.argv) > 3:
+ link = sys.argv[3]
+ link_may_fail = 1
+ else:
+ link = LINK
+ link_may_fail = 0
+ if not os.path.isdir(oldtree):
+ print oldtree + ': not a directory'
+ return 1
+ try:
+ os.mkdir(newtree, 0777)
+ except os.error, msg:
+ print newtree + ': cannot mkdir:', msg
+ return 1
+ linkname = os.path.join(newtree, link)
+ try:
+ os.symlink(os.path.join(os.pardir, oldtree), linkname)
+ except os.error, msg:
+ if not link_may_fail:
+ print linkname + ': cannot symlink:', msg
+ return 1
+ else:
+ print linkname + ': warning: cannot symlink:', msg
+ linknames(oldtree, newtree, link)
+ return 0
+
+def linknames(old, new, link):
+ if debug: print 'linknames', (old, new, link)
+ try:
+ names = os.listdir(old)
+ except os.error, msg:
+ print old + ': warning: cannot listdir:', msg
+ return
+ for name in names:
+ if name not in (os.curdir, os.pardir):
+ oldname = os.path.join(old, name)
+ linkname = os.path.join(link, name)
+ newname = os.path.join(new, name)
+ if debug > 1: print oldname, newname, linkname
+ if os.path.isdir(oldname) and \
+ not os.path.islink(oldname):
+ try:
+ os.mkdir(newname, 0777)
+ ok = 1
+ except:
+ print newname + \
+ ': warning: cannot mkdir:', msg
+ ok = 0
+ if ok:
+ linkname = os.path.join(os.pardir,
+ linkname)
+ linknames(oldname, newname, linkname)
+ else:
+ os.symlink(linkname, newname)
+
+if __name__ == '__main__':
+ sys.exit(main())