python/which/TODO.txt

branch
TOR_BUG_9701
changeset 15
b8a032363ba2
equal deleted inserted replaced
-1:000000000000 0:cada05816b74
1 # High Priority
2
3 - Figure out the script story on the various platforms. On Windows, look into
4 the launcher thing that effbot has. Unix, don't install the script my
5 default. They can always do "python -m which ..." with Python >= 2.4.
6 Suggest an alias that some folks might want to use for that.
7
8
9 # Medium Priority
10
11 - define __all__?
12 - improve test suite
13 - test with other versions of Python
14 - get the PATHEXT attached extension to reflect the actual canonical
15 case of file matches on Windows, currently the extension from PATHEXT
16 is always uppercase
17 - What to do with Change 145624 by shanec. It is a bit of a
18 bastardization. Maybe allow this with a special option to allow the change
19 in semantics.
20
21 > Change 145624 by shanec@shanec-ocelotl on 2005/05/24 16:51:55
22 >
23 > make which work better on OSX
24 > - add support for searching /Applications and /Network/Applications
25 > - add support for .app bundles
26 >
27 > Affected files ...
28 >
29 > ... //depot/main/Apps/Komodo-devel/src/python-sitelib/which.py#7 edit
30 >
31 > Differences ...
32 >
33 > ==== //depot/main/Apps/Komodo-devel/src/python-sitelib/which.py#7 (text) ====
34 >
35 > @@ -126,10 +126,11 @@
36 > sys.stderr.write("duplicate: %s (%s)\n" % potential)
37 > return None
38 > else:
39 > - if not stat.S_ISREG(os.stat(potential[0]).st_mode):
40 > + darwinApp = sys.platform == 'darwin' and potential[0][-4:]=='.app'
41 > + if not darwinApp and not stat.S_ISREG(os.stat(potential[0]).st_mode):
42 > if verbose:
43 > sys.stderr.write("not a regular file: %s (%s)\n" % potential)
44 > - elif not os.access(potential[0], os.X_OK):
45 > + elif not darwinApp and not os.access(potential[0], os.X_OK):
46 > if verbose:
47 > sys.stderr.write("no executable access: %s (%s)\n"\
48 > % potential)
49 > @@ -166,6 +167,9 @@
50 > path = os.environ.get("PATH", "").split(os.pathsep)
51 > if sys.platform.startswith("win"):
52 > path.insert(0, os.curdir) # implied by Windows shell
53 > + if sys.platform == 'darwin':
54 > + path.insert(0, '/Network/Applications')
55 > + path.insert(0, '/Applications')
56 > else:
57 > usingGivenPath = 1
58 >
59 > @@ -182,6 +186,9 @@
60 > exts = ['.COM', '.EXE', '.BAT']
61 > elif not isinstance(exts, list):
62 > raise TypeError("'exts' argument must be a list or None")
63 > + elif sys.platform == 'darwin':
64 > + if exts is None:
65 > + exts = ['.app']
66 > else:
67 > if exts is not None:
68 > raise WhichError("'exts' argument is not supported on "\
69 > @@ -202,7 +209,8 @@
70 > for ext in ['']+exts:
71 > absName = os.path.abspath(
72 > os.path.normpath(os.path.join(dirName, command+ext)))
73 > - if os.path.isfile(absName):
74 > + if os.path.isfile(absName) or (sys.platform == 'darwin' and \
75 > + absName[-4:]=='.app' and os.path.isdir(absName)):
76 > if usingGivenPath:
77 > fromWhere = "from given path element %d" % i
78 > elif not sys.platform.startswith("win"):
79
80 Here is a start with slight improvements:
81
82 > Index: which.py
83 > ===================================================================
84 > --- which.py (revision 270)
85 > +++ which.py (working copy)
86 > @@ -126,9 +126,18 @@
87 > sys.stderr.write("duplicate: %s (%s)\n" % potential)
88 > return None
89 > else:
90 > - if not stat.S_ISREG(os.stat(potential[0]).st_mode):
91 > + st_mode = os.stat(potential[0]).st_mode
92 > + isMacAppBundle = sys.platform == "darwin" \
93 > + and potential[0].endswith(".app") \
94 > + and stat.S_ISDIR(st_mode)
95 > + if not isMacAppBundle and not stat.S_ISREG(st_mode):
96 > if verbose:
97 > - sys.stderr.write("not a regular file: %s (%s)\n" % potential)
98 > + if sys.platform == "darwin":
99 > + sys.stderr.write("not a regular file or .app bundle: "
100 > + "%s (%s)\n" % potential)
101 > + else:
102 > + sys.stderr.write("not a regular file: %s (%s)\n"
103 > + % potential)
104 > elif not os.access(potential[0], os.X_OK):
105 > if verbose:
106 > sys.stderr.write("no executable access: %s (%s)\n"\
107
108
109 # Low Priority
110
111 - have a version for pre-generators (i.e. Python 2.1)
112 - add a "logging" interface
113

mercurial