class Archive::Tar::Minitar::Command::CommandCreate

Public Instance Methods

altname() click to toggle source
    # File lib/archive/tar/minitar/command.rb
363 def altname
364   "cr"
365 end
call(args, opts = {}, ioe = {}) click to toggle source
    # File lib/archive/tar/minitar/command.rb
367 def call(args, opts = {}, ioe = {})
368   argv    = []
369 
370   while (arg = args.shift)
371     case arg
372     when '--compress', '-z'
373       opts[:compress] = true
374     else
375       argv << arg
376     end
377   end
378 
379   if argv.size < 2
380     ioe[:output] << "Not enough arguments.\n\n"
381     CommandPattern["help"][["create"]]
382     return 255
383   end
384 
385   output = argv.shift
386   if '-' == output
387     opts[:name] = "STDOUT"
388     output = ioe[:output]
389     opts[:output] = ioe[:error]
390   else
391     opts[:name] = output
392     output = File.open(output, "wb")
393     opts[:output] = ioe[:output]
394   end
395 
396   if opts[:name] =~ /\.tar\.gz$|\.tgz$/ or opts[:compress]
397     output = Zlib::GzipWriter.new(output)
398   end
399 
400   files = []
401   if argv.include?("--")
402       # Read stdin for the list of files.
403     files = ""
404     files << ioe[:input].read while not ioe[:input].eof?
405     files = files.split(/\r\n|\n|\r/)
406     args.delete("--")
407   end
408 
409   files << argv.to_a
410   files.flatten!
411 
412   if opts[:verbose]
413     watcher = lambda do |action, name, stats|
414       opts[:output] << "#{name}\n" if action == :dir or action == :file_done
415     end
416     finisher = lambda { opts[:output] << "\n" }
417   elsif opts[:progress]
418     progress = ProgressBar.new(opts[:name], 1)
419     watcher = lambda do |action, name, stats|
420       case action
421       when :file_start, :dir
422         progress.title = File.basename(name)
423         if action == :dir
424           progress.total += 1
425           progress.inc
426         else
427           progress.total += stats[:size]
428         end
429       when :file_progress
430         progress.inc(stats[:currinc])
431       end
432     end
433     finisher = lambda do
434       progress.title = opts[:name]
435       progress.finish
436     end
437   else
438     watcher = nil
439     finisher = lambda { }
440   end
441 
442   Archive::Tar::Minitar.pack(files, output, &watcher)
443   finisher.call
444   0
445 ensure
446   output.close if output and not output.closed?
447 end
help() click to toggle source
    # File lib/archive/tar/minitar/command.rb
449     def help
450       help = <<-EOH
451     minitar create [OPTIONS] <tarfile|-> <file|directory|-->+
452 
453 Creates a new tarfile. If the tarfile is named .tar.gz or .tgz, then it
454 will be compressed automatically. If the tarfile is "-", then it will be
455 output to standard output (stdout) so that minitar may be piped.
456 
457 The files or directories that will be packed into the tarfile are
458 specified after the name of the tarfile itself. Directories will be
459 processed recursively. If the token "--" is found in the list of files
460 to be packed, additional filenames will be read from standard input
461 (stdin). If any file is not found, the packaging will be halted.
462 
463 create Options:
464     --compress, -z  Compresses the tarfile with gzip.
465 
466       EOH
467     end
name() click to toggle source
    # File lib/archive/tar/minitar/command.rb
359 def name
360   "create"
361 end