PiSi TODO List
==============
A list of tasks to accomplish, organized into priority sections

Legend:
- Todo 
? Not determined if/how we have to do 
/ In progress 
+ Accomplished  

1. Pre-Alpha  

  + reading spec file
  + writing
    + files
    + metadata
  + Actions API framework
    + sample api modules (example: autotools)
      + C Language Tools
      - GoLang Tools
      + Python Language Tools
      + Ruby Language Tools
      + Perl Language Tools
      + CMake Tools

    / unit test
  + source building
  + package module
    + extraction
    + add file / compression
  + package creation
  + install database
  + package database
  + command line interface
    + inary-build
    + inary-install
    + inary-index 
    + inary-updatedb 
  + single repository index
  + simple dependency checking
  + Package/Files  

2. Alpha   
  + multi-package dependency analysis (eray)   
    + design a package operation planner
    + install/remove operations (eray)
  + command line interface:
    + inary remove
    + svn-like CLI
  + configuration file
    + define the format of the configuration file
    + extend Config module (config.py) accordingly
    + define configuration keys (baris - meren) 
  + query
    + list of installed packages (eray)
  + refactor actionsAPI (caglar) 
  + fix xml indentation (meren)
  + define file types (doc, executable, conf, etc...) (baris - meren)
  + write specfile (eray)
  + file locking for database access [not tested!] (eray)
  + implement file uri
    + extend the modules dealing with files accordingly
  + ui module improvements
  + methods for interaction (yes, no questions, etc.)  
  + implement source database (eray) 
  + easy package preparation   
    ? convert ebuild to inary
  + Configuring system interface after installing
    + what do we need to specify in a package
    + package install: register script and configure system with it
    + package remove: unregister script and reconfigure systen with it  (Zaryoh)
  + internet installation
    + support URI's whereever a filename is supported
    + http server
    + https server
    - ftp server
    + inary updatedb over internet

3. Beta
  + build cmd: install build deps
  + improve url support, it's a little dumb at the moment
    + devise a File class that works with URLs
    + add URL support to autoxml
  + info cmd: reverse dependencies of a package
  + a helper script for finding dependencies (eray)
  + autoxml: automated xml processing (eray)
    + design
    + basic types
    + list type
    + class type
    ? localtext/text types (localtext.... Ummm?.... )
      + write meaningful localtext datas (Zaryob)
      - return meaningful localtext summaries and descriptions (Hak getire)
    + revised interface
    / Error handling
      + improved error handling, check routines, hooks, format/print routines 
      / write a meaningful traceback output 
    + xmlfile support (read/write)
    + string member, in addition to tag/attribute members
    + replace specfile with new specfile using autoxml
    + autoxmlize: metadata, index, dependency and related code paths
    + inheritance support
    + revise writing, error reporting, tests
  + components (eray)
    + requirementsu
    + xml format, add to PSPEC
  + index component.xml's and make use of them in build
  + a database of components: 
      + query components by name
      + query list of packages in a component
      + index: update component database(s)
      + bug fixing
    + install/remove/upgrade components
    + safety switch: preserve system.base, install system.devel for build, etc. 
    + info <component>
    + started documentation
  + component dependencies
  + multiple package repository (eray)
    + decide how to implement
    + support repo order
  + refactor xml support and implement multiple backends
    + ciksemel rewrite and adding python3 support (aquila)
  / partial caching and automatic resume for file download (meren)
    + use a '.part' extension
    - resume file downloading (Darara.... fetcher will rewrite with httplib) (Zaryob)
  + search-file command (eray)
  + exception handling (eray)
    + uniform exception hierarchy 
    + proper handling
  + API: we even have application users (eray)
    + a facade module inary.api  (eray)
    + clean unuseful inary.api functions 
    + a library init command (eray)
    + high-level package ops, index (eray)
    + info/util commands (eray)
    + build commands (baris)
  + documentation
    + actionsAPI documentation, unittests (caglar - meren)
    + versioning information document (eray - baris)

  + UI
    - INARYMAT
      / Automatic dependency finder
        / read pkgconfig files and find dependencies (Zaryob)
        + find cycle dependencies (Zaryob)
      - Automatic build upgrader
    - pykde & pygtk GUI (cartman)
    + improve interface (eray)
      + refactor UI, reintroduce base class
      + add an ack interface, start cleaning up a bit
    + cli (eray)
      + ask alternatives to choose from
    + eliminate \n's from infos, what's the point?
    + metaclass coolness for CLI command framework (eray)
    + i18n support
      + translations and correct language for summary, description (packagers)
      + make pisi messages translatable (eray)
      + .pot support for dist script (gurer)
      / translate messages mesajların çevirisinin yapılması (inary tr.po) (eray)
      + proper unicode handling in code - tons of fixes (eray - baris)
    / configure-pending (eray) (should return which packages configured)
      - report scom scripts problems to developers
      + configure pendings (Zaryob)
    + proper commar connection (baris - gurer)
    + ignore-deps (eray)
    + more robust upgrade (eray)
    + query (eray)
      + find package by name, display summary/description
      + info --files option (like rpm -ql, but better of course)
    + implement missing unit tests
      + sourcedb
      + package (baris)
      + configuration file (baris)
    + upgrade (eray)
      + upgrade operation
      + test upgrade op
      + system-wide upgrade (upgrade-all) komutu
    + incremental build (eray)
      + generate binary release number by comparing MD5s (eray)
      + keep track of successfully completed configure, make, install steps 
      (necessary for large-scale builds?) (meren)
    + database locking bugs (eray)  

    + SHOULD WORKING UNDER FIXME PARTS

4. Release  
  * high priority 
    + transaction stuff for database (eray)
    + database version file 
  * low priority 
    + search command: (eray)
    + implement an inverted index
    + search in summary and description  

5. Post Release 
  * high priority  
    - refactoring
    sort of match the refactoring of pisi-2.x series and improve it 

    - accelerate search  
    / package signing    
      / an embebed package signer.(aquila)
      + a flag to sign package after building   
      / code to check if the package has a valid signature  
    - cli improvements    
      - non interactive mode (similar to --auto in urpmi)  
    / high-level build commands
      + an emerge command, just for fun
        + make use of binary repo to satisfy dependencies in emerge
      / build command enhancements:
        + aware of repo sources
        ? full dependency analysis like install/upgrade etc.
        ? build-all (or build-distro) command, or as a separate tool
    + make a package and sourcedb for each repo
      + packagedb
      + sourceb  
    ? improve url support: consider adding "other" protocols
      - removable media: media://   
      - ftp support
  * medium priority   
    - UI impl: non-interactive use that selects defaults and logs output 
    - UI impl: a general purpose Qt or GTK UI  
    / multi-architecture support
      + design decisions 
      + extend XML specs to support that
      - cross-platform building support
      - incremental build/fetch for repository index (pisi-index.xml)
    / xdelta support (caglar)
      - diffsets
    / a useful distupdate command
      + distupdate planner
      - distupdate maker
    - a command (check-repo) to check if repos are consistent wrt dep relations
    - component improvements (optional)
      - maintain a list of components each component has
      - maintain a list of packages 
    - more support for categories:
      - put categories into a database
      - fast search for categories   
  * low priority  
    / overhaul installdb (try to merge its use with packagedb) (eray)
    / verify metodlari
      + SpecFile
      + MetaData
      + Files
      / Index (somebody should write one :} ) 
    - autoxml:
      - revise error checking, printing and tests
      - uri type
      - date type
      - enum type
      - make autoxml dependent on only xmlext and xmlfile interfaces
    - search command: (eray)
      - search components
      - english stemming
      - turkish stemming
      - phonetic/syntactic fault tolerance (whichever works!)
        - in particular evaluate soundex and metaphone
        - research if there are language independent phonetic encodings
        - implement as an option (or make it possible to turn it off if it works well :))
    - fault tolerant search in package names (somehow)



