Skip to content

Instantly share code, notes, and snippets.

@vijedi
Created November 5, 2011 15:03
Show Gist options
  • Save vijedi/1341631 to your computer and use it in GitHub Desktop.
Save vijedi/1341631 to your computer and use it in GitHub Desktop.
version_update.rake
NAMESPACE_MAP = {'ns' => 'http://maven.apache.org/POM/4.0.0'}
require 'nokogiri'
require 'find'
namespace :mvn do
desc "[path, version] upgrade this version and all of it's children to the version specified as the second character"
task :version, :path, :version_str do |t, args|
base_path = args[:path]
version = args[:version_str]
puts "Updating all poms in #{base_path} to parent version #{version}"
Find.find(base_path) do |path|
if FileTest.directory?(path)
if File.basename(path)[0] == ?.
Find.prune # Don't look any further into this directory.
else
next
end
else
basename = File.basename(path)
if(basename == 'pom.xml')
handle_pom(version, path)
end
end
end
end
def handle_pom(version, path)
doc = Nokogiri::XML(File.open(path)) {|x| x.noblanks }
packaging = doc.xpath('/ns:project/ns:packaging', NAMESPACE_MAP).first.text().strip()
if(packaging == "pom")
puts "Updating parent pom (#{path}) "
version_node = doc.xpath('/ns:project/ns:version', NAMESPACE_MAP).first
else
puts "Updating child pom (#{path}) "
version_node = doc.xpath('/ns:project/ns:parent/ns:version', NAMESPACE_MAP).first
end
unless version_node.nil?
version_node.content = version
File.open(path,'w') do |f|
doc.write_xml_to f, :indent_text => ' ', :indent => 4
end
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment