diff --git a/mercurial/extensions.py b/mercurial/extensions.py --- a/mercurial/extensions.py +++ b/mercurial/extensions.py @@ -349,12 +349,13 @@ def disabledcmd(ui, cmd, strict=False): raise error.UnknownCommand(cmd) -def enabled(): +def enabled(shortname=True): '''return a dict of {name: desc} of extensions''' exts = {} for ename, ext in extensions(): doc = (gettext(ext.__doc__) or _('(no help text available)')) - ename = ename.split('.')[-1] + if shortname: + ename = ename.split('.')[-1] exts[ename] = doc.splitlines()[0].strip() return exts diff --git a/mercurial/help.py b/mercurial/help.py --- a/mercurial/help.py +++ b/mercurial/help.py @@ -103,10 +103,11 @@ def topicmatch(kw): cmdname = cmd.split('|')[0].lstrip('^') results['commands'].append((cmdname, summary)) for name, docs in itertools.chain( - extensions.enabled().iteritems(), + extensions.enabled(False).iteritems(), extensions.disabled().iteritems()): # extensions.load ignores the UI argument mod = extensions.load(None, name, '') + name = name.split('.')[-1] if lowercontains(name) or lowercontains(docs): # extension docs are already translated results['extensions'].append((name, docs.splitlines()[0])) diff --git a/mercurial/revlog.py b/mercurial/revlog.py --- a/mercurial/revlog.py +++ b/mercurial/revlog.py @@ -200,7 +200,7 @@ class revlog(object): self.datafile = indexfile[:-2] + ".d" self.opener = opener self._cache = None - self._basecache = (0, 0) + self._basecache = None self._chunkcache = (0, '') self.index = [] self._pcache = {} @@ -1131,6 +1131,8 @@ class revlog(object): offset = self.end(prev) flags = 0 d = None + if self._basecache is None: + self._basecache = (prev, self.chainbase(prev)) basecache = self._basecache p1r, p2r = self.rev(p1), self.rev(p2) diff --git a/tests/test-generaldelta.t b/tests/test-generaldelta.t new file mode 100755 --- /dev/null +++ b/tests/test-generaldelta.t @@ -0,0 +1,23 @@ +Check whether size of generaldelta revlog is not bigger than its +regular equivalent. Test would fail if generaldelta was naive +implementation of parentdelta: third manifest revision would be fully +inserted due to big distance from its paren revision (zero). + + $ hg init repo + $ cd repo + $ echo foo > foo + $ echo bar > bar + $ hg commit -q -Am boo + $ hg clone --pull . ../gdrepo -q --config format.generaldelta=yes + $ for r in 1 2 3; do + > echo $r > foo + > hg commit -q -m $r + > hg up -q -r 0 + > hg pull . -q -r $r -R ../gdrepo + > done + $ cd .. + $ regsize=`du -s -b repo/.hg/store/00manifest.i | cut -f 1` + $ gdsize=`du -s -b gdrepo/.hg/store/00manifest.i | cut -f 1` + $ if ((regsize < gdsize)); then + > echo 'generaldelta increased size of a revlog!' + > fi diff --git a/tests/test-help.t b/tests/test-help.t --- a/tests/test-help.t +++ b/tests/test-help.t @@ -773,6 +773,12 @@ Test help hooks Test keyword search help + $ cat > prefixedname.py < '''matched against word "clone" + > ''' + > EOF + $ echo '[extensions]' >> $HGRCPATH + $ echo "dot.dot.prefixedname = `pwd`/prefixedname.py" >> $HGRCPATH $ hg help -k clone Topics: @@ -792,7 +798,8 @@ Test keyword search help Extensions: - relink recreates hardlinks between repository clones + prefixedname matched against word "clone" + relink recreates hardlinks between repository clones Extension Commands: