Some rant about general VCS requirements which will ideally end in a formal model matching Mercurial implementation (with hope it's not totally out of topic on the Mercurial wiki).
See this page as a pure intellectual exercise for now.
Requirements
Express from coarser detail to finer detail.
High level requirements
- Manage objects (will be files, directory, metadata...)
- add object
- remove object
- modify object
- keep immutable history (except for obliterating some content ?)
- restore state from the past
Intermediate level requirements
- keep trace of who did the object management actions
- add property to objects (comment, date, author..)
- add property to history state (tags ?)
Distributed requirements
- Local history (will end in repository / branches)
- clone
- merge
Other secondary requirements
- narrow/shallow cloning ?
Low levels requirements
Map to Mercurial commands/functions:
- init, add, remove, backout, branch, clone, commit, copy, move, merge, push, pull, revert, tag
Map to Mercurial internals:
- manifest, revlogs,
Formal Method
- B event (via rodin platform)