Update origin if necessary before checking revision
authorRaphaël Pinson <raphael.pinson@camptocamp.com>
Wed, 6 Mar 2013 16:06:26 +0000 (17:06 +0100)
committerRaphaël Pinson <raphael.pinson@camptocamp.com>
Wed, 6 Mar 2013 17:24:02 +0000 (18:24 +0100)
lib/puppet/provider/vcsrepo/git.rb
spec/unit/puppet/provider/vcsrepo/git_spec.rb

index 9254243..61c225d 100644 (file)
@@ -93,8 +93,18 @@ Puppet::Type.type(:vcsrepo).provide(:git, :parent => Puppet::Provider::Vcsrepo)
     working_copy_exists? || bare_exists?
   end
 
+  def update_remote_origin_url
+    current = git_with_identity('config', 'remote.origin.url')
+    unless @resource.value(:source).nil?
+      if current.nil? or current.strip != @resource.value(:source)
+        git_with_identity('config', 'remote.origin.url', @resource.value(:source))
+      end
+    end
+  end
+
   def update_references
     at_path do
+      update_remote_origin_url
       git_with_identity('fetch', @resource.value(:remote))
       git_with_identity('fetch', '--tags', @resource.value(:remote))
       update_owner_and_excludes
@@ -250,6 +260,7 @@ Puppet::Type.type(:vcsrepo).provide(:git, :parent => Puppet::Provider::Vcsrepo)
       create
     end
     at_path do
+      update_remote_origin_url
       git_with_identity('fetch', @resource.value(:remote))
       git_with_identity('fetch', '--tags', @resource.value(:remote))
     end
index 83dbff2..4e4d9f3 100644 (file)
@@ -127,6 +127,7 @@ describe_provider :vcsrepo, :git, :resource => {:path => '/tmp/vcsrepo'} do
 
       context "when its SHA is not different than the current SHA" do
         it "should return the ref" do
+          provider.expects(:git).with('config', 'remote.origin.url').returns('')
           provider.expects(:git).with('fetch', 'origin') # FIXME
           provider.expects(:git).with('fetch', '--tags', 'origin')
           provider.expects(:git).with('rev-parse', resource.value(:revision)).returns('currentsha')
@@ -137,6 +138,7 @@ describe_provider :vcsrepo, :git, :resource => {:path => '/tmp/vcsrepo'} do
 
       context "when its SHA is different than the current SHA" do
         it "should return the current SHA" do
+          provider.expects(:git).with('config', 'remote.origin.url').returns('')
           provider.expects(:git).with('fetch', 'origin') # FIXME
           provider.expects(:git).with('fetch', '--tags', 'origin')
           provider.expects(:git).with('rev-parse', resource.value(:revision)).returns('othersha')
@@ -144,6 +146,20 @@ describe_provider :vcsrepo, :git, :resource => {:path => '/tmp/vcsrepo'} do
           provider.revision.should == 'currentsha'
         end
       end
+
+      context "when the source is modified" do
+        resource_with :source => 'git://git@foo.com/bar.git' do
+          it "should update the origin url" do
+            provider.expects(:git).with('config', 'remote.origin.url').returns('old')
+            provider.expects(:git).with('config', 'remote.origin.url', 'git://git@foo.com/bar.git')
+            provider.expects(:git).with('fetch', 'origin') # FIXME
+            provider.expects(:git).with('fetch', '--tags', 'origin')
+            provider.expects(:git).with('rev-parse', resource.value(:revision)).returns('currentsha')
+            provider.expects(:git).with('tag', '-l').returns("Hello")
+            provider.revision.should == resource.value(:revision)
+          end
+        end
+      end
     end
   end
 
@@ -189,6 +205,7 @@ describe_provider :vcsrepo, :git, :resource => {:path => '/tmp/vcsrepo'} do
   context "updating references" do
     it "should use 'git fetch --tags'" do
       expects_chdir
+      provider.expects(:git).with('config', 'remote.origin.url').returns('')
       provider.expects(:git).with('fetch', 'origin')
       provider.expects(:git).with('fetch', '--tags', 'origin')
       provider.update_references