changes for the Mac

This commit is contained in:
Guido van Rossum 1995-01-27 02:41:45 +00:00
parent f808012f5e
commit 7e4b2def34
5 changed files with 111 additions and 11 deletions

26
Lib/find.py Normal file
View 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

View File

@ -1,23 +1,59 @@
# module 'fnmatch' -- filename matching with shell patterns
# This version translates the pattern to a regular expression
# and moreover caches the expressions.
"""Filename matching with shell patterns.
import os
import regex
fnmatch(FILENAME, PATTERN) matches according to the local convention.
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):
"""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)
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)
import regex
save_syntax = regex.set_syntax(0)
cache[pat] = regex.compile(res)
_cache[pat] = regex.compile(res)
save_syntax = regex.set_syntax(save_syntax)
return cache[pat].match(name) == len(name)
return _cache[pat].match(name) == len(name)
def translate(pat):
"""Translate a shell PATTERN to a regular expression.
There is no way to quote meta-characters.
"""
i, n = 0, len(pat)
res = ''
while i < n:

26
Lib/lib-old/find.py Normal file
View 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

View File

@ -100,6 +100,13 @@ def isdir(s):
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.
def isfile(s):

View File

@ -14,12 +14,17 @@ def compile(file, cfile = None):
import os, marshal, __builtin__
f = open(file)
codestring = f.read()
timestamp = os.fstat(f.fileno())[8]
f.close()
timestamp = os.stat(file)[8]
codeobject = __builtin__.compile(codestring, file, 'exec')
if not cfile:
cfile = file + 'c'
fc = open(cfile, 'w')
fc = open(cfile, 'wb')
wr_long(fc, MAGIC)
wr_long(fc, timestamp)
marshal.dump(codeobject, fc)
fc.close()
if os.name == 'mac':
import MacOS
MacOS.SetFileType(cfile, 'PYC ', 'PYTH')
MacOS.SetFileType(file, 'TEXT', 'PYTH')