You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

135 lines
4.3 KiB

1 month ago
# 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 programs 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