def touch(targets, opts={})
like = opts.delete(:like)
stamp = opts.delete(:stamp)
quiet = opts.delete(:quiet) == true ? true : false
time = \
if stamp
stamp
elsif like
begin
File.stat(like).mtime
rescue Errno::ENOENT => e
if preview?
Time.now
else
raise e
end
end
else
Time.now
end
unless quiet
msg = "touch"
msg << " --reference %s" % like if like
msg << " --stamp %s" % stamp if stamp
msg << " " << [targets].flatten.join(" ")
log.info(PEXEC+msg)
end
results = []
for target in [targets].flatten
begin
stat = File.stat(target)
next if stat.mtime.to_i == time.to_i
rescue Errno::ENOENT
File.open(target, "a"){} unless preview?
end
File.utime(time, time, target) unless preview?
results << target
end
return false if results.empty?
return targets.is_a?(String) ? results.first : results
end