# coding: utf-8 module RPM class File # @return [String] file path attr_accessor :path # @return [String] md5sum as string attr_accessor :md5sum # @return [String] Path to the destination if the file is a symbolic link # @note # This path is sometimes relative. To convert an absolute path from relative path: # File.expand_path (file.link_to, File.dirname (file.path)) attr_accessor :link_to # @return [Number] File size attr_accessor :size # @return [Time] File modification time. attr_accessor :mtime # @return [String] File owner. Nil may be returned. attr_accessor :owner # @return [String] Group that owns the file. Nil may be returned. attr_accessor :group # @return [Number] Device type of the file attr_accessor :mode attr_accessor :attr attr_accessor :state attr_accessor :rdev # @return [Boolean] True if the file is a symbolic link def symlink? !@link_to.nil? end # @return [Boolean] True if the file is marked as a configuration file def config? !(@attr & RPM::C::FileAttrs[:config]).zero? end # @return [Boolean] True if the file is marked as documentation def doc? !(@attr & RPM::C::FileAttrs[:doc]).zero? end # @return [Boolean] True if the file is marked as do not use # @deprecated RPMFILE_DONOTUSE was removed in recent versions of RPM. def donotuse? msg = 'RPMFILE_DONOTUSE was removed in recent versions of RPM.' warn "#{Kernel.caller.first} #{msg}" raise NotImplementedError end # @return [Boolean] True if the file is marked that can be missing on disk # # This modifier is used for files or links that are created during the %post scripts # but will need to be removed if the package is removed def is_missingok? !(@attr & RPM::C::FileAttrs[:missingok]).zero? end # @return [Boolean] True if the file is marked as configuration not to be replaced # # This flag is used to protect local modifications. # If used, the file will not overwrite an existing file that has been modified. # If the file has not been modified on disk, the rpm command will overwrite the file. But, # if the file has been modified on disk, the rpm command will copy the new file with an extra # file-name extension of .rpmnew. def is_noreplace? !(@attr & RPM::C::FileAttrs[:noreplace]).zero? end # @return [Boolean] True if the file is marked as a spec file def is_specfile? !(@attr & RPM::C::FileAttrs[:specfile]).zero? end # @return [Boolean] True if the file is marked as ghost # # This flag indicates the file should not be included in the package. # It can be used to name the needed attributes for a file that the program, when installed, # will create. # For example, you may want to ensure that a program’s log file has certain attributes. def ghost? !(@attr & RPM::C::FileAttrs[:ghost]).zero? end # @return [Boolean] True if the file is a license def license? !(@attr & RPM::C::FileAttrs[:license]).zero? end # @return [Boolean] True if the file is a README def readme? !(@attr & RPM::C::FileAttrs[:readme]).zero? end # @raise NotImplementedError # @deprecated RPMFILE_EXCLUDE was removed in recent versions of RPM. def exclude? msg = 'RPMFILE_EXCLUDE was removed in recent versions of RPM.' warn "#{Kernel.caller.first} #{msg}" raise NotImplementedError end # @return [Boolean] True if the file is replaced during installation def replaced? !(@attr & RPM::C::FileState[:replaced]).zero? end # @return [Boolean] True if the file is not installed def notinstalled? !(@attr & RPM::C::FileState[:notinstalled]).zero? end # @return [Boolean] True if the file is shared over the network def netshared? !(@attr & RPM::C::FileState[:netshared]).zero? end def initialize(path, md5sum, link_to, size, mtime, owner, group, rdev, mode, attr, state) @path = path @md5sum = md5sum # If link_to is "" save it as nil @link_to = (link_to && link_to.empty? ? nil : link_to) @size = size @mtime = mtime @owner = owner @group = group @rdev = rdev @mode = mode @attr = attr @state = state end end end