Mercurial > cpython-lru_cache-weakref
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 |
| 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 | 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 | |
| 755 | 13 import sys, os |
| 687 | 14 |
| 15 LINK = '.LINK' # Name of special symlink at the top. | |
| 16 | |
| 17 debug = 0 | |
| 18 | |
| 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 | 49 |
| 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 | 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()) |
