Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
87 changes: 87 additions & 0 deletions Rakefile
Original file line number Diff line number Diff line change
Expand Up @@ -79,3 +79,90 @@ RDoc::Task.new do |rdoc|
rdoc.rdoc_files.include(file) if File.exist?(file)
}
end

def change_version(&block)
version_file = 'lib/net/scp/version.rb'
require_relative version_file
pre = Net::SCP::Version::PRE
tiny = Net::SCP::Version::TINY
result = block[pre: pre, tiny: Net::SCP::Version::TINY]
raise ArgumentError, "Version change logic should always return a pre" unless result.key?(:pre)

new_pre = result[:pre]
new_tiny = result[:tiny] || tiny
found = { pre: false, tiny: false }
File.open("#{version_file}.new", "w") do |f|
File.readlines(version_file).each do |line|
match =
if pre.nil?
/^(\s+PRE\s+=\s+)nil(\s*)$/.match(line)
else
/^(\s+PRE\s+=\s+")#{pre}("\s*)$/.match(line)
end
if match
prefix = match[1]
postfix = match[2]
prefix.delete_suffix!('"')
postfix.delete_prefix!('"')
new_line = "#{prefix}#{new_pre.inspect}#{postfix}"
puts "Changing:\n - #{line} + #{new_line}"
line = new_line
found[:pre] = true
end

if new_tiny != tiny
match = /^(\s+TINY\s+=\s+)#{tiny}(\s*)$/.match(line)
if match
prefix = match[1]
postfix = match[2]
new_line = "#{prefix}#{new_tiny}#{postfix}"
puts "Changing:\n - #{line} + #{new_line}"
line = new_line
found[:tiny] = true
end
end

f.write(line)
end
raise ArgumentError, "Cound not find line: PRE = \"#{pre}\" in #{version_file}" unless found[:pre]
raise ArgumentError, "Cound not find line: TINY = \"#{tiny}\" in #{version_file}" unless found[:tiny] || new_tiny == tiny
end

FileUtils.mv version_file, "#{version_file}.old"
FileUtils.mv "#{version_file}.new", version_file
end

namespace :vbump do
desc "Final release"
task :final do
change_version do |pre:, tiny:|
_ = tiny
if pre.nil?
{ tiny: tiny + 1, pre: nil }
else
raise ArgumentError, "Unexpected pre: #{pre}" if pre.nil?

{ pre: nil }
end
end
end

desc "Increment prerelease"
task :pre, [:type] do |_t, args|
change_version do |pre:, tiny:|
puts " PRE => #{pre.inspect}"
match = /^([a-z]+)(\d+)/.match(pre)
raise ArgumentError, "Unexpected pre: #{pre}" if match.nil? && args[:type].nil?

if match.nil? || (!args[:type].nil? && args[:type] != match[1])
if pre.nil?
{ pre: "#{args[:type]}1", tiny: tiny + 1 }
else
{ pre: "#{args[:type]}1" }
end
else
{ pre: "#{match[1]}#{match[2].to_i + 1}" }
end
end
end
end
Loading