summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHunter Haugen <h.haugen@gmail.com>2013-07-30 09:51:37 -0700
committerHunter Haugen <h.haugen@gmail.com>2013-07-30 09:51:37 -0700
commit6f7507a2a48ff0a58c7db026760a2eb84e382a77 (patch)
tree79c3760635cf6defe29be5238f4456aa6c58c280
parent45cb7c1319e79cbfb3ff2bcdadfc275260d557e0 (diff)
parenta14da4fc175649adaa2aa2a37465e5cd3fc7fccb (diff)
Merge pull request #84 from sodabrew/issue_12034_svnswitch
added support for changing upstream repo url - rebase of #74
-rw-r--r--lib/puppet/provider/vcsrepo/svn.rb15
-rw-r--r--spec/unit/puppet/provider/vcsrepo/svn_spec.rb23
2 files changed, 32 insertions, 6 deletions
diff --git a/lib/puppet/provider/vcsrepo/svn.rb b/lib/puppet/provider/vcsrepo/svn.rb
index 3132c36..bfc9b76 100644
--- a/lib/puppet/provider/vcsrepo/svn.rb
+++ b/lib/puppet/provider/vcsrepo/svn.rb
@@ -40,7 +40,7 @@ Puppet::Type.type(:vcsrepo).provide(:svn, :parent => Puppet::Provider::Vcsrepo)
def latest?
at_path do
- self.revision >= self.latest
+ (self.revision >= self.latest) and (@resource.value(:source) == self.sourceurl)
end
end
@@ -70,6 +70,13 @@ Puppet::Type.type(:vcsrepo).provide(:svn, :parent => Puppet::Provider::Vcsrepo)
end
end
+ def sourceurl
+ args = buildargs.push('info')
+ at_path do
+ svn(*args)[/^URL:\s+(\S+)/m, 1]
+ end
+ end
+
def revision
args = buildargs.push('info')
at_path do
@@ -78,7 +85,11 @@ Puppet::Type.type(:vcsrepo).provide(:svn, :parent => Puppet::Provider::Vcsrepo)
end
def revision=(desired)
- args = buildargs.push('update', '-r', desired)
+ args = if @resource.value(:source)
+ buildargs.push('switch', '-r', desired, @resource.value(:source))
+ else
+ buildargs.push('update', '-r', desired)
+ end
at_path do
svn(*args)
end
diff --git a/spec/unit/puppet/provider/vcsrepo/svn_spec.rb b/spec/unit/puppet/provider/vcsrepo/svn_spec.rb
index a533b7c..675fc0b 100644
--- a/spec/unit/puppet/provider/vcsrepo/svn_spec.rb
+++ b/spec/unit/puppet/provider/vcsrepo/svn_spec.rb
@@ -69,10 +69,25 @@ describe_provider :vcsrepo, :svn, :resource => {:path => '/tmp/vcsrepo'} do
before do
@revision = '30'
end
- it "should use 'svn update'" do
- expects_chdir
- provider.expects(:svn).with('--non-interactive', 'update', '-r', @revision)
- provider.revision = @revision
+ resource_without :source do
+ it "should use 'svn update'" do
+ expects_chdir
+ provider.expects(:svn).with('--non-interactive', 'update', '-r', @revision)
+ provider.revision = @revision
+ end
+ end
+ end
+
+ describe "setting the revision property and repo source" do
+ before do
+ @revision = '30'
+ end
+ resource_with :source do
+ it "should use 'svn switch'" do
+ expects_chdir
+ provider.expects(:svn).with('--non-interactive', 'switch', '-r', @revision, 'an-unimportant-value')
+ provider.revision = @revision
+ end
end
end