ROADMAP
=======

1.15.x (squeeze)
~~~~~~

 * Review this file and remove or update the old entries.

 * Look for FIXME and XXX items in the source.

 * Triage as much bugs as possible to get the bug count below 300 ;) and
   merge as much patches as possible.

 * Create dedicated manual pages for .changes and .dsc documenting the
   format of the files. (deb-foo might not be apprioriate as those are
   not inside of the .deb file, but changes(5) seems too generic.)
   Explain that backwards incompatible change involve a major version bump
   (1.x => 2.x) while minor version bump will be used for backwards
   compatible extension (e.g. new fields).

 * Make dpkg bootstrappable.

 * Code cleanup:
   - Get rid of static variables inside functions.
   - Coalesce admindir / infodir / foodir generation.
   - Get rid of setjmp (at least in the general case, keep for dpkg itself?)
   - Coalesce hash and checksum functions.
   - Split modstatdb_rw into mode and flags.
   - Move fd and block function out of mlib.
   - Cleanup status chars -> strings hardcoded mappings all over the place.
     (Fix tied field enum with its dselect description (pkgdisplay.cc))
   - Refactor src/processarc.c.
   - Make sure all vsnprintf callers are checking the return value, as the
     system version will not ohsite on us.
   - Fix naming consistency of next/prev members.
   - Do more unused header include removal.
   - Get rid of unuseful "unsigned" modifiers.
   - Use internerr instead of assert, and print more meaninful messages.
   - Make actionfunction return int, and avoid global exitcode variables.
   - Move ACTION and OBSOLETE, etc to ‘myopt.h’.
   - Use max/min in dselect instead of lesserint/greaterint.
   - Refactor packageslump into generic code.
   - Refactor subprocess execution (argument building etc).
   - Replace raw write and read calls with safe variants (signals etc).
   - Fix compress_type being shadowed.
   - Fix stat variables being shadowed (bugs!!).
   - Make deb build version a version instead of doing checks over a string.
   - Use enums for currently hardcoded literals (tdus, dependtry, etc).

 * Deprecate --force-not-root flag (remove modstatdb_rw rootneeded flags).

 * Test and reenable --command-fd.

 * Check --no-act for log_action().

 * Man pages:
   - Add example to dpkg-scanfoo manpages?
   - Merge synopsis lines in dpkg-triggers.
   - Check all '<>' use bold instead.
   - Check all command vs action.
   - Check usage of '|' instead of ', '.
   - Check position of short option before long option.
   - Use [option...] instead of [options] and friends?
   - Fix dpkg man page, refs to dpkg-deb and dpkg-split, etc.
   - Fix «commandline» vs «command line».
   - Fix «.  ».

 * L10n:
   - Standardize translated error messages in the perl code to avoid useless
     work for translators.
   - Check http://d-i.alioth.debian.org/spellcheck/level5/index.html

 * Discuss and implement
   http://www.hadrons.org/~guillem/debian/docs/origin.proposal

 * Add non-regression tests for Dpkg::Source::*

 * Cleanup libcompat:
   - Add fnmatch, IRIX5 doesn't have it.
   - Fix scandir, leaks on malloc and realloc.

 * Add multiarch support.

 * Merge stuff back:
   - debsums (metadata storage).
   - ucf (cleverer conffile handling).
   - debconf (dpkg-*configure and add new status):
     + dpkg --reconfigure <pkg> <pkg>
       <pkg>.postinst reconfigure <ver>
       Fail if pkg is not in the configured state.
   - dpkg-cross (multiarch + dpkg cross compilation support).
   - dpkg-sig (dak fixed, import code, needs reply, #340306).
   - apt: deb-*/ dirs, apt-extracttemplates (libdpkg).
   - (maybe parts of wajig, aptitude, synaptic, ept, ...).

 * Start exposing libdpkg.
   - Split dpkg.h into dpkg-priv.h.
   - Add needed includes to all header files.

 * Add UTF-8 support to all programs.

 * Modify database to store per-file flags.
   - Store checksums and stat data in per-file flags.
   - Add md5sums and/or sha1sums package support. (#155676)

 * Allow packages to register additional files, declare ownership of files for
   dpkg -S and -L without having dpkg act on this (.psuedolist?).

 * Some kind of test-suite (Esteban).

 * Make dpkg-checkbuilddeps easier to use by other programs such as pbuilder
   or sbuild, so that they can start using the new architecture wildcards
   automatically.
   - Support for output format. (#214566)

 * Remove conffile background support? (#38334)

 * Make dpkg-deb --build check for duped conffiles. (#131633)

 * Propagate --admindir to programs run from maintainer scritpts. (#97076)

 * Fix conflicting action -%c, when short is 0.

 * We should set our own obstack_alloc_failed_handler.

 * Fix quotes? <http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html>

1.16.x (squeeze + 1)
~~~~~~

 * Remove compatibility symlinks
   /usr/sbin/{update-alternatives,dpkg-divert,dpkg-statoverride}.
 * Remove install-info wrapper.


TODO
====

Old TODO entries from Scott:

start-stop-daemon
* capabilities support
* don't close FD's

dpkg
* allow external program to specify how to handle conffiles
* try to remove directories again after removing conffiles
* verify Enhances works (ie don't trigger some assertion)
* add test to see if a file should really be installed and optionally
  skip it
* dpkg --call-maint-script=<script> --maint-script-arg=<arg>
  --maint-script-arg=<arg> <pkg> <pkg>
    dpkg will not allow <script> to be one of {pre,post}{inst,rm}.  Only
    unknown scripts can be called this way.  dpkg will also not keep track
    of any state for these scripts.

Fix:
<joeyh_> package a conflicted with old versions of package b. package b
      conficted with old versions of package a. I had the old versions of both
      installed, and told dpkg to install the new versions of a and b
      simulantaneously. It refused.

dselect:
* support Enhances

------------------------------------------------------------------------------

Old TODO entries from IWJ:

Here are some currently-known inadequacies:

urgent
 * Conflicts << installation ordering
 * Version numbers in pre-depends stuff
 * Search for all pre-depends things at once, bomb out if any not found
 * _always_ show section in --yet-to-unpack
 * automatically do --yet-to-unpack in installation methods
 * check depending packages when installing new version.
 * Several things ought to be configurable but aren't.
 * Filenames containing newlines.  Conffile names containing spaces.
 * dpkg --status for virtual packages
 * openpgp signatures in the package archive

other stuff unlikely to get done soon
 * Automatically remove <file>.gz if <file> can't be found ? and maybe,
   remove <file> if <file.gz> can't be found? Big mess when we start
   thinking about bz2 :/
 * Local version number (using non-numeric epoch, perhaps, or better yet,
   a --local option in dpkg, so that it marks this package as a local install
   (when running dpkg -i)? Keeps it from being listed as obsolete, and maybe
   from being considered for auto-upgrades (apt-get needs to know about this
   too)
 * Filename field generated by --record-avail 
 * understand Replaces in dselect
 * diversions list as control archive entry
 * single maintainer script, and new package getting there first
 * local conffiles, aswell as local files that dpkg should check before
   overwriting
 * hooks
 * dselect per-half focus and keybindings improvements.
   !missing bug report #1555!

 * floppy map (where are the files)
 * how to change case of package names
 * `fake' or `null' packages
 * dpkg --query | -Q

