puts " --package=<project> Target package (numeric id)"
puts " --release=<project> Target release (numeric id)"
puts " -v --visibility=<public|private|hidden>"
+ puts " --force-digest Calc local file digest forcely"
end
def self.description
[ '--package', GetoptLong::REQUIRED_ARGUMENT ],
[ '--release', GetoptLong::REQUIRED_ARGUMENT ],
[ '--visibility', '-v', GetoptLong::REQUIRED_ARGUMENT ],
+ [ '--force-digest', GetoptLong::NO_ARGUMENT],
)
opts.each do |opt, arg|
case opt
when '--release'
arg.empty? or
@target_release = arg
+ when '--force-digest'
+ @force_digest = true
when '--visibility'
unless %w(public private hidden).member?(arg)
logger.fatal "Invalid visibility status: #{arg}"
end
file = Pathname('.') + filename
logger.debug "Calculating digest for #{file}..."
- digests = {
- sha256: hexdigest(Digest::SHA256, file),
- sha1: hexdigest(Digest::SHA1, file),
- md5: hexdigest(Digest::MD5, file),
- }
+
+ vars = load_variables(file.dirname)
+ digests = nil
+ if !@force_digest && vars.local_file_info &&
+ vars.local_file_info[file.basename.to_s]
+ finfo = vars.local_file_info[file.basename.to_s]
+ if finfo[:size] == file.size && finfo.mtime == file.mtime
+ digests = vars.local_file_info[file.basename.to_s].digests
+ end
+ end
+
+ unless digests
+ logger.info "Calculating digest for #{file}..."
+ digests = {
+ sha256: hexdigest(Digest::SHA256, file),
+ sha1: hexdigest(Digest::SHA1, file),
+ md5: hexdigest(Digest::MD5, file),
+ }
+ update_variables file.dirname, {local_file_info: {file.basename.to_s => {digests: digests, mtime: file.mtime, size: file.size}}}
+ end
+
fio = file.open
logger.level <= Logger::INFO and
OSDN::CLI._show_progress = true