diff --git a/lib/bundler/gem_helper.rb b/lib/bundler/gem_helper.rb index eab894638e..272e7ecb69 100644 --- a/lib/bundler/gem_helper.rb +++ b/lib/bundler/gem_helper.rb @@ -15,6 +15,10 @@ module Bundler new(opts[:dir], opts[:name]).install end + def tag_prefix=(prefix) + instance.tag_prefix = prefix + end + def gemspec(&block) gemspec = instance.gemspec block.call(gemspec) if block @@ -24,12 +28,15 @@ module Bundler attr_reader :spec_path, :base, :gemspec + attr_writer :tag_prefix + def initialize(base = nil, name = nil) @base = File.expand_path(base || SharedHelpers.pwd) gemspecs = name ? [File.join(@base, "#{name}.gemspec")] : Dir[File.join(@base, "{,*}.gemspec")] raise "Unable to determine name from existing gemspec. Use :name => 'gemname' in #install_tasks to manually set it." unless gemspecs.size == 1 @spec_path = gemspecs.first @gemspec = Bundler.load_gemspec(@spec_path) + @tag_prefix = "" end def install @@ -168,7 +175,7 @@ module Bundler end def version_tag - "v#{version}" + "#{@tag_prefix}v#{version}" end def name diff --git a/spec/bundler/bundler/gem_helper_spec.rb b/spec/bundler/bundler/gem_helper_spec.rb index 6cb4c33f5a..b91a2c26cc 100644 --- a/spec/bundler/bundler/gem_helper_spec.rb +++ b/spec/bundler/bundler/gem_helper_spec.rb @@ -258,6 +258,23 @@ RSpec.describe Bundler::GemHelper do end end + context "on releasing with a custom tag prefix" do + before do + Bundler::GemHelper.tag_prefix = "foo-" + mock_build_message app_name, app_version + mock_confirm_message "Pushed git commits and tags." + + sys_exec("git push -u origin master", :dir => app_path) + expect(subject).to receive(:rubygem_push).with(app_gem_path.to_s) + end + + it "prepends the custom prefix to the tag" do + mock_confirm_message "Tagged foo-v#{app_version}." + + Rake.application["release"].invoke + end + end + it "even if tag already exists" do mock_build_message app_name, app_version mock_confirm_message "Tag v#{app_version} has already been created."