# from [3d4f96b84baf50476ec20f3824e86b0e7d9a8407] # to [058cfd46af22638e27c2564ecee7277d0bcbb4b0] --- +++ @@ -0,0 +1,147 @@ + +# monotone implementation road map + +## Release 0.99 / 1.0 - Fall 2010 + +[[!table data=""" +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](https://savannah.nongnu.org/bugs/?30291) | `nvm.restriction-fixes` | completed, merged | +Fix anonymous remote_stdio | [savannah](https://savannah.nongnu.org/bugs/?30237) | `nvm` | completed | +Branch name deprecation | [monotone-devel](http://article.gmane.org/gmane.comp.version-control.monotone.devel/17117/match=netsync+connection+info+cleanup) | `nvm.deprecate_weird_branch_names` | completed, merged | +Overwritable, negatable options | [[OverwritableNegatableOptions]] | `nvm.options` | completed, merged | +Key management in automate | [savannah](https://savannah.nongnu.org/bugs/?30345) | `nvm.key_management` | completed, merged | +Dump man page from command tree | n/a | `nvm.man-page*` | completed | +Fix changelog editor issues | [monotone-devel](http://thread.gmane.org/gmane.comp.version-control.monotone.devel/17851) | n/a | not started | +""" ]] + +## Release 1.x - 2010 / 2011 + +[[!table data=""" +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 + +[[!table data=""" +Description | More Info | Branch(es) | Status | +Remove netsync's SERVER [PATTERN] syntax | n/a | n/a | not started | +""" ]] + +## Not targeted + +[[!table data=""" +Description | More Info | Branch(es) | Status | Major Version Change | +Sane SQLite locking | [monotone-devel](http://thread.gmane.org/gmane.comp.version-control.monotone.devel/13327/focus=13343) | 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](http://article.gmane.org/gmane.comp.version-control.monotone.devel/18030) | 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.