Archive::Tar::Minitar::Command::CommandExtract

Public Instance Methods

altname() click to toggle source
     # File lib/archive/tar/minitar/command.rb, line 475
475:     def altname
476:       "ex"
477:     end
call(args, opts = {}, ioe = {}) click to toggle source
     # 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
help() click to toggle source
     # 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
name() click to toggle source
     # File lib/archive/tar/minitar/command.rb, line 471
471:     def name
472:       "extract"
473:     end

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.