lib/capistrano-maven/deploy.rb in capistrano-maven-0.0.5 vs lib/capistrano-maven/deploy.rb in capistrano-maven-0.0.6

- old
+ new

@@ -1,8 +1,7 @@ require 'capistrano' -require 'tempfile' require 'uri' module Capistrano module Maven def self.extended(configuration) @@ -199,11 +198,11 @@ execute.join(' && ') end task(:update_settings, :roles => :app, :except => { :no_release => true }) { srcs = mvn_settings.map { |f| File.join(mvn_template_path, f) } - tmps = mvn_settings.map { |f| t=Tempfile.new('mvn');s=t.path;t.close(true);s } + tmps = mvn_settings.map { |f| capture("mktemp").chomp } dsts = mvn_settings.map { |f| File.join(mvn_settings_path, f) } begin srcs.zip(tmps).each do |src, tmp| put(template(src), tmp) end @@ -213,11 +212,11 @@ end } task(:update_settings_locally, :except => { :no_release => true }) { srcs = mvn_settings_local.map { |f| File.join(mvn_template_path, f) } - tmps = mvn_settings.map { |f| t=Tempfile.new('mvn');s=t.path;t.close(true);s } + tmps = mvn_settings.map { |f| `mktemp`.chomp } dsts = mvn_settings_local.map { |f| File.join(mvn_settings_path_local, f) } begin srcs.zip(tmps).each do |src, tmp| File.open(tmp, 'wb') { |fp| fp.write(template(src)) } end @@ -245,25 +244,54 @@ execute_locally upload_locally } } + def _mvn(cmd, path, goals=[]) + "cd #{path.dump} && #{cmd} #{goals.map { |s| s.dump }.join(' ')}" + end + + def _mvn_parse_version(s) + # FIXME: is there any better way to get project version? + s.split(/(?:\r?\n)+/).reject { |line| /^\[[A-Z]+\]/ =~ line }.last + end + + _cset(:mvn_release_build, false) + _cset(:mvn_snapshot_pattern, /-SNAPSHOT$/i) + _cset(:mvn_project_version) { + _mvn_parse_version(capture(_mvn(mvn_cmd, mvn_project_path, %w(-Dexpression=project.version help:evaluate)))) + } + _cset(:mvn_project_version_local) { + _mvn_parse_version(run_locally(_mvn(mvn_cmd_local, mvn_project_path_local, %w(-Dexpression=project.version help:evaluate)))) + } + + def _validate_project_version(version_key) + if mvn_release_build + version = fetch(version_key) + if mvn_snapshot_pattern === version + abort("Skip to build project since \`#{version}' is a SNAPSHOT version.") + end + end + end + desc("Perform maven build.") task(:execute, :roles => :app, :except => { :no_release => true }) { on_rollback { - run("cd #{mvn_project_path} && #{mvn_cmd} clean") + run(_mvn(mvn_cmd, mvn_project_path, %w(clean))) } - run("cd #{mvn_project_path} && #{mvn_cmd} #{mvn_goals.join(' ')}") + _validate_project_version(:mvn_project_version) + run(_mvn(mvn_cmd, mvn_project_path, mvn_goals)) } desc("Perform maven build locally.") task(:execute_locally, :roles => :app, :except => { :no_release => true }) { on_rollback { - run_locally("cd #{mvn_project_path_local} && #{mvn_cmd_local} clean") + run_locally(_mvn(mvn_cmd_local, mvn_project_path_local, %w(clean))) } - cmd = "cd #{mvn_project_path_local} && #{mvn_cmd_local} #{mvn_goals.join(' ')}" - logger.info(cmd) - abort("execution failure") unless system(cmd) + _validate_project_version(:mvn_project_version_local) + cmdline = _mvn(mvn_cmd_local, mvn_project_path_local, mvn_goals) + logger.info(cmdline) + abort("execution failure") unless system(cmdline) } _cset(:mvn_tar, 'tar') _cset(:mvn_tar_local, 'tar') _cset(:mvn_target_archive) {