Inary TODO List
==============
A list of tasks to accomplish, organized into priority sections. This wasn't deleted because
i want to continue pisi project but now inary evolved a new package manager. its time to
change RoadMap.

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
        - Use gem agent
      + Perl Language Tools
      + CMake Tools
    + unit test
  + source building
    + Detailed build log file
  + 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
  + Detailed inary logs into /var/log

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
    \ convert deb packages to inary
    \ convert rpm packages 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
      + return meaningful localtext summaries and descriptions
    + 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
    - file conflict checker
  + refactor xml support and implement multiple backends
    + ciksemel based modules rewrite with xml.dom.minidom (Zaryob)
  + partial caching and automatic resume for file download (meren)
    + use a '.part' extension
    + resume file downloading (pycurl) (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
        / creating pspec files from shell script type
    - pykde & pygtk GUI (cartman)
      + pykde interface (used package-manager)
    + 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 inary messages translatable (eray)
      + .pot support for dist script (gurer)
      / translate messages mesajların çevirisinin yapılması (inary tr.po)
        - az
        + de
        + en
        + es
        + fr
        - hr
        + hu
        + it
        - nl
        - pl
        - pt_BR
        + ru
        - sv
        + tr
        - uk
      + 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 inary-2.x series and improve it

    + accelerate search
    / package signing
      / an embebed package signer.(Zaryob)
      + 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 (inary-index.xml)
    / xdelta support (caglar)
      - diffsets
    - 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)
