Skip to content

Commit

Permalink
Implement version bump
Browse files Browse the repository at this point in the history
  • Loading branch information
mfazekas committed Dec 24, 2024
1 parent 1e22486 commit 141131c
Showing 1 changed file with 87 additions and 0 deletions.
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

0 comments on commit 141131c

Please sign in to comment.