changelog
- Thu, 05 Jun 2008 10:00:38 -0400
- by Brett Smith <brett@brettcsmith.org> [Thu, 05 Jun 2008 10:00:38 -0400] rev 61
- update TODO
- Wed, 30 Apr 2008 21:33:30 -0400
- by Brett Smith <brett@brettcsmith.org> [Wed, 30 Apr 2008 21:33:30 -0400] rev 60
- Add missing test tarballs
- Wed, 06 Feb 2008 19:38:26 -0500
- by brett [Wed, 06 Feb 2008 19:38:26 -0500] rev 59
- [svn] Find self-extracting archives by their file magic only, not extension/mimetype.
The problem with using extensions/mimetypes for this is that it net way too
many false positives. Files ending in .com, .bat, etc. would cause the
user to be prompted for recursive extraction. This makes that problem go
away, and it means that error messages when the user tries to extract a
non-archive .exe will probably be more useful, too.
- Sun, 20 Jan 2008 15:32:02 -0500
- by brett [Sun, 20 Jan 2008 15:32:02 -0500] rev 58
- [svn] Steel FilenameChecker against race conditions.
Since FilenameChecker was just using os.path.exists() to see whether or not
a filename was free, it had a time of check vs. time of use vulnerability.
Matthew was prodding me about the inconsistency with DirectoryChecker, so
that inspired me to fix this. This also entailed some refactoring. Thanks
Matthew.
- Sun, 20 Jan 2008 13:42:48 -0500
- by brett [Sun, 20 Jan 2008 13:42:48 -0500] rev 57
- [svn] Add note about needing syck.
- Sun, 20 Jan 2008 13:39:04 -0500
- by brett [Sun, 20 Jan 2008 13:39:04 -0500] rev 56
- [svn] Add NEWS, and other documentation updates.
- Sun, 20 Jan 2008 12:15:55 -0500
- by brett [Sun, 20 Jan 2008 12:15:55 -0500] rev 55
- [svn] Stupid Python 2.3 doesn't support [].sort(reverse=True).
- Sun, 20 Jan 2008 12:05:14 -0500
- by brett [Sun, 20 Jan 2008 12:05:14 -0500] rev 54
- [svn] Update copyright dates in the license headers.
- Sun, 20 Jan 2008 12:00:35 -0500
- by brett [Sun, 20 Jan 2008 12:00:35 -0500] rev 53
- [svn] Add interactive option to list recursive archives when found.
I'm not really wild about how this is built but since it's a one-off I'm
not sure what a better infrastructure would look like yet.
Also add a test for a -fv combo while I was in there.
- Sun, 20 Jan 2008 11:10:48 -0500
- by brett [Sun, 20 Jan 2008 11:10:48 -0500] rev 52
- [svn] Make just one -v print a list of filenames, a la tar.
- Sun, 20 Jan 2008 09:47:33 -0500
- by brett [Sun, 20 Jan 2008 09:47:33 -0500] rev 51
- [svn] Don't try to rmtree when overwriting just a file.
- Sun, 20 Jan 2008 09:22:13 -0500
- by brett [Sun, 20 Jan 2008 09:22:13 -0500] rev 50
- [svn] Run the cleanup script after the test even if there's no more comparing to do.
- Sun, 20 Jan 2008 04:02:19 -0500
- by brett [Sun, 20 Jan 2008 04:02:19 -0500] rev 49
- [svn] Add a traceback when we catch a signal.
- Sun, 20 Jan 2008 03:53:02 -0500
- by brett [Sun, 20 Jan 2008 03:53:02 -0500] rev 48
- [svn] Handle SIGINT and SIGKILL.
This prevents us from spewing a traceback. We also make one last-ditch
effort to clean up any temporary stuff so it doesn't hog the user's disk.
Also made some aesthetic changes: replace the last instance of run-command
with shutil.rmtree, so the whole function's gone now. Also call it set
instead of Set.
- Sun, 20 Jan 2008 01:59:42 -0500
- by brett [Sun, 20 Jan 2008 01:59:42 -0500] rev 47
- [svn] Fix various bugs in the recursive extraction.
First, 5.0 introduced a regression where it wouldn't find archives hidden
in subdirectories. So fix that.
Then recursive extraction would get confused if the archive was a ONE_ENTRY
and we decided to wrap it or just extract it here. Fix that too: the
extractor keeps track of where it thinks it's extracting to, and then the
handler will change that if necessary.
There are unit tests for all this.
I twiddled some other small thing while I was at it but now I forget what.
- Thu, 17 Jan 2008 22:44:46 -0500
- by brett [Thu, 17 Jan 2008 22:44:46 -0500] rev 46
- [svn] Make dtrx -v print *something*.
paulv wants it to act like tar -v. I'm not yet convinced this is a good
idea because it makes less sense with dtrx moving things around on you. It
could do an ls for you, of course, but... why? But it definitely is weird
to have it be silent.
- Thu, 17 Jan 2008 22:36:07 -0500
- by brett [Thu, 17 Jan 2008 22:36:07 -0500] rev 45
- [svn] At work I was getting an unhelpful "No such file or directory" error when I
tried to extract an .exe. It turns out this was because I didn't have
cabextract installed. This inspired a few changes:
* BaseExtractor now raises an ExtractorUnusable error when this happens.
* Various points in the code deal with this properly.
* The loop for trying extractors will now report all the errors it got, if
extraction is unsuccessful, to better help you understand why.
Also snuck in a bug fix where things weren't being cleaned properly with a
half-extracted archive.
Also got my version number situation in order, in anticipation for the next
release, which may be a while yet but at least I won't have to worry about
it then.
- Tue, 27 Nov 2007 22:43:40 -0500
- by brett [Tue, 27 Nov 2007 22:43:40 -0500] rev 44
- [svn] Missed a couple of spots.
- Tue, 27 Nov 2007 22:04:04 -0500
- by brett [Tue, 27 Nov 2007 22:04:04 -0500] rev 43
- [svn] Sadly Python 2.3 does not have an rsplit method on strings.
- Mon, 26 Nov 2007 22:39:29 -0500
- by brett [Mon, 26 Nov 2007 22:39:29 -0500] rev 42
- [svn] Update documentation.
- Mon, 26 Nov 2007 22:31:25 -0500
- by brett [Mon, 26 Nov 2007 22:31:25 -0500] rev 41
- [svn] Minor clean-ups. The most important of these is that we now have a better
strategy for dealing with the pathological case of having many extraction
destinations taken: after trying various names with number suffixes, we'll
finally resort to mkstemp/mkdtemp to get what we need. This still isn't
guaranteed to work but it's much more reliable. Also print out a warning
for the user when we extract to some weird directory.
- Fri, 23 Nov 2007 17:55:07 -0500
- by brett [Fri, 23 Nov 2007 17:55:07 -0500] rev 40
- [svn] Be a little nicer about explaining that we can't extract to the current
directory.
- Fri, 23 Nov 2007 16:25:22 -0500
- by brett [Fri, 23 Nov 2007 16:25:22 -0500] rev 39
- [svn] Improve the error reporting to be more user-friendly, at least in many of
the really basic cases.
- Fri, 23 Nov 2007 15:22:34 -0500
- by brett [Fri, 23 Nov 2007 15:22:34 -0500] rev 38
- [svn] Some more tests to make sure we always do the right thing in the
archive-with-one-file case. Also be a little more thorough in our cleanup.
- Fri, 23 Nov 2007 11:59:27 -0500
- by brett [Fri, 23 Nov 2007 11:59:27 -0500] rev 37
- [svn] Documentation update.
- Fri, 23 Nov 2007 11:33:30 -0500
- by brett [Fri, 23 Nov 2007 11:33:30 -0500] rev 36
- [svn] Small optimization to be nice to the system: don't try a given extractor
more than once.
- Fri, 23 Nov 2007 11:24:58 -0500
- by brett [Fri, 23 Nov 2007 11:24:58 -0500] rev 35
- [svn] Add support for extracting CAB archives. Because the CAB archive I was
testing on had a single file in it, I fonud a bunch of bugs related to
extracting one file (as opposed to one directory) here, and squashed those
in the process.
- Thu, 22 Nov 2007 22:37:40 -0500
- by brett [Thu, 22 Nov 2007 22:37:40 -0500] rev 34
- [svn] Add support for LZMA compression. Holy crap that was easy.
- Thu, 22 Nov 2007 22:24:04 -0500
- by brett [Thu, 22 Nov 2007 22:24:04 -0500] rev 33
- [svn] Fix some bugs and make things a little more user-friendly now that we can
try multiple extractors per file. Add some logging as part of this. I'm
probably still not done -- heck, dtrx has never really been user-friendly
enough -- but at least now it's not ridiculous.
- Thu, 22 Nov 2007 22:21:34 -0500
- by brett [Thu, 22 Nov 2007 22:21:34 -0500] rev 32
- [svn] Oops, finish adding 7z support.
- Thu, 22 Nov 2007 22:20:39 -0500
- by brett [Thu, 22 Nov 2007 22:20:39 -0500] rev 31
- [svn] Refactor actions (extract the archive, vs. list the contents) into their
own classes, instead of having all that in the Application class. Also did
some similar fidgeting with the ExtractorBuilder. I like this better.
It's still not the cleanest API but things feel more manageable now.
Add 7z support.
- Fri, 19 Oct 2007 23:06:53 -0400
- by brett [Fri, 19 Oct 2007 23:06:53 -0400] rev 30
- [svn] If we can't figure out what the file is by mimetype, try using the file
command to figure out what it is instead.
This completely changes the program structure because now we might try to
use several extractors on a particular file before giving up. I haven't
really done the refactoring that would be appropriate for a change this
fundamental. I'd like to do that before the next release.
- Fri, 19 Oct 2007 23:03:17 -0400
- by brett [Fri, 19 Oct 2007 23:03:17 -0400] rev 29
- [svn] Add support for Ruby Gems, and extracting metadata from .deb/.gem files.
- Fri, 19 Oct 2007 22:46:20 -0400
- by brett [Fri, 19 Oct 2007 22:46:20 -0400] rev 28
- [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.
- Sun, 29 Apr 2007 15:30:01 -0400
- by brett [Sun, 29 Apr 2007 15:30:01 -0400] rev 27
- [svn] Really small cleanliness bit.
- Sun, 29 Apr 2007 15:25:04 -0400
- by brett [Sun, 29 Apr 2007 15:25:04 -0400] rev 26
- [svn] Little DRY cleanups.
- Sun, 29 Apr 2007 15:12:02 -0400
- by brett [Sun, 29 Apr 2007 15:12:02 -0400] rev 25
- [svn] Move policy-handling code into a dedicated set of classes. This makes
question construction at least moderately cleaner, and more importantly, it
gets it out of the main application class, where it was bugging me.
- Sun, 29 Apr 2007 13:29:50 -0400
- by brett [Sun, 29 Apr 2007 13:29:50 -0400] rev 24
- [svn] Documentation update.
- Sat, 28 Apr 2007 23:52:36 -0400
- by brett [Sat, 28 Apr 2007 23:52:36 -0400] rev 23
- [svn] If an archive contains other archives, and the user didn't specify that
they wanted recursion, prompt them to find out what they want to do.
This required some changes in the way prompting for one-item archives works
too, because if an archive inside another archive is itself a one-item
archive, things get really weird. I'm still not really sure what the right
policy is for that.
I'm not wild about this code. It feels like programming a bunch of special
cases. I need to figure out a better way to abstract it. I'm thinking
some kind of Policy class....
- Sat, 21 Apr 2007 13:09:58 -0400
- by brett [Sat, 21 Apr 2007 13:09:58 -0400] rev 22
- [svn] Improve the way we check archive contents. If all the entries look like
they're in ., they really shouldn't count as being in the same directory;
look at the next piece of the path. If the archive only has one
non-directory item, report that more clearly. You'll be able to tell by
whether or not there's a trailing slash in the prompt.
Improve the tests for doing straight decompression, and seek to the
beginning of the archive before we start writing to the file -- otherwise,
we write 0-byte files.
Lots of new ideas in the TODO. I think I'll do another release once
recursion is interactive.
- Sat, 21 Apr 2007 10:22:32 -0400
- by brett [Sat, 21 Apr 2007 10:22:32 -0400] rev 21
- [svn] Do some tests with a .tar.bz2 as well as a .tar.gz. I thought there were
some bugs with this that I found when using dtrx, but I can't reproduce
them this way, so I guess I'll have to investigate further. In the
meantime, they can't hurt.
- Sat, 10 Feb 2007 20:43:00 -0500
- by brett [Sat, 10 Feb 2007 20:43:00 -0500] rev 20
- [svn] If the archive contains one directory with the "wrong" name, ask the user
what they want to do to extract it.
Also add a switch to prevent being asked this question, for use in scripts
and the like.
- Sat, 10 Feb 2007 16:43:44 -0500
- by brett [Sat, 10 Feb 2007 16:43:44 -0500] rev 19
- [svn] Rename the program to dtrx.
Add a -l/-t option, which just lists the contents of an archive without
extracting anything.
- Tue, 02 Jan 2007 20:30:17 -0500
- by brett [Tue, 02 Jan 2007 20:30:17 -0500] rev 18
- [svn] Add basic documentation, and make this version 3.0.
- Sun, 31 Dec 2006 19:29:46 -0500
- by brett [Sun, 31 Dec 2006 19:29:46 -0500] rev 17
- [svn] Lots of tests for various boundary cases, and slightly better handling for
some of them.
- Sun, 31 Dec 2006 19:27:23 -0500
- by brett [Sun, 31 Dec 2006 19:27:23 -0500] rev 16
- [svn] There's now an entirely new object hierarchy for handlers, because the
number of corner cases, switches, etc. was starting to get out of hand.
This makes it easier to tell what's going on in a given case.
- Sun, 31 Dec 2006 19:25:16 -0500
- by brett [Sun, 31 Dec 2006 19:25:16 -0500] rev 15
- [svn] Add a -f/--flat option, which will extract the archive contents into the
current directory, rather than a dedicated subdirectory.
- Sun, 31 Dec 2006 19:20:26 -0500
- by brett [Sun, 31 Dec 2006 19:20:26 -0500] rev 14
- [svn] Add support for just decompressing files that are compressed. So, if you
have foobar.txt.gz, running x on it will give you foobar.txt.
I also moved the test definitions to a YAML file, which makes them easier
to write and understand. Hopefully.
- Tue, 19 Dec 2006 19:27:14 -0500
- by brett [Tue, 19 Dec 2006 19:27:14 -0500] rev 13
- [svn] Add options to tweak the logging level to taste.
- Tue, 19 Dec 2006 19:13:29 -0500
- by brett [Tue, 19 Dec 2006 19:13:29 -0500] rev 12
- [svn] Introduce a real logging system. Right now all this really gets us is the
return of warnings when BombHandler has to use an unusual extraction
directory, but it can grow from here.
- Tue, 19 Dec 2006 18:01:00 -0500
- by brett [Tue, 19 Dec 2006 18:01:00 -0500] rev 11
- [svn] This is version 2.0 because I said so.
- Sun, 17 Dec 2006 09:20:02 -0500
- by brett [Sun, 17 Dec 2006 09:20:02 -0500] rev 10
- [svn] Add tests for the case where we do recursive extraction of an archive
that's not in the current working directory, and fix the associated bug.
- Sun, 17 Dec 2006 08:30:32 -0500
- by brett [Sun, 17 Dec 2006 08:30:32 -0500] rev 9
- [svn] Fix issues with basename methods. First, string's rsplit method only
arrived in Python 2.4, so don't use it. Second, tweak the RPM basename
method to catch the case where arch == noarch.
- Mon, 13 Nov 2006 23:06:30 -0500
- by brett [Mon, 13 Nov 2006 23:06:30 -0500] rev 8
- [svn] Make ExtractorApplication suck less. Now the strategies for handling
different archive types are out in their own classes, and polymorphism
takes care of everything for us. This is way cleaner.
While I was at it I changed the behavior in the case where an archive
contains one directory that doesn't match the basename. I now treat that
the same as a bomb. This can lead to silly directory structures but
ensures that there's no "data" loss nor unexpected results.
- Sat, 11 Nov 2006 18:42:19 -0500
- by brett [Sat, 11 Nov 2006 18:42:19 -0500] rev 7
- [svn] Add a test for recursive extraction which also makes sure that we fix
permissions after we extract the archive, and DTRT when an archive contains
one file. Add code to handle the latter two cases.
ExtractorApplication is a total mess at this point. I already am having a
hard time following how the pieces fit together. Cleaning it up is my next
task; that'll be easier now that I test most of the functionality again.
- Mon, 06 Nov 2006 22:36:47 -0500
- by brett [Mon, 06 Nov 2006 22:36:47 -0500] rev 6
- [svn] The big thing here is recursive extraction. Find archive files in the
thing we're extracting, and extract those when we're done, if the user
provides the -r option. While I was at it:
* --help/--version switches too.
* Throw a more useful error if we get a weird encoding.
* Some other small fix I'm forgetting.
I should definitely add tests for this. I also really want to step back
and reevaluate the structure of ExtractorApplication. I don't expect it to
be a shining example of good OO anyway, but it's getting moderately hairy
now, with lots of shared state and side effects and stuff.
- Sat, 04 Nov 2006 10:34:06 -0500
- by brett [Sat, 04 Nov 2006 10:34:06 -0500] rev 5
- [svn] Deal with a bunch of low-hanging fruit:
* Correctly cope with mimetype oddities I found on Fedora.
* I'm not doing anything with shar files yet, so take out that hook.
* Better error handling and reporting throughout, including a meaningful
exit code.
* Remove unused cruft from the BaseExtractor.run method.
* When reporting the "basename" for the archive, make sure it doesn't
include any preceding path.
* If the archive contains one directory whose name doesn't match the
archive basename, rename it after extraction.
- Although I just realized this probably does the wrong thing if there's
just one file in the archive.
- Wed, 01 Nov 2006 22:03:46 -0500
- by brett [Wed, 01 Nov 2006 22:03:46 -0500] rev 4
- [svn] Additions.
- Tue, 31 Oct 2006 19:31:44 -0500
- by brett [Tue, 31 Oct 2006 19:31:44 -0500] rev 3
- [svn] Ideas off the top of my head.
- Sun, 29 Oct 2006 20:03:12 -0500
- by brett [Sun, 29 Oct 2006 20:03:12 -0500] rev 2
- [svn] Fix a small bug that would crash the program if an archive was empty.
Make basename calculation more robust.
Go ahead and run .exe files through the ZipExtractor. Need to cope more
gracefully when it doesn't work, but I've lost momentum for tonight.
- Sun, 29 Oct 2006 19:34:46 -0500
- by brett [Sun, 29 Oct 2006 19:34:46 -0500] rev 1
- [svn] Repository reorganization to make tags easy
- Sun, 29 Oct 2006 19:31:27 -0500
- by brett [Sun, 29 Oct 2006 19:31:27 -0500] rev 0
- [svn] Repository reorganization