##// 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:

r9093:0b2b269b default
r9115:b55d4471 default
Show More
test-fetch.out
209 lines | 7.4 KiB | text/plain | TextLexer
Sune Foldager
fetch: added support for named branches...
r7007 % test fetch with default branches only
Vadim Gelfer
fetch: fix breakage from mpm....
r2822 adding a
Adrian Buehlmann
clone: print "updating working directory" status message...
r6338 updating working directory
Vadim Gelfer
fetch: fix breakage from mpm....
r2822 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
Adrian Buehlmann
clone: print "updating working directory" status message...
r6338 updating working directory
Vadim Gelfer
fetch: fix breakage from mpm....
r2822 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
adding b
1:97d72e5f12c7
% should pull one change
pulling from ../a
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1:97d72e5f12c7
adding c
Adrian Buehlmann
clone: print "updating working directory" status message...
r6338 updating working directory
Bryan O'Sullivan
fetch: hide authentication details
r5798 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
Adrian Buehlmann
clone: print "updating working directory" status message...
r6338 updating working directory
Bryan O'Sullivan
fetch: hide authentication details
r5798 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
Bryan O'Sullivan
fetch: switch the default parent used for a merge...
r6206 % should merge c into a
Vadim Gelfer
fetch: fix breakage from mpm....
r2822 pulling from ../a
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files (+1 heads)
Bryan O'Sullivan
fetch: switch the default parent used for a merge...
r6206 updating to 2:97d72e5f12c7
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
merging with 1:5e056962225c
Vadim Gelfer
fetch: fix breakage from mpm....
r2822 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
Vadim Gelfer
test-fetch: make output stable
r2823 new changeset 3:cd3a41621cf0 merges remote changes with local
Vadim Gelfer
fetch: fix breakage from mpm....
r2822 a
b
c
Bryan O'Sullivan
fetch: hide authentication details
r5798 % fetch over http, no auth
pulling from http://localhost:20059/
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files (+1 heads)
Bryan O'Sullivan
fetch: switch the default parent used for a merge...
r6206 updating to 2:97d72e5f12c7
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
merging with 1:5e056962225c
Bryan O'Sullivan
fetch: hide authentication details
r5798 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
Thomas Arendsen Hein
adjust test-fetch output to non-default HGPORT, e.g. with run-tests.py -j
r6246 new changeset 3:... merges remote changes with local
Bryan O'Sullivan
fetch: hide authentication details
r5798 Automated merge with http://localhost:20059/
% fetch over http with auth (should be hidden in desc)
pulling from http://user:***@localhost:20059/
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files (+1 heads)
Bryan O'Sullivan
fetch: switch the default parent used for a merge...
r6206 updating to 2:97d72e5f12c7
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
merging with 1:5e056962225c
Bryan O'Sullivan
fetch: hide authentication details
r5798 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
Thomas Arendsen Hein
adjust test-fetch output to non-default HGPORT, e.g. with run-tests.py -j
r6246 new changeset 3:... merges remote changes with local
Bryan O'Sullivan
fetch: hide authentication details
r5798 Automated merge with http://localhost:20059/
Adrian Buehlmann
clone: print "updating working directory" status message...
r6338 updating working directory
Bryan O'Sullivan
fetch: switch the default parent used for a merge...
r6206 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
Adrian Buehlmann
clone: print "updating working directory" status message...
r6338 updating working directory
Bryan O'Sullivan
fetch: switch the default parent used for a merge...
r6206 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
adding f
adding g
% should merge f into g
pulling from ../f
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files (+1 heads)
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
merging with 3:cc6a3744834d
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
Bryan O'Sullivan
fetch: make test reproducible, tiny code cleanup
r6207 new changeset 4:55aa4f32ec59 merges remote changes with local
Bryan O'Sullivan
fetch: don't proceed if working directory is missing files (issue988)
r6226 % should abort, because i is modified
abort: working directory is missing some files
Sune Foldager
fetch: added support for named branches...
r7007 % test fetch with named branches
adding a
marked working directory as branch a
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
marked working directory as branch b
adding b
created new head
% pull in change on foreign branch
updating working directory
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
updating working directory
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
pulling from n1
searching for changes
adding changesets
adding manifests
adding file changes
Benoit Boissinot
protocol: use changegroupsubset() if possible (issue1389)...
r7415 added 1 changesets with 1 changes to 1 files
Sune Foldager
fetch: added support for named branches...
r7007 % parent should be 2 (no automatic update)
2
% pull in changes on both foreign and local branches
updating working directory
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
updating working directory
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
pulling from n1
searching for changes
adding changesets
adding manifests
adding file changes
added 2 changesets with 2 changes to 2 files
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
% parent should be 4 (fast forward)
4
% pull changes on foreign (2 new heads) and local (1 new head) branches
% with a local change
updating working directory
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
updating working directory
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
created new head
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
adding c
pulling from n1
searching for changes
adding changesets
adding manifests
adding file changes
added 3 changesets with 3 changes to 2 files (+2 heads)
updating to 5:708c6cce3d26
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
merging with 3:d83427717b1f
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
new changeset 7:48f1a33f52af merges remote changes with local
% parent should be 7 (new merge changeset)
7
% pull in changes on foreign (merge of local branch) and local (2 new
% heads) with a local change
updating working directory
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
updating working directory
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
created new head
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
created new head
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
pulling from n1
searching for changes
adding changesets
adding manifests
adding file changes
added 3 changesets with 2 changes to 1 files (+2 heads)
not merging with 1 other new branch heads (use "hg heads ." and "hg merge" to merge them)
% parent should be 3 (fetch did not merge anything)
3
Sune Foldager
fetch: use dirstate branch instead of first parents
r7049 % pull in change on different branch than dirstate
adding a
updating working directory
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
marked working directory as branch topic
abort: working dir not at branch tip (use "hg update" to check out branch tip)
% parent should be 0 (fetch did not update or merge anything)
0
Benjamin Pollack
regression test for issue1552...
r7855 % test fetch with inactive branches
adding a
marked working directory as branch second
adding b
marked working directory as branch default
adding c
updating working directory
3 files updated, 0 files merged, 0 files removed, 0 files unresolved
% fetch should succeed
pulling from ../ib1
searching for changes
no changes found
Henrik Stuart
branch heads: fix regression introduced in e67e5b60e55f (issue1726)...
r9093 % test issue1726
adding a
updating working directory
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
pulling from ../i1726r1
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files (+1 heads)
updating to 2:7837755a2789
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
merging with 1:d1f0c6c48ebd
merging a
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
new changeset 3 merges remote changes with local
3