== This is my custom TODO file ==

* Dan and I both have personal TODOs.  Perhaps we should kill off TODO and
  TODO.autoconf

* Look into other VCSs to use.  The main CVS repo will remain, but having a
  distributed system to allow for easy patching/pushing/pulling would be nice
  - monotone and mercurial look like the top contenders in my book, but I need
    to evaluate both a bit more.

* Make sure all the alpm_list_t changes are valid (especially alpm_list_free)

* src/pacman:
    - There's quite a few single function headers which contain the pacman_*
      functions.  We should move these to a single header (pacman.h) to clean up
      the source a bit.

* lib/libalpm:
    - move logging (alpm_logaction) out of the library.  log files should be
      written by the app, not the library.  Adding a PM_LOG_* constant that
      frontends can recognize and send to a file is probably a good idea.
    - clear up list allocation/deallocation - some lists need to be free'd, some
      do not and there is no clear indication WHEN this should happen.
    - remove DB entries (directories) on a read error?
    - Add a pm_errstr error string, which will allow us to do things like:
        pm_errno = PM_ERR_LIBARCHIVE;
        pm_errstr = archive_error_string(archive);
      or:
        pm_errno = PM_ERR_LIBDOWNLOAD;
        pm_errstr = downloadLastErrString;
      This way we don't break abstraction when returning specific errors in
      cases like the above.

* pacman: A LOT of functions are way too long.  There should be an upper limit of
  100-200 lines.  _alpm_add_commit is around 600 lines, and is far too complex.

  Quite a lot of this needs to be refactored as we go.
    Function list (from Dan McGee):
     add.c:
     _alpm_add_commit
     be_files.c:
     _alpm_db_read
     _alpm_db_write
     conflict.c:
     _alpm_checkconflicts
     _alpm_db_find_conflicts
     package.c:
     _alpm_pkg_load (getting a bit long)
     remove.c:
     _alpm_remove_commit
     server.c:
     _alpm_downloadfiles_forreal
     sync.c:
     _alpm_sync_sysupgrade (getting there)
     _alpm_sync_prepare
     _alpm_sync_commit

* pacman: fixup doxygen documentation for public interface

* libalpm: just because a function is in alpm.h doesn't mean it needs to be in
  alpm.c - we should move functions around where they should be.  In fact,
  alpm.c might not be needed at all, if things were organized properly.

* feature for 3.1: package file hooks *
  I've been planning on this one for some time.  Here's a simple rundown:
  in /etc/pacman.d/hooks:
     Hook /usr/include/* : /usr/bin/ctags -R /usr/include/*.h -f /usr/include/systags
  This will allow us to make "global hooks" to simplify a lot of repetitive
  install files (scrollkeeper, depmod, etc).  This also allows us to move
  ldconfig out of pacman entirely.
  possible: /etc/pacman.hooks/* files for hooks, so packages can add them too

* feature for 3.1: multiple search/match types
  option: MatchType regex (current way)
          MatchType fnmatch (use fnmatch to match things like 'pacman -S gnome*')
          MatchType plain (no matching.  expect plain text).

* feature for 3.1: revamp the autotools system.  I'd LOVE to use a manual system
  like wmii and friends do.  It'd be real nice if we could just do away with
  autotools altogether.

**** BUGS ****
* Removal of conflicts on -A and -U (INCOMPLETE)
* gensync: get all info from packages instead of PKGBUILDs
  for now, we only need to check the PKGBUILD in case of a
  'force' option
* pacman: add pactest cases/functionality for all -Q operations and make sure
  the output is sane