view TODO @ 490:b3c16d1aede0

Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
author Artem Tikhomirov <>
date Thu, 16 Aug 2012 17:08:34 +0200
parents 7e1912b4ce99
line wrap: on
line source

Read-only support, version 1.0
* store+fncache, RevlogNG (i.e. no support for older store formats) 

* hg log
  + user, branch, limit
  - date, 
  + filename
  + filename and follow history

* hg manifest (aka ls)

* hg status
  + copies for [revision..revision] and for [revision..working dir]
  + path or anything meaningful instead of Strings
  + matchers

* hg cat
  + CatCommand. File, revision. 
  + Cat command line client

+ hgignore
  + glob
  + pattern

+ Tests with JUnit
  + allow to specify repo location (system property)
  + keep a .zip of repo along with tests 

* tags
  * Tags are read and can be queried (cmdline Log does)
* keywords
  + filter with context (HgRepository + Path + Direction (to/from repo)
  - filters shall have weight (to allow certain filter come first). Would need that once FilterFactories are pluggable

* newlines
  + \r\n <==> \n
  - force translation if inconsistent (now either fails or does nothing)

  - CommandContext
  + Data access - not bytes, but ByteChannel
  - HgRepository constants (TIP, BAD, WC) to HgRevisions enum

- LogCommand.revision(int... rev)+ to walk selected revisions only (list->sort(array) on execute, binary search)
- LogCommand.before(Date date) and .after()
- LogCommand.match() to specify pattern, no selected file()s only?
* RepositoryFacade and CommandContext  
- hgignore: read extra ignore files from config file (ui.ignore)
- Revlog iteration in reversed order (either support internally in RevlogStream or externally, windowed access)

* Known issues and limitations:
  ** Configuration files listed under HKEY_LOCAL_MACHINE\SOFTWARE\Mercurial are not processed
  ** %include and %unset directives in config files
  ** additional locations of ignore configuration are not read/processed from ui.ignore.*
  ** subrepositories and path mapping in cfg 

Read-only support, version 1.1
* Network protocol/connections:
  + http
  * https (respects no certificates)
  - ssh
* incoming
  + 'lite' (revisions only)
  + 'full' (complete changelog)
  * branches (no tests) 
  - subrepositories

* outgoing
  + 'lite' (revisions only)
  + 'full' (complete changelog access) 
  * branches (no tests) 
  - subrepositories

* clone remote repo
  + into new or empty directory
  - populate working copy