diff options
author | Ken Barber <ken@bob.sh> | 2012-03-12 16:12:36 -0700 |
---|---|---|
committer | Ken Barber <ken@bob.sh> | 2012-03-12 16:12:36 -0700 |
commit | 5d1cec8a66fd67ebf4242c08abdf087783706057 (patch) | |
tree | 7b1692232877f53b7a18b029b31102c13f405fe8 /lib | |
parent | fab75be6c9ceea283e0aa8d90f7943316b3efca6 (diff) | |
parent | 31944c986345a135a3e68247c6d3e644ea369089 (diff) | |
download | puppet-stdlib-5d1cec8a66fd67ebf4242c08abdf087783706057.tar.gz puppet-stdlib-5d1cec8a66fd67ebf4242c08abdf087783706057.tar.bz2 |
Merge pull request #49 from jeffmccune/bug/2.3.x/fix_absolute_path_error_with_puppet26
(#12357) Fix broken compatibility with Puppet 2.6
Diffstat (limited to 'lib')
-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 |