treemanifest: add --dir option to debug{revlog,data,index}
It should be possible to debug the submanifest revlogs without having
to know where they are stored (in .hg/store/meta/), so let's add a
--dir option for this purpose.
--- a/mercurial/cmdutil.py Sun May 10 06:48:08 2015 -0700
+++ b/mercurial/cmdutil.py Sun Apr 12 23:51:06 2015 -0700
@@ -450,14 +450,17 @@
"""opens the changelog, manifest, a filelog or a given revlog"""
cl = opts['changelog']
mf = opts['manifest']
+ dir = opts['dir']
msg = None
if cl and mf:
msg = _('cannot specify --changelog and --manifest at the same time')
+ elif cl and dir:
+ msg = _('cannot specify --changelog and --dir at the same time')
elif cl or mf:
if file_:
msg = _('cannot specify filename with --changelog or --manifest')
elif not repo:
- msg = _('cannot specify --changelog or --manifest '
+ msg = _('cannot specify --changelog or --manifest or --dir '
'without a repository')
if msg:
raise util.Abort(msg)
@@ -466,6 +469,13 @@
if repo:
if cl:
r = repo.unfiltered().changelog
+ elif dir:
+ if 'treemanifest' not in repo.requirements:
+ raise util.Abort(_("--dir can only be used on repos with "
+ "treemanifest enabled"))
+ dirlog = repo.dirlog(file_)
+ if len(dirlog):
+ r = dirlog
elif mf:
r = repo.manifest
elif file_:
--- a/mercurial/commands.py Sun May 10 06:48:08 2015 -0700
+++ b/mercurial/commands.py Sun Apr 12 23:51:06 2015 -0700
@@ -2056,7 +2056,8 @@
@command('debugdata',
[('c', 'changelog', False, _('open changelog')),
- ('m', 'manifest', False, _('open manifest'))],
+ ('m', 'manifest', False, _('open manifest')),
+ ('', 'dir', False, _('open directory manifest'))],
_('-c|-m|FILE REV'))
def debugdata(ui, repo, file_, rev=None, **opts):
"""dump the contents of a data file revision"""
@@ -2227,6 +2228,7 @@
@command('debugindex',
[('c', 'changelog', False, _('open changelog')),
('m', 'manifest', False, _('open manifest')),
+ ('', 'dir', False, _('open directory manifest')),
('f', 'format', 0, _('revlog format'), _('FORMAT'))],
_('[-f FORMAT] -c|-m|FILE'),
optionalrepo=True)
@@ -2729,6 +2731,7 @@
@command('debugrevlog',
[('c', 'changelog', False, _('open changelog')),
('m', 'manifest', False, _('open manifest')),
+ ('', 'dir', False, _('open directory manifest')),
('d', 'dump', False, _('dump index data'))],
_('-c|-m|FILE'),
optionalrepo=True)
--- a/mercurial/localrepo.py Sun May 10 06:48:08 2015 -0700
+++ b/mercurial/localrepo.py Sun Apr 12 23:51:06 2015 -0700
@@ -460,6 +460,9 @@
def manifest(self):
return manifest.manifest(self.svfs)
+ def dirlog(self, dir):
+ return manifest.manifest(self.svfs, dir)
+
@repofilecache('dirstate')
def dirstate(self):
warned = [0]
--- a/mercurial/manifest.py Sun May 10 06:48:08 2015 -0700
+++ b/mercurial/manifest.py Sun Apr 12 23:51:06 2015 -0700
@@ -815,6 +815,8 @@
indexfile = "00manifest.i"
if dir:
assert self._treeondisk
+ if not dir.endswith('/'):
+ dir = dir + '/'
indexfile = "meta/" + dir + "00manifest.i"
revlog.revlog.__init__(self, opener, indexfile)
self._dir = dir
--- a/tests/test-completion.t Sun May 10 06:48:08 2015 -0700
+++ b/tests/test-completion.t Sun Apr 12 23:51:06 2015 -0700
@@ -234,7 +234,7 @@
debugcommands:
debugcomplete: options
debugdag: tags, branches, dots, spaces
- debugdata: changelog, manifest
+ debugdata: changelog, manifest, dir
debugdate: extended
debugdirstate: nodates, datesort
debugdiscovery: old, nonheads, ssh, remotecmd, insecure
@@ -242,7 +242,7 @@
debugfsinfo:
debuggetbundle: head, common, type
debugignore:
- debugindex: changelog, manifest, format
+ debugindex: changelog, manifest, dir, format
debugindexdot:
debuginstall:
debugknown:
@@ -255,7 +255,7 @@
debugpvec:
debugrebuilddirstate: rev
debugrename: rev
- debugrevlog: changelog, manifest, dump
+ debugrevlog: changelog, manifest, dir, dump
debugrevspec: optimize
debugsetparents:
debugsub: rev
--- a/tests/test-treemanifest.t Sun May 10 06:48:08 2015 -0700
+++ b/tests/test-treemanifest.t Sun Apr 12 23:51:06 2015 -0700
@@ -30,7 +30,7 @@
b\x00362fef284ce2ca02aecc8de6d5e8a1c3af0556fe (esc)
dir1\x008b3ffd73f901e83304c83d33132c8e774ceac44ed (esc)
e\x00b8e02f6433738021a065f94175c7cd23db5f05be (esc)
- $ hg debugdata .hg/store/meta/dir1/00manifest.i 0
+ $ hg debugdata --dir dir1 0
a\x00b8e02f6433738021a065f94175c7cd23db5f05be (esc)
b\x00b8e02f6433738021a065f94175c7cd23db5f05be (esc)
@@ -60,9 +60,9 @@
$ echo 3 > dir2/a
$ hg add dir2
adding dir2/a
- $ hg debugindex .hg/store/meta/dir1/00manifest.i > before
+ $ hg debugindex --dir dir1 > before
$ hg ci -qm 'add dir2'
- $ hg debugindex .hg/store/meta/dir1/00manifest.i > after
+ $ hg debugindex --dir dir1 > after
$ diff before after
$ rm before after
@@ -71,9 +71,9 @@
$ hg rm dir1/dir1
removing dir1/dir1/a
removing dir1/dir1/b
- $ hg debugindex .hg/store/meta/dir1/dir1/00manifest.i > before
+ $ hg debugindex --dir dir1/dir1 > before
$ hg ci -qm 'remove dir1/dir1'
- $ hg debugindex .hg/store/meta/dir1/dir1/00manifest.i > after
+ $ hg debugindex --dir dir1/dir1 > after
$ diff before after
$ rm before after
@@ -113,7 +113,7 @@
5
$ cat dir1/b
6
- $ hg debugindex .hg/store/meta/dir1/00manifest.i
+ $ hg debugindex --dir dir1
rev offset length base linkrev nodeid p1 p2
0 0 54 0 1 8b3ffd73f901 000000000000 000000000000
1 54 68 0 2 b66d046c644f 8b3ffd73f901 000000000000
@@ -131,14 +131,14 @@
$ hg ci -m 'modify dir2/a'
created new head
- $ hg debugindex .hg/store/meta/dir2/00manifest.i > before
+ $ hg debugindex --dir dir2 > before
$ hg merge 'desc("modify dir1/a")'
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ hg revert -r 'desc("modify dir2/a")' .
reverting dir1/a (glob)
$ hg ci -m 'merge, keeping parent 1'
- $ hg debugindex .hg/store/meta/dir2/00manifest.i > after
+ $ hg debugindex --dir dir2 > after
$ diff before after
$ rm before after
@@ -147,7 +147,7 @@
$ hg co 'desc("modify dir2/a")'
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
- $ hg debugindex .hg/store/meta/dir1/00manifest.i > before
+ $ hg debugindex --dir dir1 > before
$ hg merge 'desc("modify dir1/a")'
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
@@ -155,7 +155,7 @@
reverting dir2/a (glob)
$ hg ci -m 'merge, keeping parent 2'
created new head
- $ hg debugindex .hg/store/meta/dir1/00manifest.i > after
+ $ hg debugindex --dir dir1 > after
$ diff before after
$ rm before after