diff --git a/lib/feature/republish.rb b/lib/feature/republish.rb new file mode 100644 index 0000000..06efa68 --- /dev/null +++ b/lib/feature/republish.rb @@ -0,0 +1,48 @@ +require_relative './base' + +module Feature + + class Republish < Feature::Base + def valid? + argv.size == 1 + end + + def help + "feature republish" + end + + def execute + parts = parse_branch(current_branch) + + standard_branch = parts[:standard] + feature_branch = current_branch + remote_branch = remote_branch(feature_branch) + + error "USAGE: feature republish" unless standard_branch + error "invalid feature branch: #{feature_branch}" if standard_branches.include? feature_branch + + git_checkout standard_branch + git_fetch + git_pull standard_branch + git_checkout feature_branch + git_rebase standard_branch + + if remote_branch != "" + git_remote_branch_delete feature_branch + end + + git_push feature_branch + + version = package_json_version('0.0.0-0') + tags = `git tag -l`.strip.split("\n").select {|x| x.start_with? version} + tags = tags.map {|x| x =~ /^\d+.\d+.\d+[-]\d+$/ ? x.split('-').last : '0'} + tags = tags.map {|x| x.to_i } + tags << 0 + new_number = tags.uniq.max + 1 + + git_local_tag "#{version}-#{new_number}" + git_push_tags + end + end + +end