RoadMap
=======

  <http://wiki.debian.org/Teams/Dpkg/RoadMap>

TODO
====

1.16.x
~~~~~~

 * 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).

 * Build:
   - Make dpkg bootstrappable.
   - Check availability of warning flags at configure time.
   - Handle missing lstat at configure time by erroring out.

 * Code cleanup / bug fixes:
   - Get rid of static variables inside functions.
   - Coalesce admindir / infodir / foodir generation.
   - Coalesce hash and checksum functions.
   - Split modstatdb_rw into mode and flags.
   - Move fd 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.
   - Split dpkg.h into independent headers.
   - Do more unused header include removal.
   - Add needed includes to all header files.
   - 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.
   - Make deb build version a version instead of doing checks over a string.
   - Use enums for currently hardcoded literals (replacingfilesandsaid,
     saidread, rok, filetriggers_edited, etc).
   - Do not use nfmalloc (and friends) for non in-core db memory.
   - Call nffreeall on exit (need to detangle nfmalloc from non-db first).
   - Add a size parameter to the buffer api to avoid some useless
     pipe+fork+copy.
   - Handle instdir '/' separator consistently.
   - Check if caching selinux context for second call is possible.
   - Add missing newlines in --version output.
   - Fix leak on tar_extract (name, linkname).
   - Handle symlinks in statcmd.c statdb_node_apply().
   - Fix dpkg termination on SIGPIPE from status-fd.

 * libcompat cleanup:
   - Add fnmatch, IRIX5 doesn't have it.

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

 * L10n:
   - Check dpkg-divert strings for new and fixable ones.
   - 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

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

 * Test and reenable --command-fd.

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

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

 * Add UTF-8 support to all programs.

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

 * 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)

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

 * We should set our own obstack_alloc_failed_handler.

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


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

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, as well 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
