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

r9073:ec1cd317 default
r9115:b55d4471 default
Show More
test-rebase-parameters.out
200 lines | 6.4 KiB | text/plain | TextLexer
/ tests / test-rebase-parameters.out
% These fail
% Use continue and abort
hg rebase: cannot use both abort and continue
hg rebase [-s REV | -b REV] [-d REV] [--collapse] [--keep] [--keepbranches] | [-c] | [-a]
move changeset (and descendants) to a different branch
Rebase uses repeated merging to graft changesets from one part of history
onto another. This can be useful for linearizing local changes relative to
a master development tree.
If a rebase is interrupted to manually resolve a merge, it can be
continued with --continue/-c or aborted with --abort/-a.
options:
-s --source rebase from a given revision
-b --base rebase from the base of a given revision
-d --dest rebase onto a given revision
--collapse collapse the rebased revisions
--keep keep original revisions
--keepbranches keep original branches
-c --continue continue an interrupted rebase
-a --abort abort an interrupted rebase
--style display using template map file
--template display with template
use "hg -v help rebase" to show global options
% Use continue and collapse
hg rebase: cannot use collapse with continue or abort
hg rebase [-s REV | -b REV] [-d REV] [--collapse] [--keep] [--keepbranches] | [-c] | [-a]
move changeset (and descendants) to a different branch
Rebase uses repeated merging to graft changesets from one part of history
onto another. This can be useful for linearizing local changes relative to
a master development tree.
If a rebase is interrupted to manually resolve a merge, it can be
continued with --continue/-c or aborted with --abort/-a.
options:
-s --source rebase from a given revision
-b --base rebase from the base of a given revision
-d --dest rebase onto a given revision
--collapse collapse the rebased revisions
--keep keep original revisions
--keepbranches keep original branches
-c --continue continue an interrupted rebase
-a --abort abort an interrupted rebase
--style display using template map file
--template display with template
use "hg -v help rebase" to show global options
% Use continue/abort and dest/source
hg rebase: abort and continue do not allow specifying revisions
hg rebase [-s REV | -b REV] [-d REV] [--collapse] [--keep] [--keepbranches] | [-c] | [-a]
move changeset (and descendants) to a different branch
Rebase uses repeated merging to graft changesets from one part of history
onto another. This can be useful for linearizing local changes relative to
a master development tree.
If a rebase is interrupted to manually resolve a merge, it can be
continued with --continue/-c or aborted with --abort/-a.
options:
-s --source rebase from a given revision
-b --base rebase from the base of a given revision
-d --dest rebase onto a given revision
--collapse collapse the rebased revisions
--keep keep original revisions
--keepbranches keep original branches
-c --continue continue an interrupted rebase
-a --abort abort an interrupted rebase
--style display using template map file
--template display with template
use "hg -v help rebase" to show global options
% Use source and base
hg rebase: cannot specify both a revision and a base
hg rebase [-s REV | -b REV] [-d REV] [--collapse] [--keep] [--keepbranches] | [-c] | [-a]
move changeset (and descendants) to a different branch
Rebase uses repeated merging to graft changesets from one part of history
onto another. This can be useful for linearizing local changes relative to
a master development tree.
If a rebase is interrupted to manually resolve a merge, it can be
continued with --continue/-c or aborted with --abort/-a.
options:
-s --source rebase from a given revision
-b --base rebase from the base of a given revision
-d --dest rebase onto a given revision
--collapse collapse the rebased revisions
--keep keep original revisions
--keepbranches keep original branches
-c --continue continue an interrupted rebase
-a --abort abort an interrupted rebase
--style display using template map file
--template display with template
use "hg -v help rebase" to show global options
% Rebase with no arguments - from current
nothing to rebase
% Rebase with no arguments - from the current branch
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
nothing to rebase
% ----------
% These work
% Rebase with no arguments (from 3 onto 7)
3 files updated, 0 files merged, 2 files removed, 0 files unresolved
saving bundle to
adding branch
adding changesets
adding manifests
adding file changes
added 5 changesets with 5 changes to 5 files
rebase completed
% Try to rollback after a rebase (fail)
no rollback information available
% Rebase with base == '.' => same as no arguments (from 3 onto 7)
3 files updated, 0 files merged, 3 files removed, 0 files unresolved
saving bundle to
adding branch
adding changesets
adding manifests
adding file changes
added 5 changesets with 5 changes to 5 files
rebase completed
% Rebase with dest == default => same as no arguments (from 3 onto 7)
3 files updated, 0 files merged, 3 files removed, 0 files unresolved
saving bundle to
adding branch
adding changesets
adding manifests
adding file changes
added 5 changesets with 5 changes to 5 files
rebase completed
% Specify only source (from 4 onto 7)
saving bundle to
adding branch
adding changesets
adding manifests
adding file changes
added 4 changesets with 4 changes to 4 files (-1 heads)
rebase completed
% Specify only dest (from 3 onto 6)
3 files updated, 0 files merged, 3 files removed, 0 files unresolved
saving bundle to
adding branch
adding changesets
adding manifests
adding file changes
added 5 changesets with 5 changes to 5 files (+1 heads)
rebase completed
% Specify only base (from 3 onto 7)
saving bundle to
adding branch
adding changesets
adding manifests
adding file changes
added 5 changesets with 5 changes to 5 files
rebase completed
% Specify source and dest (from 4 onto 6)
saving bundle to
adding branch
adding changesets
adding manifests
adding file changes
added 4 changesets with 4 changes to 4 files
rebase completed
% Specify base and dest (from 3 onto 6)
saving bundle to
adding branch
adding changesets
adding manifests
adding file changes
added 5 changesets with 5 changes to 5 files (+1 heads)
rebase completed