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

r8611:ba42e3c6 default
r9115:b55d4471 default
Show More
test-convert-cvs.out
115 lines | 2.2 KiB | text/plain | TextLexer
/ tests / test-convert-cvs.out
Patrick Mezard
convert: test cvs repository conversion
r5307 % create cvs repository
% create source directory
% import source directory
N src/a
N src/b/c
No conflicts created by this import
% checkout source directory
U src/a
U src/b/c
Alexis S. L. Carvalho
convert_cvs: add --filemap support
r5381 % commit a new revision changing b/c
checking in src/b/c,v
Patrick Mezard
convert: test cvs repository conversion
r5307 % convert fresh repo
Patrick Mezard
convert: deprecate external cvsps, to be removed in 1.4
r8598 warning: support for external cvsps is deprecated and will be removed in Mercurial 1.4
Patrick Mezard
Merge with crew-stable
r5308 initializing destination src-hg repository
Patrick Mezard
convert: test cvs repository conversion
r5307 connecting to cvsrepo
scanning source...
sorting...
converting...
Alexis S. L. Carvalho
convert_cvs: add --filemap support
r5381 2 Initial revision
1 import
0 ci0
Patrick Mezard
convert: test cvs repository conversion
r5307 updating tags
a
c
Alexis S. L. Carvalho
convert_cvs: add --filemap support
r5381 c
% convert fresh repo with --filemap
Patrick Mezard
convert: deprecate external cvsps, to be removed in 1.4
r8598 warning: support for external cvsps is deprecated and will be removed in Mercurial 1.4
Alexis S. L. Carvalho
convert_cvs: add --filemap support
r5381 initializing destination src-filemap repository
connecting to cvsrepo
scanning source...
sorting...
converting...
2 Initial revision
1 import
Patrick Mezard
convert: better feedback when filtering out empty revisions...
r8611 filtering out empty revision
Alexis S. L. Carvalho
convert_cvs: add --filemap support
r5381 rolling back last transaction
0 ci0
updating tags
c
c
2 update tags files: .hgtags
1 ci0 files: b/c
0 Initial revision files: b/c
Patrick Mezard
convert: test cvs repository conversion
r5307 % commit new file revisions
Christian Ebert
test-convert-cvs: handle older cvs client
r5364 checking in src/a,v
checking in src/b/c,v
Patrick Mezard
convert: test cvs repository conversion
r5307 % convert again
Patrick Mezard
convert: deprecate external cvsps, to be removed in 1.4
r8598 warning: support for external cvsps is deprecated and will be removed in Mercurial 1.4
Patrick Mezard
convert: test cvs repository conversion
r5307 connecting to cvsrepo
scanning source...
sorting...
converting...
0 ci1
a
a
c
c
Alexis S. L. Carvalho
convert_cvs: add --filemap support
r5381 c
% convert again with --filemap
Patrick Mezard
convert: deprecate external cvsps, to be removed in 1.4
r8598 warning: support for external cvsps is deprecated and will be removed in Mercurial 1.4
Alexis S. L. Carvalho
convert_cvs: add --filemap support
r5381 connecting to cvsrepo
scanning source...
sorting...
converting...
0 ci1
c
c
c
3 ci1 files: b/c
2 update tags files: .hgtags
1 ci0 files: b/c
0 Initial revision files: b/c
Thomas Arendsen Hein
Test for converting a CVS branch
r5919 % commit branch
U b/c
T a
T b/c
checking in src/b/c,v
% convert again
Patrick Mezard
convert: deprecate external cvsps, to be removed in 1.4
r8598 warning: support for external cvsps is deprecated and will be removed in Mercurial 1.4
Thomas Arendsen Hein
Test for converting a CVS branch
r5919 connecting to cvsrepo
scanning source...
sorting...
converting...
0 ci2
a
c
d
% convert again with --filemap
Patrick Mezard
convert: deprecate external cvsps, to be removed in 1.4
r8598 warning: support for external cvsps is deprecated and will be removed in Mercurial 1.4
Thomas Arendsen Hein
Test for converting a CVS branch
r5919 connecting to cvsrepo
scanning source...
sorting...
converting...
0 ci2
c
d
4 ci2 files: b/c
3 ci1 files: b/c
2 update tags files: .hgtags
1 ci0 files: b/c
0 Initial revision files: b/c
o 5 (branch) ci2 files: b/c
|
Thomas Arendsen Hein
CVS convert: Find correct parent for new branch (issue704)...
r5920 | o 4 () ci1 files: a b/c
| |
| o 3 () update tags files: .hgtags
| |
| o 2 () ci0 files: b/c
|/
Thomas Arendsen Hein
Test for converting a CVS branch
r5919 | o 1 (INITIAL) import files:
|/
o 0 () Initial revision files: a b/c