--- a/mercurial/context.py
+++ b/mercurial/context.py
@@ -203,7 +203,7 @@ class filectx(object):
def data(self): return self._filelog.read(self._filenode)
def renamed(self): return self._filelog.renamed(self._filenode)
def path(self): return self._path
- def size(self): return self._filelog.len(self._filerev)
+ def size(self): return self._filelog.size(self._filerev)
def cmp(self, text): return self._filelog.cmp(self._filenode, text)
--- a/mercurial/filelog.py
+++ b/mercurial/filelog.py
@@ -65,15 +65,15 @@ class filelog(revlog):
return (m["copy"], bin(m["copyrev"]))
return False
- def len(self, rev):
- """return the len of a given revision"""
+ def size(self, rev):
+ """return the size of a given revision"""
# for revisions with renames, we have to go the slow way
node = self.node(rev)
if self.renamed(node):
return len(self.read(node))
- return self.size(rev)
+ return revlog.size(self, rev)
def cmp(self, node, text):
"""compare text with a given file revision"""
--- a/mercurial/hgweb/hgweb_mod.py
+++ b/mercurial/hgweb/hgweb_mod.py
@@ -441,13 +441,13 @@ class hgweb(object):
files = {}
- p = path[1:]
- if p and p[-1] != "/":
- p += "/"
- l = len(p)
+ if path and path[-1] != "/":
+ path += "/"
+ l = len(path)
+ abspath = "/" + path
for f,n in mf.items():
- if f[:l] != p:
+ if f[:l] != path:
continue
remain = f[l:]
if "/" in remain:
@@ -483,15 +483,15 @@ class hgweb(object):
continue
yield {"parity": self.stripes(parity),
- "path": os.path.join(path, f),
+ "path": os.path.join(abspath, f),
"basename": f[:-1]}
parity += 1
yield self.t("manifest",
rev=ctx.rev(),
node=hex(node),
- path=path,
- up=_up(path),
+ path=abspath,
+ up=_up(abspath),
fentries=filelist,
dentries=dirlist,
archives=self.archivelist(hex(node)))
@@ -639,6 +639,7 @@ class hgweb(object):
# find tag, changeset, file
def cleanpath(self, path):
+ path = path.lstrip('/')
return util.canonpath(self.repo.root, '', path)
def run(self):
@@ -865,16 +866,15 @@ class hgweb(object):
self.do_changeset(req)
def do_file(self, req):
- path = req.form.get('file', [''])[0]
+ path = self.cleanpath(req.form.get('file', [''])[0])
if path:
try:
req.write(self.filerevision(self.filectx(req)))
return
except hg.RepoError:
pass
- path = self.cleanpath(path)
- req.write(self.manifest(self.changectx(req), '/' + path))
+ req.write(self.manifest(self.changectx(req), path))
def do_diff(self, req):
self.do_filediff(req)
--- a/mercurial/merge.py
+++ b/mercurial/merge.py
@@ -384,13 +384,9 @@ def update(repo, node, branchmerge, forc
if branchmerge:
raise util.Abort(_("there is nothing to merge, just use "
"'hg update' or look at 'hg heads'"))
- elif not branchmerge:
- if not overwrite:
- if wc.files():
- raise util.Abort(_("outstanding uncommited changes, use "
- "'hg update -C' to lose changes"))
- else:
- overwrite = True
+ elif not (overwrite or branchmerge):
+ raise util.Abort(_("update spans branches, use 'hg merge' "
+ "or 'hg update -C' to lose changes"))
if branchmerge and not forcemerge:
if wc.files():
raise util.Abort(_("outstanding uncommitted changes"))
--- a/tests/test-merge5
+++ b/tests/test-merge5
@@ -12,13 +12,9 @@ hg commit -m"comment #1" -d "1000000 0"
hg update 0
rm b
hg commit -A -m"comment #2" -d "1000000 0"
-
-echo This is file a > a
# in theory, we shouldn't need the "-y" below, but it prevents
# this test from hanging when "hg update" erroneously prompts the
# user for "keep or delete"
-hg update -y 1 # should fail (unclean repo)
-hg revert a
hg update -y 1
exit 0
--- a/tests/test-merge5.out
+++ b/tests/test-merge5.out
@@ -1,4 +1,3 @@
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
removing b
-abort: outstanding uncommited changes, use 'hg update -C' to lose changes
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+abort: update spans branches, use 'hg merge' or 'hg update -C' to lose changes
--- a/tests/test-up-local-change.out
+++ b/tests/test-up-local-change.out
@@ -93,7 +93,7 @@ user: test
date: Mon Jan 12 13:46:40 1970 +0000
summary: 2
-abort: outstanding uncommited changes, use 'hg update -C' to lose changes
+abort: update spans branches, use 'hg merge' or 'hg update -C' to lose changes
failed
abort: outstanding uncommitted changes
failed