Skip to content

Instantly share code, notes, and snippets.

@misfo
Created January 27, 2009 16:26
Show Gist options
  • Save misfo/53401 to your computer and use it in GitHub Desktop.
Save misfo/53401 to your computer and use it in GitHub Desktop.
#!/usr/bin/env ruby
def latest_maint_releases(vers)
vers.inject([]) do |a, version|
unless a.any? {|v| v[/\d+\.\d+/] == version[/\d+\.\d+/] && v > version }
a << version
end
a
end
end
def point_rel(ver)
ver[/\d+\.\d+/]
end
installed_releases = begin
rails_info = `gem list rails`.grep(/^rails\s/)[0]
rails_versions = rails_info.scan(/\d+\.\d+\.\d+/)
latest_maint_releases(rails_versions)
end
installed_point_releases = installed_releases.collect {|v| point_rel(v) }.uniq
newest_maint_releases = begin
rails_info = `gem list -ra rails`.grep(/^rails\s/)[0]
rails_versions = rails_info.scan(/\d+\.\d+\.\d+/)
latest_maint_releases(rails_versions)
end
needed_versions = newest_maint_releases - installed_releases
needed_versions.reject! {|v| !installed_point_releases.include?(point_rel(v)) }
if !needed_versions.empty?
puts "There are newer maintenance releases for the rails versions installed: #{needed_versions.join(", ")}"
end
apps = `grep "RAILS_GEM_VERSION" */current/config/environment.rb`
outdated_apps = apps.reject {|a| newest_maint_releases.any? {|v| a.include?(v) } }
for app in outdated_apps
app_dir = app[/^(.+?)\/current\/config\/environment\.rb/, 1]
if app =~ /['"]([~><=]*)(\d+(\.\d+){1,})['"]/
unless $1.include?(">") # app is automatically using newer installed versions
app_version = $2
new_version = newest_maint_releases.detect {|nmr| point_rel(app_version) == point_rel(nmr) }
puts "#{app_dir} (#{app_version} < #{new_version})"
end
else
puts "Could not parse RAILS_GEM_VERSION for #{app_dir}"
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment