TODO

Fri, 19 Oct 2007 22:46:20 -0400

author
brett
date
Fri, 19 Oct 2007 22:46:20 -0400
branch
trunk
changeset 28
4d88f2231d33
parent 25
ef62f2f55eb8
child 31
c3a2760d1c3a
permissions
-rw-r--r--

[svn] Change all the license notices from GPLv2 to GPLv3.

Instead of checking the archive contents, figuring out what to do, and
doing it, instead we now always extract the archive to a private directory,
and then shuffle around the contents appropriately. I expected this to be
a bigger win than my benchmarks have borne out, but I'm sticking with this
strategy because it provides a cleaner separation of responsibilities
between the extractors and the archive type handlers, and also I have to
believe it's a much better way to handle bigger archives -- since we're now
reading it once and not twice.

We should always extract to a new, temporary directory (except maybe in the
straight decompression case), and then move that directory based on what we
actually want.  This has several advantages:

* Much easier to check whether or not the archive is a bomb (O(1) operation)
* Can find other archives more reliably
* Can set up a direct pipe from a decompressed to the unarchiver, since we're
  not interested in reading it multiple times anymore.
* All this should mean x is faster, too.

Things which I have a use case/anti-use case for:
* CAB extraction.
* Use file to detect the archive type.
* Support lzma compression (http://tukaani.org/lzma/download)
* Support pisi packages (http://paketler.pardus.org.tr/pardus-2007/)
* Steal ideas from <http://martin.ankerl.com/files/e>.
* Figure out what the deal is with strerror. (done?)
* Better error messages (file doesn't exist, isn't readable, etc.)
* Consistently raise and handle exceptions.

Things that are generally good:
* Better tests.
* Better error messages.

Things I think might be good but can't prove:
* Take URLs as arguments.
* Consider having options about whether or not to make sane directories,
  have tarbomb protection, etc.
* Use zipfile instead of the zip commands.
* Processing from stdin.
* Extracting control.tar.gz from deb files.
* shar support.

mercurial