Mercurial > hg
view tests/test-rhg.t @ 45562:b51167d70f5a
rust: add `dirstate_tree` module
Mercurial needs to represent the filesystem hierarchy on which it operates, for
example in the dirstate. Its current on-disk representation is an unsorted, flat
structure that gets transformed in the current Rust code into a `HashMap`.
This loses the hierarchical information of the dirstate, leading to some
unfortunate performance and algorithmic compromises.
This module adds an implementation of a radix tree that is specialized for
representing the dirstate: its unit is the path component. I have made no
efforts to optimize either its memory footprint or its insertion speed: they're
pretty bad for now.
Following will be a few patches that modify the dirstate.status logic to use
that new hierarchical information, fixing issue 6335 in the same swing.
Differential Revision: https://phab.mercurial-scm.org/D9085
author | Raphaël Gomès <rgomes@octobus.net> |
---|---|
date | Fri, 25 Sep 2020 17:51:34 +0200 |
parents | f17caf8f3fef |
children | 6991f3014311 |
line wrap: on
line source
#require rust Define an rhg function that will only run if rhg exists $ rhg() { > if [ -f "$RUNTESTDIR/../rust/target/debug/rhg" ]; then > "$RUNTESTDIR/../rust/target/debug/rhg" "$@" > else > echo "skipped: Cannot find rhg. Try to run cargo build in rust/rhg." > exit 80 > fi > } Unimplemented command $ rhg unimplemented-command error: Found argument 'unimplemented-command' which wasn't expected, or isn't valid in this context USAGE: rhg <SUBCOMMAND> For more information try --help [252] Finding root $ rhg root abort: no repository found in '$TESTTMP' (.hg not found)! [255] $ hg init repository $ cd repository $ rhg root $TESTTMP/repository Unwritable file descriptor $ rhg root > /dev/full abort: No space left on device (os error 28) [255] Deleted repository $ rm -rf `pwd` $ rhg root abort: error getting current working directory: $ENOENT$ [255] Listing tracked files $ cd $TESTTMP $ hg init repository $ cd repository $ for i in 1 2 3; do > echo $i >> file$i > hg add file$i > done > hg commit -m "commit $i" -q Listing tracked files from root $ rhg files file1 file2 file3 Listing tracked files from subdirectory $ mkdir -p path/to/directory $ cd path/to/directory $ rhg files ../../../file1 ../../../file2 ../../../file3 Listing tracked files through broken pipe $ rhg files | head -n 1 ../../../file1 Debuging data in inline index $ cd $TESTTMP $ rm -rf repository $ hg init repository $ cd repository $ for i in 1 2 3; do > echo $i >> file$i > hg add file$i > hg commit -m "commit $i" -q > done $ rhg debugdata -c 2 e36fa63d37a576b27a69057598351db6ee5746bd test 0 0 file3 commit 3 (no-eol) $ rhg debugdata -m 2 file1\x00b8e02f6433738021a065f94175c7cd23db5f05be (esc) file2\x005d9299349fc01ddd25d0070d149b124d8f10411e (esc) file3\x002661d26c649684b482d10f91960cc3db683c38b4 (esc)