# HG changeset patch # User Bryan O'Sullivan # Date 1123874321 28800 # Node ID 6594ba2a0f51e334f4fca62f837d64f63b8d36a3 # Parent 781266a78fe166a3513ed36656878fd2a04143d0# Parent 087771ebe2e6166fb6001a5f3f229043ae868cd3 Merge latest round of walk fixes. diff -r 781266a78fe1 -r 6594ba2a0f51 mercurial/commands.py --- a/mercurial/commands.py Fri Aug 12 10:17:12 2005 -0800 +++ b/mercurial/commands.py Fri Aug 12 11:18:41 2005 -0800 @@ -40,22 +40,12 @@ return util.matcher(repo, cwd, pats or ['.'], opts.get('include'), opts.get('exclude'), head) -def pathto(n1, n2): - '''return the relative path from one place to another''' - if not n1: return n2 - a, b = n1.split(os.sep), n2.split(os.sep) - a.reverse(), b.reverse() - while a and b and a[-1] == b[-1]: - a.pop(), b.pop() - b.reverse() - return os.sep.join((['..'] * len(a)) + b) - def makewalk(repo, pats, opts, head = ''): cwd = repo.getcwd() files, matchfn = matchpats(repo, cwd, pats, opts, head) def walk(): for src, fn in repo.walk(files = files, match = matchfn): - yield src, fn, pathto(cwd, fn) + yield src, fn, util.pathto(cwd, fn) return files, matchfn, walk() def walk(repo, pats, opts, head = ''): @@ -1078,7 +1068,7 @@ cwd = repo.getcwd() files, matchfn = matchpats(repo, cwd, pats, opts) - (c, a, d, u) = [[pathto(cwd, x) for x in n] + (c, a, d, u) = [[util.pathto(cwd, x) for x in n] for n in repo.changes(files=files, match=matchfn)] changetypes = [('modified', 'M', c), diff -r 781266a78fe1 -r 6594ba2a0f51 mercurial/hg.py --- a/mercurial/hg.py Fri Aug 12 10:17:12 2005 -0800 +++ b/mercurial/hg.py Fri Aug 12 11:18:41 2005 -0800 @@ -11,7 +11,7 @@ from demandload import * demandload(globals(), "re lock urllib urllib2 transaction time socket") demandload(globals(), "tempfile httprangereader bdiff urlparse") -demandload(globals(), "bisect select") +demandload(globals(), "bisect errno select stat") class filelog(revlog): def __init__(self, opener, path): @@ -489,9 +489,16 @@ if fn in known: return True known[fn] = 1 def traverse(): - for f in util.unique(files): - f = os.path.join(self.root, f) - if os.path.isdir(f): + for ff in util.unique(files): + f = os.path.join(self.root, ff) + try: + st = os.stat(f) + except OSError, inst: + if ff not in dc: self.ui.warn('%s: %s\n' % ( + util.pathto(self.getcwd(), ff), + inst.strerror)) + continue + if stat.S_ISDIR(st.st_mode): for dir, subdirs, fl in os.walk(f): d = dir[len(self.root) + 1:] nd = os.path.normpath(d) @@ -507,8 +514,18 @@ for fn in fl: fn = util.pconvert(os.path.join(d, fn)) yield 'f', fn + elif stat.S_ISREG(st.st_mode): + yield 'f', ff else: - yield 'f', f[len(self.root) + 1:] + kind = 'unknown' + if stat.S_ISCHR(st.st_mode): kind = 'character device' + elif stat.S_ISBLK(st.st_mode): kind = 'block device' + elif stat.S_ISFIFO(st.st_mode): kind = 'fifo' + elif stat.S_ISLNK(st.st_mode): kind = 'symbolic link' + elif stat.S_ISSOCK(st.st_mode): kind = 'socket' + self.ui.warn('%s: unsupported file type (type is %s)\n' % ( + util.pathto(self.getcwd(), ff), + kind)) ks = dc.keys() ks.sort() diff -r 781266a78fe1 -r 6594ba2a0f51 mercurial/hgweb.py --- a/mercurial/hgweb.py Fri Aug 12 10:17:12 2005 -0800 +++ b/mercurial/hgweb.py Fri Aug 12 11:18:41 2005 -0800 @@ -708,7 +708,12 @@ import BaseHTTPServer class IPv6HTTPServer(BaseHTTPServer.HTTPServer): - address_family = socket.AF_INET6 + address_family = getattr(socket, 'AF_INET6', None) + + def __init__(self, *args, **kwargs): + if self.address_family is None: + raise RepoError('IPv6 not available on this system') + BaseHTTPServer.HTTPServer.__init__(self, *args, **kwargs) class hgwebhandler(BaseHTTPServer.BaseHTTPRequestHandler): def log_error(self, format, *args): diff -r 781266a78fe1 -r 6594ba2a0f51 mercurial/util.py --- a/mercurial/util.py Fri Aug 12 10:17:12 2005 -0800 +++ b/mercurial/util.py Fri Aug 12 11:18:41 2005 -0800 @@ -69,6 +69,16 @@ _globchars = {'[': 1, '{': 1, '*': 1, '?': 1} +def pathto(n1, n2): + '''return the relative path from one place to another''' + if not n1: return n2 + a, b = n1.split(os.sep), n2.split(os.sep) + a.reverse(), b.reverse() + while a and b and a[-1] == b[-1]: + a.pop(), b.pop() + b.reverse() + return os.sep.join((['..'] * len(a)) + b) + def canonpath(repo, cwd, myname): rootsep = repo.root + os.sep name = myname