blob: cfffb47e3adce4985a2cc7ca0c67d5f421bd016a [file] [log] [blame]
require 'find'
class Version
@@SEARCH_EXTENSIONS = [
'classpath',
'iml',
'java',
'properties',
'versions',
'xml'
]
def self.update(variable, version, root, verbose=false)
existing_version = nil
IO.foreach(root + '/build.versions') do |line|
existing_version = $1.strip if line !~ /^\s*#/ && line =~ /#{variable}=(.*)/
end
if existing_version.nil?
puts ' No variable <' + variable + '> found in ./build.versions file.'
else
if existing_version != version
puts ' Updating <' + variable + '> from "' + existing_version + '" to "' + version + '"'
puts ' (-------: files in which <' + variable + '> is found with a version string are listed, those updated so prefixed)' if verbose
changesMade = false
Find.find(root) do |path|
Find.prune if dirAtPath?(path,["ivy-cache","target","integration-repo"])
if FileTest.file?(path) && @@SEARCH_EXTENSIONS.include?(get_extension(path))
lines = IO.readlines(path)
changed = false
encountered = false
lines.each do |line|
if line =~ /#{variable}[^0-9A-Za-z]/
encountered = true if line =~ /([0-9]+\.[0-9]+(\.[0-9]+(\.[0-9A-Za-z_\-]+)?)?)/
changed = true if line.gsub!(/#{existing_version}/, version)
end
end
if changed
puts ' updated: ' + path if verbose
write_file(path, lines)
changesMade = true
else
puts ' -------: ' + path if verbose && encountered
end
end
end
puts ' No files found using <' + variable + '> with version "' + existing_version + '"' if verbose && !changesMade
else
puts ' Variable <' + variable + '> not updated, version already set as "' + version + '"'
end
end
end
########################################################################################################################
private
def self.dirAtPath?(path, dirs)
dirs.include?(path.split("/")[-1])
end
def self.get_extension(path)
match_data = path.match('/.*\.(.*)')
if match_data.nil?
nil
else
match_data[1]
end
end
def self.write_file(path, lines)
file = File.new(path, 'w')
lines.each do |line|
file.write(line)
end
file.close
end
end