Class FileUtils::CopyContext_
In: lib/fileutils.rb
Parent: Object

Methods

Included Modules

::FileUtils

Public Class methods

[Source]

     # File lib/fileutils.rb, line 448
448:     def initialize(preserve = false, dereference = false, stat = nil)
449:       @preserve = preserve
450:       @dereference = dereference
451:       @stat = stat
452:     end

Public Instance methods

[Source]

     # File lib/fileutils.rb, line 460
460:     def copy_content(src, dest)
461:       preserve(src, dest) {
462:         _copy_content src, dest
463:       }
464:     end

[Source]

     # File lib/fileutils.rb, line 454
454:     def copy_entry(src, dest)
455:       preserve(src, dest) {
456:         _copy_entry src, dest
457:       }
458:     end

Private Instance methods

[Source]

     # File lib/fileutils.rb, line 500
500:     def _copy_content(src, dest)
501:       st = stat(src)
502:       File.open(src,  'rb') {|r|
503:         File.open(dest, 'wb', st.mode) {|w|
504:           fu_copy_stream0 r, w, (fu_blksize(st) || fu_default_blksize())
505:         }
506:       }
507:     end

[Source]

     # File lib/fileutils.rb, line 468
468:     def _copy_entry(src, dest)
469:       st = stat(src)
470:       case
471:       when st.file?
472:         _copy_content src, dest
473:       when st.directory?
474:         begin
475:           Dir.mkdir File.expand_path(dest)
476:         rescue => err
477:           raise unless File.directory?(dest)
478:         end
479:       when st.symlink?
480:         File.symlink File.readlink(src), dest
481:       when st.chardev?
482:         raise "cannot handle device file" unless File.respond_to?(:mknod)
483:         mknod dest, ?c, 0666, st.rdev
484:       when st.blockdev?
485:         raise "cannot handle device file" unless File.respond_to?(:mknod)
486:         mknod dest, ?b, 0666, st.rdev
487:       when st.socket?
488:         raise "cannot handle socket" unless File.respond_to?(:mknod)
489:         mknod dest, nil, st.mode, 0
490:       when st.pipe?
491:         raise "cannot handle FIFO" unless File.respond_to?(:mkfifo)
492:         mkfifo dest, 0666
493:       when (st.mode & 0xF000) == (_S_IF_DOOR = 0xD000)   # door
494:         raise "cannot handle door: #{src}"
495:       else
496:         raise "unknown file type: #{src}"
497:       end
498:     end

[Source]

     # File lib/fileutils.rb, line 528
528:     def chmod(mode, path)
529:       if @dereference
530:         ::File.chmod mode, path
531:       else
532:         begin
533:           ::File.lchmod mode, path
534:         rescue NotImplementedError
535:           # just ignore this because chmod(symlink) changes attributes of
536:           # symlink target, which is not our intent.
537:         end
538:       end
539:     end

[Source]

     # File lib/fileutils.rb, line 541
541:     def chown(uid, gid, path)
542:       if @dereference
543:         ::File.chown uid, gid, path
544:       else
545:         begin
546:           ::File.lchown uid, gid, path
547:         rescue NotImplementedError
548:           # just ignore this because chown(symlink) changes attributes of
549:           # symlink target, which is not our intent.
550:         end
551:       end
552:     end

[Source]

     # File lib/fileutils.rb, line 509
509:     def preserve(src, dest)
510:       return yield unless @preserve
511:       st = stat(src)
512:       yield
513:       File.utime st.atime, st.mtime, dest
514:       begin
515:         chown st.uid, st.gid, dest
516:       rescue Errno::EPERM
517:         # clear setuid/setgid
518:         chmod st.mode & 01777, dest
519:       else
520:         chmod st.mode, dest
521:       end
522:     end

[Source]

     # File lib/fileutils.rb, line 524
524:     def stat(path)
525:       @stat ||= ::File.stat(path)
526:     end

[Validate]