| 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 |