# HG changeset patch # User brett # Date 1195858507 18000 # Node ID ee6a869f8da1dc1f881562b969e56677910a86e1 # Parent 027fcd7ae00202c0731a1f080143d4c1001b5f4f [svn] Be a little nicer about explaining that we can't extract to the current directory. diff -r 027fcd7ae002 -r ee6a869f8da1 TODO --- a/TODO Fri Nov 23 16:25:22 2007 -0500 +++ b/TODO Fri Nov 23 17:55:07 2007 -0500 @@ -1,11 +1,7 @@ -* Make sure you only try each extractor once? - Things which I have a use case/anti-use case for: * Support pisi packages (http://paketler.pardus.org.tr/pardus-2007/) * Steal ideas from . -* 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. +* More consistently raise and handle exceptions. Things that are generally good: * Better tests. diff -r 027fcd7ae002 -r ee6a869f8da1 scripts/dtrx --- a/scripts/dtrx Fri Nov 23 16:25:22 2007 -0500 +++ b/scripts/dtrx Fri Nov 23 17:55:07 2007 -0500 @@ -211,7 +211,10 @@ return '.'.join(pieces) def extract(self): - self.target = tempfile.mkdtemp(prefix='.dtrx-', dir='.') + try: + self.target = tempfile.mkdtemp(prefix='.dtrx-', dir='.') + except (OSError, IOError), error: + raise ExtractorError("cannot extract here: %s" % (error.strerror,)) old_path = os.path.realpath(os.curdir) os.chdir(self.target) try: @@ -251,7 +254,10 @@ def extract(self): self.content_type = ONE_ENTRY_KNOWN self.content_name = self.basename() - output_fd, self.target = tempfile.mkstemp(prefix='.dtrx-', dir='.') + try: + output_fd, self.target = tempfile.mkstemp(prefix='.dtrx-', dir='.') + except (OSError, IOError), error: + raise ExtractorError("cannot extract here: %s" % (error.strerror,)) try: self.run_pipes(output_fd) except ExtractorError: diff -r 027fcd7ae002 -r ee6a869f8da1 tests/tests.yml --- a/tests/tests.yml Fri Nov 23 16:25:22 2007 -0500 +++ b/tests/tests.yml Fri Nov 23 17:55:07 2007 -0500 @@ -447,7 +447,6 @@ prerun: | touch unreadable-file.tar.gz chmod 000 unreadable-file.tar.gz - cleanup: rm -f unreadable-file.tar.gz error: true grep: "[Pp]ermission denied" @@ -456,7 +455,6 @@ prerun: | touch unreadable-file.zip chmod 000 unreadable-file.zip - cleanup: rm -f unreadable-file.zip error: true grep: "[Pp]ermission denied" @@ -467,3 +465,10 @@ cleanup: rm -f bogus-file.tar.gz error: true grep: "returned status code [^0]" + +- name: try to extract in unwritable directory + directory: unwritable-dir + filenames: ../test-1.23.tar.gz + prerun: chmod 500 . + error: true + grep: "cannot extract here: [Pp]ermission denied"