reason it is implemented by delegating to File (by inheriting from
DelegateClass(File)) rather than by inheriting from it, does not
actually look like a File, and hence does not look like an IO (in
that it does not respond to kind_of? IO calls).
In ruby 1.8.5 this doesn't matter as REXML checks that the source
it has been given responds to the methods it wants (using respond_to?
which is handled properly by DelegateClass) but in 1.8.4 which we
are running on rails2 REXML uses kind_of? to see if the source is
one it can use.
tarred = filetype =~ /tar archive/
if gzipped or bzipped or zipped or tarred then
tarred = filetype =~ /tar archive/
if gzipped or bzipped or zipped or tarred then
- file = Tempfile.new("trace.#{id}");
+ tmpfile = Tempfile.new("trace.#{id}");
if tarred and gzipped then
if tarred and gzipped then
- system("tar -zxOf #{trace_name} > #{file.path}")
+ system("tar -zxOf #{trace_name} > #{tmpfile.path}")
elsif tarred and bzipped then
elsif tarred and bzipped then
- system("tar -jxOf #{trace_name} > #{file.path}")
+ system("tar -jxOf #{trace_name} > #{tmpfile.path}")
- system("tar -xOf #{trace_name} > #{file.path}")
+ system("tar -xOf #{trace_name} > #{tmpfile.path}")
- system("gunzip -c #{trace_name} > #{file.path}")
+ system("gunzip -c #{trace_name} > #{tmpfile.path}")
- system("bunzip2 -c #{trace_name} > #{file.path}")
+ system("bunzip2 -c #{trace_name} > #{tmpfile.path}")
- system("unzip -p #{trace_name} > #{file.path}")
+ system("unzip -p #{trace_name} > #{tmpfile.path}")
+ tmpfile.unlink
+
+ file = tmpfile.file
else
file = File.open(trace_name)
end
else
file = File.open(trace_name)
end
--- /dev/null
+# Hack TempFile to let us get at the underlying File object as ruby
+# does a half assed job of making TempFile act as a File
+class Tempfile
+ def file
+ return @tmpfile
+ end
+end