Update noop to work
authorHunter Haugen <hunter@puppetlabs.com>
Fri, 20 Jun 2014 20:48:02 +0000 (13:48 -0700)
committerHunter Haugen <hunter@puppetlabs.com>
Thu, 26 Jun 2014 18:39:30 +0000 (11:39 -0700)
lib/puppet/type/vcsrepo.rb
spec/acceptance/clone_repo_spec.rb
spec/unit/puppet/provider/vcsrepo/git_spec.rb

index 0e4450b..42767ab 100644 (file)
@@ -98,9 +98,8 @@ Puppet::Type.newtype(:vcsrepo) do
       if prov
         if prov.working_copy_exists?
           if @resource.value(:force)
-            if noop?
-              notice "Noop Mode - Would have deleted repository"
-              notice "Noop Mode - Would have created repository from latest"
+            if noop
+              notice "Noop Mode - Would have deleted repository and re-created from latest"
             else
               notice "Deleting current repository before recloning"
               prov.destroy
@@ -212,13 +211,4 @@ Puppet::Type.newtype(:vcsrepo) do
   autorequire(:package) do
     ['git', 'git-core']
   end
-
-  def noop?
-    if defined?(@noop)
-      @noop
-    else
-      Puppet[:noop]
-    end
-  end
-
 end
index a989661..23b0b31 100644 (file)
@@ -318,6 +318,36 @@ describe 'clones a remote repo' do
     describe file("#{tmpdir}/testrepo_force/.git") do
       it { should be_directory }
     end
+
+    context 'and noop' do
+      let(:repo_name) do
+        'testrepo_already_exists'
+      end
+      before(:all) do
+        shell("mkdir #{tmpdir}/#{repo_name}")
+        shell("cd #{tmpdir}/#{repo_name} && git init")
+        shell("cd #{tmpdir}/#{repo_name} && touch a && git add a && git commit -m 'a'")
+      end
+      after(:all) do
+        shell("rm -rf #{tmpdir}/#{repo_name}")
+      end
+
+      it 'applies the manifest' do
+        pp = <<-EOS
+        vcsrepo { "#{tmpdir}/#{repo_name}":
+          ensure   => present,
+          source   => "file://#{tmpdir}/testrepo.git",
+          provider => git,
+          force    => true,
+          noop     => true,
+        }
+        EOS
+
+        apply_manifest_on(host, pp, :catch_changes => true) do |r|
+          expect(r.stdout).to match(/Noop Mode/)
+        end
+      end
+    end
   end
 
   context 'as a user' do
@@ -474,15 +504,5 @@ describe 'clones a remote repo' do
       apply_manifest(pp, :catch_failures => true)
       apply_manifest(pp, :catch_changes => true)
     end
-
-    after(:all) do
-      pp = <<-EOS
-      user { 'testuser-ssh':
-        ensure => absent,
-        managehome => true,
-      }
-      EOS
-      apply_manifest(pp, :catch_failures => true)
-    end
   end
 end
index a753610..2fd63f0 100644 (file)
@@ -175,6 +175,28 @@ branches
         provider.expects(:git).with('checkout', '--force', resource.value(:revision))
         provider.create
       end
+      it "should warn about destroying it using force and noop attribute" do
+        resource[:force] = true
+        resource[:noop] = true
+        resource.delete(:revision)
+        provider.expects(:working_copy_exists?).returns(true)
+
+        provider.expects(:destroy).never
+        provider.expects(:create).never
+        Puppet::Type::Vcsrepo::Ensure.any_instance.expects(:send_log).with(:notice, "Noop Mode - Would have deleted repository and re-created from latest")
+        provider.resource.retrieve
+      end
+      it "should warn about destroying it using force and global noop" do
+        resource[:force] = true
+        Puppet[:noop] = true
+        resource.delete(:revision)
+        provider.expects(:working_copy_exists?).returns(true)
+
+        provider.expects(:destroy).never
+        provider.expects(:create).never
+        Puppet::Type::Vcsrepo::Ensure.any_instance.expects(:send_log).with(:notice, "Noop Mode - Would have deleted repository and re-created from latest")
+        provider.resource.retrieve
+      end
     end
 
     context "when the path is not empty and not a repository" do