[PATCH] treemanifest: add --dir option to debug{revlog,data,index}
Matt Mackall
mpm at selenic.com
Sun May 17 19:15:54 CDT 2015
On Fri, 2015-05-15 at 23:37 -0500, Martin von Zweigbergk wrote:
> # HG changeset patch
> # User Martin von Zweigbergk <martinvonz at google.com>
> # Date 1428907866 25200
> # Sun Apr 12 23:51:06 2015 -0700
> # Node ID bcf1b1acab3ee716cfdb59e32a6e5ff189816bbe
> # Parent 1ef96a3b8b89a896f2c9f3f977dbef8f45bb0e26
> treemanifest: add --dir option to debug{revlog,data,index}
Queued for default, thanks.
> 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.
>
> diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py
> --- a/mercurial/cmdutil.py
> +++ b/mercurial/cmdutil.py
> @@ -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_:
> diff --git a/mercurial/commands.py b/mercurial/commands.py
> --- a/mercurial/commands.py
> +++ b/mercurial/commands.py
> @@ -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)
> diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py
> --- a/mercurial/localrepo.py
> +++ b/mercurial/localrepo.py
> @@ -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]
> diff --git a/mercurial/manifest.py b/mercurial/manifest.py
> --- a/mercurial/manifest.py
> +++ b/mercurial/manifest.py
> @@ -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
> diff --git a/tests/test-completion.t b/tests/test-completion.t
> --- a/tests/test-completion.t
> +++ b/tests/test-completion.t
> @@ -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
> diff --git a/tests/test-treemanifest.t b/tests/test-treemanifest.t
> --- a/tests/test-treemanifest.t
> +++ b/tests/test-treemanifest.t
> @@ -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
>
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel
--
Mathematics is the supreme nostalgia of our time.
More information about the Mercurial-devel
mailing list