# TODO list for Portage; the Gentoo Linux package system 
# $Id: TODO,v 1.11 2004/09/09 08:02:53 carpaski Exp $

#
# Add your name to the top of any item you are working actively on
# and then commit. Be sure you have a current copy of this file.
#

Legend:
 '*' Just do it.        '#' Tricky
 '!' Difficult          '@' Restricted in some way

  File "/usr/lib/portage/pym/portage_locks.py", line 46, in lockfile
	    myfd = os.open(lockfilename, os.O_CREAT|os.O_RDWR,0660)
			OSError: [Errno 13] Permission denied: '/var/tmp/portage/tmpfs/aux_db_key_temp'
			



* Clean should only produce output for 'emerge clean'

# Stop using mtimes for packages. Have portage look up all files in the
  vardb to ensure that a file isn't duplicated and unmerge it if not.
  Potentially slow... Need some way to speed it up... hash of filenames?

# Virtuals. /var/cache/edb/virtuals -- Effectively remove it.
  /etc/portage/virtuals is a user-modifiable version that acts like an
  incremental applied on top of an ON-DEMAND virtual calculation system.
  Virtuals should be calculated from /var/db/pkg EVERY time it is requested.

# Repoman needs to ignore all user-set info in /etc/portage
  It's not relevant to deployed users and will probably be a general gotcha.

# Multiple rsync repos.
  bug 28796 -- Enable metadata caches for them. 

# STICKIES and related enhancements:
  bug 9379, bug 13616, Aether's config code

# Determine file lock status before starting downloads -- Prevent races/deletes
  Patches exist for this. Integrate and find all colliding descriptors/cmds.
  Create a fileIO layer? (wget and other external calls are a problem)

* Add category support to searches... emerge -s @catgory

@ rsync - track changes based in subtrees to reduce filetree expense.
  Possible plans:
    Use md5's of tree file list + md5 of subtree -- client-side burden.
    Maintain hash of changes on rsync1 -- Server-side burden. **
    Implement CVSUP. **

# 'emerge sync' timestamp awareness -- Make sure IP is associated and not
  used at random as servers may differ. bug 21794

! Rename all undocumented variables used in bash to prefixed values that
  are not easy to accidently duplicate. BUILDDIR --> PORTAGE_BUILDDIR or
  something like that. Prevent ebuilds from clobbering system variables.



