mirror of
https://github.com/python/cpython.git
synced 2025-09-27 02:39:58 +00:00
changes for the Mac
This commit is contained in:
parent
f808012f5e
commit
7e4b2def34
5 changed files with 111 additions and 11 deletions
26
Lib/find.py
Normal file
26
Lib/find.py
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
import fnmatch
|
||||||
|
import os
|
||||||
|
|
||||||
|
_debug = 0
|
||||||
|
|
||||||
|
_prune = ['(*)']
|
||||||
|
|
||||||
|
def find(pattern, dir = os.curdir):
|
||||||
|
list = []
|
||||||
|
names = os.listdir(dir)
|
||||||
|
names.sort()
|
||||||
|
for name in names:
|
||||||
|
if name in (os.curdir, os.pardir):
|
||||||
|
continue
|
||||||
|
fullname = os.path.join(dir, name)
|
||||||
|
if fnmatch.fnmatch(name, pattern):
|
||||||
|
list.append(fullname)
|
||||||
|
if os.path.isdir(fullname) and not os.path.islink(fullname):
|
||||||
|
for p in _prune:
|
||||||
|
if fnmatch.fnmatch(name, p):
|
||||||
|
if _debug: print "skip", `fullname`
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
if _debug: print "descend into", `fullname`
|
||||||
|
list = list + find(pattern, fullname)
|
||||||
|
return list
|
|
@ -1,23 +1,59 @@
|
||||||
# module 'fnmatch' -- filename matching with shell patterns
|
"""Filename matching with shell patterns.
|
||||||
# This version translates the pattern to a regular expression
|
|
||||||
# and moreover caches the expressions.
|
|
||||||
|
|
||||||
import os
|
fnmatch(FILENAME, PATTERN) matches according to the local convention.
|
||||||
import regex
|
fnmatchcase(FILENAME, PATTERN) always takes case in account.
|
||||||
|
|
||||||
cache = {}
|
The functions operate by translating the pattern into a regular
|
||||||
|
expression. They cache the compiled regular expressions for speed.
|
||||||
|
|
||||||
|
The function translate(PATTERN) returns a regular expression
|
||||||
|
corresponding to PATTERN. (It does not compile it.)
|
||||||
|
"""
|
||||||
|
|
||||||
|
_cache = {}
|
||||||
|
|
||||||
def fnmatch(name, pat):
|
def fnmatch(name, pat):
|
||||||
|
"""Test whether FILENAME matches PATTERN.
|
||||||
|
|
||||||
|
Patterns are Unix shell style:
|
||||||
|
|
||||||
|
* matches everything
|
||||||
|
? matches any single character
|
||||||
|
[seq] matches any character in seq
|
||||||
|
[!seq] matches any char not in seq
|
||||||
|
|
||||||
|
An initial period in FILENAME is not special.
|
||||||
|
Both FILENAME and PATTERN are first case-normalized
|
||||||
|
if the operating system requires it.
|
||||||
|
If you don't want this, use fnmatchcase(FILENAME, PATTERN).
|
||||||
|
"""
|
||||||
|
|
||||||
|
import os
|
||||||
name = os.path.normcase(name)
|
name = os.path.normcase(name)
|
||||||
pat = os.path.normcase(pat)
|
pat = os.path.normcase(pat)
|
||||||
if not cache.has_key(pat):
|
return fnmatchcase(name, pat)
|
||||||
|
|
||||||
|
def fnmatchcase(name, pat):
|
||||||
|
"""Test wheter FILENAME matches PATTERN, including case.
|
||||||
|
|
||||||
|
This is a version of fnmatch() which doesn't case-normalize
|
||||||
|
its arguments.
|
||||||
|
"""
|
||||||
|
|
||||||
|
if not _cache.has_key(pat):
|
||||||
res = translate(pat)
|
res = translate(pat)
|
||||||
|
import regex
|
||||||
save_syntax = regex.set_syntax(0)
|
save_syntax = regex.set_syntax(0)
|
||||||
cache[pat] = regex.compile(res)
|
_cache[pat] = regex.compile(res)
|
||||||
save_syntax = regex.set_syntax(save_syntax)
|
save_syntax = regex.set_syntax(save_syntax)
|
||||||
return cache[pat].match(name) == len(name)
|
return _cache[pat].match(name) == len(name)
|
||||||
|
|
||||||
def translate(pat):
|
def translate(pat):
|
||||||
|
"""Translate a shell PATTERN to a regular expression.
|
||||||
|
|
||||||
|
There is no way to quote meta-characters.
|
||||||
|
"""
|
||||||
|
|
||||||
i, n = 0, len(pat)
|
i, n = 0, len(pat)
|
||||||
res = ''
|
res = ''
|
||||||
while i < n:
|
while i < n:
|
||||||
|
|
26
Lib/lib-old/find.py
Normal file
26
Lib/lib-old/find.py
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
import fnmatch
|
||||||
|
import os
|
||||||
|
|
||||||
|
_debug = 0
|
||||||
|
|
||||||
|
_prune = ['(*)']
|
||||||
|
|
||||||
|
def find(pattern, dir = os.curdir):
|
||||||
|
list = []
|
||||||
|
names = os.listdir(dir)
|
||||||
|
names.sort()
|
||||||
|
for name in names:
|
||||||
|
if name in (os.curdir, os.pardir):
|
||||||
|
continue
|
||||||
|
fullname = os.path.join(dir, name)
|
||||||
|
if fnmatch.fnmatch(name, pattern):
|
||||||
|
list.append(fullname)
|
||||||
|
if os.path.isdir(fullname) and not os.path.islink(fullname):
|
||||||
|
for p in _prune:
|
||||||
|
if fnmatch.fnmatch(name, p):
|
||||||
|
if _debug: print "skip", `fullname`
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
if _debug: print "descend into", `fullname`
|
||||||
|
list = list + find(pattern, fullname)
|
||||||
|
return list
|
|
@ -100,6 +100,13 @@ def isdir(s):
|
||||||
return S_ISDIR(st[ST_MODE])
|
return S_ISDIR(st[ST_MODE])
|
||||||
|
|
||||||
|
|
||||||
|
# Return true if the pathname refers to a symbolic link.
|
||||||
|
# (Always false on the Mac, until we understand Aliases.)
|
||||||
|
|
||||||
|
def islink(s):
|
||||||
|
return 0
|
||||||
|
|
||||||
|
|
||||||
# Return true if the pathname refers to an existing regular file.
|
# Return true if the pathname refers to an existing regular file.
|
||||||
|
|
||||||
def isfile(s):
|
def isfile(s):
|
||||||
|
|
|
@ -14,12 +14,17 @@ def compile(file, cfile = None):
|
||||||
import os, marshal, __builtin__
|
import os, marshal, __builtin__
|
||||||
f = open(file)
|
f = open(file)
|
||||||
codestring = f.read()
|
codestring = f.read()
|
||||||
timestamp = os.fstat(f.fileno())[8]
|
|
||||||
f.close()
|
f.close()
|
||||||
|
timestamp = os.stat(file)[8]
|
||||||
codeobject = __builtin__.compile(codestring, file, 'exec')
|
codeobject = __builtin__.compile(codestring, file, 'exec')
|
||||||
if not cfile:
|
if not cfile:
|
||||||
cfile = file + 'c'
|
cfile = file + 'c'
|
||||||
fc = open(cfile, 'w')
|
fc = open(cfile, 'wb')
|
||||||
wr_long(fc, MAGIC)
|
wr_long(fc, MAGIC)
|
||||||
wr_long(fc, timestamp)
|
wr_long(fc, timestamp)
|
||||||
marshal.dump(codeobject, fc)
|
marshal.dump(codeobject, fc)
|
||||||
|
fc.close()
|
||||||
|
if os.name == 'mac':
|
||||||
|
import MacOS
|
||||||
|
MacOS.SetFileType(cfile, 'PYC ', 'PYTH')
|
||||||
|
MacOS.SetFileType(file, 'TEXT', 'PYTH')
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue