##// END OF EJS Templates
inotify: server: new data structure to keep track of changes....
inotify: server: new data structure to keep track of changes. == Rationale for the new structure == Current structure was a dictionary tree. One directory was tracked as a dictionary: - keys: file/subdir name - values: - for a file, the status (a/r/m/...) - for a subdir, the directory representing the subdir It allowed efficient lookups, no matter of the type of the terminal leaf: for part in path.split('/'): tree = tree[part] However, there is no way to represent a directory and a file with the same name because keys are conflicting in the dictionary. Concrete example: Initial state: root dir |- foo (file) |- bar (file) # data state is: {'foo': 'n', 'bar': 'n'} Remove foo: root dir |- bar (file) # Data becomes {'foo': 'r'} until next commit. Add foo, as a directory, and foo/barbar file: root dir |- bar (file) |-> foo (dir) |- barbar (file) # New state should be represented as: {'foo': {'barbar': 'a'}, 'bar': 'n'} however, the key "foo" is already used and represents the old file. The dirstate: D foo A foo/barbar cannot be represented, hence the need for a new structure. == The new structure == 'directory' class. Represents one directory level. * Notable attributes: Two dictionaries: - 'files' Maps filename -> status for the current dir. - 'dirs' Maps subdir's name -> directory object representing the subdir * methods - walk(), formerly server.walk - lookup(), old server.lookup - dir(), old server.dir This new class allows embedding all the tree walks/lookups in its own class, instead of having everything mixed together in server. Incidently, since files and directories are not stored in the same dictionaries, we are solving the previous key conflict problem. The small drawback is that lookup operation is a bit more complex: for a path a/b/c/d/e we have to check twice the leaf, if e is a directory or a file.

File last commit:

r8020:777a9efd default
r9115:b55d4471 default
Show More
test-log
121 lines | 1.7 KiB | text/plain | TextLexer
Vadim Gelfer
log: add -f/--follow option, to follow rename/copy
r2741 #!/bin/sh
hg init a
cd a
echo a > a
hg ci -Ama -d '1 0'
hg cp a b
hg ci -mb -d '2 0'
mkdir dir
hg mv b dir
hg ci -mc -d '3 0'
hg mv a b
Matt Mackall
Fix log regression where log -p file showed diffs for other files
r3837 echo a > d
hg add d
Vadim Gelfer
log: add -f/--follow option, to follow rename/copy
r2741 hg ci -md -d '4 0'
hg mv dir/b e
hg ci -me -d '5 0'
hg log a
echo % -f, directory
hg log -f dir
echo % -f, but no args
hg log -f
echo % one rename
hg log -vf a
echo % many renames
hg log -vf e
Brendan Cully
Test suite for log --follow and --follow-first.
r2785
Brendan Cully
Show copies in hg log....
r3197 echo % log copies
hg log -vC --template '{rev} {file_copies%filecopy}\n'
Brendan Cully
Test case for log --copies on non-linear manifests (issue391)
r3383 echo % log copies, non-linear manifest
hg up -C 3
hg mv dir/b e
echo foo > foo
hg ci -Ame2 -d '6 0'
hg log -vC --template '{rev} {file_copies%filecopy}\n' -r 5
Maxim Dounin
Fix copies reporting in log and convert....
r5811 echo % log copies, execute bit set
chmod +x e
hg ci -me3 -d '7 0'
hg log -vC --template '{rev} {file_copies%filecopy}\n' -r 6
Matt Mackall
Fix log regression where log -p file showed diffs for other files
r3837 echo '% log -p d'
hg log -pv d
Brendan Cully
Test suite for log --follow and --follow-first.
r2785 # log --follow tests
hg init ../follow
cd ../follow
Thomas Arendsen Hein
Issue a warning if "-r ." is used with two working directory parents....
r4510
Brendan Cully
Test suite for log --follow and --follow-first.
r2785 echo base > base
hg ci -Ambase -d '1 0'
echo r1 >> base
hg ci -Amr1 -d '1 0'
echo r2 >> base
hg ci -Amr2 -d '1 0'
hg up -C 1
echo b1 > b1
hg ci -Amb1 -d '1 0'
echo % log -f
hg log -f
hg up -C 0
echo b2 > b2
hg ci -Amb2 -d '1 0'
echo % log -f -r 1:tip
hg log -f -r 1:tip
hg up -C 3
hg merge tip
Thomas Arendsen Hein
Issue a warning if "-r ." is used with two working directory parents....
r4510
echo % log -r . with two parents
hg log -r .
Brendan Cully
Test suite for log --follow and --follow-first.
r2785 hg ci -mm12 -d '1 0'
Thomas Arendsen Hein
Issue a warning if "-r ." is used with two working directory parents....
r4510 echo % log -r . with one parent
hg log -r .
Brendan Cully
Test suite for log --follow and --follow-first.
r2785 echo postm >> b1
hg ci -Amb1.1 -d'1 0'
echo % log --follow-first
hg log --follow-first
Brendan Cully
Test for log --prune.
r2901
echo % log -P 2
hg log -P 2
Alexis S. L. Carvalho
fix hg log -r ''
r3718
Jim Correia
add --git option to commands supporting --patch (log, incoming, history, tip)...
r7762 echo '% log -r tip -p --git'
hg log -r tip -p --git
Alexis S. L. Carvalho
fix hg log -r ''
r3718 echo '% log -r ""'
hg log -r ''
Sune Foldager
provide nicer feedback when an unknown node id is passed to a command...
r7062 echo '% log -r <some unknown node id>'
hg log -r 1000000000000000000000000000000000000000
Henrik Stuart
log: fix broken multiple user search...
r8020 cd ..
hg init usertest
cd usertest
echo a > a
hg ci -A -m "a" -u "User One <user1@example.org>"
echo b > b
hg ci -A -m "b" -u "User Two <user2@example.org>"
hg log -u "User One <user1@example.org>"
hg log -u "user1" -u "user2"
hg log -u "user3"
Alexis S. L. Carvalho
fix hg log -r ''
r3718 exit 0