summaryrefslogtreecommitdiffstats
path: root/lib/puppet
diff options
context:
space:
mode:
authorPieter van de Bruggen <pieter@puppetlabs.com>2011-03-25 14:52:48 -0700
committerPieter van de Bruggen <pieter@puppetlabs.com>2011-03-28 18:07:15 -0700
commit4609e203fd47f8159118bb74a8308f9c6aee179f (patch)
treec3feec649a86d9f7bdf15e24053fdf6c2f2b8df6 /lib/puppet
parent2ad8c96935ec53c2d98201ad77fd070dc40dadb6 (diff)
downloadpuppet-4609e203fd47f8159118bb74a8308f9c6aee179f.tar.gz
puppet-4609e203fd47f8159118bb74a8308f9c6aee179f.tar.xz
puppet-4609e203fd47f8159118bb74a8308f9c6aee179f.zip
(#6770) Change versioning; adopt :current over :latest.
As per discussion with Luke, versions of an interface are first looked up by requiring 'puppet/interface/{name}', and secondarily looked up by requiring '{name}@{version}/puppet/interface/{name}' if the first failed. A version of `:current` can be used to represent the version living in 'puppet/interface/{name}'. Paired-With: Nick Lewis
Diffstat (limited to 'lib/puppet')
-rw-r--r--lib/puppet/application/string_base.rb4
-rw-r--r--lib/puppet/string.rb30
-rw-r--r--lib/puppet/string/catalog.rb (renamed from lib/puppet/string/v0.0.1/catalog.rb)0
-rw-r--r--lib/puppet/string/catalog/select.rb (renamed from lib/puppet/string/v0.0.1/catalog/select.rb)0
-rw-r--r--lib/puppet/string/certificate.rb (renamed from lib/puppet/string/v0.0.1/certificate.rb)0
-rw-r--r--lib/puppet/string/certificate_request.rb (renamed from lib/puppet/string/v0.0.1/certificate_request.rb)0
-rw-r--r--lib/puppet/string/certificate_revocation_list.rb (renamed from lib/puppet/string/v0.0.1/certificate_revocation_list.rb)0
-rw-r--r--lib/puppet/string/config.rb (renamed from lib/puppet/string/v0.0.1/config.rb)0
-rw-r--r--lib/puppet/string/configurer.rb (renamed from lib/puppet/string/v0.0.1/configurer.rb)0
-rw-r--r--lib/puppet/string/facts.rb (renamed from lib/puppet/string/v0.0.1/facts.rb)0
-rw-r--r--lib/puppet/string/file.rb (renamed from lib/puppet/string/v0.0.1/file.rb)0
-rw-r--r--lib/puppet/string/key.rb (renamed from lib/puppet/string/v0.0.1/key.rb)0
-rw-r--r--lib/puppet/string/node.rb (renamed from lib/puppet/string/v0.0.1/node.rb)0
-rw-r--r--lib/puppet/string/report.rb (renamed from lib/puppet/string/v0.0.1/report.rb)0
-rw-r--r--lib/puppet/string/resource.rb (renamed from lib/puppet/string/v0.0.1/resource.rb)0
-rw-r--r--lib/puppet/string/resource_type.rb (renamed from lib/puppet/string/v0.0.1/resource_type.rb)0
-rw-r--r--lib/puppet/string/status.rb (renamed from lib/puppet/string/v0.0.1/status.rb)0
-rw-r--r--lib/puppet/string/string_collection.rb66
18 files changed, 40 insertions, 60 deletions
diff --git a/lib/puppet/application/string_base.rb b/lib/puppet/application/string_base.rb
index 5b701597d..bc627adde 100644
--- a/lib/puppet/application/string_base.rb
+++ b/lib/puppet/application/string_base.rb
@@ -72,10 +72,10 @@ class Puppet::Application::StringBase < Puppet::Application
@type = self.class.name.to_s.sub(/.+:/, '').downcase.to_sym
# TODO: These should be configurable versions.
- unless Puppet::String.string?(@type, :latest)
+ unless Puppet::String.string?(@type, :current)
raise "Could not find any version of string '#{@type}'"
end
- @string = Puppet::String[@type, :latest]
+ @string = Puppet::String[@type, :current]
@format ||= @string.default_format
# We copy all of the app options to the string.
diff --git a/lib/puppet/string.rb b/lib/puppet/string.rb
index b5f7b9048..9a223a40c 100644
--- a/lib/puppet/string.rb
+++ b/lib/puppet/string.rb
@@ -70,23 +70,25 @@ class Puppet::String
# Try to find actions defined in other files.
def load_actions
- path = "puppet/string/v#{version}/#{name}"
+ path = "puppet/string/#{name}"
loaded = []
- Puppet::String.autoloader.search_directories.each do |dir|
- fdir = ::File.join(dir, path)
- next unless FileTest.directory?(fdir)
-
- Dir.chdir(fdir) do
- Dir.glob("*.rb").each do |file|
- aname = file.sub(/\.rb/, '')
- if loaded.include?(aname)
- Puppet.debug "Not loading duplicate action '#{aname}' for '#{name}' from '#{fdir}/#{file}'"
- next
+ [path, "#{name}@#{version}/#{path}"].each do |path|
+ Puppet::String.autoloader.search_directories.each do |dir|
+ fdir = ::File.join(dir, path)
+ next unless FileTest.directory?(fdir)
+
+ Dir.chdir(fdir) do
+ Dir.glob("*.rb").each do |file|
+ aname = file.sub(/\.rb/, '')
+ if loaded.include?(aname)
+ Puppet.debug "Not loading duplicate action '#{aname}' for '#{name}' from '#{fdir}/#{file}'"
+ next
+ end
+ loaded << aname
+ Puppet.debug "Loading action '#{aname}' for '#{name}' from '#{fdir}/#{file}'"
+ require "#{path}/#{aname}"
end
- loaded << aname
- Puppet.debug "Loading action '#{aname}' for '#{name}' from '#{fdir}/#{file}'"
- require "#{path}/#{aname}"
end
end
end
diff --git a/lib/puppet/string/v0.0.1/catalog.rb b/lib/puppet/string/catalog.rb
index 0ddd83176..0ddd83176 100644
--- a/lib/puppet/string/v0.0.1/catalog.rb
+++ b/lib/puppet/string/catalog.rb
diff --git a/lib/puppet/string/v0.0.1/catalog/select.rb b/lib/puppet/string/catalog/select.rb
index 52c77d3ce..52c77d3ce 100644
--- a/lib/puppet/string/v0.0.1/catalog/select.rb
+++ b/lib/puppet/string/catalog/select.rb
diff --git a/lib/puppet/string/v0.0.1/certificate.rb b/lib/puppet/string/certificate.rb
index 7b2e5f397..7b2e5f397 100644
--- a/lib/puppet/string/v0.0.1/certificate.rb
+++ b/lib/puppet/string/certificate.rb
diff --git a/lib/puppet/string/v0.0.1/certificate_request.rb b/lib/puppet/string/certificate_request.rb
index 218b40b98..218b40b98 100644
--- a/lib/puppet/string/v0.0.1/certificate_request.rb
+++ b/lib/puppet/string/certificate_request.rb
diff --git a/lib/puppet/string/v0.0.1/certificate_revocation_list.rb b/lib/puppet/string/certificate_revocation_list.rb
index 9731b4f2d..9731b4f2d 100644
--- a/lib/puppet/string/v0.0.1/certificate_revocation_list.rb
+++ b/lib/puppet/string/certificate_revocation_list.rb
diff --git a/lib/puppet/string/v0.0.1/config.rb b/lib/puppet/string/config.rb
index ae1a408cf..ae1a408cf 100644
--- a/lib/puppet/string/v0.0.1/config.rb
+++ b/lib/puppet/string/config.rb
diff --git a/lib/puppet/string/v0.0.1/configurer.rb b/lib/puppet/string/configurer.rb
index a6ea74b6a..a6ea74b6a 100644
--- a/lib/puppet/string/v0.0.1/configurer.rb
+++ b/lib/puppet/string/configurer.rb
diff --git a/lib/puppet/string/v0.0.1/facts.rb b/lib/puppet/string/facts.rb
index 73acb0df6..73acb0df6 100644
--- a/lib/puppet/string/v0.0.1/facts.rb
+++ b/lib/puppet/string/facts.rb
diff --git a/lib/puppet/string/v0.0.1/file.rb b/lib/puppet/string/file.rb
index cc5737f28..cc5737f28 100644
--- a/lib/puppet/string/v0.0.1/file.rb
+++ b/lib/puppet/string/file.rb
diff --git a/lib/puppet/string/v0.0.1/key.rb b/lib/puppet/string/key.rb
index 95aceade5..95aceade5 100644
--- a/lib/puppet/string/v0.0.1/key.rb
+++ b/lib/puppet/string/key.rb
diff --git a/lib/puppet/string/v0.0.1/node.rb b/lib/puppet/string/node.rb
index bc31a2cf3..bc31a2cf3 100644
--- a/lib/puppet/string/v0.0.1/node.rb
+++ b/lib/puppet/string/node.rb
diff --git a/lib/puppet/string/v0.0.1/report.rb b/lib/puppet/string/report.rb
index 55a008533..55a008533 100644
--- a/lib/puppet/string/v0.0.1/report.rb
+++ b/lib/puppet/string/report.rb
diff --git a/lib/puppet/string/v0.0.1/resource.rb b/lib/puppet/string/resource.rb
index 9838be0fa..9838be0fa 100644
--- a/lib/puppet/string/v0.0.1/resource.rb
+++ b/lib/puppet/string/resource.rb
diff --git a/lib/puppet/string/v0.0.1/resource_type.rb b/lib/puppet/string/resource_type.rb
index 8ca31ea6c..8ca31ea6c 100644
--- a/lib/puppet/string/v0.0.1/resource_type.rb
+++ b/lib/puppet/string/resource_type.rb
diff --git a/lib/puppet/string/v0.0.1/status.rb b/lib/puppet/string/status.rb
index 41de2bb99..41de2bb99 100644
--- a/lib/puppet/string/v0.0.1/status.rb
+++ b/lib/puppet/string/status.rb
diff --git a/lib/puppet/string/string_collection.rb b/lib/puppet/string/string_collection.rb
index e9cba7f55..45a192703 100644
--- a/lib/puppet/string/string_collection.rb
+++ b/lib/puppet/string/string_collection.rb
@@ -26,61 +26,39 @@ module Puppet::String::StringCollection
return @strings.keys
end
- def self.versions(name)
- versions = []
- $LOAD_PATH.each do |dir|
- next unless FileTest.directory?(dir)
- v_dir = File.join dir, %w[puppet string v*]
- Dir.glob(File.join v_dir, "#{name}{.rb,/*.rb}").each do |f|
- v = f.sub(%r[.*/v([^/]+?)/#{name}(?:(?:/[^/]+)?.rb)$], '\1')
- if validate_version(v)
- versions << v
- else
- warn "'#{v}' (#{f}) is not a valid version string; skipping"
- end
- end
- end
- return versions.uniq.sort { |a, b| compare_versions(a, b) }
- end
-
def self.validate_version(version)
!!(SEMVER_VERSION =~ version.to_s)
end
- def self.compare_versions(a, b)
- a, b = [a, b].map do |x|
- parts = SEMVER_VERSION.match(x).to_a[1..4]
- parts[0..2] = parts[0..2].map { |e| e.to_i }
- parts
- end
-
- cmp = a[0..2] <=> b[0..2]
- if cmp == 0
- cmp = a[3] <=> b[3]
- cmp = +1 if a[3].empty? && !b[3].empty?
- cmp = -1 if b[3].empty? && !a[3].empty?
- end
- cmp
- end
-
def self.[](name, version)
- version = versions(name).last if version == :latest
- unless version.nil?
- @strings[underscorize(name)][version] if string?(name, version)
- end
+ @strings[underscorize(name)][version] if string?(name, version)
end
def self.string?(name, version)
- version = versions(name).last if version == :latest
- return false if version.nil?
-
name = underscorize(name)
+ cache = @strings[name]
+ return true if cache.has_key?(version)
- unless @strings.has_key?(name) && @strings[name].has_key?(version)
- require "puppet/string/v#{version}/#{name}"
+ loaded = cache.keys
+
+ files = ["puppet/string/#{name}"]
+ unless version == :current
+ files << "#{name}@#{version}/puppet/string/#{name}"
end
- return @strings.has_key?(name) && @strings[name].has_key?(version)
- rescue LoadError
+
+ files.each do |file|
+ begin
+ require file
+ if version == :current || !file.include?('@')
+ loaded = (cache.keys - loaded).first
+ cache[:current] = cache[loaded] unless loaded.nil?
+ end
+ return true if cache.has_key?(version)
+ rescue LoadError
+ # pass
+ end
+ end
+
return false
end