annotate Tools/scripts/linktree.py @ 73323:dad02a080bbc

Improve byte-compilation in packaging to be independent of -O or -B. The code I fixed to comply with PEP 3147 still had one bug: When run under python -O, some paths for pyc files would be pyo, because I called imp.cache_from_source without explicit debug_override argument in some places, and under -O that would return .pyo (this is well explained in the imp docs). Now all code (util.byte_compile, build_py, install_lib) can create .pyo files according to options given by users, without interference from the calling Python’s own optimize mode. On a related topic, I also removed the code that prevented byte compilation under python -B. The rationale is that packaging gives control over the creation of pyc files to the user with its own explicit option, and the behavior should not be changed if the calling Python happens to run with -B for whatever reason. I will argue that this is a bug fix and ask to be allowed to backport this change to distutils. Finally, I moved one nugget of information about the --compile and --optimize options from the source into the doc. It clears up a misunderstanding that I (and maybe other people) had.
author Éric Araujo <merwok@netwok.org>
date Thu, 03 Nov 2011 05:08:28 +0100
parents fcfe324663a6
children 6cfe2982de42
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
59522
fcfe324663a6 convert shebang lines: python -> python3
Benjamin Peterson <benjamin@python.org>
parents: 42427
diff changeset
1 #! /usr/bin/env python3
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:
42427
46625e6122e9 Convert print statements to function calls in Tools/.
Collin Winter <collinw@gmail.com>
parents: 42084
diff changeset
21 print('usage:', sys.argv[0], 'oldtree newtree [linkto]')
15930
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):
42427
46625e6122e9 Convert print statements to function calls in Tools/.
Collin Winter <collinw@gmail.com>
parents: 42084
diff changeset
31 print(oldtree + ': not a directory')
15930
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:
42084
229c28cb9afb Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40587
diff changeset
34 os.mkdir(newtree, 0o777)
40587
6b18a095c2e7 SF patch 1631942 by Collin Winter:
Guido van Rossum <guido@python.org>
parents: 33074
diff changeset
35 except os.error as msg:
42427
46625e6122e9 Convert print statements to function calls in Tools/.
Collin Winter <collinw@gmail.com>
parents: 42084
diff changeset
36 print(newtree + ': cannot mkdir:', msg)
15930
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)
40587
6b18a095c2e7 SF patch 1631942 by Collin Winter:
Guido van Rossum <guido@python.org>
parents: 33074
diff changeset
41 except os.error as msg:
15930
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 7735
diff changeset
42 if not link_may_fail:
42427
46625e6122e9 Convert print statements to function calls in Tools/.
Collin Winter <collinw@gmail.com>
parents: 42084
diff changeset
43 print(linkname + ': cannot symlink:', msg)
15930
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:
42427
46625e6122e9 Convert print statements to function calls in Tools/.
Collin Winter <collinw@gmail.com>
parents: 42084
diff changeset
46 print(linkname + ': warning: cannot symlink:', msg)
15930
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):
42427
46625e6122e9 Convert print statements to function calls in Tools/.
Collin Winter <collinw@gmail.com>
parents: 42084
diff changeset
51 if debug: print('linknames', (old, new, link))
15930
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)
40587
6b18a095c2e7 SF patch 1631942 by Collin Winter:
Guido van Rossum <guido@python.org>
parents: 33074
diff changeset
54 except os.error as msg:
42427
46625e6122e9 Convert print statements to function calls in Tools/.
Collin Winter <collinw@gmail.com>
parents: 42084
diff changeset
55 print(old + ': warning: cannot listdir:', msg)
15930
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)
42427
46625e6122e9 Convert print statements to function calls in Tools/.
Collin Winter <collinw@gmail.com>
parents: 42084
diff changeset
62 if debug > 1: print(oldname, newname, linkname)
15930
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:
42084
229c28cb9afb Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40587
diff changeset
66 os.mkdir(newname, 0o777)
15930
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:
42427
46625e6122e9 Convert print statements to function calls in Tools/.
Collin Winter <collinw@gmail.com>
parents: 42084
diff changeset
69 print(newname + \
46625e6122e9 Convert print statements to function calls in Tools/.
Collin Winter <collinw@gmail.com>
parents: 42084
diff changeset
70 ': warning: cannot mkdir:', msg)
15930
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())