annotate Tools/scripts/linktree.py @ 49955:878d40468c4e legacy-trunk

Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
author Vinay Sajip <vinay_sajip@yahoo.co.uk>
date Wed, 03 Dec 2008 23:22:58 +0000
parents 981fff7363b9
children 6b18a095c2e7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4573
73758db2f464 /usr/local/bin/python -> /usr/bin/env python
Guido van Rossum <guido@python.org>
parents: 1269
diff changeset
1 #! /usr/bin/env python
687
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
2
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
3 # linktree
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
4 #
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
5 # Make a copy of a directory tree with symbolic links to all files in the
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
6 # original tree.
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
7 # All symbolic links go to a special symbolic link at the top, so you
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
8 # can easily fix things if the original source tree moves.
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
9 # See also "mkreal".
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
10 #
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
11 # usage: mklinks oldtree newtree
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
12
755
2dd5dbf28a2d change posix to os
Guido van Rossum <guido@python.org>
parents: 687
diff changeset
13 import sys, os
687
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
14
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
15 LINK = '.LINK' # Name of special symlink at the top.
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
16
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
17 debug = 0
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
18
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
19 def main():
15930
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
20 if not 3 <= len(sys.argv) <= 4:
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
21 print 'usage:', sys.argv[0], 'oldtree newtree [linkto]'
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
22 return 2
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
23 oldtree, newtree = sys.argv[1], sys.argv[2]
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
24 if len(sys.argv) > 3:
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
25 link = sys.argv[3]
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
26 link_may_fail = 1
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
27 else:
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
28 link = LINK
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
29 link_may_fail = 0
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
30 if not os.path.isdir(oldtree):
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
31 print oldtree + ': not a directory'
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
32 return 1
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
33 try:
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
34 os.mkdir(newtree, 0777)
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
35 except os.error, msg:
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
36 print newtree + ': cannot mkdir:', msg
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
37 return 1
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
38 linkname = os.path.join(newtree, link)
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
39 try:
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
40 os.symlink(os.path.join(os.pardir, oldtree), linkname)
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
41 except os.error, msg:
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
42 if not link_may_fail:
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
43 print linkname + ': cannot symlink:', msg
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
44 return 1
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
45 else:
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
46 print linkname + ': warning: cannot symlink:', msg
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
47 linknames(oldtree, newtree, link)
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
48 return 0
687
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
49
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
50 def linknames(old, new, link):
15930
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
51 if debug: print 'linknames', (old, new, link)
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
52 try:
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
53 names = os.listdir(old)
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
54 except os.error, msg:
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
55 print old + ': warning: cannot listdir:', msg
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
56 return
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
57 for name in names:
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
58 if name not in (os.curdir, os.pardir):
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
59 oldname = os.path.join(old, name)
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
60 linkname = os.path.join(link, name)
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
61 newname = os.path.join(new, name)
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
62 if debug > 1: print oldname, newname, linkname
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
63 if os.path.isdir(oldname) and \
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
64 not os.path.islink(oldname):
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
65 try:
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
66 os.mkdir(newname, 0777)
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
67 ok = 1
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
68 except:
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
69 print newname + \
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
70 ': warning: cannot mkdir:', msg
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
71 ok = 0
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
72 if ok:
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
73 linkname = os.path.join(os.pardir,
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
74 linkname)
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
75 linknames(oldname, newname, linkname)
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
76 else:
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
77 os.symlink(linkname, newname)
687
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
78
33074
981fff7363b9 [Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents: 15930
diff changeset
79 if __name__ == '__main__':
981fff7363b9 [Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents: 15930
diff changeset
80 sys.exit(main())