# File lib/archive/tar/minitar/command.rb, line 475 475: def altname 476: "ex" 477: end
# File lib/archive/tar/minitar/command.rb, line 479 479: def call(args, opts = {}, ioe = {}) 480: argv = [] 481: output = nil 482: dest = "." 483: files = [] 484: 485: while (arg = args.shift) 486: case arg 487: when '--uncompress', '-z' 488: opts[:uncompress] = true 489: when '--pipe' 490: opts[:output] = ioe[:error] 491: output = ioe[:output] 492: when '--output', '-o' 493: dest = args.shift 494: else 495: argv << arg 496: end 497: end 498: 499: if argv.size < 1 500: ioe[:output] << "Not enough arguments.\n\n" 501: CommandPattern["help"][["extract"]] 502: return 255 503: end 504: 505: input = argv.shift 506: if '-' == input 507: opts[:name] = "STDIN" 508: input = ioe[:input] 509: else 510: opts[:name] = input 511: input = File.open(input, "rb") 512: end 513: 514: if opts[:name] =~ /\.tar\.gz$|\.tgz$/ or opts[:uncompress] 515: input = Zlib::GzipReader.new(input) 516: end 517: 518: files << argv.to_a 519: files.flatten! 520: 521: if opts[:verbose] 522: watcher = lambda do |action, name, stats| 523: opts[:output] << "#{name}\n" if action == :dir or action == :file_done 524: end 525: finisher = lambda { opts[:output] << "\n" } 526: elsif opts[:progress] 527: progress = ProgressBar.new(opts[:name], 1) 528: watcher = lambda do |action, name, stats| 529: case action 530: when :file_start, :dir 531: progress.title = File.basename(name) 532: if action == :dir 533: progress.total += 1 534: progress.inc 535: else 536: progress.total += stats[:entry].size 537: end 538: when :file_progress 539: progress.inc(stats[:currinc]) 540: end 541: end 542: finisher = lambda do 543: progress.title = opts[:name] 544: progress.finish 545: end 546: else 547: watcher = nil 548: finisher = lambda { } 549: end 550: 551: if output.nil? 552: Archive::Tar::Minitar.unpack(input, dest, files, &watcher) 553: finisher.call 554: else 555: Archive::Tar::Minitar::Input.open(input) do |inp| 556: inp.each do |entry| 557: stats = { 558: :mode => entry.mode, 559: :mtime => entry.mtime, 560: :size => entry.size, 561: :gid => entry.gid, 562: :uid => entry.uid, 563: :current => 0, 564: :currinc => 0, 565: :entry => entry 566: } 567: 568: if files.empty? or files.include?(entry.full_name) 569: if entry.directory? 570: puts "Directory: #{entry.full_name}" 571: watcher[:dir, dest, stats] unless watcher.nil? 572: else 573: puts "File: #{entry.full_name}" 574: watcher[:file_start, destfile, stats] unless watcher.nil? 575: loop do 576: data = entry.read(4096) 577: break unless data 578: stats[:currinc] = output.write(data) 579: stats[:current] += stats[:currinc] 580: 581: watcher[:file_progress, name, stats] unless watcher.nil? 582: end 583: watcher[:file_done, name, stats] unless watcher.nil? 584: end 585: end 586: end 587: end 588: end 589: 590: 0 591: end
# File lib/archive/tar/minitar/command.rb, line 593 593: def help 594: help = minitar extract [OPTIONS] <tarfile|-> [<file>+]Extracts files from an existing tarfile. If the tarfile is named .tar.gzor .tgz, then it will be uncompressed automatically. If the tarfile is"-", then it will be read from standard input (stdin) so that minitarmay be piped.The files or directories that will be extracted from the tarfile arespecified after the name of the tarfile itself. Directories will beprocessed recursively. Files must be specified in full. A file"foo/bar/baz.txt" cannot simply be specified by specifying "baz.txt".Any file not found will simply be skipped and an error will be reported.extract Options: --uncompress, -z Uncompresses the tarfile with gzip. --pipe Emits the extracted files to STDOUT for piping. --output, -o Extracts the files to the specified directory. 595: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.