module Reap class Project # Update VERSION stamp file. # # TODO: Should we also update a lib/version.rb file? # TODO: Make sure the new version isn't less then the old verison. # Will have to use VersionNumnber class for this. def stamp(options={}) version = options['version'] status = options['status'] options = configure_options(options, 'stamp') version = version || metadata.version || '0.0.0' status = status || metadata.status || '0.0.0' abort "Invalid version -- #{version}" unless String===version && /^[0-9]/ =~ version meta = File.directory?('meta') file = glob('{,meta/}version{,.txt}', File::FNM_CASEFOLD).first file = (meta ? 'meta/VERSION' : 'VERSION') unless file text = "#{version} #{status} (#{Time.now.strftime('%Y-%m-%d')})" if File.exist?(file) old_text = File.read(file).strip old_version, old_status, old_date = *old_text.split(/\s/) if old_version == "#{version}" && old_status == status puts old_text return end end if dryrun? puts "echo '#{text}' > #{file}" else write(file, text) puts text puts "#{file} updated." metadata.version = version metadata.status = status metadata.released = Time.now end # TODO: Stamp .roll if roll file exists. # should we read current .roll file and use as defaults? if File.exist?('.roll') str = [] str << "name = #{metadata.name}" str << "version = #{metadata.version}" str << "status = #{metadata.status}" str << "date = #{metadata.date}" str << "default = #{metadata.default}" str << "libpath = #{metadata.libpath}" # File.open('.roll','w'){ |f| f << str.join("\n") } end end end end