summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorKen Barber <ken@bob.sh>2012-03-12 16:12:36 -0700
committerKen Barber <ken@bob.sh>2012-03-12 16:12:36 -0700
commit5d1cec8a66fd67ebf4242c08abdf087783706057 (patch)
tree7b1692232877f53b7a18b029b31102c13f405fe8 /lib
parentfab75be6c9ceea283e0aa8d90f7943316b3efca6 (diff)
parent31944c986345a135a3e68247c6d3e644ea369089 (diff)
downloadpuppet-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.rb22
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