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

r8991:7e0b31df default
r9115:b55d4471 default
Show More
test-debugcomplete.out
229 lines | 4.4 KiB | text/plain | TextLexer
/ tests / test-debugcomplete.out
% Show all commands except debug commands
add
addremove
annotate
archive
backout
bisect
branch
branches
bundle
cat
clone
commit
copy
diff
export
forget
grep
heads
help
identify
import
incoming
init
locate
log
manifest
merge
outgoing
parents
paths
pull
push
recover
remove
rename
resolve
revert
rollback
root
serve
showconfig
status
tag
tags
tip
unbundle
update
verify
version
% Show all commands that start with "a"
add
addremove
annotate
archive
% Do not show debug commands if there are other candidates
diff
% Show debug commands if there are no other candidates
debugancestor
debugcheckstate
debugcommands
debugcomplete
debugconfig
debugdata
debugdate
debugfsinfo
debugindex
debugindexdot
debuginstall
debugrebuildstate
debugrename
debugsetparents
debugstate
debugsub
debugwalk
% Do not show the alias of a debug command if there are other candidates
% (this should hide rawcommit)
recover
remove
rename
resolve
revert
rollback
root
% Show the alias of a debug command if there are no other candidates
% Show the global options
--config
--cwd
--debug
--debugger
--encoding
--encodingmode
--help
--noninteractive
--profile
--quiet
--repository
--time
--traceback
--verbose
--version
-R
-h
-q
-v
-y
% Show the options for the "serve" command
--accesslog
--address
--certificate
--config
--cwd
--daemon
--daemon-pipefds
--debug
--debugger
--encoding
--encodingmode
--errorlog
--help
--ipv6
--name
--noninteractive
--pid-file
--port
--prefix
--profile
--quiet
--repository
--stdio
--style
--templates
--time
--traceback
--verbose
--version
--webdir-conf
-6
-A
-E
-R
-a
-d
-h
-n
-p
-q
-t
-v
-y
% Show an error if we use --options with an ambiguous abbreviation
hg: command 's' is ambiguous:
serve showconfig status
% Show all commands + options
add: include, exclude, dry-run
annotate: rev, follow, text, user, date, number, changeset, line-number, include, exclude
clone: noupdate, rev, pull, uncompressed, ssh, remotecmd
commit: addremove, close-branch, include, exclude, message, logfile, date, user
diff: rev, change, text, git, nodates, show-function, ignore-all-space, ignore-space-change, ignore-blank-lines, unified, include, exclude
export: output, switch-parent, text, git, nodates
forget: include, exclude
init: ssh, remotecmd
log: follow, follow-first, date, copies, keyword, rev, removed, only-merges, user, only-branch, prune, patch, git, limit, no-merges, style, template, include, exclude
merge: force, rev, preview
parents: rev, style, template
pull: update, force, rev, ssh, remotecmd
push: force, rev, ssh, remotecmd
remove: after, force, include, exclude
serve: accesslog, daemon, daemon-pipefds, errorlog, port, address, prefix, name, webdir-conf, pid-file, stdio, templates, style, ipv6, certificate
status: all, modified, added, removed, deleted, clean, unknown, ignored, no-status, copies, print0, rev, include, exclude
update: clean, check, date, rev
addremove: similarity, include, exclude, dry-run
archive: no-decode, prefix, rev, type, include, exclude
backout: merge, parent, rev, include, exclude, message, logfile, date, user
bisect: reset, good, bad, skip, command, noupdate
branch: force, clean
branches: active, closed
bundle: force, rev, base, all, type, ssh, remotecmd
cat: output, rev, decode, include, exclude
copy: after, force, include, exclude, dry-run
debugancestor:
debugcheckstate:
debugcommands:
debugcomplete: options
debugdata:
debugdate: extended
debugfsinfo:
debugindex:
debugindexdot:
debuginstall:
debugrebuildstate: rev
debugrename: rev
debugsetparents:
debugstate: nodates
debugsub: rev
debugwalk: include, exclude
grep: print0, all, follow, ignore-case, files-with-matches, line-number, rev, user, date, include, exclude
heads: rev, active, closed, style, template
help:
identify: rev, num, id, branch, tags
import: strip, base, force, no-commit, exact, import-branch, message, logfile, date, user, similarity
incoming: force, newest-first, bundle, rev, patch, git, limit, no-merges, style, template, ssh, remotecmd
locate: rev, print0, fullpath, include, exclude
manifest: rev
outgoing: force, rev, newest-first, patch, git, limit, no-merges, style, template, ssh, remotecmd
paths:
recover:
rename: after, force, include, exclude, dry-run
resolve: all, list, mark, unmark, include, exclude
revert: all, date, rev, no-backup, include, exclude, dry-run
rollback:
root:
showconfig: untrusted
tag: force, local, rev, remove, message, date, user
tags:
tip: patch, git, style, template
unbundle: update
verify:
version: