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:
commit
89fd0e0e6d
2 changed files with 47 additions and 15 deletions
|
@ -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
|
||||
|
||||
|
|
23
test/deploy/scm/perforce_test.rb
Normal file
23
test/deploy/scm/perforce_test.rb
Normal 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
|
Loading…
Reference in a new issue