1
0
Fork 0
mirror of https://github.com/capistrano/capistrano synced 2023-03-27 23:21:18 -04:00

Merge pull request #95 from ak47/master

Add support for labels in Perforce SCM.
This commit is contained in:
Lee Hambley 2011-09-24 02:24:39 -07:00
commit 89fd0e0e6d
2 changed files with 47 additions and 15 deletions

View file

@ -1,9 +1,9 @@
require 'capistrano/recipes/deploy/scm/base'
# Notes:
# Notes:
# no global verbose flag for scm_verbose
# sync, checkout and export are just sync in p4
#
#
module Capistrano
module Deploy
module SCM
@ -27,7 +27,7 @@ module Capistrano
def checkout(revision, destination)
p4_sync(revision, destination, p4sync_flags)
end
# Returns the command that will sync the given revision to the given
# destination directory. The perforce client has a fixed destination so
# the files must be copied from there to their intended resting place.
@ -41,7 +41,7 @@ module Capistrano
def export(revision, destination)
p4_sync(revision, destination, p4sync_flags)
end
# Returns the command that will do an "p4 diff2" for the two revisions.
def diff(from, to=head)
scm authentication, :diff2, "-u -db", "//#{p4client}/...#{rev_no(from)}", "//#{p4client}/...#{rev_no(to)}"
@ -72,11 +72,11 @@ module Capistrano
raise Capistrano::Error, "scm_password (or p4passwd) is incorrect or unset"
when /Can.t create a new user.*/i
raise Capistrano::Error, "scm_username (or p4user) is incorrect or unset"
when /Perforce client error\:/i
when /Perforce client error\:/i
raise Capistrano::Error, "p4port is incorrect or unset"
when /Client \'[\w\-\_\.]+\' unknown.*/i
raise Capistrano::Error, "p4client is incorrect or unset"
end
end
end
private
@ -90,11 +90,11 @@ module Capistrano
end
# Returns the command that will sync the given revision to the given
# destination directory with specific options. The perforce client has
# a fixed destination so the files must be copied from there to their
# intended resting place.
# destination directory with specific options. The perforce client has
# a fixed destination so the files must be copied from there to their
# intended resting place.
def p4_sync(revision, destination, options="")
scm authentication, :sync, options, "#{rev_no(revision)}", "&& cp -rf #{p4client_root} #{destination}"
scm authentication, :sync, options, "#{rev_no(revision)}", "&& cp -rf #{p4client_root} #{destination}"
end
def p4client
@ -108,7 +108,7 @@ module Capistrano
def p4user
variable(:p4user) || variable(:scm_username)
end
def p4passwd
variable(:p4passwd) || variable(:scm_password)
end
@ -120,16 +120,25 @@ module Capistrano
def p4client_root
variable(:p4client_root) || "`#{command} #{authentication} client -o | grep ^Root | cut -f2`"
end
def rev_no(revision)
def rev_no(revision)
if variable(:p4_label)
p4_label = if variable(:p4_label) =~ /\A@/
variable(:p4_label)
else
"@#{variable(:p4_label)}"
end
return p4_label
end
case revision.to_s
when "head"
"#head"
when /^\d+/
when /^\d+/
"@#{revision}"
else
revision
end
end
end
end

View file

@ -0,0 +1,23 @@
require "utils"
require 'capistrano/recipes/deploy/scm/perforce'
class DeploySCMPerforceTest < Test::Unit::TestCase
class TestSCM < Capistrano::Deploy::SCM::Perforce
default_command "perforce"
end
def setup
@config = { :repository => "." }
@source = TestSCM.new(@config)
end
def test_p4_label
@config[:p4_label] = "some_p4_label"
assert_equal "@some_p4_label", @source.send(:rev_no, 'foo')
end
def test_p4_label_with_symbol
@config[:p4_label] = "@some_p4_label"
assert_equal "@some_p4_label", @source.send(:rev_no, 'foo')
end
end