Mercurial > hg
view tests/test-narrow-debugrebuilddirstate.t @ 47096:3c11c24b82b6
dirstate-tree: Add `WithBasename` wrapper for `HgPath`
In the tree-shaped dirstate we want to have nodes representing files or
directories, where directory nodes contain a map associating "base" names
to child nodes for child files and directories.
Many dirstate operations expect a full path from the repository root, but
re-concatenating string from nested map keys all the time might be expensive.
Instead, `WithBasename` stores a full path for these operations but
behaves as its base name (last path component) for equality and comparison.
Additionally `inclusive_ancestors` provides the successive map keys
that are needed when inserting a new dirstate node at a given full path.
Differential Revision: https://phab.mercurial-scm.org/D10365
author | Simon Sapin <simon.sapin@octobus.net> |
---|---|
date | Thu, 08 Apr 2021 20:12:24 +0200 |
parents | 01c0f01b562b |
children |
line wrap: on
line source
$ . "$TESTDIR/narrow-library.sh" $ hg init master $ cd master $ echo treemanifest >> .hg/requires $ echo 'contents of file' > file $ mkdir foo $ echo 'contents of foo/bar' > foo/bar $ hg ci -Am 'some change' adding file adding foo/bar $ cd .. $ hg clone --narrow ssh://user@dummy/master copy --include=foo requesting all changes adding changesets adding manifests adding file changes added 1 changesets with 1 changes to 1 files new changesets * (glob) updating to branch default 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ cd copy $ hg debugdirstate --no-dates n * 20 * foo/bar (glob) $ mv .hg/dirstate .hg/old_dirstate $ dd bs=40 count=1 if=.hg/old_dirstate of=.hg/dirstate 2>/dev/null $ hg debugdirstate $ hg debugrebuilddirstate $ hg debugdirstate n * * unset foo/bar (glob)