Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Loading…

add support for labels in perforce scm #95

Merged
merged 2 commits into from

2 participants

Andy Koch Lee Hambley
Andy Koch

Hi,

We deploy using perforce labels. This little modification allows us to specify the label and get the label in the p4 commands as needed.

I added a perforce test file, none currently exist, and made some tests. Although I am testing a private method, I suppose it's better than what was there - which is nothing.

Lee Hambley leehambley merged commit 89fd0e0 into from
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Commits on Aug 24, 2011
  1. Andy Koch

    return p4_label if set

    ak47 authored
Commits on Aug 25, 2011
  1. Andy Koch
This page is out of date. Refresh to see the latest.
39 lib/capistrano/recipes/deploy/scm/perforce.rb
View
@@ -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 @@ def head
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 @@ def sync(revision, destination)
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 @@ def handle_data(state, stream, text)
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 @@ def authentication
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 @@ def p4port
def p4user
variable(:p4user) || variable(:scm_username)
end
-
+
def p4passwd
variable(:p4passwd) || variable(:scm_password)
end
@@ -120,16 +120,25 @@ def p4sync_flags
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
View
@@ -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
Something went wrong with that request. Please try again.