monotone implementation road map
Release 0.99 / 1.0 - Fall 2010
| Description | More Info | Branch(es) | Status | |
|---|---|---|---|---|
| Extended selectors | MagicSelectors | nvm.extended-selectors |
completed, merged | |
kill_certs_locally |
n/a | nvm.kill_certs_locally |
completed, merged | |
| Netsync URI refactoring | n/a | nvm.connection_info_cleanup |
completed, merged | |
| Fix mtn:// sync | n/a | nvm |
completed | |
Fix rename foo foo |
n/a | nvm.bugfest-2010.29484-rlevitte |
completed, merged | |
| Disapprove multiple revisions | n/a | nvm.tkoskine.disapprove-multirev |
completed, merged | |
| Less verbose restrictions | savannah | nvm.restriction-fixes |
completed, merged | |
| Fix anonymous remote_stdio | savannah | nvm |
completed | |
| Branch name deprecation | monotone-devel | nvm.deprecate_weird_branch_names |
completed, merged | |
| Overwritable, negatable options | OverwritableNegatableOptions | nvm.options |
completed, merged | |
| Key management in automate | savannah | nvm.key_management |
completed, merged | |
| Dump man page from command tree | n/a | nvm.man-page* |
completed, merged | |
| Fix changelog editor issues | monotone-devel | n/a | not started | |
Release 1.x - 2010 / 2011
| Description | More Info | Branch(es) | Status | |
|---|---|---|---|---|
rename --guess |
n/a | nvm.rename-guess |
somewhat abandoned | |
| Clean workspace from unknown / ignored files | n/a | nvm.tkoskine.purge |
in development | |
| netsync --anonymous | n/a | nvm.bugfest-2010.28805-rlevitte |
in development | |
| Colored diff and log output | n/a | nvm.colored-diff |
in development | |
Release 2.0 - 2011
| Description | More Info | Branch(es) | Status | |
|---|---|---|---|---|
| Remove netsync's SERVER [PATTERN] syntax | n/a | n/a | not started | |
Not targeted
| Description | More Info | Branch(es) | Status | Major Version Change | |
|---|---|---|---|---|---|
| Sane SQLite locking | monotone-devel | n/a | not started | No | |
| Policy Branches | VersionedPolicy | nvm.tbrownaw.policy-branches,nvm.experimental.policy-branches* |
in development | Yes | |
| Daggy refinement | DagBasedRefinement | n/a | not started | No - netsync version negotiation | |
| SSL for netsync | n/a | n/a | not started | No - netsync version negotiation | |
| Partial pull | PartialPull | n/a | not started | No - netsync version negotiation | |
| Let die-die-die die | n/a | n/a | not started | Yes - revision format change | |
| 'mountpoint' node type | n/a | n/a | not started | Yes - revision format change | |
| Command naming cleanup | n/a | n/a | not started | Probably - if sufficiently extensive, or it touches the automate commands | |
| Netsync preview | n/a | n/a | not started | No - I don't think this would need any on-the-wire changes at all | |
| Update conflict handling | UpdateConflicts | n/a | not started | No | |
Allow - and _ interchangeably in
commands and options |
n/a | n/a | not started | No | |
| "Packed" revisions | monotone-devel | n/a | not started | Probably not | |
Original ROADMAP file, slightly updated for current monotone
This document gives a rough overview of features and changes planned for the future of monotone development. It does not spontaneously include bug fixes. We endeavour to fix bugs when possible, throughout the development cycle. When a specific class of bugs is targeted for focus in the roadmap, it is noted here.
The roadmap does not include release points, because it is our intention (though at times not our demonstrated behavior) to stick as close as possible to time-based releases, once per month. Even if we happen to hold up a release for some unforeseen reason -- usually lack of available effort -- the plan is to operate in a time-based cycle.
Note also that the roadmap is (broadly) conservative. The goal with monotone is to produce a stable tool which works fast, reliably, predictably, and helps users manage their ever-growing collections of diverging data.
ROADMAP
- tidy up major build/use-breaking bugs in win32, BSD, OSX
versions
- fix codepage-/non-utf8-related problems
- improve netsync error reporting code
- one part: many 'I's should be 'require's.
- move output formatting to lua hooks
- implement improved ACL/permission system for default trust rules
-
continue the implementation of "merge into workspace"
( probably call it "1.0" or "stable" around here )
-
work on GUIs and web UIs
- "merge before commit" (CVS-style online commit-coordination)

- bidirectional mirroring between monotone and CVS/SVN/arch

- "hash-migration" technology for scenarios where SHA1 falls
- ease long-term maintainance by writing up a real hacking guide (.texi, based on expanded HACKING file, a guided tour of code, and a thorough description of the more complicated algorithms) for new maintainers.
there are also some issues which are very regular, mundane, tedious, boring, but ultimately pretty mechanical. they need doing too.
JANITORIAL
-
librarification: several discrete steps, each mechanical, best to do a compile and commit after each.
- make a struct for each file.
- make every "plain" function in the file a static member of the struct
- make every global/static object in the file a static member of the struct
- make every reference to an out-of-file global/static happen via a static reference stored inside the struct, initialized at load time
- remove static-ness of references, from file to file, until there is a single root value for the whole application
(nb: this is not to say that monotone will every be packaged or provided as a library, simply that it's a little more flexible, and easier to see dependencies between modules, when you have things structured this way. we should have been doing so all along, but we were lazy)
-
possibly purge the whole packet-reading/writing stuff.
-
implement a pager so that long outputs get automatically paged if the terminal is intelligent enough to support this feature. cogito does this and it is very convenient. (how many times have you had to rerun a command just to pipe it to more(1) or less(1)?)
-
abstract the way arguments are checked when running a command. given that each command has a "params" member that describes its syntax, it seems fairly easy to homogenize its syntax, write a simple syntax parser for it and use it to sanity-check the command line given by the user. this could remove a lot of inconsistencies in error messages that exist in the current code because, at the moment, each command is reponsible of checking the 'args' size and format to report errors.
-
remove the special-casing of top-level commands. ideally they should behave just like any other command that accepts subcommands (e.g. 'list'). however, the command lookup routine has to support ignoring the top-level command if not given to preserve compatibility and not complicate things a lot. e.g. 'mtn informative list' should be the same as 'mtn list'.
-
modify the CMD_AUTOMATE macro so that it can document all the details of an automate command (input, output, first version, etc.). the idea is to move all the documentation for automate commands (currently placed in comments in the code) to the online help system.