Show More
@@ -197,7 +197,6 b' def normcase(path):' | |||||
197 | return path.lower() |
|
197 | return path.lower() | |
198 |
|
198 | |||
199 | if sys.platform == 'darwin': |
|
199 | if sys.platform == 'darwin': | |
200 | import fcntl # only needed on darwin, missing on jython |
|
|||
201 |
|
200 | |||
202 | def normcase(path): |
|
201 | def normcase(path): | |
203 | ''' |
|
202 | ''' | |
@@ -265,51 +264,6 b" if sys.platform == 'darwin':" | |||||
265 | # Decompose then lowercase (HFS+ technote specifies lower) |
|
264 | # Decompose then lowercase (HFS+ technote specifies lower) | |
266 | return unicodedata.normalize('NFD', u).lower().encode('utf-8') |
|
265 | return unicodedata.normalize('NFD', u).lower().encode('utf-8') | |
267 |
|
266 | |||
268 | def realpath(path): |
|
|||
269 | ''' |
|
|||
270 | Returns the true, canonical file system path equivalent to the given |
|
|||
271 | path. |
|
|||
272 |
|
||||
273 | Equivalent means, in this case, resulting in the same, unique |
|
|||
274 | file system link to the path. Every file system entry, whether a file, |
|
|||
275 | directory, hard link or symbolic link or special, will have a single |
|
|||
276 | path preferred by the system, but may allow multiple, differing path |
|
|||
277 | lookups to point to it. |
|
|||
278 |
|
||||
279 | Most regular UNIX file systems only allow a file system entry to be |
|
|||
280 | looked up by its distinct path. Obviously, this does not apply to case |
|
|||
281 | insensitive file systems, whether case preserving or not. The most |
|
|||
282 | complex issue to deal with is file systems transparently reencoding the |
|
|||
283 | path, such as the non-standard Unicode normalisation required for HFS+ |
|
|||
284 | and HFSX. |
|
|||
285 | ''' |
|
|||
286 | # Constants copied from /usr/include/sys/fcntl.h |
|
|||
287 | F_GETPATH = 50 |
|
|||
288 | O_SYMLINK = 0x200000 |
|
|||
289 |
|
||||
290 | try: |
|
|||
291 | fd = os.open(path, O_SYMLINK) |
|
|||
292 | except OSError, err: |
|
|||
293 | if err.errno == errno.ENOENT: |
|
|||
294 | return path |
|
|||
295 | raise |
|
|||
296 |
|
||||
297 | try: |
|
|||
298 | return fcntl.fcntl(fd, F_GETPATH, '\0' * 1024).rstrip('\0') |
|
|||
299 | finally: |
|
|||
300 | os.close(fd) |
|
|||
301 | elif sys.version_info < (2, 4, 2, 'final'): |
|
|||
302 | # Workaround for http://bugs.python.org/issue1213894 (os.path.realpath |
|
|||
303 | # didn't resolve symlinks that were the first component of the path.) |
|
|||
304 | def realpath(path): |
|
|||
305 | if os.path.isabs(path): |
|
|||
306 | return os.path.realpath(path) |
|
|||
307 | else: |
|
|||
308 | return os.path.realpath('./' + path) |
|
|||
309 | else: |
|
|||
310 | # Fallback to the likely inadequate Python builtin function. |
|
|||
311 | realpath = os.path.realpath |
|
|||
312 |
|
||||
313 | if sys.platform == 'cygwin': |
|
267 | if sys.platform == 'cygwin': | |
314 | # workaround for cygwin, in which mount point part of path is |
|
268 | # workaround for cygwin, in which mount point part of path is | |
315 | # treated as case sensitive, even though underlying NTFS is case |
|
269 | # treated as case sensitive, even though underlying NTFS is case |
@@ -52,7 +52,6 b' pconvert = platform.pconvert' | |||||
52 | popen = platform.popen |
|
52 | popen = platform.popen | |
53 | posixfile = platform.posixfile |
|
53 | posixfile = platform.posixfile | |
54 | quotecommand = platform.quotecommand |
|
54 | quotecommand = platform.quotecommand | |
55 | realpath = platform.realpath |
|
|||
56 | rename = platform.rename |
|
55 | rename = platform.rename | |
57 | samedevice = platform.samedevice |
|
56 | samedevice = platform.samedevice | |
58 | samefile = platform.samefile |
|
57 | samefile = platform.samefile |
@@ -133,15 +133,6 b' def normpath(path):' | |||||
133 | def normcase(path): |
|
133 | def normcase(path): | |
134 | return encoding.upper(path) |
|
134 | return encoding.upper(path) | |
135 |
|
135 | |||
136 | def realpath(path): |
|
|||
137 | ''' |
|
|||
138 | Returns the true, canonical file system path equivalent to the given |
|
|||
139 | path. |
|
|||
140 | ''' |
|
|||
141 | # TODO: There may be a more clever way to do this that also handles other, |
|
|||
142 | # less common file systems. |
|
|||
143 | return os.path.normpath(normcase(os.path.realpath(path))) |
|
|||
144 |
|
||||
145 | def samestat(s1, s2): |
|
136 | def samestat(s1, s2): | |
146 | return False |
|
137 | return False | |
147 |
|
138 |
General Comments 0
You need to be logged in to leave comments.
Login now