Skip to content

Commit

Permalink
Add optional :svn_username and :svn_password variables
Browse files Browse the repository at this point in the history
git-svn-id: http://svn.rubyonrails.org/rails/tools/switchtower@3488 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
  • Loading branch information
jamis committed Jan 28, 2006
1 parent 487bd46 commit a924352
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 5 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG
@@ -1,5 +1,7 @@
*0.11.0* *SVN*

* Add optional :svn_username and :svn_password variables

* Allow Proc-valued variables to be set more conveniently (set(:foo) { "bar" })

* Add perforce SCM module [Richard McMahon]
Expand Down
11 changes: 8 additions & 3 deletions lib/switchtower/scm/subversion.rb
Expand Up @@ -68,7 +68,8 @@ def diff(actor, from=nil, to=nil)
# remote server.)
def checkout(actor)
op = configuration[:checkout] || "co"
command = "#{svn} #{op} -q -r#{configuration.revision} #{configuration.repository} #{actor.release_path} &&"
username = configuration[:svn_username] ? "--username #{configuration[:svn_username]}" : ""
command = "#{svn} #{op} #{username} -q -r#{configuration.revision} #{configuration.repository} #{actor.release_path} &&"
run_checkout(actor, command, &svn_stream_handler(actor))
end

Expand All @@ -88,14 +89,18 @@ def svn
def svn_log(path)
`svn log -q -rhead #{path}`
end


def svn_password
configuration[:svn_password] || configuration[:password]
end

def svn_stream_handler(actor)
Proc.new do |ch, stream, out|
prefix = "#{stream} :: #{ch[:host]}"
actor.logger.info out, prefix
if out =~ /\bpassword.*:/i
actor.logger.info "subversion is asking for a password", prefix
ch.send_data "#{actor.password}\n"
ch.send_data "#{svn_password}\n"
elsif out =~ %r{\(yes/no\)}
actor.logger.info "subversion is asking whether to connect or not",
prefix
Expand Down
19 changes: 17 additions & 2 deletions test/scm/subversion_test.rb
Expand Up @@ -84,15 +84,15 @@ def test_checkout
@actor.story = []
assert_nothing_raised { @scm.checkout(@actor) }
assert_nil @actor.channels.last.sent_data
assert_match %r{/path/to/svn}, @actor.command
assert_match %r{/path/to/svn co\s+-q}, @actor.command
end

def test_checkout_via_export
@actor.story = []
@config[:checkout] = "export"
assert_nothing_raised { @scm.checkout(@actor) }
assert_nil @actor.channels.last.sent_data
assert_match %r{/path/to/svn export}, @actor.command
assert_match %r{/path/to/svn export\s+-q}, @actor.command
end

def test_update
Expand All @@ -119,4 +119,19 @@ def test_checkout_needs_alternative_ssh_password
assert_nothing_raised { @scm.checkout(@actor) }
assert_equal ["chocolatebrownies\n"], @actor.channels.last.sent_data
end

def test_svn_password
@config[:svn_password] = "butterscotchcandies"
@actor.story = [[:out, "Password: "]]
assert_nothing_raised { @scm.checkout(@actor) }
assert_equal ["butterscotchcandies\n"], @actor.channels.last.sent_data
end

def test_svn_username
@actor.story = []
@config[:svn_username] = "turtledove"
assert_nothing_raised { @scm.checkout(@actor) }
assert_nil @actor.channels.last.sent_data
assert_match %r{/path/to/svn co --username turtledove}, @actor.command
end
end

0 comments on commit a924352

Please sign in to comment.