mirror of
https://github.com/haml/haml.git
synced 2022-11-09 12:33:31 -05:00
Change the edge-gem versioning scheme.
Rather than incrementing an index each time we push, we now impose an indexing based on the repo structure. The version of the prerelease gem is defined to be the number of commits since the stable branch (precisely, the number of commits in `git log stable..master --first-parent`). This means that when someone `rake install`s Haml from a Git repo, the gem is installed with the proper version number.
This commit is contained in:
parent
c9797a2549
commit
5681001c90
1 changed files with 21 additions and 45 deletions
66
Rakefile
66
Rakefile
|
@ -43,8 +43,12 @@ END
|
||||||
# before we load the gemspec.
|
# before we load the gemspec.
|
||||||
desc "Build all the packages."
|
desc "Build all the packages."
|
||||||
task :package => [:revision_file, :submodules, :permissions] do
|
task :package => [:revision_file, :submodules, :permissions] do
|
||||||
|
version = get_version
|
||||||
|
File.open(scope('VERSION'), 'w') {|f| f.puts(version)}
|
||||||
load scope('haml.gemspec')
|
load scope('haml.gemspec')
|
||||||
Gem::Builder.new(HAML_GEMSPEC).build
|
Gem::Builder.new(HAML_GEMSPEC).build
|
||||||
|
sh %{git checkout VERSION}
|
||||||
|
|
||||||
pkg = "#{HAML_GEMSPEC.name}-#{HAML_GEMSPEC.version}"
|
pkg = "#{HAML_GEMSPEC.name}-#{HAML_GEMSPEC.version}"
|
||||||
mkdir_p "pkg"
|
mkdir_p "pkg"
|
||||||
verbose(true) {mv "#{pkg}.gem", "pkg/#{pkg}.gem"}
|
verbose(true) {mv "#{pkg}.gem", "pkg/#{pkg}.gem"}
|
||||||
|
@ -83,7 +87,7 @@ at_exit { File.delete(scope('REVISION')) rescue nil }
|
||||||
desc "Install Haml as a gem. Use SUDO=1 to install with sudo."
|
desc "Install Haml as a gem. Use SUDO=1 to install with sudo."
|
||||||
task :install => [:package] do
|
task :install => [:package] do
|
||||||
gem = RUBY_PLATFORM =~ /java/ ? 'jgem' : 'gem'
|
gem = RUBY_PLATFORM =~ /java/ ? 'jgem' : 'gem'
|
||||||
sh %{#{'sudo ' if ENV["SUDO"]}#{gem} install --no-ri pkg/haml-#{File.read(scope('VERSION')).strip}}
|
sh %{#{'sudo ' if ENV["SUDO"]}#{gem} install --no-ri pkg/haml-#{get_version}}
|
||||||
end
|
end
|
||||||
|
|
||||||
desc "Release a new Haml package to Rubyforge."
|
desc "Release a new Haml package to Rubyforge."
|
||||||
|
@ -137,57 +141,29 @@ task :release_edge do
|
||||||
ensure_git_cleanup do
|
ensure_git_cleanup do
|
||||||
puts "#{'=' * 50} Running rake release_edge"
|
puts "#{'=' * 50} Running rake release_edge"
|
||||||
|
|
||||||
sh %{git checkout edge-gem}
|
sh %{git checkout master}
|
||||||
sh %{git reset --hard origin/edge-gem}
|
sh %{git reset --hard origin/master}
|
||||||
sh %{git merge origin/master}
|
|
||||||
|
|
||||||
unless edge_version = bump_edge_version
|
|
||||||
puts "master is already a prerelease version, no use building an edge gem"
|
|
||||||
next
|
|
||||||
end
|
|
||||||
|
|
||||||
File.open(scope('EDGE_GEM_VERSION'), 'w') {|f| f.puts(edge_version)}
|
|
||||||
sh %{git commit -m "Bump edge gem version to #{edge_version}." EDGE_GEM_VERSION}
|
|
||||||
sh %{git push origin edge-gem}
|
|
||||||
|
|
||||||
# Package the edge gem with the proper version
|
|
||||||
File.open(scope('VERSION'), 'w') {|f| f.puts(edge_version)}
|
|
||||||
sh %{rake package}
|
sh %{rake package}
|
||||||
sh %{git checkout VERSION}
|
version = get_edge_version
|
||||||
|
sh %{rubyforge add_release haml haml "Bleeding Edge (v#{version})" pkg/haml-#{version}.gem}
|
||||||
sh %{rubyforge add_release haml haml "Bleeding Edge (v#{edge_version})" pkg/haml-#{edge_version}.gem}
|
sh %{gem push pkg/haml-#{version}.gem}
|
||||||
sh %{gem push pkg/haml-#{edge_version}.gem}
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Reads the master version and the edge gem version,
|
# Get the version string. If this is being installed from Git,
|
||||||
# bump the latter, and return it.
|
# this includes the proper prerelease version.
|
||||||
#
|
def get_version
|
||||||
# Returns nil if the current master version is already a non-alpha prerelease.
|
written_version = File.read(scope('VERSION').strip)
|
||||||
def bump_edge_version
|
return written_version unless File.exist?(scope('.git'))
|
||||||
|
|
||||||
# Get the current master branch version
|
# Get the current master branch version
|
||||||
version = File.read(scope('VERSION')).strip.split('.')
|
version = written_version.split('.')
|
||||||
version.map! {|n| n =~ /^[0-9]+$/ ? n.to_i : n}
|
version.map! {|n| n =~ /^[0-9]+$/ ? n.to_i : n}
|
||||||
unless version.size == 5 # prerelease
|
return written_version unless version.size == 5 && version[3] == "alpha" # prerelease
|
||||||
raise "master version #{version.join('.')} is not a prerelease version"
|
|
||||||
end
|
|
||||||
|
|
||||||
# Bump the edge gem version
|
return written_version if (commit_count = `git log --pretty=oneline --first-parent stable.. | wc -l`).empty?
|
||||||
edge_version = File.read(scope('EDGE_GEM_VERSION')).strip.split('.')
|
version[4] = commit_count.strip
|
||||||
edge_version.map! {|n| n =~ /^[0-9]+$/ ? n.to_i : n}
|
version.join('.')
|
||||||
|
|
||||||
if version[3] != "alpha"
|
|
||||||
return
|
|
||||||
elsif edge_version[0..2] != version[0..2]
|
|
||||||
# A new master branch version was released, reset the edge gem version
|
|
||||||
edge_version[0..2] = version[0..2]
|
|
||||||
edge_version[4] = 1
|
|
||||||
else
|
|
||||||
# Just bump the teeny version
|
|
||||||
edge_version[4] += 1
|
|
||||||
end
|
|
||||||
|
|
||||||
edge_version.join('.')
|
|
||||||
end
|
end
|
||||||
|
|
||||||
task :watch_for_update do
|
task :watch_for_update do
|
||||||
|
|
Loading…
Reference in a new issue