diff options
author | Jeff McCune <jeff@puppetlabs.com> | 2012-03-12 15:53:02 -0700 |
---|---|---|
committer | Jeff McCune <jeff@puppetlabs.com> | 2012-03-12 15:59:50 -0700 |
commit | 31944c986345a135a3e68247c6d3e644ea369089 (patch) | |
tree | 7b1692232877f53b7a18b029b31102c13f405fe8 /lib/puppet/parser/functions | |
parent | fab75be6c9ceea283e0aa8d90f7943316b3efca6 (diff) | |
download | puppet-stdlib-31944c986345a135a3e68247c6d3e644ea369089.tar.gz puppet-stdlib-31944c986345a135a3e68247c6d3e644ea369089.tar.bz2 |
(#12357) Fix broken compatibility with Puppet 2.6
Without this patch, the previous change set to the
validate_absolute_path() parser function contains Puppet 2.6
incompatible changes. stdlib 2.x is compatible with Puppet 2.6. These
changes are a problem because we cannot introduce backwards incompatible
changes in a minor release.
This patch fixes the problem by back porting the implementation of the
`Puppet::Util.absolute_path?` from 2.7.x to the function block itself.
The function block tests to see if `Puppet::Util.absolute_path?` will
respond and if not, falls back to the inline back ported implementation.
The spec tests have been updated to simulate the behavior of Puppet 2.6
even when running with Puppet 2.7.
Diffstat (limited to 'lib/puppet/parser/functions')
-rw-r--r-- | lib/puppet/parser/functions/validate_absolute_path.rb | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/lib/puppet/parser/functions/validate_absolute_path.rb b/lib/puppet/parser/functions/validate_absolute_path.rb index 46f86ec..fe27974 100644 --- a/lib/puppet/parser/functions/validate_absolute_path.rb +++ b/lib/puppet/parser/functions/validate_absolute_path.rb @@ -30,8 +30,26 @@ module Puppet::Parser::Functions args.each do |arg| # This logic was borrowed from # [lib/puppet/file_serving/base.rb](https://github.com/puppetlabs/puppet/blob/master/lib/puppet/file_serving/base.rb) - unless Puppet::Util.absolute_path?(arg, :posix) or Puppet::Util.absolute_path?(arg, :windows) - raise Puppet::ParseError, ("#{arg.inspect} is not an absolute path.") + + # Puppet 2.7 and beyond will have Puppet::Util.absolute_path? Fall back to a back-ported implementation otherwise. + if Puppet::Util.respond_to?(:absolute_path?) then + unless Puppet::Util.absolute_path?(arg, :posix) or Puppet::Util.absolute_path?(arg, :windows) + raise Puppet::ParseError, ("#{arg.inspect} is not an absolute path.") + end + else + # This code back-ported from 2.7.x's lib/puppet/util.rb Puppet::Util.absolute_path? + # Determine in a platform-specific way whether a path is absolute. This + # defaults to the local platform if none is specified. + # Escape once for the string literal, and once for the regex. + slash = '[\\\\/]' + name = '[^\\\\/]+' + regexes = { + :windows => %r!^(([A-Z]:#{slash})|(#{slash}#{slash}#{name}#{slash}#{name})|(#{slash}#{slash}\?#{slash}#{name}))!i, + :posix => %r!^/!, + } + + rval = (!!(arg =~ regexes[:posix])) || (!!(arg =~ regexes[:windows])) + rval or raise Puppet::ParseError, ("#{arg.inspect} is not an absolute path.") end end end |