summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2006-01-12 01:58:19 +0000
committerluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2006-01-12 01:58:19 +0000
commit411ab22588da2cbe76d186fbd4b59f6194766c4d (patch)
tree149909b773377b9a11bf5f68e7d104b1f975047c
parent97fb6c91d60cfe20f0521a7148d202ed25434b7d (diff)
Adding autorequire to files, and added the cwd to the list of files to be required for exec. Also, exec catches inline files and autorequires them.
git-svn-id: https://reductivelabs.com/svn/puppet/trunk@805 980ebf18-57e1-0310-9a29-db15c13687c0
-rw-r--r--lib/puppet/type.rb3
-rwxr-xr-xlib/puppet/type/exec.rb19
-rw-r--r--lib/puppet/type/pfile.rb10
-rw-r--r--test/puppettest.rb2
-rwxr-xr-xtest/server/fileserver.rb2
-rwxr-xr-xtest/types/exec.rb24
-rw-r--r--test/types/file.rb20
-rwxr-xr-xtest/types/filebucket.rb5
-rw-r--r--test/types/fileignoresource.rb5
-rwxr-xr-xtest/types/filesources.rb5
10 files changed, 75 insertions, 20 deletions
diff --git a/lib/puppet/type.rb b/lib/puppet/type.rb
index af74e76c1..fa87de641 100644
--- a/lib/puppet/type.rb
+++ b/lib/puppet/type.rb
@@ -1046,6 +1046,9 @@ class Type < Puppet::Element
# Retrieve the list of names from the block.
next unless list = self.instance_eval(&block)
+ unless list.is_a?(Array)
+ list = [list]
+ end
list.each { |dep|
if obj = typeobj[dep]
unless self.requires?(obj)
diff --git a/lib/puppet/type/exec.rb b/lib/puppet/type/exec.rb
index 5d96dabd7..9570c86b8 100755
--- a/lib/puppet/type/exec.rb
+++ b/lib/puppet/type/exec.rb
@@ -265,9 +265,24 @@ module Puppet
end
autorequire(:file) do
- if self[:command] =~ /^#{File::SEPARATOR}/
- self[:command].sub(/\s.+/,'')
+ reqs = []
+
+ # Stick the cwd in there if we have it
+ if self[:cwd]
+ reqs << self[:cwd]
end
+
+ tmp = self[:command].dup
+
+ # And search the command line for files, adding any we find. This
+ # will also catch the command itself if it's fully qualified. It might
+ # not be a bad idea to add unqualified files, but, well, that's a
+ # bit more annoying to do.
+ while tmp.sub!(%r{(#{File::SEPARATOR}\S+)}, '')
+ reqs << $1
+ end
+
+ reqs
end
def output
diff --git a/lib/puppet/type/pfile.rb b/lib/puppet/type/pfile.rb
index dfe76b401..c13e7038d 100644
--- a/lib/puppet/type/pfile.rb
+++ b/lib/puppet/type/pfile.rb
@@ -75,6 +75,16 @@ module Puppet
end
end
+ autorequire(:file) do
+ cur = []
+ # Skip the nil in the beginning and don't add ourselves as a prereq
+ # either.
+ self.name.split(File::SEPARATOR)[1..-2].collect { |dir|
+ cur << dir
+ "/" + cur.join(File::SEPARATOR)
+ }
+ end
+
@depthfirst = false
diff --git a/test/puppettest.rb b/test/puppettest.rb
index 202d57478..d489cd5e8 100644
--- a/test/puppettest.rb
+++ b/test/puppettest.rb
@@ -122,7 +122,7 @@ module TestPuppet
return f
end
- def testdir
+ def tstdir
if defined? @testdirnum
@testdirnum += 1
else
diff --git a/test/server/fileserver.rb b/test/server/fileserver.rb
index d1cdd696b..bc610f65b 100755
--- a/test/server/fileserver.rb
+++ b/test/server/fileserver.rb
@@ -631,7 +631,7 @@ class TestFileServer < Test::Unit::TestCase
def test_filereread
server = nil
- dir = testdir()
+ dir = tstdir()
files = mktestfiles(dir)
diff --git a/test/types/exec.rb b/test/types/exec.rb
index 02bb5e9eb..446865774 100755
--- a/test/types/exec.rb
+++ b/test/types/exec.rb
@@ -229,17 +229,39 @@ class TestExec < Test::Unit::TestCase
:mode => 755
)
+ basedir = File.dirname(oexe)
+ baseobj = Puppet.type(:file).create(
+ :name => basedir,
+ :source => exe,
+ :mode => 755
+ )
+
ofile = Puppet.type(:file).create(
:name => exe,
:mode => 755
)
exec = Puppet.type(:exec).create(
- :name => oexe
+ :name => oexe,
+ :cwd => basedir
)
+ cat = Puppet.type(:exec).create(
+ :name => "cat %s" % oexe,
+ :path => ENV["PATH"]
+ )
+
+ # Verify we get the script itself
assert(exec.requires?(file), "Exec did not autorequire file")
+
+ # Verify we catch the cwd
+ assert(exec.requires?(baseobj), "Exec did not autorequire cwd")
+
+ # Verify we don't require ourselves
assert(!exec.requires?(ofile), "Exec incorrectly required file")
+
+ # Verify that we catch inline files
+ assert(cat.requires?(file), "Exec did not catch inline file")
end
if Process.uid == 0
diff --git a/test/types/file.rb b/test/types/file.rb
index 1e70b725f..93332e06a 100644
--- a/test/types/file.rb
+++ b/test/types/file.rb
@@ -566,6 +566,26 @@ class TestFile < Test::Unit::TestCase
assert_equal("file=%s" % file.name, file.path)
end
+
+ def test_autorequire
+ basedir = tempfile()
+ subfile = File.join(basedir, "subfile")
+
+ baseobj = Puppet.type(:file).create(
+ :name => basedir,
+ :create => "directory"
+ )
+
+ subobj = Puppet.type(:file).create(
+ :name => subfile,
+ :create => "file"
+ )
+
+ assert(subobj.requires?(baseobj), "File did not require basedir")
+ assert(!subobj.requires?(subobj), "File required itself")
+ comp = newcomp(subobj, baseobj)
+ assert_events([:directory_created, :file_created], comp)
+ end
end
# $Id$
diff --git a/test/types/filebucket.rb b/test/types/filebucket.rb
index 909170f77..5220eea98 100755
--- a/test/types/filebucket.rb
+++ b/test/types/filebucket.rb
@@ -56,11 +56,6 @@ class TestFileBucket < Test::Unit::TestCase
end
end
- def teardown
- super
- clearstorage
- end
-
def initstorage
Puppet::Storage.init
Puppet::Storage.load
diff --git a/test/types/fileignoresource.rb b/test/types/fileignoresource.rb
index 688b57845..ce8352384 100644
--- a/test/types/fileignoresource.rb
+++ b/test/types/fileignoresource.rb
@@ -24,11 +24,6 @@ class TestFileIgnoreSources < Test::Unit::TestCase
end
end
- def teardown
- super
- clearstorage
- end
-
#This is not needed unless using md5 (correct me if I'm wrong)
def initstorage
Puppet::Storage.init
diff --git a/test/types/filesources.rb b/test/types/filesources.rb
index 8dd0ca6b5..5ae728c81 100755
--- a/test/types/filesources.rb
+++ b/test/types/filesources.rb
@@ -27,11 +27,6 @@ class TestFileSources < Test::Unit::TestCase
end
end
- def teardown
- super
- clearstorage
- end
-
def initstorage
Puppet::Storage.init
Puppet::Storage.load