Merge latest round of walk fixes.
--- 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),
--- 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()
--- 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):
--- 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