openSUSE Commits
Threads by month
- ----- 2024 -----
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
January 2016
- 1 participants
- 1523 discussions
Hello community,
here is the log from the commit of package rubygem-puppet for openSUSE:Factory checked in at 2016-01-28 17:23:13
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/rubygem-puppet (Old)
and /work/SRC/openSUSE:Factory/.rubygem-puppet.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "rubygem-puppet"
Changes:
--------
--- /work/SRC/openSUSE:Factory/rubygem-puppet/rubygem-puppet.changes 2015-12-09 22:33:29.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.rubygem-puppet.new/rubygem-puppet.changes 2016-01-28 17:23:56.000000000 +0100
@@ -1,0 +2,6 @@
+Fri Jan 22 17:15:04 UTC 2016 - kstreitova(a)suse.com
+
+- Update to 3.8.5
+ https://docs.puppetlabs.com/puppet/3.8/reference/release_notes.html#puppet-…
+
+-------------------------------------------------------------------
Old:
----
puppet-3.8.4.gem
New:
----
puppet-3.8.5.gem
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ rubygem-puppet.spec ++++++
--- /var/tmp/diff_new_pack.PLXK0l/_old 2016-01-28 17:23:57.000000000 +0100
+++ /var/tmp/diff_new_pack.PLXK0l/_new 2016-01-28 17:23:57.000000000 +0100
@@ -24,7 +24,7 @@
#
Name: rubygem-puppet
-Version: 3.8.4
+Version: 3.8.5
Release: 0
%define mod_name puppet
%define mod_full_name %{mod_name}-%{version}
++++++ puppet-3.8.4.gem -> puppet-3.8.5.gem ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ext/build_defaults.yaml new/ext/build_defaults.yaml
--- old/ext/build_defaults.yaml 1970-01-01 01:00:00.000000000 +0100
+++ new/ext/build_defaults.yaml 1970-01-01 01:00:00.000000000 +0100
@@ -19,17 +19,17 @@
ref: 'refs/tags/3.8.3'
repo: 'git://github.com/puppetlabs/puppet_for_the_win.git'
facter:
- ref: 'refs/tags/2.4.4'
+ ref: 'refs/tags/2.4.5'
repo: 'git://github.com/puppetlabs/facter.git'
hiera:
ref: 'refs/tags/1.3.4'
repo: 'git://github.com/puppetlabs/hiera.git'
sys:
ref:
- x86: 'refs/tags/1.9.3-p551.6'
- x64: 'refs/tags/2.0.0.9-x64'
+ x86: 'refs/tags/1.9.3-p551.8'
+ x64: 'refs/tags/2.0.0.11-x64'
repo: 'git://github.com/puppetlabs/puppet-win32-ruby.git'
-apt_host: 'apt.puppetlabs.com'
+apt_signing_server: 'apt.puppetlabs.com'
apt_repo_url: 'http://apt.puppetlabs.com'
apt_repo_path: '/opt/repository/incoming'
ips_repo: '/var/pkgrepo'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/puppet/daemon.rb new/lib/puppet/daemon.rb
--- old/lib/puppet/daemon.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/lib/puppet/daemon.rb 1970-01-01 01:00:00.000000000 +0100
@@ -24,6 +24,7 @@
SIGNAL_CHECK_INTERVAL = 5
attr_accessor :agent, :server, :argv
+ attr_reader :signals
def initialize(pidfile, scheduler = Puppet::Scheduler::Scheduler.new())
@scheduler = scheduler
@@ -107,13 +108,21 @@
# Trap a couple of the main signals. This should probably be handled
# in a way that anyone else can register callbacks for traps, but, eh.
def set_signal_traps
- signals = {:INT => :stop, :TERM => :stop }
- # extended signals not supported under windows
- signals.update({:HUP => :restart, :USR1 => :reload, :USR2 => :reopen_logs }) unless Puppet.features.microsoft_windows?
- signals.each do |signal, method|
+ [:INT, :TERM].each do |signal|
Signal.trap(signal) do
- Puppet.notice "Caught #{signal}; storing #{method}"
- @signals << method
+ Puppet.notice "Caught #{signal}; exiting"
+ stop
+ end
+ end
+
+ # extended signals not supported under windows
+ if !Puppet.features.microsoft_windows?
+ signals = {:HUP => :restart, :USR1 => :reload, :USR2 => :reopen_logs }
+ signals.each do |signal, method|
+ Signal.trap(signal) do
+ Puppet.notice "Caught #{signal}; storing #{method}"
+ @signals << method
+ end
end
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/puppet/node.rb new/lib/puppet/node.rb
--- old/lib/puppet/node.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/lib/puppet/node.rb 1970-01-01 01:00:00.000000000 +0100
@@ -18,6 +18,8 @@
::PSON.register_document_type('Node',self)
+ ENVIRONMENT = 'environment'.freeze
+
def self.from_data_hash(data)
raise ArgumentError, "No name provided in serialized data" unless name = data['name']
@@ -58,7 +60,7 @@
if @environment
@environment
else
- if env = parameters["environment"]
+ if env = parameters[ENVIRONMENT]
self.environment = env
elsif environment_name
self.environment = environment_name
@@ -80,6 +82,13 @@
else
@environment = env
end
+
+ # Keep environment_name attribute and parameter in sync if they have been set
+ unless @environment.nil?
+ @parameters[ENVIRONMENT] = @environment.name if @parameters.include?(ENVIRONMENT)
+ self.environment_name = @environment.name if instance_variable_defined?(:@environment_name)
+ end
+ @environment
end
def has_environment_instance?
@@ -129,7 +138,7 @@
@parameters[name] = value unless @parameters.include?(name)
end
- @parameters["environment"] ||= self.environment.name.to_s
+ @parameters[ENVIRONMENT] ||= self.environment.name.to_s
end
# Calculate the list of names we might use for looking
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/puppet/pops/evaluator/access_operator.rb new/lib/puppet/pops/evaluator/access_operator.rb
--- old/lib/puppet/pops/evaluator/access_operator.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/lib/puppet/pops/evaluator/access_operator.rb 1970-01-01 01:00:00.000000000 +0100
@@ -39,7 +39,7 @@
fail(Puppet::Pops::Issues::BAD_STRING_SLICE_ARITY, @semantic.left_expr, {:actual => keys.size})
when 1
# Note that Ruby 1.8.7 requires a length of 1 to produce a String
- k1 = coerce_numeric(keys[0], @semantic.keys, scope)
+ k1 = coerce_numeric(keys[0], @semantic.keys[0], scope)
bad_access_key_type(o, 0, k1, Integer) unless k1.is_a?(Integer)
k2 = 1
k1 = k1 < 0 ? o.length + k1 : k1 # abs pos
@@ -50,8 +50,8 @@
o[ k1, k2 ]
end
when 2
- k1 = coerce_numeric(keys[0], @semantic.keys, scope)
- k2 = coerce_numeric(keys[1], @semantic.keys, scope)
+ k1 = coerce_numeric(keys[0], @semantic.keys[0], scope)
+ k2 = coerce_numeric(keys[1], @semantic.keys[1], scope)
[k1, k2].each_with_index { |k,i| bad_access_key_type(o, i, k, Integer) unless k.is_a?(Integer) }
k1 = k1 < 0 ? o.length + k1 : k1 # abs pos (negative is count from end)
@@ -317,6 +317,9 @@
end
ranged_integer = Puppet::Pops::Types::PIntegerType.new()
from, to = keys
+ # NOTE! Do not merge the following line to 4.x. It has the same check in the initialize method
+ raise ArgumentError, "'from' must be less or equal to 'to'. Got (#{from}, #{to}" if from.is_a?(Numeric) && to.is_a?(Numeric) && from > to
+
ranged_integer.from = from == :default ? nil : from
ranged_integer.to = to == :default ? nil : to
ranged_integer
@@ -333,6 +336,9 @@
end
ranged_float = Puppet::Pops::Types::PFloatType.new()
from, to = keys
+ # NOTE! Do not merge the following line to 4.x. It has the same check in the initialize method
+ raise ArgumentError, "'from' must be less or equal to 'to'. Got (#{from}, #{to}" if from.is_a?(Numeric) && to.is_a?(Numeric) && from > to
+
ranged_float.from = from == :default || from.nil? ? nil : Float(from)
ranged_float.to = to == :default || to.nil? ? nil : Float(to)
ranged_float
@@ -428,6 +434,9 @@
end
ranged_integer = Puppet::Pops::Types::PIntegerType.new()
from, to = keys
+ # NOTE! Do not merge the following line to 4.x. It has the same check in the initialize method
+ raise ArgumentError, "'from' must be less or equal to 'to'. Got (#{from}, #{to}" if from.is_a?(Numeric) && to.is_a?(Numeric) && from > to
+
ranged_integer.from = from == :default ? nil : from
ranged_integer.to = to == :default ? nil : to
ranged_integer
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/puppet/pops/issues.rb new/lib/puppet/pops/issues.rb
--- old/lib/puppet/pops/issues.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/lib/puppet/pops/issues.rb 1970-01-01 01:00:00.000000000 +0100
@@ -546,6 +546,10 @@
"Resource Override can only operate on resources, got: #{label.label(actual)}"
end
+ DUPLICATE_PARAMETER = hard_issue :DUPLICATE_PARAMETER, :param_name do
+ "The parameter '#{param_name}' is declared more than once in the parameter list"
+ end
+
RESERVED_PARAMETER = hard_issue :RESERVED_PARAMETER, :container, :param_name do
"The parameter $#{param_name} redefines a built in parameter in #{label.the(container)}"
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/puppet/pops/types/type_calculator.rb new/lib/puppet/pops/types/type_calculator.rb
--- old/lib/puppet/pops/types/type_calculator.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/lib/puppet/pops/types/type_calculator.rb 1970-01-01 01:00:00.000000000 +0100
@@ -1069,11 +1069,7 @@
to = range.to
x = from.nil? ? 1 : from
y = to.nil? ? TheInfinity : to
- if x < y
- [x, y]
- else
- [y, x]
- end
+ [x, y]
end
# @api private
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/puppet/pops/types/type_factory.rb new/lib/puppet/pops/types/type_factory.rb
--- old/lib/puppet/pops/types/type_factory.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/lib/puppet/pops/types/type_factory.rb 1970-01-01 01:00:00.000000000 +0100
@@ -17,6 +17,9 @@
# @api public
#
def self.range(from, to)
+ # NOTE! Do not merge the following line to 4.x. It has the same check in the initialize method
+ raise ArgumentError, "'from' must be less or equal to 'to'. Got (#{from}, #{to}" if from.is_a?(Numeric) && to.is_a?(Numeric) && from > to
+
t = Types::PIntegerType.new()
# optimize eq with symbol (faster when it is left)
t.from = from unless (:default == from || from == 'default')
@@ -28,6 +31,9 @@
# @api public
#
def self.float_range(from, to)
+ # NOTE! Do not merge the following line to 4.x. It has the same check in the initialize method
+ raise ArgumentError, "'from' must be less or equal to 'to'. Got (#{from}, #{to}" if from.is_a?(Numeric) && to.is_a?(Numeric) && from > to
+
t = Types::PFloatType.new()
# optimize eq with symbol (faster when it is left)
t.from = Float(from) unless :default == from || from.nil?
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/puppet/pops/types/types.rb new/lib/puppet/pops/types/types.rb
--- old/lib/puppet/pops/types/types.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/lib/puppet/pops/types/types.rb 1970-01-01 01:00:00.000000000 +0100
@@ -121,11 +121,7 @@
def range
f = from || NEGATIVE_INFINITY
t = to || INFINITY
- if f < t
- [f, t]
- else
- [t,f]
- end
+ [f, t]
end
# Returns Enumerator if no block is given
@@ -133,11 +129,7 @@
def each
return self.to_enum unless block_given?
return nil if from.nil? || to.nil?
- if to < from
- from.downto(to) {|x| yield x }
- else
- from.upto(to) {|x| yield x }
- end
+ from.upto(to) {|x| yield x }
end
def hash
@@ -212,11 +204,7 @@
return [0, INFINITY] if size_type.nil?
f = size_type.from || 0
t = size_type.to || INFINITY
- if f < t
- [f, t]
- else
- [t,f]
- end
+ [f, t]
end
def hash
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/puppet/pops/validation/checker4_0.rb new/lib/puppet/pops/validation/checker4_0.rb
--- old/lib/puppet/pops/validation/checker4_0.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/lib/puppet/pops/validation/checker4_0.rb 1970-01-01 01:00:00.000000000 +0100
@@ -233,6 +233,7 @@
def check_EppExpression(o)
if o.eContainer.is_a?(Puppet::Pops::Model::LambdaExpression)
internal_check_no_capture(o.eContainer, o)
+ internal_check_parameter_name_uniqueness(o.eContainer)
end
end
@@ -327,12 +328,14 @@
def check_HostClassDefinition(o)
check_NamedDefinition(o)
internal_check_no_capture(o)
+ internal_check_parameter_name_uniqueness(o)
internal_check_reserved_params(o)
end
def check_ResourceTypeDefinition(o)
check_NamedDefinition(o)
internal_check_no_capture(o)
+ internal_check_parameter_name_uniqueness(o)
internal_check_reserved_params(o)
end
@@ -366,6 +369,13 @@
end
end
+ def internal_check_parameter_name_uniqueness(o)
+ unique = Set.new
+ o.parameters.each do |p|
+ acceptor.accept(Issues::DUPLICATE_PARAMETER, p, {:param_name => p.name}) unless unique.add?(p.name)
+ end
+ end
+
def check_IfExpression(o)
rvalue(o.test)
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/puppet/provider/group/windows_adsi.rb new/lib/puppet/provider/group/windows_adsi.rb
--- old/lib/puppet/provider/group/windows_adsi.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/lib/puppet/provider/group/windows_adsi.rb 1970-01-01 01:00:00.000000000 +0100
@@ -39,6 +39,11 @@
return '' if users.nil? or !users.kind_of?(Array)
users = users.map do |user_name|
sid = Puppet::Util::Windows::SID.name_to_sid_object(user_name)
+ if !sid
+ resource.debug("#{user_name} (unresolvable to SID)")
+ next user_name
+ end
+
if sid.account =~ /\\/
account, _ = Puppet::Util::Windows::ADSI::User.parse_name(sid.account)
else
@@ -50,6 +55,10 @@
return users.join(',')
end
+ def member_valid?(user_name)
+ ! Puppet::Util::Windows::SID.name_to_sid_object(user_name).nil?
+ end
+
def group
@group ||= Puppet::Util::Windows::ADSI::Group.new(@resource[:name])
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/puppet/provider/package/pip.rb new/lib/puppet/provider/package/pip.rb
--- old/lib/puppet/provider/package/pip.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/lib/puppet/provider/package/pip.rb 1970-01-01 01:00:00.000000000 +0100
@@ -3,6 +3,7 @@
require 'puppet/provider/package'
require 'xmlrpc/client'
+require 'puppet/util/http_proxy'
Puppet::Type.type(:package).provide :pip,
:parent => ::Puppet::Provider::Package do
@@ -56,7 +57,16 @@
# cache of PyPI's package list so this operation will always have to
# ask the web service.
def latest
- client = XMLRPC::Client.new2("http://pypi.python.org/pypi")
+ http_proxy_host = Puppet::Util::HttpProxy.http_proxy_host
+ http_proxy_port = Puppet::Util::HttpProxy.http_proxy_port
+ if http_proxy_host && http_proxy_port
+ proxy = "#{http_proxy_host}:#{http_proxy_port}"
+ else
+ # nil is acceptable
+ proxy = http_proxy_host
+ end
+
+ client = XMLRPC::Client.new2("http://pypi.python.org/pypi", proxy)
client.http_header_extra = {"Content-Type" => "text/xml"}
client.timeout = 10
result = client.call("package_releases", @resource[:name])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/puppet/provider/service/launchd.rb new/lib/puppet/provider/service/launchd.rb
--- old/lib/puppet/provider/service/launchd.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/lib/puppet/provider/service/launchd.rb 1970-01-01 01:00:00.000000000 +0100
@@ -205,6 +205,12 @@
# format.
def self.read_plist(path)
begin
+ return Plist::parse_xml(path)
+ rescue ArgumentError => detail
+ Puppet.debug("Error reading #{path}: #{detail}. Retrying with plutil.")
+ end
+
+ begin
Plist::parse_xml(plutil('-convert', 'xml1', '-o', '/dev/stdout', path))
rescue Puppet::ExecutionFailure => detail
Puppet.warning("Cannot read file #{path}; Puppet is skipping it. \n" +
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/puppet/provider/service/upstart.rb new/lib/puppet/provider/service/upstart.rb
--- old/lib/puppet/provider/service/upstart.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/lib/puppet/provider/service/upstart.rb 1970-01-01 01:00:00.000000000 +0100
@@ -151,7 +151,11 @@
end
def status
- return super if not is_upstart?
+ if (@resource[:hasstatus] == :false) ||
+ @resource[:status] ||
+ ! is_upstart?
+ return super
+ end
output = status_exec(@resource[:name].split)
if output =~ /start\//
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/puppet/resource.rb new/lib/puppet/resource.rb
--- old/lib/puppet/resource.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/lib/puppet/resource.rb 1970-01-01 01:00:00.000000000 +0100
@@ -387,7 +387,7 @@
begin
Puppet::DataBinding.indirection.find(
name,
- :environment => scope.environment.to_s,
+ :environment => scope.environment,
:variables => scope)
rescue Puppet::DataBinding::LookupError => e
raise Puppet::Error.new("Error from DataBinding '#{Puppet[:data_binding_terminus]}' while looking up '#{name}': #{e.message}", e)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/puppet/type/group.rb new/lib/puppet/type/group.rb
--- old/lib/puppet/type/group.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/lib/puppet/type/group.rb 1970-01-01 01:00:00.000000000 +0100
@@ -80,7 +80,9 @@
newproperty(:members, :array_matching => :all, :required_features => :manages_members) do
desc "The members of the group. For directory services where group
- membership is stored in the group objects, not the users."
+ membership is stored in the group objects, not the users. Use
+ with auth_membership to determine whether the specified members
+ are inclusive or the minimum."
def change_to_s(currentvalue, newvalue)
currentvalue = currentvalue.join(",") if currentvalue != :absent
@@ -99,16 +101,26 @@
def is_to_s(currentvalue)
if provider.respond_to?(:members_to_s)
currentvalue = '' if currentvalue.nil?
- return provider.members_to_s(currentvalue.split(','))
+ currentvalue = currentvalue.is_a?(Array) ? currentvalue : currentvalue.split(',')
+
+ return provider.members_to_s(currentvalue)
end
super(currentvalue)
end
alias :should_to_s :is_to_s
+
+ validate do |value|
+ if provider.respond_to?(:member_valid?)
+ return provider.member_valid?(value)
+ end
+ end
end
newparam(:auth_membership, :boolean => true, :parent => Puppet::Parameter::Boolean) do
- desc "whether the provider is authoritative for group membership."
+ desc "Whether the provider is authoritative for group membership. This
+ must be set to true to allow setting the group to no members with
+ `members => [],`."
defaultto true
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/puppet/util/windows/security.rb new/lib/puppet/util/windows/security.rb
--- old/lib/puppet/util/windows/security.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/lib/puppet/util/windows/security.rb 1970-01-01 01:00:00.000000000 +0100
@@ -372,7 +372,10 @@
dacl.allow(well_known_nobody_sid, nobody_allow)
# TODO: system should be first?
- dacl.allow(well_known_system_sid, system_allow)
+ flags = !isdir ? 0 :
+ Puppet::Util::Windows::AccessControlEntry::CONTAINER_INHERIT_ACE |
+ Puppet::Util::Windows::AccessControlEntry::OBJECT_INHERIT_ACE
+ dacl.allow(well_known_system_sid, system_allow, flags)
# add inherit-only aces for child dirs and files that are created within the dir
inherit_only = Puppet::Util::Windows::AccessControlEntry::INHERIT_ONLY_ACE
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/puppet/version.rb new/lib/puppet/version.rb
--- old/lib/puppet/version.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/lib/puppet/version.rb 1970-01-01 01:00:00.000000000 +0100
@@ -7,7 +7,7 @@
module Puppet
- PUPPETVERSION = '3.8.4'
+ PUPPETVERSION = '3.8.5'
##
# version is a public API method intended to always provide a fast and
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/metadata new/metadata
--- old/metadata 1970-01-01 01:00:00.000000000 +0100
+++ new/metadata 1970-01-01 01:00:00.000000000 +0100
@@ -1,7 +1,7 @@
--- !ruby/object:Gem::Specification
name: puppet
version: !ruby/object:Gem::Version
- version: 3.8.4
+ version: 3.8.5
prerelease:
platform: ruby
authors:
@@ -9,7 +9,7 @@
autorequire:
bindir: bin
cert_chain: []
-date: 2015-11-03 00:00:00.000000000 Z
+date: 2016-01-21 00:00:00.000000000 Z
dependencies:
- !ruby/object:Gem::Dependency
name: facter
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spec/integration/util/windows/security_spec.rb new/spec/integration/util/windows/security_spec.rb
--- old/spec/integration/util/windows/security_spec.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/spec/integration/util/windows/security_spec.rb 1970-01-01 01:00:00.000000000 +0100
@@ -237,6 +237,24 @@
system_aces.each do |ace|
ace.mask.should == klass::FILE_ALL_ACCESS && ! ace.inherited?
end
+
+ if Puppet::FileSystem.directory?(path)
+ system_aces.each do |ace|
+ ace.object_inherit?.should be_true
+ ace.container_inherit?.should be_true
+ end
+
+ # it's critically important that this file be default created
+ # and that this file not have it's owner / group / mode set by winsec
+ nested_file = File.join(path, 'nested_file')
+ File.new(nested_file, 'w').close
+
+ system_aces = winsec.get_aces_for_path_by_sid(nested_file, sids[:system])
+ # even when SYSTEM is the owner (in CI), there should be an inherited SYSTEM
+ system_aces.any? do |ace|
+ ace.mask == klass::FILE_ALL_ACCESS && ace.inherited?
+ end.should be_true
+ end
end
describe "for modes that require deny aces" do
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spec/unit/daemon_spec.rb new/spec/unit/daemon_spec.rb
--- old/spec/unit/daemon_spec.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/spec/unit/daemon_spec.rb 1970-01-01 01:00:00.000000000 +0100
@@ -47,15 +47,24 @@
let(:server) { stub("Server", :start => nil, :wait_for_shutdown => nil) }
describe "when setting signal traps" do
- signals = {:INT => :stop, :TERM => :stop }
- signals.update({:HUP => :restart, :USR1 => :reload, :USR2 => :reopen_logs}) unless Puppet.features.microsoft_windows?
- signals.each do |signal, method|
- it "should log and call #{method} when it receives #{signal}" do
- Signal.expects(:trap).with(signal).yields
+ [:INT, :TERM].each do |signal|
+ it "logs a notice and exits when sent #{signal}" do
+ Signal.stubs(:trap).with(signal).yields
+ Puppet.expects(:notice).with("Caught #{signal}; exiting")
+ daemon.expects(:stop)
- Puppet.expects(:notice)
+ daemon.set_signal_traps
+ end
+ end
+
+ {:HUP => :restart, :USR1 => :reload, :USR2 => :reopen_logs}.each do |signal, method|
+ it "logs a notice and remembers to call #{method} when it receives #{signal}" do
+ Signal.stubs(:trap).with(signal).yields
+ Puppet.expects(:notice).with("Caught #{signal}; storing #{method}")
daemon.set_signal_traps
+
+ expect(daemon.signals).to eq([method])
end
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spec/unit/node_spec.rb new/spec/unit/node_spec.rb
--- old/spec/unit/node_spec.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/spec/unit/node_spec.rb 1970-01-01 01:00:00.000000000 +0100
@@ -48,6 +48,14 @@
node.parameters["environment"] = :bar
node.environment.name.should == :bar
end
+
+ it "should allow its environment parameter to be set by attribute after initialization" do
+ node = Puppet::Node.new("foo", { :parameters => { 'environment' => :foo } })
+ node.environment_name = :foo
+ node.environment = :bar
+ expect(node.environment_name).to eq(:bar)
+ expect(node.parameters['environment']).to eq(:bar)
+ end
end
it "can survive a round-trip through YAML" do
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spec/unit/pops/evaluator/access_ops_spec.rb new/spec/unit/pops/evaluator/access_ops_spec.rb
--- old/spec/unit/pops/evaluator/access_ops_spec.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/spec/unit/pops/evaluator/access_ops_spec.rb 1970-01-01 01:00:00.000000000 +0100
@@ -123,9 +123,9 @@
expect(evaluate(expr)).to eql(range(1,1))
end
- it 'produces an Integer[from, <from]' do
+ it 'gives an error for Integer[from, <from]' do
expr = fqr('Integer')[1,0]
- expect(evaluate(expr)).to eql(range(1,0))
+ expect{evaluate(expr)}.to raise_error(/'from' must be less or equal to 'to'/)
end
it 'produces an error for Integer[] if there are more than 2 keys' do
@@ -154,9 +154,9 @@
expect(evaluate(expr)).to eql(float_range(1.0,1.0))
end
- it 'produces a Float[from, <from]' do
+ it 'gives an error for Float[from, <from]' do
expr = fqr('Float')[1.0,0.0]
- expect(evaluate(expr)).to eql(float_range(1.0,0.0))
+ expect{evaluate(expr)}.to raise_error(/'from' must be less or equal to 'to'/)
end
it 'produces an error for Float[] if there are more than 2 keys' do
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spec/unit/pops/parser/parser_rspec_helper.rb new/spec/unit/pops/parser/parser_rspec_helper.rb
--- old/spec/unit/pops/parser/parser_rspec_helper.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/spec/unit/pops/parser/parser_rspec_helper.rb 1970-01-01 01:00:00.000000000 +0100
@@ -8,4 +8,9 @@
parser = Puppet::Pops::Parser::Parser.new()
parser.parse_string(code)
end
+
+ def parse_epp(code)
+ parser = Puppet::Pops::Parser::EppParser.new()
+ parser.parse_string(code)
+ end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spec/unit/pops/validator/validator_spec.rb new/spec/unit/pops/validator/validator_spec.rb
--- old/spec/unit/pops/validator/validator_spec.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/spec/unit/pops/validator/validator_spec.rb 1970-01-01 01:00:00.000000000 +0100
@@ -177,6 +177,18 @@
end
end
+ context 'for parameter names' do
+ ['class', 'define'].each do |word|
+ it "should require that #{word} parameter names are unique" do
+ expect(validate(parse("#{word} foo($a = 10, $a = 20) {}"))).to have_issue(Puppet::Pops::Issues::DUPLICATE_PARAMETER)
+ end
+ end
+
+ it "should require that template parameter names are unique" do
+ expect(validate(parse_epp("<%-| $a, $a |-%><%= $a == doh %>"))).to have_issue(Puppet::Pops::Issues::DUPLICATE_PARAMETER)
+ end
+ end
+
context 'for reserved parameter names' do
['name', 'title'].each do |word|
it "produces an error when $#{word} is used as a parameter in a class" do
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spec/unit/provider/group/windows_adsi_spec.rb new/spec/unit/provider/group/windows_adsi_spec.rb
--- old/spec/unit/provider/group/windows_adsi_spec.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/spec/unit/provider/group/windows_adsi_spec.rb 1970-01-01 01:00:00.000000000 +0100
@@ -35,11 +35,13 @@
let(:user1) { stub(:account => 'user1', :domain => '.', :to_s => 'user1sid') }
let(:user2) { stub(:account => 'user2', :domain => '.', :to_s => 'user2sid') }
let(:user3) { stub(:account => 'user3', :domain => '.', :to_s => 'user3sid') }
+ let(:invalid_user) { SecureRandom.uuid }
before :each do
Puppet::Util::Windows::SID.stubs(:name_to_sid_object).with('user1').returns(user1)
Puppet::Util::Windows::SID.stubs(:name_to_sid_object).with('user2').returns(user2)
Puppet::Util::Windows::SID.stubs(:name_to_sid_object).with('user3').returns(user3)
+ Puppet::Util::Windows::SID.stubs(:name_to_sid_object).with(invalid_user).returns(nil)
end
describe "#members_insync?" do
@@ -123,6 +125,9 @@
it "should return a user string like DOMAIN\\USER,DOMAIN2\\USER2" do
provider.members_to_s(['user1', 'user2']).should == '.\user1,.\user2'
end
+ it "should return the username when it cannot be resolved to a SID (for the sake of resource_harness error messages)" do
+ expect(provider.members_to_s([invalid_user])).to eq("#{invalid_user}")
+ end
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spec/unit/provider/package/pip_spec.rb new/spec/unit/provider/package/pip_spec.rb
--- old/spec/unit/provider/package/pip_spec.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/spec/unit/provider/package/pip_spec.rb 1970-01-01 01:00:00.000000000 +0100
@@ -12,7 +12,6 @@
@client = stub_everything('client')
@client.stubs(:call).with('package_releases', 'real_package').returns(["1.3", "1.2.5", "1.2.4"])
@client.stubs(:call).with('package_releases', 'fake_package').returns([])
- XMLRPC::Client.stubs(:new2).returns(@client)
end
describe "parse" do
@@ -118,23 +117,53 @@
end
describe "latest" do
+ context "connecting directly" do
- it "should find a version number for real_package" do
- @resource[:name] = "real_package"
- @provider.latest.should_not == nil
- end
+ before :each do
+ XMLRPC::Client.expects(:new2).with("http://pypi.python.org/pypi", nil).returns(@client)
+ end
- it "should not find a version number for fake_package" do
- @resource[:name] = "fake_package"
- @provider.latest.should == nil
- end
+ it "should find a version number for real_package" do
+ @resource[:name] = "real_package"
+ @provider.latest.should_not == nil
+ end
+
+ it "should not find a version number for fake_package" do
+ @resource[:name] = "fake_package"
+ @provider.latest.should == nil
+ end
+
+ it "should handle a timeout gracefully" do
+ @resource[:name] = "fake_package"
+ @client.stubs(:call).raises(Timeout::Error)
+ lambda { @provider.latest }.should raise_error(Puppet::Error)
+ end
- it "should handle a timeout gracefully" do
- @resource[:name] = "fake_package"
- @client.stubs(:call).raises(Timeout::Error)
- lambda { @provider.latest }.should raise_error(Puppet::Error)
end
+ context "connecting via a proxy" do
+ before :each do
+ Puppet::Util::HttpProxy.expects(:http_proxy_host).returns 'some_host'
+ Puppet::Util::HttpProxy.expects(:http_proxy_port).returns 'some_port'
+ XMLRPC::Client.expects(:new2).with("http://pypi.python.org/pypi", "some_host:some_port").returns(@client)
+ end
+
+ it "should find a version number for real_package" do
+ @resource[:name] = "real_package"
+ @provider.latest.should_not == nil
+ end
+
+ it "should not find a version number for fake_package" do
+ @resource[:name] = "fake_package"
+ @provider.latest.should == nil
+ end
+
+ it "should handle a timeout gracefully" do
+ @resource[:name] = "fake_package"
+ @client.stubs(:call).raises(Timeout::Error)
+ lambda { @provider.latest }.should raise_error(Puppet::Error)
+ end
+ end
end
describe "install" do
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spec/unit/provider/service/launchd_spec.rb new/spec/unit/provider/service/launchd_spec.rb
--- old/spec/unit/provider/service/launchd_spec.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/spec/unit/provider/service/launchd_spec.rb 1970-01-01 01:00:00.000000000 +0100
@@ -274,6 +274,7 @@
}
end
let(:busted_plist_path) { '/Library/LaunchAgents/org.busted.plist' }
+ let(:binary_plist_path) { '/Library/LaunchAgents/org.binary.plist' }
it "[17624] should warn that the plist in question is being skipped" do
provider.expects(:launchd_paths).returns(['/Library/LaunchAgents'])
@@ -284,6 +285,8 @@
end
it "[15929] should skip plists that plutil cannot read" do
+ Plist.expects(:parse_xml).with(busted_plist_path).raises(ArgumentError, 'boom')
+ Puppet.expects(:debug).with("Error reading #{busted_plist_path}: boom. Retrying with plutil.")
provider.expects(:plutil).with('-convert', 'xml1', '-o', '/dev/stdout',
busted_plist_path).raises(Puppet::ExecutionFailure, 'boom')
Puppet.expects(:warning).with("Cannot read file #{busted_plist_path}; " +
@@ -291,6 +294,14 @@
"Details: boom")
provider.read_plist(busted_plist_path)
end
+
+ it "should read binary plists with plutil" do
+ Plist.expects(:parse_xml).with(binary_plist_path).raises(ArgumentError, 'boom')
+ Puppet.expects(:debug).with("Error reading #{binary_plist_path}: boom. Retrying with plutil.")
+ provider.expects(:plutil).with('-convert', 'xml1', '-o', '/dev/stdout', binary_plist_path).returns('plist')
+ Plist.expects(:parse_xml).with('plist').returns('plist_map')
+ expect(provider.read_plist(binary_plist_path)).to eq('plist_map')
+ end
end
it "should return the cached value when available" do
provider.instance_variable_set(:@label_to_path_map, {'xx'=>'yy'})
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spec/unit/provider/service/upstart_spec.rb new/spec/unit/provider/service/upstart_spec.rb
--- old/spec/unit/provider/service/upstart_spec.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/spec/unit/provider/service/upstart_spec.rb 1970-01-01 01:00:00.000000000 +0100
@@ -100,6 +100,63 @@
provider.status.should == :running
end
+ describe "when a special status command is specifed" do
+ it "should use the provided status command" do
+ resource = Puppet::Type.type(:service).new(:name => 'foo', :provider => :upstart, :status => '/bin/foo')
+ provider = provider_class.new(resource)
+ provider.stubs(:is_upstart?).returns(true)
+
+ provider.expects(:status_exec).with(['foo']).never
+ provider.expects(:execute).with(['/bin/foo'], :failonfail => false, :override_locale => false, :squelch => false, :combine => true)
+ Process::Status.any_instance.stubs(:exitstatus).returns(0)
+ provider.status
+ end
+
+ it "should return :stopped when the provided status command return non-zero" do
+ resource = Puppet::Type.type(:service).new(:name => 'foo', :provider => :upstart, :status => '/bin/foo')
+ provider = provider_class.new(resource)
+ provider.stubs(:is_upstart?).returns(true)
+
+ provider.expects(:status_exec).with(['foo']).never
+ provider.expects(:execute).with(['/bin/foo'], :failonfail => false, :override_locale => false, :squelch => false, :combine => true)
+ $CHILD_STATUS.stubs(:exitstatus).returns 1
+ provider.status.should == :stopped
+ end
+
+ it "should return :running when the provided status command return zero" do
+ resource = Puppet::Type.type(:service).new(:name => 'foo', :provider => :upstart, :status => '/bin/foo')
+ provider = provider_class.new(resource)
+ provider.stubs(:is_upstart?).returns(true)
+
+ provider.expects(:status_exec).with(['foo']).never
+ provider.expects(:execute).with(['/bin/foo'], :failonfail => false, :override_locale => false, :squelch => false, :combine => true)
+ $CHILD_STATUS.stubs(:exitstatus).returns 0
+ provider.status.should == :running
+ end
+ end
+
+ describe "when :hasstatus is set to false" do
+ it "should return :stopped if the pid can not be found" do
+ resource = Puppet::Type.type(:service).new(:name => 'foo', :hasstatus => false, :provider => :upstart)
+ provider = provider_class.new(resource)
+ provider.stubs(:is_upstart?).returns(true)
+
+ provider.expects(:status_exec).with(['foo']).never
+ provider.expects(:getpid).returns nil
+ provider.status.should == :stopped
+ end
+
+ it "should return :running if the pid can be found" do
+ resource = Puppet::Type.type(:service).new(:name => 'foo', :hasstatus => false, :provider => :upstart)
+ provider = provider_class.new(resource)
+ provider.stubs(:is_upstart?).returns(true)
+
+ provider.expects(:status_exec).with(['foo']).never
+ provider.expects(:getpid).returns 2706
+ provider.status.should == :running
+ end
+ end
+
it "should properly handle services with 'start' in their name" do
resource = Puppet::Type.type(:service).new(:name => "foostartbar", :provider => :upstart)
provider = provider_class.new(resource)
1
0
Hello community,
here is the log from the commit of package rubygem-puppet-syntax for openSUSE:Factory checked in at 2016-01-28 17:23:11
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/rubygem-puppet-syntax (Old)
and /work/SRC/openSUSE:Factory/.rubygem-puppet-syntax.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "rubygem-puppet-syntax"
Changes:
--------
--- /work/SRC/openSUSE:Factory/rubygem-puppet-syntax/rubygem-puppet-syntax.changes 2015-05-16 07:14:45.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.rubygem-puppet-syntax.new/rubygem-puppet-syntax.changes 2016-01-28 17:23:55.000000000 +0100
@@ -1,0 +2,11 @@
+Fri Jan 22 17:46:06 UTC 2016 - kstreitova(a)suse.com
+
+- Version bump 2.1.0
+ * Support Puppet 4. Many thanks to @DavidS
+ * Support validation of EPP templates. Thanks to @trlinkin
+ * Test improvements and refactoring, including Travis CI tests against Puppet 4. Thanks to @trlinkin
+ * Don't error when a tag metaparameter is present. Thank you @dhardy92
+ * Report the filename of invalid hiera data files. Thanks @danzilio
+- run spec-cleaner
+
+-------------------------------------------------------------------
Old:
----
puppet-syntax-2.0.0.gem
New:
----
puppet-syntax-2.1.0.gem
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ rubygem-puppet-syntax.spec ++++++
--- /var/tmp/diff_new_pack.vmxVW4/_old 2016-01-28 17:23:56.000000000 +0100
+++ /var/tmp/diff_new_pack.vmxVW4/_new 2016-01-28 17:23:56.000000000 +0100
@@ -1,7 +1,7 @@
#
# spec file for package rubygem-puppet-syntax
#
-# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -15,20 +15,21 @@
# Please submit bugfixes or comments via http://bugs.opensuse.org/
#
-Name: rubygem-puppet-syntax
-Version: 2.0.0
-Release: 0
+
%define mod_name puppet-syntax
%define mod_full_name %{mod_name}-%{version}
-BuildRoot: %{_tmppath}/%{name}-%{version}-build
-BuildRequires: ruby-macros >= 5
-BuildRequires: %{ruby}
-BuildRequires: %{rubygem gem2rpm}
-Url: https://github.com/gds-operations/puppet-syntax
-Source: http://rubygems.org/gems/%{mod_full_name}.gem
+Name: rubygem-puppet-syntax
+Version: 2.1.0
+Release: 0
Summary: Syntax checks for Puppet manifests, templates, and Hiera YAML
License: MIT
Group: Development/Languages/Ruby
+Url: https://github.com/gds-operations/puppet-syntax
+Source: http://rubygems.org/gems/%{mod_full_name}.gem
+BuildRequires: %{rubygem gem2rpm}
+BuildRequires: %{ruby}
+BuildRequires: ruby-macros >= 5
+BuildRoot: %{_tmppath}/%{name}-%{version}-build
%description
Syntax checks for Puppet manifests and templates.
++++++ puppet-syntax-2.0.0.gem -> puppet-syntax-2.1.0.gem ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/.travis.yml new/.travis.yml
--- old/.travis.yml 1970-01-01 01:00:00.000000000 +0100
+++ new/.travis.yml 1970-01-01 01:00:00.000000000 +0100
@@ -1,15 +1,27 @@
---
language: ruby
+# Workaround https://github.com/bundler/bundler/issues/3558
+before_install: gem install bundler
script: bundle exec rake
rvm:
- 1.9.3
+ - 2.1.6
env:
- PUPPET_VERSION="~> 3.0.0"
- PUPPET_VERSION="~> 3.1.0"
- PUPPET_VERSION="~> 3.2.0"
- PUPPET_VERSION="~> 3.4.0"
- PUPPET_VERSION="~> 3.7.3"
+ - PUPPET_VERSION="~> 4.2.0"
+ - PUPPET_VERSION="~> 4.3.0"
- PUPPET_VERSION=">= 0"
matrix:
+ exclude:
+ - rvm: 2.1.6
+ env: PUPPET_VERSION="~> 3.2.0"
+ - rvm: 2.1.6
+ env: PUPPET_VERSION="~> 3.1.0"
+ - rvm: 2.1.6
+ env: PUPPET_VERSION="~> 3.0.0"
allow_failures:
- env: PUPPET_VERSION=">= 0"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CHANGELOG new/CHANGELOG
--- old/CHANGELOG 1970-01-01 01:00:00.000000000 +0100
+++ new/CHANGELOG 1970-01-01 01:00:00.000000000 +0100
@@ -1,3 +1,10 @@
+2016-01-18 Release 2.1.0
+- Support Puppet 4. Many thanks to @DavidS
+- Support validation of EPP templates. Thanks to @trlinkin
+- Test improvements and refactoring, including Travis CI tests against Puppet 4. Thanks to @trlinkin
+- Don't error when a tag metaparameter is present. Thank you @dhardy92
+- Report the filename of invalid hiera data files. Thanks @danzilio
+
2015-02-25 Release 2.0.0
- Removed support for Puppet version 2.7.x
- New option, fail_on_deprecation_notices, which defaults to true (compatible
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/puppet-syntax/hiera.rb new/lib/puppet-syntax/hiera.rb
--- old/lib/puppet-syntax/hiera.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/lib/puppet-syntax/hiera.rb 1970-01-01 01:00:00.000000000 +0100
@@ -11,7 +11,7 @@
begin
YAML.load_file(hiera_file)
rescue Exception => error
- errors << error
+ errors << "ERROR: Failed to parse #{hiera_file}: #{error}"
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/puppet-syntax/manifests.rb new/lib/puppet-syntax/manifests.rb
--- old/lib/puppet-syntax/manifests.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/lib/puppet-syntax/manifests.rb 1970-01-01 01:00:00.000000000 +0100
@@ -36,6 +36,11 @@
e =~ /^You cannot collect( exported resources)? without storeconfigs being set/
}
+ # tag parameter in class raise warnings notice in output that prevent from succeed
+ output.reject! { |e|
+ e =~ /^tag is a metaparam; this value will inherit to all contained resources in the /
+ }
+
deprecations = output.select { |e|
e =~ /^Deprecation notice:|is deprecated/
}
@@ -48,7 +53,7 @@
private
def validate_manifest(file)
- Puppet[:parser] = 'future' if PuppetSyntax.future_parser
+ Puppet[:parser] = 'future' if PuppetSyntax.future_parser and Puppet::PUPPETVERSION.to_i < 4
Puppet::Face[:parser, :current].validate(file)
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/puppet-syntax/tasks/puppet-syntax.rb new/lib/puppet-syntax/tasks/puppet-syntax.rb
--- old/lib/puppet-syntax/tasks/puppet-syntax.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/lib/puppet-syntax/tasks/puppet-syntax.rb 1970-01-01 01:00:00.000000000 +0100
@@ -30,6 +30,12 @@
desc 'Syntax check Puppet manifests'
task :manifests do |t|
+ if Puppet::PUPPETVERSION.to_i >= 4 and PuppetSyntax.future_parser
+ info <<-EOS
+[INFO] Puppet 4 has been detected and `future_parser` has been set to
+'true'. The `future_parser setting will be ignored.
+ EOS
+ end
$stderr.puts "---> #{t.name}"
files = FileList["**/*.pp"]
files.reject! { |f| File.directory?(f) }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/puppet-syntax/templates.rb new/lib/puppet-syntax/templates.rb
--- old/lib/puppet-syntax/templates.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/lib/puppet-syntax/templates.rb 1970-01-01 01:00:00.000000000 +0100
@@ -1,4 +1,5 @@
require 'erb'
+require 'puppet'
require 'stringio'
module PuppetSyntax
@@ -10,19 +11,11 @@
$stderr = warnings = StringIO.new()
errors = []
- filelist.each do |erb_file|
- begin
- erb = ERB.new(File.read(erb_file), nil, '-')
- erb.filename = erb_file
- erb.result
- rescue NameError
- # This is normal because we don't have the variables that would
- # ordinarily be bound by the parent Puppet manifest.
- rescue TypeError
- # This is normal because we don't have the variables that would
- # ordinarily be bound by the parent Puppet manifest.
- rescue SyntaxError => error
- errors << error
+ filelist.each do |file|
+ if File.extname(file) == '.epp' or PuppetSyntax.epp_only
+ errors.concat validate_epp(file)
+ else
+ errors.concat validate_erb(file)
end
end
@@ -32,5 +25,42 @@
errors
end
+
+ def validate_epp(filename)
+ if Puppet::PUPPETVERSION.to_i < 4
+ raise "Cannot validate EPP without Puppet 4"
+ end
+
+ require 'puppet/pops'
+ errors = []
+ begin
+ parser = Puppet::Pops::Parser::EvaluatingParser::EvaluatingEppParser.new()
+ parser.parse_file(filename)
+ rescue => detail
+ errors << detail
+ end
+
+ errors
+ end
+
+ def validate_erb(filename)
+ errors = []
+
+ begin
+ erb = ERB.new(File.read(filename), nil, '-')
+ erb.filename = filename
+ erb.result
+ rescue NameError => error
+ # This is normal because we don't have the variables that would
+ # ordinarily be bound by the parent Puppet manifest.
+ rescue TypeError
+ # This is normal because we don't have the variables that would
+ # ordinarily be bound by the parent Puppet manifest.
+ rescue SyntaxError => error
+ errors << error
+ end
+
+ errors
+ end
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/puppet-syntax/version.rb new/lib/puppet-syntax/version.rb
--- old/lib/puppet-syntax/version.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/lib/puppet-syntax/version.rb 1970-01-01 01:00:00.000000000 +0100
@@ -1,3 +1,3 @@
module PuppetSyntax
- VERSION = "2.0.0"
+ VERSION = "2.1.0"
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/puppet-syntax.rb new/lib/puppet-syntax.rb
--- old/lib/puppet-syntax.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/lib/puppet-syntax.rb 1970-01-01 01:00:00.000000000 +0100
@@ -10,6 +10,6 @@
@fail_on_deprecation_notices = true
class << self
- attr_accessor :exclude_paths, :future_parser, :hieradata_paths, :fail_on_deprecation_notices
+ attr_accessor :exclude_paths, :future_parser, :hieradata_paths, :fail_on_deprecation_notices, :epp_only
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/metadata new/metadata
--- old/metadata 1970-01-01 01:00:00.000000000 +0100
+++ new/metadata 1970-01-01 01:00:00.000000000 +0100
@@ -1,7 +1,7 @@
--- !ruby/object:Gem::Specification
name: puppet-syntax
version: !ruby/object:Gem::Version
- version: 2.0.0
+ version: 2.1.0
prerelease:
platform: ruby
authors:
@@ -9,7 +9,7 @@
autorequire:
bindir: bin
cert_chain: []
-date: 2015-02-26 00:00:00.000000000 Z
+date: 2016-01-18 00:00:00.000000000 Z
dependencies:
- !ruby/object:Gem::Dependency
name: rake
@@ -90,9 +90,14 @@
- spec/fixtures/test_module/manifests/future_syntax.pp
- spec/fixtures/test_module/manifests/pass.pp
- spec/fixtures/test_module/manifests/pass_storeconfigs.pp
+- spec/fixtures/test_module/manifests/tag_notice.pp
+- spec/fixtures/test_module/templates/fail_error.epp
- spec/fixtures/test_module/templates/fail_error.erb
+- spec/fixtures/test_module/templates/fail_error_also.epp
- spec/fixtures/test_module/templates/fail_warning.erb
+- spec/fixtures/test_module/templates/pass.epp
- spec/fixtures/test_module/templates/pass.erb
+- spec/fixtures/test_module/templates/pass_also.epp
- spec/fixtures/test_module/templates/pass_unbound_var.erb
- spec/fixtures/test_module/templates/typeerror_shouldwin.erb
- spec/puppet-syntax/hiera_spec.rb
@@ -116,7 +121,7 @@
version: '0'
segments:
- 0
- hash: 2080509366784508245
+ hash: 1512611786751491860
required_rubygems_version: !ruby/object:Gem::Requirement
none: false
requirements:
@@ -125,7 +130,7 @@
version: '0'
segments:
- 0
- hash: 2080509366784508245
+ hash: 1512611786751491860
requirements: []
rubyforge_project:
rubygems_version: 1.8.23.2
@@ -142,9 +147,14 @@
- spec/fixtures/test_module/manifests/future_syntax.pp
- spec/fixtures/test_module/manifests/pass.pp
- spec/fixtures/test_module/manifests/pass_storeconfigs.pp
+- spec/fixtures/test_module/manifests/tag_notice.pp
+- spec/fixtures/test_module/templates/fail_error.epp
- spec/fixtures/test_module/templates/fail_error.erb
+- spec/fixtures/test_module/templates/fail_error_also.epp
- spec/fixtures/test_module/templates/fail_warning.erb
+- spec/fixtures/test_module/templates/pass.epp
- spec/fixtures/test_module/templates/pass.erb
+- spec/fixtures/test_module/templates/pass_also.epp
- spec/fixtures/test_module/templates/pass_unbound_var.erb
- spec/fixtures/test_module/templates/typeerror_shouldwin.erb
- spec/puppet-syntax/hiera_spec.rb
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spec/fixtures/test_module/manifests/tag_notice.pp new/spec/fixtures/test_module/manifests/tag_notice.pp
--- old/spec/fixtures/test_module/manifests/tag_notice.pp 1970-01-01 01:00:00.000000000 +0100
+++ new/spec/fixtures/test_module/manifests/tag_notice.pp 1970-01-01 01:00:00.000000000 +0100
@@ -0,0 +1,5 @@
+class tag_parameter_test ($tag=undef){
+ notify { 'tag_should pass':
+ message => 'with flying colours',
+ }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spec/fixtures/test_module/templates/fail_error.epp new/spec/fixtures/test_module/templates/fail_error.epp
--- old/spec/fixtures/test_module/templates/fail_error.epp 1970-01-01 01:00:00.000000000 +0100
+++ new/spec/fixtures/test_module/templates/fail_error.epp 1970-01-01 01:00:00.000000000 +0100
@@ -0,0 +1,3 @@
+This is plain text
+<% This is not valid EPP %>
+This is also plain text
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spec/fixtures/test_module/templates/fail_error_also.epp new/spec/fixtures/test_module/templates/fail_error_also.epp
--- old/spec/fixtures/test_module/templates/fail_error_also.epp 1970-01-01 01:00:00.000000000 +0100
+++ new/spec/fixtures/test_module/templates/fail_error_also.epp 1970-01-01 01:00:00.000000000 +0100
@@ -0,0 +1,3 @@
+This is plain text
+<% } %>
+This is also plain text
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spec/fixtures/test_module/templates/pass.epp new/spec/fixtures/test_module/templates/pass.epp
--- old/spec/fixtures/test_module/templates/pass.epp 1970-01-01 01:00:00.000000000 +0100
+++ new/spec/fixtures/test_module/templates/pass.epp 1970-01-01 01:00:00.000000000 +0100
@@ -0,0 +1,3 @@
+<%# VALID COMMENT %>
+<% $valid = 'valid' -%>
+This is a <%= $valid %> template.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spec/fixtures/test_module/templates/pass_also.epp new/spec/fixtures/test_module/templates/pass_also.epp
--- old/spec/fixtures/test_module/templates/pass_also.epp 1970-01-01 01:00:00.000000000 +0100
+++ new/spec/fixtures/test_module/templates/pass_also.epp 1970-01-01 01:00:00.000000000 +0100
@@ -0,0 +1,3 @@
+<%# VALID COMMENT %>
+<% $valid = 'valid' -%>
+This is a <%= $valid %> template.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spec/puppet-syntax/hiera_spec.rb new/spec/puppet-syntax/hiera_spec.rb
--- old/spec/puppet-syntax/hiera_spec.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/spec/puppet-syntax/hiera_spec.rb 1970-01-01 01:00:00.000000000 +0100
@@ -14,14 +14,9 @@
end
it "should return an error from invalid YAML" do
- case RUBY_VERSION
- when /1.8/
- files = fixture_hiera('hiera_bad_18.yaml')
- expected = /syntax error on line 3, col -1: `'/
- else
- files = fixture_hiera('hiera_bad.yaml')
- expected = /scanning a directive at line 1 column 1/
- end
+ hiera_yaml = RUBY_VERSION =~ /1.8/ ? 'hiera_bad_18.yaml' : 'hiera_bad.yaml'
+ files = fixture_hiera(hiera_yaml)
+ expected = /ERROR: Failed to parse #{files[0]}:/
res = subject.check(files)
expect(res.size).to be == 1
expect(res.first).to match(expected)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spec/puppet-syntax/manifests_spec.rb new/spec/puppet-syntax/manifests_spec.rb
--- old/spec/puppet-syntax/manifests_spec.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/spec/puppet-syntax/manifests_spec.rb 1970-01-01 01:00:00.000000000 +0100
@@ -16,13 +16,27 @@
expect(has_errors).to eq(false)
end
+ it 'should return nothing from a valid file with a class using tag parameter' do
+ files = fixture_manifests('tag_notice.pp')
+ output, has_errors = subject.check(files)
+
+ expect(output).to eq([])
+ expect(has_errors).to eq(false)
+ end
+
it 'should return an error from an invalid file' do
files = fixture_manifests('fail_error.pp')
output, has_errors = subject.check(files)
- expect(output.size).to eq(1)
- expect(output[0]).to match(/Syntax error at .*:3$/)
- expect(has_errors).to eq(true)
+ if Puppet::PUPPETVERSION.to_i >= 4
+ expect(output.size).to eq(3)
+ expect(output[2]).to match(/Found 2 errors. Giving up/)
+ expect(has_errors).to eq(true)
+ else
+ expect(output.size).to eq(1)
+ expect(output[0]).to match(/Syntax error at .*:3$/)
+ expect(has_errors).to eq(true)
+ end
end
it 'should return a warning from an invalid file' do
@@ -30,9 +44,10 @@
output, has_errors = subject.check(files)
expect(output.size).to eq(2)
- expect(output[0]).to match(/Unrecognised escape sequence '\\\[' .* at line 3$/)
- expect(output[1]).to match(/Unrecognised escape sequence '\\\]' .* at line 3$/)
expect(has_errors).to eq(true)
+
+ expect(output[0]).to match(/Unrecogni(s|z)ed escape sequence '\\\['/)
+ expect(output[1]).to match(/Unrecogni(s|z)ed escape sequence '\\\]'/)
end
it 'should ignore warnings about storeconfigs' do
@@ -56,18 +71,37 @@
files = fixture_manifests(['fail_error.pp', 'fail_warning.pp'])
output, has_errors = subject.check(files)
- expect(output.size).to eq(3)
- expect(output[0]).to match(/Syntax error at '\}' .*:3$/)
- expect(output[1]).to match(/Unrecognised escape sequence '\\\[' .* at line 3$/)
- expect(output[2]).to match(/Unrecognised escape sequence '\\\]' .* at line 3$/)
expect(has_errors).to eq(true)
+ if Puppet::PUPPETVERSION.to_i >= 4
+ expect(output.size).to eq(5)
+ expect(output[0]).to match(/This Name has no effect. A Host Class Definition can not end with a value-producing expression without other effect at \S*\/fail_error.pp:2:32$/)
+ expect(output[1]).to match(/This Name has no effect. A value(-producing expression without other effect may only be placed last in a block\/sequence| was produced and then forgotten.*) at \S*\/fail_error.pp:2:3$/)
+ expect(output[2]).to match('Found 2 errors. Giving up')
+ expect(output[3]).to match(/Unrecogni(s|z)ed escape sequence '\\\['/)
+ expect(output[4]).to match(/Unrecogni(s|z)ed escape sequence '\\\]'/)
+ else
+ expect(output.size).to eq(3)
+ expect(output[0]).to match(/Syntax error at '\}' .*:3$/)
+ expect(output[1]).to match(/Unrecogni(s|z)ed escape sequence '\\\['/)
+ expect(output[2]).to match(/Unrecogni(s|z)ed escape sequence '\\\]'/)
+ end
end
describe 'deprecation notices' do
- # These tests should fail in Puppet 4, but we need to wait for the release
- # before we'll know exactly how to test it.
- if Puppet::Util::Package.versioncmp(Puppet.version, '3.7') >= 0
- context 'on puppet >= 3.7' do
+ case Puppet.version.to_f
+ when 4.0..4.99
+ context 'on puppet 4.0.0 and above' do
+ it 'should instead be failures' do
+ files = fixture_manifests('deprecation_notice.pp')
+ output, has_errors = subject.check(files)
+
+ expect(has_errors).to eq(true)
+ expect(output.size).to eq(1)
+ expect(output[0]).to match (/Node inheritance is not supported in Puppet >= 4.0.0/)
+ end
+ end
+ when 3.7, 3.8
+ context 'on puppet 3.7 and 3.8' do
it 'should return deprecation notices as warnings' do
files = fixture_manifests('deprecation_notice.pp')
output, has_errors = subject.check(files)
@@ -78,7 +112,7 @@
expect(output[1]).to match(/Deprecation notice:/)
end
end
- elsif Puppet::Util::Package.versioncmp(Puppet.version, '3.5') >= 0
+ when 3.5, 3.6
context 'on puppet 3.5 and 3.6' do
it 'should return deprecation notices as warnings' do
files = fixture_manifests('deprecation_notice.pp')
@@ -89,8 +123,8 @@
expect(output[0]).to match(/The use of 'import' is deprecated/)
end
end
- elsif Puppet::Util::Package.versioncmp(Puppet.version, '3.5') < 0
- context 'on puppet < 3.5' do
+ when 3.0..3.4
+ context 'on puppet 3.0 to 3.4' do
it 'should not print deprecation notices' do
files = fixture_manifests('deprecation_notice.pp')
output, has_errors = subject.check(files)
@@ -104,15 +138,27 @@
describe 'future_parser' do
context 'future_parser = false (default)' do
- it 'should fail without setting future option to true on future manifest' do
- expect(PuppetSyntax.future_parser).to eq(false)
+ if Puppet::Util::Package.versioncmp(Puppet.version, '4.0') < 0
+ it 'should fail without setting future option to true on future manifest on Puppet < 4.0.0' do
+ expect(PuppetSyntax.future_parser).to eq(false)
- files = fixture_manifests(['future_syntax.pp'])
- output, has_errors = subject.check(files)
+ files = fixture_manifests(['future_syntax.pp'])
+ output, has_errors = subject.check(files)
- expect(output.size).to eq(1)
- expect(output[0]).to match(/Syntax error at '='; expected '\}' .*:2$/)
- expect(has_errors).to eq(true)
+ expect(output.size).to eq(1)
+ expect(output[0]).to match(/Syntax error at '='; expected '\}' .*:2$/)
+ expect(has_errors).to eq(true)
+ end
+ else
+ it 'should succeed on Puppet >= 4.0.0' do
+ expect(PuppetSyntax.future_parser).to eq(false)
+
+ files = fixture_manifests(['future_syntax.pp'])
+ output, has_errors = subject.check(files)
+
+ expect(output.size).to eq(0)
+ expect(has_errors).to eq(false)
+ end
end
end
@@ -121,8 +167,8 @@
PuppetSyntax.future_parser = true
}
- if Puppet::Util::Package.versioncmp(Puppet.version, '3.2') >= 0
- context 'Puppet >= 3.2' do
+ if Puppet::Util::Package.versioncmp(Puppet.version, '3.2') >= 0 and Puppet::PUPPETVERSION.to_i < 4
+ context 'Puppet >= 3.2 < 4' do
it 'should pass with future option set to true on future manifest' do
files = fixture_manifests(['future_syntax.pp'])
output, has_errors = subject.check(files)
@@ -131,7 +177,7 @@
expect(has_errors).to eq(false)
end
end
- context 'Puppet >= 3.7' do
+ context 'Puppet >= 3.7 < 4' do
# Certain elements of the future parser weren't added until 3.7
if Puppet::Util::Package.versioncmp(Puppet.version, '3.7') >= 0
it 'should fail on what were deprecation notices in the non-future parser' do
@@ -144,7 +190,7 @@
end
end
end
- else
+ elsif Puppet::Util::Package.versioncmp(Puppet.version, '3.2') < 0
context 'Puppet < 3.2' do
it 'should return an error that the parser option is not supported' do
files = fixture_manifests(['future_syntax.pp'])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spec/puppet-syntax/tasks/puppet-syntax_spec.rb new/spec/puppet-syntax/tasks/puppet-syntax_spec.rb
--- old/spec/puppet-syntax/tasks/puppet-syntax_spec.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/spec/puppet-syntax/tasks/puppet-syntax_spec.rb 1970-01-01 01:00:00.000000000 +0100
@@ -1,4 +1,5 @@
require 'spec_helper'
+require 'puppet-syntax/tasks/puppet-syntax'
describe 'PuppetSyntax rake tasks' do
it 'should generate FileList of manifests relative to Rakefile' do
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spec/puppet-syntax/templates_spec.rb new/spec/puppet-syntax/templates_spec.rb
--- old/spec/puppet-syntax/templates_spec.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/spec/puppet-syntax/templates_spec.rb 1970-01-01 01:00:00.000000000 +0100
@@ -59,4 +59,72 @@
expect(res).to match([])
end
+
+ if Puppet::PUPPETVERSION.to_i < 4
+ context 'on Puppet < 4.0.0' do
+ it 'should throw an exception when parsing EPP files' do
+ file = fixture_templates('pass.epp')
+ expect{ subject.check(file) }.to raise_error(/Cannot validate EPP without Puppet 4/)
+ end
+
+ context "when the 'epp_only' options is set" do
+ before(:each) {
+ PuppetSyntax.epp_only = true
+ }
+
+ it 'should throw an exception for any file' do
+ file = fixture_templates('pass.erb')
+ expect{ subject.check(file) }.to raise_error(/Cannot validate EPP without Puppet 4/)
+ end
+ end
+ end
+ end
+
+ if Puppet::PUPPETVERSION.to_i >= 4
+ context 'on Puppet >= 4.0.0' do
+ it 'should return nothing from a valid file' do
+ files = fixture_templates('pass.epp')
+ res = subject.check(files)
+
+ expect(res).to match([])
+ end
+
+ it 'should catch SyntaxError' do
+ files = fixture_templates('fail_error.epp')
+ res = subject.check(files)
+
+ expect(res.size).to eq(1)
+ expect(res[0]).to match(/This Type-Name has no effect/)
+ end
+
+ it 'should read more than one valid file' do
+ files = fixture_templates(['pass.epp', 'pass_also.epp'])
+ res = subject.check(files)
+
+ expect(res).to match([])
+ end
+
+ it 'should continue after finding an error in the first file' do
+ files = fixture_templates(['fail_error.epp', 'fail_error_also.epp'])
+ res = subject.check(files)
+
+ expect(res.size).to eq(2)
+ expect(res[0]).to match(/This Type-Name has no effect/)
+ expect(res[1]).to match(/Syntax error at '}' at \S*\/fail_error_also.epp:2:4/)
+ end
+
+ context "when the 'epp_only' options is set" do
+ before(:each) {
+ PuppetSyntax.epp_only = true
+ }
+
+ it 'should process an ERB as EPP and find an error' do
+ files = fixture_templates('pass.erb')
+ res = subject.check(files)
+
+ expect(res.size).to eq(1)
+ end
+ end
+ end
+ end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spec/puppet-syntax_spec.rb new/spec/puppet-syntax_spec.rb
--- old/spec/puppet-syntax_spec.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/spec/puppet-syntax_spec.rb 1970-01-01 01:00:00.000000000 +0100
@@ -29,4 +29,9 @@
expect(PuppetSyntax.fail_on_deprecation_notices).to eq(false)
end
+ it 'should support forcing EPP only templates' do
+ PuppetSyntax.epp_only = true
+ expect(PuppetSyntax.epp_only).to eq(true)
+ end
+
end
1
0
Hello community,
here is the log from the commit of package libvshadow for openSUSE:Factory checked in at 2016-01-28 17:23:10
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libvshadow (Old)
and /work/SRC/openSUSE:Factory/.libvshadow.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libvshadow"
Changes:
--------
--- /work/SRC/openSUSE:Factory/libvshadow/libvshadow.changes 2015-01-30 15:04:52.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.libvshadow.new/libvshadow.changes 2016-01-28 17:23:53.000000000 +0100
@@ -1,0 +2,8 @@
+Mon Jan 25 12:27:50 UTC 2016 - Greg.Freemyer(a)gmail.com
+
+- update to v0~20160110
+ * worked on Python 3 support
+ * worked on win2k3 format support
+ * introduced new function has_in_volume_data
+
+-------------------------------------------------------------------
Old:
----
libvshadow-alpha-20150106.tar.gz
New:
----
libvshadow-alpha-20160110.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ libvshadow.spec ++++++
--- /var/tmp/diff_new_pack.kJzmvn/_old 2016-01-28 17:23:54.000000000 +0100
+++ /var/tmp/diff_new_pack.kJzmvn/_new 2016-01-28 17:23:54.000000000 +0100
@@ -1,7 +1,7 @@
#
# spec file for package libvshadow
#
-# Copyright (c) 2015 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
Name: libvshadow
%define lname libvshadow1
-%define timestamp 20150106
+%define timestamp 20160110
Version: 0~%{timestamp}
Release: 0
Summary: Library to access the Volume Shadow Snapshot (VSS) format
++++++ libvshadow-alpha-20150106.tar.gz -> libvshadow-alpha-20160110.tar.gz ++++++
++++ 26196 lines of diff (skipped)
1
0
Hello community,
here is the log from the commit of package bundle-lang-common for openSUSE:Factory checked in at 2016-01-28 17:23:03
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/bundle-lang-common (Old)
and /work/SRC/openSUSE:Factory/.bundle-lang-common.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "bundle-lang-common"
Changes:
--------
--- /work/SRC/openSUSE:Factory/bundle-lang-common/bundle-lang-common.changes 2016-01-03 13:27:33.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.bundle-lang-common.new/bundle-lang-common.changes 2016-01-28 17:23:50.000000000 +0100
@@ -1,0 +2,5 @@
+Mon Jan 25 10:31:05 UTC 2016 - dimstar(a)opensuse.org
+
+- Update package list.
+
+-------------------------------------------------------------------
bundle-lang-gnome.changes: same change
bundle-lang-kde.changes: same change
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ bundle-lang-common.spec ++++++
--- /var/tmp/diff_new_pack.Sivdll/_old 2016-01-28 17:23:51.000000000 +0100
+++ /var/tmp/diff_new_pack.Sivdll/_new 2016-01-28 17:23:51.000000000 +0100
@@ -1,7 +1,7 @@
#
# spec file for package bundle-lang-common
#
-# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
++++++ bundle-lang-gnome.spec ++++++
++++ 1160 lines (skipped)
++++ between /work/SRC/openSUSE:Factory/bundle-lang-common/bundle-lang-gnome.spec
++++ and /work/SRC/openSUSE:Factory/.bundle-lang-common.new/bundle-lang-gnome.spec
bundle-lang-kde.spec: same change
++++++ bundle-lang-other.spec ++++++
--- /var/tmp/diff_new_pack.Sivdll/_old 2016-01-28 17:23:51.000000000 +0100
+++ /var/tmp/diff_new_pack.Sivdll/_new 2016-01-28 17:23:51.000000000 +0100
@@ -1,7 +1,7 @@
#
# spec file for package bundle-lang-other
#
-# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
++++++ packages.txt ++++++
--- /var/tmp/diff_new_pack.Sivdll/_old 2016-01-28 17:23:51.000000000 +0100
+++ /var/tmp/diff_new_pack.Sivdll/_new 2016-01-28 17:23:51.000000000 +0100
@@ -58,7 +58,7 @@
dasher-lang gnome-extras
dconf-editor-lang gnome-extras
decibel-audio-player-lang gnome-extras
-deja-dup-lang gnome
+deja-dup-lang gnome-extras
devhelp-lang gnome-extras
dia-lang gnome-extras
docky-lang gnome-extras
@@ -100,14 +100,14 @@
gedit-latex-lang gnome-extras
gedit-plugins-lang gnome-extras
geeqie-lang gnome-extras
-gegl-0_2-lang gnome
+gegl-0_2-lang gnome-extras
gegl-0_3-lang gnome
genius-lang gnome-extras
gftp-common-lang gnome-extras
ghex-lang gnome-extras
giggle-lang gnome-extras
gimp-gap-lang gnome-extras
-gimp-lang gnome
+gimp-lang gnome-extras
gimp-plugin-lqr-lang gnome-extras
gimp-save-for-web-lang gnome-extras
girl-lang gnome-extras
@@ -277,11 +277,11 @@
krb5-auth-dialog-lang gnome-extras
kross-lang kde
kscreen5-lang kde
+kscreenlocker-lang kde
kservice-lang kde
ksshaskpass5-lang kde
ksysguard5-lang kde
ktexteditor-lang kde
-ktorrent-lang kde
kwallet-tools-lang kde
kwalletd5-lang kde
kwin5-lang kde
@@ -343,7 +343,7 @@
libgweather-lang gnome
libinfinity-lang gnome-extras
libiptcdata-lang gnome
-libkfbapi-lang kde
+libkgapi-lang kde
libksysguard5-lang kde
libktorrent5-lang kde
libosinfo-lang gnome
@@ -358,7 +358,7 @@
libsocialweb-lang gnome
libsoup-lang common
libwebkit2gtk3-lang gnome
-libwebkitgtk2-lang gnome
+libwebkitgtk2-lang gnome-extras
libwebkitgtk3-lang gnome
libwnck-lang gnome
libwnck2-lang gnome-extras
@@ -416,7 +416,6 @@
seahorse-sharing-lang gnome-extras
sed-lang common
shared-mime-info-lang common
-shotwell-lang gnome-extras
simple-scan-lang gnome
smuxi-engine-campfire-lang gnome-extras
smuxi-engine-irc-lang gnome-extras
1
0
Hello community,
here is the log from the commit of package cabal-rpm for openSUSE:Factory checked in at 2016-01-28 17:23:02
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/cabal-rpm (Old)
and /work/SRC/openSUSE:Factory/.cabal-rpm.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "cabal-rpm"
Changes:
--------
--- /work/SRC/openSUSE:Factory/cabal-rpm/cabal-rpm.changes 2015-10-20 00:04:39.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.cabal-rpm.new/cabal-rpm.changes 2016-01-28 17:23:49.000000000 +0100
@@ -1,0 +2,8 @@
+Mon Jan 25 09:20:25 UTC 2016 - mimi.vx(a)gmail.com
+
+- update to 0.9.9
+- drop remove_exclusivearch.patch
+- drop cabal-rpm.1 manpage, use instead link to upstream cblrpm.1
+* couple of minor improvements for SUSE packaging
+
+-------------------------------------------------------------------
Old:
----
cabal-rpm-0.9.8.tar.gz
cabal-rpm.1
New:
----
cabal-rpm-0.9.9.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ cabal-rpm.spec ++++++
--- /var/tmp/diff_new_pack.dsT9st/_old 2016-01-28 17:23:50.000000000 +0100
+++ /var/tmp/diff_new_pack.dsT9st/_new 2016-01-28 17:23:50.000000000 +0100
@@ -1,7 +1,7 @@
#
# spec file for package cabal-rpm
#
-# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -17,14 +17,13 @@
Name: cabal-rpm
-Version: 0.9.8
+Version: 0.9.9
Release: 0
Summary: RPM packaging tool for Haskell Cabal-based packages
License: GPL-3.0+
Group: Development/Tools/Other
Url: https://hackage.haskell.org/package/%{name}
Source0: https://hackage.haskell.org/package/%{name}-%{version}/%{name}-%{version}.t…
-Source2: cabal-rpm.1
BuildRequires: ghc-Cabal-devel
# Begin cabal-rpm deps:
BuildRequires: ghc-directory-devel
@@ -53,16 +52,15 @@
%setup -q
%build
-%define cabal_configure_options --flags="-old-locale"
%{ghc_bin_build}
%install
%{ghc_bin_install}
install -p -m 0644 -D man/cblrpm.1 %{buildroot}%{_mandir}/man1/cblrpm.1
-install -p -m 0644 %{SOURCE2} %{buildroot}%{_mandir}/man1/
ln -s cblrpm %{buildroot}%{_bindir}/%{name}
+ln -s %{_mandir}/man1/cblrpm.1 %{buildroot}%{_mandir}/man1/%{name}.1
%files
%defattr(-,root,root,-)
++++++ cabal-rpm-0.9.8.tar.gz -> cabal-rpm-0.9.9.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cabal-rpm-0.9.8/ChangeLog new/cabal-rpm-0.9.9/ChangeLog
--- old/cabal-rpm-0.9.8/ChangeLog 2015-10-08 05:36:01.000000000 +0200
+++ new/cabal-rpm-0.9.9/ChangeLog 2016-01-25 10:33:19.000000000 +0100
@@ -1,3 +1,6 @@
+* 0.9.9 (2016-01-25)
+- couple of minor improvements for SUSE packaging
+
* 0.9.8 (2015-10-08)
- better %license logic
- fix handling of versions without '.'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cabal-rpm-0.9.8/cabal-rpm.cabal new/cabal-rpm-0.9.9/cabal-rpm.cabal
--- old/cabal-rpm-0.9.8/cabal-rpm.cabal 2015-10-08 05:36:01.000000000 +0200
+++ new/cabal-rpm-0.9.9/cabal-rpm.cabal 2016-01-25 10:33:19.000000000 +0100
@@ -1,5 +1,5 @@
Name: cabal-rpm
-Version: 0.9.8
+Version: 0.9.9
Synopsis: RPM packaging tool for Haskell Cabal-based packages
Description:
This package provides a RPM packaging tool for Haskell Cabal-based packages.
@@ -17,7 +17,7 @@
Author: Jens Petersen <juhp(a)community.haskell.org>, Bryan O'Sullivan <bos(a)serpentine.com>
Maintainer: Jens Petersen <petersen(a)fedoraproject.org>
Copyright: 2007-2008 Bryan O'Sullivan <bos(a)serpentine.com>,
- 2012-2015 Jens Petersen <petersen(a)fedoraproject.org>
+ 2012-2016 Jens Petersen <petersen(a)fedoraproject.org>
Category: Distribution
Build-type: Simple
Extra-source-files: README.md ChangeLog man/cblrpm.1.md man/cblrpm.1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cabal-rpm-0.9.8/src/Commands/Spec.hs new/cabal-rpm-0.9.9/src/Commands/Spec.hs
--- old/cabal-rpm-0.9.8/src/Commands/Spec.hs 2015-10-08 05:36:01.000000000 +0200
+++ new/cabal-rpm-0.9.9/src/Commands/Spec.hs 2016-01-25 10:33:19.000000000 +0100
@@ -3,7 +3,7 @@
-- |
-- Module : Commands.Spec
-- Copyright : (C) 2007-2008 Bryan O'Sullivan
--- (C) 2012-2015 Jens Petersen
+-- (C) 2012-2016 Jens Petersen
--
-- Maintainer : Jens Petersen <petersen(a)fedoraproject.org>
-- Stability : alpha
@@ -32,7 +32,7 @@
import Data.List (groupBy, intercalate, isPrefixOf, isSuffixOf,
sort, (\\))
import Data.Maybe (fromMaybe)
-import Data.Time.Clock (UTCTime, getCurrentTime)
+import Data.Time.Clock (getCurrentTime)
import Data.Time.Format (formatTime)
import Data.Version (showVersion)
@@ -58,13 +58,15 @@
import qualified Paths_cabal_rpm (version)
-defaultRelease :: FilePath -> UTCTime -> IO String
-defaultRelease cabalPath now = do
+defaultRelease :: FilePath -> Distro -> IO String
+defaultRelease cabalPath distro = do
let pkgDir = takeDirectory cabalPath
scmRepo <- isScmDir pkgDir
- return $ if scmRepo
- then formatTime defaultTimeLocale "0.%Y%m%d" now
- else "1"
+ if scmRepo
+ then do
+ now <- getCurrentTime
+ return $ formatTime defaultTimeLocale "0.%Y%m%d" now
+ else return $ if (distro == SUSE) then "0" else "1"
rstrip :: (Char -> Bool) -> String -> String
rstrip p = reverse . dropWhile p . reverse
@@ -80,15 +82,11 @@
verbose = rpmVerbosity flags
hasExec = hasExes pkgDesc
hasLib = hasLibs pkgDesc
- now <- getCurrentTime
- defRelease <- defaultRelease cabalPath now
(pkgname, binlib) <- getPkgName mspec pkgDesc (rpmBinary flags)
let pkg_name = if pkgname == name then "%{name}" else "%{pkg_name}"
basename | binlib = "%{pkg_name}"
| hasExecPkg = name
| otherwise = "ghc-%{pkg_name}"
- version = packageVersion pkg
- release = fromMaybe defRelease (rpmRelease flags)
specFile = fromMaybe "" mdest </> pkgname ++ ".spec"
hasExecPkg = binlib || (hasExec && not hasLib)
-- run commands before opening file to prevent empty file on error
@@ -119,6 +117,7 @@
if distro /= SUSE
then put "# https://fedoraproject.org/wiki/Packaging:Haskell"
else do
+ now <- getCurrentTime
let year = formatTime defaultTimeLocale "%Y" now
put "#"
put $ "# spec file for package " ++ pkgname
@@ -178,6 +177,9 @@
-- putDef "debug_package" "%{nil}"
-- putNewline
+ defRelease <- defaultRelease cabalPath distro
+ let version = packageVersion pkg
+ release = fromMaybe defRelease (rpmRelease flags)
putHdr "Name" (if binlib then "%{pkg_name}" else basename)
putHdr "Version" version
putHdr "Release" $ release ++ (if distro == SUSE then [] else "%{?dist}")
@@ -205,7 +207,8 @@
unless (null $ alldeps ++ extraTestDeps) $ do
put "# Begin cabal-rpm deps:"
mapM_ (putHdr "BuildRequires") alldeps
- when (any (\ d -> d `elem` map showDep ["template-haskell", "hamlet"]) deps) $
+ when (distro /= SUSE &&
+ any (\ d -> d `elem` map showDep ["template-haskell", "hamlet"]) deps) $
putHdr "ExclusiveArch" "%{ghc_arches_with_ghci}"
unless (null extraTestDeps) $ do
put "%if %{with tests}"
@@ -349,6 +352,7 @@
put "%changelog"
unless (distro == SUSE) $ do
+ now <- getCurrentTime
let date = formatTime defaultTimeLocale "%a %b %e %Y" now
put $ "*" +-+ date +-+ "Fedora Haskell SIG <haskell(a)lists.fedoraproject.org> - " ++ version ++ "-" ++ release
put $ "- spec file generated by cabal-rpm-" ++ showVersion Paths_cabal_rpm.version
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cabal-rpm-0.9.8/src/Dependencies.hs new/cabal-rpm-0.9.9/src/Dependencies.hs
--- old/cabal-rpm-0.9.8/src/Dependencies.hs 2015-10-08 05:36:01.000000000 +0200
+++ new/cabal-rpm-0.9.9/src/Dependencies.hs 2016-01-25 10:33:19.000000000 +0100
@@ -1,6 +1,6 @@
-- |
-- Module : Dependencies
--- Copyright : (C) 2012-2015 Jens Petersen
+-- Copyright : (C) 2012-2016 Jens Petersen
--
-- Maintainer : Jens Petersen <petersen(a)fedoraproject.org>
-- Stability : alpha
@@ -123,7 +123,7 @@
-> String -- ^self
-> [String] -- ^depends
testsuiteDependencies pkgDesc self =
- map showDep . delete self . filter excludedPkgs . nub . map depName $ concatMap targetBuildDepends $ map testBuildInfo $ testSuites pkgDesc
+ map showDep . delete self . filter excludedPkgs . nub . map depName $ concatMap (targetBuildDepends . testBuildInfo) (testSuites pkgDesc)
missingPackages :: PackageDescription -> IO [String]
missingPackages pkgDesc = do
1
0
Hello community,
here is the log from the commit of package wrk for openSUSE:Factory checked in at 2016-01-28 17:23:01
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/wrk (Old)
and /work/SRC/openSUSE:Factory/.wrk.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "wrk"
Changes:
--------
--- /work/SRC/openSUSE:Factory/wrk/wrk.changes 2015-08-05 06:51:54.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.wrk.new/wrk.changes 2016-01-28 17:23:48.000000000 +0100
@@ -1,0 +2,5 @@
+Mon Jan 25 07:46:48 UTC 2016 - mpluskal(a)suse.com
+
+- Install to /usr/bin (boo#963355)
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ wrk.spec ++++++
--- /var/tmp/diff_new_pack.hYHmZf/_old 2016-01-28 17:23:49.000000000 +0100
+++ /var/tmp/diff_new_pack.hYHmZf/_new 2016-01-28 17:23:49.000000000 +0100
@@ -1,7 +1,7 @@
#
# spec file for package wrk
#
-# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -48,12 +48,12 @@
make %{?_smp_mflags} OPTFLAGS="%{optflags}"
%install
-install -D -m 0755 wrk %{buildroot}%{_sbindir}/wrk
+install -D -m 0755 wrk %{buildroot}%{_bindir}/wrk
%files
%defattr(-,root,root)
%doc LICENSE README NOTICE
%doc scripts/
-%{_sbindir}/wrk
+%{_bindir}/wrk
%changelog
1
0
Hello community,
here is the log from the commit of package 3omns for openSUSE:Factory checked in at 2016-01-28 17:22:59
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/3omns (Old)
and /work/SRC/openSUSE:Factory/.3omns.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "3omns"
Changes:
--------
--- /work/SRC/openSUSE:Factory/3omns/3omns.changes 2015-09-30 05:52:22.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.3omns.new/3omns.changes 2016-01-28 17:23:47.000000000 +0100
@@ -1,0 +2,23 @@
+Sat Jan 23 11:29:00 UTC 2016 - nemysis(a)openSUSE.org
+
+- Recreate tarball, new GitHub commit
+ Please look 'git log' and announce message:
+
+ * Add bot.lua to dist
+
+ * Fixed some bot AI bugs
+ * Revamped networking code to add reliability
+ * Added the -R command line option to print resources path
+
+- license update: GPL-3.0+ No indication that this is GPL-3.0 (only)
+- Add BuildRequires for bitstream-vera-fonts
+- Add Requires for bitstream-vera-fonts, thanks dstoecker
+- Replace bundled font with a symlink to an identical system font
+- Remove COPYING.font from Documentation
+
+-------------------------------------------------------------------
+Fri Jan 1 12:04:44 UTC 2016 - rpm(a)fthiessen.de
+
+- Fixed lua dependencies so it will also build on openSUSE <= 13.2
+
+-------------------------------------------------------------------
Old:
----
3omns-0.1+git-21292f0.tar.bz2
New:
----
3omns-0.1+git-ded6410.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ 3omns.spec ++++++
--- /var/tmp/diff_new_pack.pw09HU/_old 2016-01-28 17:23:48.000000000 +0100
+++ /var/tmp/diff_new_pack.pw09HU/_new 2016-01-28 17:23:48.000000000 +0100
@@ -1,7 +1,7 @@
#
# spec file for package 3omns
#
-# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -20,12 +20,12 @@
Version: 0.1
Release: 0
Summary: Old-school Arcade-style Tile-based Bomb-dropping Deathmatch Game
-License: GPL-3.0
+License: GPL-3.0+
Group: Amusements/Games/Action/Arcade
Url: https://chazomaticus.github.io/3omns/
# Downloaded from https://github.com/chazomaticus/3omns
# Packed as tar.bz2
-Source0: %{name}-%{version}+git-21292f0.tar.bz2
+Source0: %{name}-%{version}+git-ded6410.tar.bz2
%if 0%{?suse_version}
BuildRequires: fdupes
BuildRequires: hicolor-icon-theme
@@ -34,19 +34,21 @@
BuildRequires: asciidoc
BuildRequires: autoconf
BuildRequires: automake
+BuildRequires: bitstream-vera-fonts
BuildRequires: docbook-xsl-stylesheets
BuildRequires: docbook_5
BuildRequires: glibc-devel
BuildRequires: libxml2-devel
BuildRequires: libxslt-devel
-BuildRequires: pkgconfig(SDL2_image)
-BuildRequires: pkgconfig(SDL2_ttf)
%if 0%{?suse_version} > 1320
BuildRequires: lua52-devel
%else
-BuildRequires: pkgconfig(lua)
+BuildRequires: lua-devel >= 5.2
%endif
+BuildRequires: pkgconfig(SDL2_image)
+BuildRequires: pkgconfig(SDL2_ttf)
BuildRequires: pkgconfig(sdl2)
+Requires: bitstream-vera-fonts
%description
3omns is an old-school arcade-style tile-based bomb-dropping deathmatch game.
@@ -65,6 +67,10 @@
%install
%make_install
+# Use system fonts instead of bundling our own
+rm -f %{buildroot}%{_datadir}/%{name}/ttf/Vera.ttf
+ln -s ../../fonts/truetype/Vera.ttf %{buildroot}%{_datadir}/%{name}/ttf/Vera.ttf
+
%if 0%{?suse_version}
%suse_update_desktop_file %{name}
%fdupes -s %{buildroot}%{_prefix}
@@ -72,7 +78,7 @@
%files
%defattr(-,root,root,-)
-%doc COPYING COPYING.font NEWS README
+%doc COPYING NEWS README
%{_bindir}/%{name}
%{_mandir}/man6/%{name}.6%{ext_man}
%{_datadir}/applications/%{name}.desktop
++++++ 3omns-0.1+git-21292f0.tar.bz2 -> 3omns-0.1+git-ded6410.tar.bz2 ++++++
1
0
Hello community,
here is the log from the commit of package edgar for openSUSE:Factory checked in at 2016-01-28 17:22:58
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/edgar (Old)
and /work/SRC/openSUSE:Factory/.edgar.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "edgar"
Changes:
--------
--- /work/SRC/openSUSE:Factory/edgar/edgar.changes 2015-12-09 22:15:31.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.edgar.new/edgar.changes 2016-01-28 17:23:42.000000000 +0100
@@ -1,0 +2,7 @@
+Sat Jan 23 19:08:45 UTC 2016 - nemysis(a)openSUSE.org
+
+- Update to 1.23, announce message:
+
+ * Updated French and German translations
+
+-------------------------------------------------------------------
Old:
----
edgar-1.22.tar.gz
New:
----
edgar-1.23.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ edgar.spec ++++++
--- /var/tmp/diff_new_pack.gAoNeP/_old 2016-01-28 17:23:47.000000000 +0100
+++ /var/tmp/diff_new_pack.gAoNeP/_new 2016-01-28 17:23:47.000000000 +0100
@@ -1,7 +1,7 @@
#
# spec file for package edgar
#
-# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -17,7 +17,7 @@
Name: edgar
-Version: 1.22
+Version: 1.23
Release: 0
Summary: 2D platform game with a persistent world
License: GPL-2.0
@@ -70,7 +70,7 @@
%endif
%files -f %name.lang
-%defattr(-,root,root)
+%defattr(-,root,root,-)
%doc doc/*
%attr(-,root,games) %{_bindir}/%{name}
%{_mandir}/man6/%{name}.6%{ext_man}
++++++ edgar-1.22.tar.gz -> edgar-1.23.tar.gz ++++++
/work/SRC/openSUSE:Factory/edgar/edgar-1.22.tar.gz /work/SRC/openSUSE:Factory/.edgar.new/edgar-1.23.tar.gz differ: char 29, line 2
1
0
Hello community,
here is the log from the commit of package chromium for openSUSE:Factory checked in at 2016-01-28 17:22:57
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/chromium (Old)
and /work/SRC/openSUSE:Factory/.chromium.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "chromium"
Changes:
--------
--- /work/SRC/openSUSE:Factory/chromium/chromium.changes 2016-01-01 19:50:31.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.chromium.new/chromium.changes 2016-01-28 17:23:08.000000000 +0100
@@ -1,0 +2,21 @@
+Fri Jan 22 19:08:56 UTC 2016 - tittiatcoke(a)gmail.com
+
+- Update to Chromium 48.0.2564.82
+ * Security fixes:
+ - CVE-2016-1612: Bad cast in V8 (boo#963184)
+ - CVE-2016-1613: Use-after-free in PDFium (boo#963185)
+ - CVE-2016-1614: Information leak in Blink (boo#963186)
+ - CVE-2016-1615: Origin confusion in Omnibox (boo#963187)
+ - CVE-2016-1616: URL Spoofing (boo#963188)
+ - CVE-2016-1617: History sniffing with HSTS and CSP (boo#963189)
+ - CVE-2016-1618: Weak random number generator in Blink (boo#963190)
+ - CVE-2016-1619: Out-of-bounds read in PDFium (boo#963191)
+ - CVE-2016-1620 chromium-browser: various fixes (boo#963192)
+
+-------------------------------------------------------------------
+Thu Jan 14 15:22:38 UTC 2016 - tittiatcoke(a)gmail.com
+
+- Update to Chromium 47.0.2526.111.
+ * No changelog available
+
+-------------------------------------------------------------------
Old:
----
chromium-47.0.2526.106.tar.xz
New:
----
chromium-48.0.2564.82.tar.xz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ chromium.spec ++++++
--- /var/tmp/diff_new_pack.qRGV3j/_old 2016-01-28 17:23:38.000000000 +0100
+++ /var/tmp/diff_new_pack.qRGV3j/_new 2016-01-28 17:23:38.000000000 +0100
@@ -1,7 +1,7 @@
#
# spec file for package chromium
#
-# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -21,7 +21,7 @@
%bcond_without libva
Name: chromium
-Version: 47.0.2526.106
+Version: 48.0.2564.82
Release: 0
Summary: Google's opens source browser project
License: BSD-3-Clause and LGPL-2.1+
++++++ chromium-47.0.2526.106.tar.xz -> chromium-48.0.2564.82.tar.xz ++++++
/work/SRC/openSUSE:Factory/chromium/chromium-47.0.2526.106.tar.xz /work/SRC/openSUSE:Factory/.chromium.new/chromium-48.0.2564.82.tar.xz differ: char 27, line 1
++++++ chromium-enable-vaapi.patch ++++++
++++ 1679 lines (skipped)
++++ between /work/SRC/openSUSE:Factory/chromium/chromium-enable-vaapi.patch
++++ and /work/SRC/openSUSE:Factory/.chromium.new/chromium-enable-vaapi.patch
1
0
28 Jan '16
Hello community,
here is the log from the commit of package rubygem-exception_notification for openSUSE:Factory checked in at 2016-01-28 17:22:55
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/rubygem-exception_notification (Old)
and /work/SRC/openSUSE:Factory/.rubygem-exception_notification.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "rubygem-exception_notification"
Changes:
--------
--- /work/SRC/openSUSE:Factory/rubygem-exception_notification/rubygem-exception_notification.changes 2016-01-12 16:12:08.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.rubygem-exception_notification.new/rubygem-exception_notification.changes 2016-01-28 17:22:57.000000000 +0100
@@ -1,0 +2,20 @@
+Thu Jan 21 05:34:37 UTC 2016 - coolo(a)suse.com
+
+- updated to version 4.1.4
+ see installed CHANGELOG.rdoc
+
+-------------------------------------------------------------------
+Wed Dec 23 05:33:29 UTC 2015 - coolo(a)suse.com
+
+- updated to version 4.1.3
+ see installed CHANGELOG.rdoc
+
+ == undefined
+
+ * enhancements
+ * Add a way to have a backtrace callback on notifiers (by @pcboy)
+
+ * bug fixes
+ * Fix incompatible character encodings error (by @san650)
+
+-------------------------------------------------------------------
Old:
----
exception_notification-4.1.2.gem
New:
----
exception_notification-4.1.4.gem
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ rubygem-exception_notification.spec ++++++
--- /var/tmp/diff_new_pack.mgbyWJ/_old 2016-01-28 17:22:58.000000000 +0100
+++ /var/tmp/diff_new_pack.mgbyWJ/_new 2016-01-28 17:22:58.000000000 +0100
@@ -1,7 +1,7 @@
#
# spec file for package rubygem-exception_notification
#
-# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -24,7 +24,7 @@
#
Name: rubygem-exception_notification
-Version: 4.1.2
+Version: 4.1.4
Release: 0
%define mod_name exception_notification
%define mod_full_name %{mod_name}-%{version}
++++++ exception_notification-4.1.2.gem -> exception_notification-4.1.4.gem ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CHANGELOG.rdoc new/CHANGELOG.rdoc
--- old/CHANGELOG.rdoc 2015-12-04 21:45:42.000000000 +0100
+++ new/CHANGELOG.rdoc 2016-01-07 22:21:05.000000000 +0100
@@ -1,3 +1,17 @@
+== 4.1.4
+
+* bug fixes
+ * HTML-escape exception messages sent to hipchat
+ * Send the correct options in send_notice
+
+== 4.1.3
+
+* enhancements
+ * Add a way to have a backtrace callback on notifiers (by @pcboy)
+
+* bug fixes
+ * Fix incompatible character encodings error (by @san650)
+
== 4.1.2
* enhancements
* Change format of Slack notifications (by @eldano)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/README.md new/README.md
--- old/README.md 2015-12-04 21:45:42.000000000 +0100
+++ new/README.md 2016-01-07 22:21:05.000000000 +0100
@@ -7,26 +7,21 @@
**THIS README IS FOR THE MASTER BRANCH AND REFLECTS THE WORK CURRENTLY EXISTING ON THE MASTER BRANCH. IF YOU ARE WISHING TO USE A NON-MASTER BRANCH OF EXCEPTION NOTIFICATION, PLEASE CONSULT THAT BRANCH'S README AND NOT THIS ONE.**
--
-
-The Exception Notification gem provides a set of [notifiers](#notifiers) for sending notifications when errors occur in a Rack/Rails application.
-
-The built-in notifiers can deliver notifications by [email](#email-notifier), [campfire rooms](#campfire-notifier) or via [webhooks](#webhook-notifier).
+---
+The Exception Notification gem provides a set of [notifiers](#notifiers) for sending notifications when errors occur in a Rack/Rails application. The built-in notifiers can deliver notifications by [email](#email-notifier), [Campfire](#campfire-notifier), [HipChat](#hipchat-notifier), [Slack](#slack-notifier), [IRC](#irc-notifier) or via custom [WebHooks](#webhook-notifier).
There's a great [Railscast about Exception Notification](http://railscasts.com/episodes/104-exception-notifications-re… you can see that may help you getting started.
[Follow us on Twitter](https://twitter.com/exception_notif) to get updates and notices about new releases.
-
## Requirements
-* Ruby 1.9.3 or greater
-* Rails 3.1 or greater, Sinatra or another Rack-based application.
+* Ruby 2.0 or greater
+* Rails 4.0 or greater, Sinatra or another Rack-based application.
For previous releases, please checkout [this](#versions).
-
## Getting Started
Add the following line to your application's Gemfile:
@@ -35,7 +30,9 @@
gem 'exception_notification'
```
-As of Rails 3 ExceptionNotification is used as a rack middleware, or in the environment you want it to run. In most cases you would want ExceptionNotification to run on production. Thus, you can make it work by putting the following lines in your `config/environments/production.rb`:
+### Rails
+
+ExceptionNotification is used as a rack middleware, or in the environment you want it to run. In most cases you would want ExceptionNotification to run on production. Thus, you can make it work by putting the following lines in your `config/environments/production.rb`:
```ruby
Rails.application.config.middleware.use ExceptionNotification::Rack,
@@ -46,24 +43,38 @@
}
```
-> **Note**: In order to enable delivery notifications by email make sure you have [ActionMailer configured](#actionmailer-configuration).
+**Note**: In order to enable delivery notifications by email make sure you have [ActionMailer configured](#actionmailer-configuration).
+### Rack/Sinatra
In order to use ExceptionNotification with Sinatra, please take a look in the [example application](https://github.com/smartinez87/exception_notification/tree/mas….
+## Notifiers
+
+ExceptionNotification relies on notifiers to deliver notifications when errors occur in your applications. By default, six notifiers are available:
+
+* [Campfire notifier](#campfire-notifier)
+* [Email notifier](#email-notifier)
+* [HipChat notifier](#hipchat-notifier)
+* [IRC notifier](#irc-notifier)
+* [Slack notifier](#slack-notifier)
+* [WebHook notifier](#webhook-notifier)
-### Upgrading to 4.x version
+But, you also can easily implement your own [custom notifier](#custom-notifier).
-As of 4.x version the configuration syntax has changed. All email related options MUST BE nested under the `:email` key. Thus, previous configuration like:
+### Campfire notifier
+
+This notifier sends notifications to your Campfire room.
+
+#### Usage
+
+Just add the [tinder](https://github.com/collectiveidea/tinder) gem to your `Gemfile`:
```ruby
-Rails.application.config.middleware.use ExceptionNotifier,
- :email_prefix => "[PREFIX] ",
- :sender_address => %{"notifier" <notifier(a)example.com>},
- :exception_recipients => %w{exceptions(a)example.com}
+gem 'tinder'
```
-becomes:
+To configure it, you need to set the `subdomain`, `token` and `room_name` options, like this:
```ruby
Rails.application.config.middleware.use ExceptionNotification::Rack,
@@ -71,21 +82,42 @@
:email_prefix => "[PREFIX] ",
:sender_address => %{"notifier" <notifier(a)example.com>},
:exception_recipients => %w{exceptions(a)example.com}
+ },
+ :campfire => {
+ :subdomain => 'my_subdomain',
+ :token => 'my_token',
+ :room_name => 'my_room'
}
```
-Beside that, the rack middleware was renamed to `ExceptionNotification::Rack`.
+#### Options
-## Notifiers
+##### subdomain
-ExceptionNotification relies on notifiers to deliver notifications when errors occur in your applications. By default, three notifiers are available: [email notifier](#email-notifier), [campfire notifier](#campfire-notifier) and [webhook notifier](#webhook-notifier). But, you also can easily implement your own [custom notifier](#custom-notifier).
+*String, required*
+Your subdomain at Campfire.
+
+##### room_name
+
+*String, required*
+
+The Campfire room where the notifications must be published to.
+
+##### token
+
+*String, required*
+
+The API token to allow access to your Campfire account.
+
+
+For more options to set Campfire, like _ssl_, check [here](https://github.com/collectiveidea/tinder/blob/master/lib/tinder/campf….
### Email notifier
The Email notifier sends notifications by email. The notifications/emails sent includes information about the current request, session, and environment, and also gives a backtrace of the exception.
-After an exception notification has been delivered the rack environment variable 'exception_notifier.delivered' will be set to true.
+After an exception notification has been delivered the rack environment variable `exception_notifier.delivered` will be set to true.
#### ActionMailer configuration
@@ -110,21 +142,18 @@
Who the message is from.
-
##### exception_recipients
*String/Array of strings, default: []*
Who the message is destined for, can be a string of addresses, or an array of addresses.
-
##### email_prefix
*String, default: [ERROR]*
The subject's prefix of the message.
-
##### sections
*Array of strings, default: %w(request session environment backtrace)*
@@ -174,7 +203,6 @@
In the above case, `@document` and `@person` would be made available to the email renderer, allowing your new section(s) to access and display them. See the existing sections defined by the plugin for examples of how to write your own.
-
##### background_sections
*Array of strings, default: %w(backtrace data)*
@@ -191,7 +219,6 @@
}
```
-
##### email_headers
*Hash of strings, default: {}*
@@ -208,28 +235,24 @@
}
```
-
##### verbose_subject
*Boolean, default: true*
If enabled, include the exception message in the subject. Use `:verbose_subject => false` to exclude it.
-
##### normalize_subject
*Boolean, default: false*
If enabled, remove numbers from subject so they thread as a single one. Use `:normalize_subject => true` to enable it.
-
##### email_format
*Symbol, default: :text*
By default, ExceptionNotification sends emails in plain text, in order to sends multipart notifications (aka HTML emails) use `:email_format => :html`.
-
##### delivery_method
*Symbol, default: :smtp*
@@ -267,73 +290,18 @@
A complete list of `smtp_settings` options can be found in the [ActionMailer Configuration documentation](http://api.rubyonrails.org/classes/ActionMailer/Base.html#cl….
-
##### mailer_parent
*String, default: ActionMailer::Base*
The parent mailer which ExceptionNotification mailer inherit from.
-
##### deliver_with
*Symbol, default: :deliver_now
The method name to send emalis using ActionMailer.
-
-### Campfire notifier
-
-This notifier sends notifications to your Campfire room.
-
-#### Usage
-
-Just add the [tinder](https://github.com/collectiveidea/tinder) gem to your `Gemfile`:
-
-```ruby
-gem 'tinder'
-```
-
-To configure it, you need to set the `subdomain`, `token` and `room_name` options, like this:
-
-```ruby
-Rails.application.config.middleware.use ExceptionNotification::Rack,
- :email => {
- :email_prefix => "[PREFIX] ",
- :sender_address => %{"notifier" <notifier(a)example.com>},
- :exception_recipients => %w{exceptions(a)example.com}
- },
- :campfire => {
- :subdomain => 'my_subdomain',
- :token => 'my_token',
- :room_name => 'my_room'
- }
-```
-
-#### Options
-
-##### subdomain
-
-*String, required*
-
-Your subdomain at Campfire.
-
-##### room_name
-
-*String, required*
-
-The Campfire room where the notifications must be published to.
-
-##### token
-
-*String, required*
-
-The API token to allow access to your Campfire account.
-
-
-For more options to set Campfire, like _ssl_, check [here](https://github.com/collectiveidea/tinder/blob/master/lib/tinder/campf….
-
-
### HipChat notifier
This notifier sends notifications to your Hipchat room.
@@ -395,67 +363,6 @@
For all options & possible values see [Hipchat API](https://www.hipchat.com/docs/api/method/rooms/message).
-### Webhook notifier
-
-This notifier ships notifications over the HTTP protocol.
-
-#### Usage
-
-Just add the [HTTParty](https://github.com/jnunemaker/httparty) gem to your `Gemfile`:
-
-```ruby
-gem 'httparty'
-```
-
-To configure it, you need to set the `url` option, like this:
-
-```ruby
-Rails.application.config.middleware.use ExceptionNotification::Rack,
- :email => {
- :email_prefix => "[PREFIX] ",
- :sender_address => %{"notifier" <notifier(a)example.com>},
- :exception_recipients => %w{exceptions(a)example.com}
- },
- :webhook => {
- :url => 'http://domain.com:5555/hubot/path'
- }
-```
-
-By default, the WebhookNotifier will call the URLs using the POST method. But, you can change this using the `http_method` option.
-
-```ruby
-Rails.application.config.middleware.use ExceptionNotification::Rack,
- :email => {
- :email_prefix => "[PREFIX] ",
- :sender_address => %{"notifier" <notifier(a)example.com>},
- :exception_recipients => %w{exceptions(a)example.com}
- },
- :webhook => {
- :url => 'http://domain.com:5555/hubot/path',
- :http_method => :get
- }
-```
-
-Besides the `url` and `http_method` options, all the other options are passed directly to HTTParty. Thus, if the HTTP server requires authentication, you can include the following options:
-
-```ruby
-Rails.application.config.middleware.use ExceptionNotification::Rack,
- :email => {
- :email_prefix => "[PREFIX] ",
- :sender_address => %{"notifier" <notifier(a)example.com>},
- :exception_recipients => %w{exceptions(a)example.com}
- },
- :webhook => {
- :url => 'http://domain.com:5555/hubot/path',
- :basic_auth => {
- :username => 'alice',
- :password => 'password'
- }
- }
-```
-
-For more HTTParty options, check out the [documentation](https://github.com/jnunemaker/httparty).
-
### IRC notifier
This notifier sends notifications to an IRC channel using the carrier-pigeon gem.
@@ -638,6 +545,68 @@
Contains additional payload for a message (e.g avatar, attachments, etc). See [slack-notifier](https://github.com/stevenosloan/slack-notifier#additional-p… for more information.. Default: '{}'
+
+### WebHook notifier
+
+This notifier ships notifications over the HTTP protocol.
+
+#### Usage
+
+Just add the [HTTParty](https://github.com/jnunemaker/httparty) gem to your `Gemfile`:
+
+```ruby
+gem 'httparty'
+```
+
+To configure it, you need to set the `url` option, like this:
+
+```ruby
+Rails.application.config.middleware.use ExceptionNotification::Rack,
+ :email => {
+ :email_prefix => "[PREFIX] ",
+ :sender_address => %{"notifier" <notifier(a)example.com>},
+ :exception_recipients => %w{exceptions(a)example.com}
+ },
+ :webhook => {
+ :url => 'http://domain.com:5555/hubot/path'
+ }
+```
+
+By default, the WebhookNotifier will call the URLs using the POST method. But, you can change this using the `http_method` option.
+
+```ruby
+Rails.application.config.middleware.use ExceptionNotification::Rack,
+ :email => {
+ :email_prefix => "[PREFIX] ",
+ :sender_address => %{"notifier" <notifier(a)example.com>},
+ :exception_recipients => %w{exceptions(a)example.com}
+ },
+ :webhook => {
+ :url => 'http://domain.com:5555/hubot/path',
+ :http_method => :get
+ }
+```
+
+Besides the `url` and `http_method` options, all the other options are passed directly to HTTParty. Thus, if the HTTP server requires authentication, you can include the following options:
+
+```ruby
+Rails.application.config.middleware.use ExceptionNotification::Rack,
+ :email => {
+ :email_prefix => "[PREFIX] ",
+ :sender_address => %{"notifier" <notifier(a)example.com>},
+ :exception_recipients => %w{exceptions(a)example.com}
+ },
+ :webhook => {
+ :url => 'http://domain.com:5555/hubot/path',
+ :basic_auth => {
+ :username => 'alice',
+ :password => 'password'
+ }
+ }
+```
+
+For more HTTParty options, check out the [documentation](https://github.com/jnunemaker/httparty).
+
### Custom notifier
Simply put, notifiers are objects which respond to `#call(exception, options)` method. Thus, a lambda can be used as a notifier as follow:
Files old/checksums.yaml.gz and new/checksums.yaml.gz differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/exception_notification.gemspec new/exception_notification.gemspec
--- old/exception_notification.gemspec 2015-12-04 21:45:42.000000000 +0100
+++ new/exception_notification.gemspec 2016-01-07 22:21:05.000000000 +0100
@@ -1,8 +1,7 @@
Gem::Specification.new do |s|
s.name = 'exception_notification'
- s.version = '4.1.2'
+ s.version = '4.1.4'
s.authors = ["Jamis Buck", "Josh Peek"]
- s.date = %q{2015-12-04}
s.summary = "Exception notification for Rails apps"
s.homepage = "http://smartinez87.github.com/exception_notification"
s.email = "smartinez87(a)gmail.com"
@@ -21,7 +20,7 @@
s.add_development_dependency "rails", "~> 4.0"
s.add_development_dependency "resque", "~> 1.2.0"
- # Sidekiq 3.2.2 does not support Ruby 1.9.
+ # Sidekiq 3.2.2 does not support Ruby 1.9.
s.add_development_dependency "sidekiq", "~> 3.0.0", "< 3.2.2"
s.add_development_dependency "tinder", "~> 1.8"
s.add_development_dependency "httparty", "~> 0.10.2"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/exception_notifier/base_notifier.rb new/lib/exception_notifier/base_notifier.rb
--- old/lib/exception_notifier/base_notifier.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/lib/exception_notifier/base_notifier.rb 2016-01-07 22:21:05.000000000 +0100
@@ -0,0 +1,25 @@
+module ExceptionNotifier
+ class BaseNotifier
+ attr_accessor :base_options
+
+ def initialize(options={})
+ @base_options = options
+ end
+
+ def send_notice(exception, options, message, message_opts=nil)
+ _pre_callback(exception, options, message, message_opts)
+ result = yield(message, message_opts)
+ _post_callback(exception, options, message, message_opts)
+ result
+ end
+
+ def _pre_callback(exception, options, message, message_opts)
+ @base_options[:pre_callback].call(options, self, exception.backtrace, message, message_opts) if @base_options[:pre_callback].respond_to?(:call)
+ end
+
+ def _post_callback(exception, options, message, message_opts)
+ @base_options[:post_callback].call(options, self, exception.backtrace, message, message_opts) if @base_options[:post_callback].respond_to?(:call)
+ end
+
+ end
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/exception_notifier/campfire_notifier.rb new/lib/exception_notifier/campfire_notifier.rb
--- old/lib/exception_notifier/campfire_notifier.rb 2015-12-04 21:45:42.000000000 +0100
+++ new/lib/exception_notifier/campfire_notifier.rb 2016-01-07 22:21:05.000000000 +0100
@@ -1,11 +1,12 @@
module ExceptionNotifier
- class CampfireNotifier
+ class CampfireNotifier < BaseNotifier
attr_accessor :subdomain
attr_accessor :token
attr_accessor :room
def initialize(options)
+ super
begin
subdomain = options.delete(:subdomain)
room_name = options.delete(:room_name)
@@ -20,7 +21,9 @@
if active?
message = "A new exception occurred: '#{exception.message}'"
message += " on '#{exception.backtrace.first}'" if exception.backtrace
- @room.paste message message
+ send_notice(exception, options, message) do |msg, _|
+ @room.paste msg
+ end
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/exception_notifier/email_notifier.rb new/lib/exception_notifier/email_notifier.rb
--- old/lib/exception_notifier/email_notifier.rb 2015-12-04 21:45:42.000000000 +0100
+++ new/lib/exception_notifier/email_notifier.rb 2016-01-07 22:21:05.000000000 +0100
@@ -4,7 +4,9 @@
require 'pp'
module ExceptionNotifier
- class EmailNotifier < Struct.new(:sender_address, :exception_recipients,
+ class EmailNotifier < BaseNotifier
+ attr_accessor(:sender_address, :exception_recipients,
+ :pre_callback, :post_callback,
:email_prefix, :email_format, :sections, :background_sections,
:verbose_subject, :normalize_subject, :delivery_method, :mailer_settings,
:email_headers, :mailer_parent, :template_path, :deliver_with)
@@ -78,6 +80,12 @@
end
end
+ helper_method :safe_encode
+
+ def safe_encode(value)
+ value.encode("utf-8", invalid: :replace, undef: :replace, replace: "_")
+ end
+
def html_mail?
@options[:email_format] == :html
end
@@ -115,20 +123,22 @@
end
def initialize(options)
+ super
delivery_method = (options[:delivery_method] || :smtp)
mailer_settings_key = "#{delivery_method}_settings".to_sym
options[:mailer_settings] = options.delete(mailer_settings_key)
- super(*options.reverse_merge(EmailNotifier.default_options).values_at(
+ options.reverse_merge(EmailNotifier.default_options).select{|k,v|[
:sender_address, :exception_recipients,
+ :pre_callback, :post_callback,
:email_prefix, :email_format, :sections, :background_sections,
:verbose_subject, :normalize_subject, :delivery_method, :mailer_settings,
- :email_headers, :mailer_parent, :template_path, :deliver_with))
+ :email_headers, :mailer_parent, :template_path, :deliver_with].include?(k)}.each{|k,v| send("#{k}=", v)}
end
def options
@options ||= {}.tap do |opts|
- each_pair { |k,v| opts[k] = v }
+ self.instance_variables.each { |var| opts[var[1..-1].to_sym] = self.instance_variable_get(var) }
end
end
@@ -147,9 +157,13 @@
env = options[:env]
default_options = self.options
if env.nil?
- mailer.background_exception_notification(exception, options, default_options)
+ send_notice(exception, options, nil, default_options) do |_, default_opts|
+ mailer.background_exception_notification(exception, options, default_opts)
+ end
else
- mailer.exception_notification(env, exception, options, default_options)
+ send_notice(exception, options, nil, default_options) do |_, default_opts|
+ mailer.exception_notification(env, exception, options, default_opts)
+ end
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/exception_notifier/hipchat_notifier.rb new/lib/exception_notifier/hipchat_notifier.rb
--- old/lib/exception_notifier/hipchat_notifier.rb 2015-12-04 21:45:42.000000000 +0100
+++ new/lib/exception_notifier/hipchat_notifier.rb 2016-01-07 22:21:05.000000000 +0100
@@ -1,11 +1,12 @@
module ExceptionNotifier
- class HipchatNotifier
+ class HipchatNotifier < BaseNotifier
attr_accessor :from
attr_accessor :room
attr_accessor :message_options
def initialize(options)
+ super
begin
api_token = options.delete(:api_token)
room_name = options.delete(:room_name)
@@ -15,7 +16,7 @@
@from = options.delete(:from) || 'Exception'
@room = HipChat::Client.new(api_token, opts)[room_name]
@message_template = options.delete(:message_template) || ->(exception) {
- msg = "A new exception occurred: '#{exception.message}'"
+ msg = "A new exception occurred: '#{Rack::Utils.escape_html(exception.message)}'"
msg += " on '#{exception.backtrace.first}'" if exception.backtrace
msg
}
@@ -30,7 +31,9 @@
return if !active?
message = @message_template.call(exception)
- @room.send(@from, message, @message_options)
+ send_notice(exception, options, message, @message_options) do |msg, message_opts|
+ @room.send(@from, msg, message_opts)
+ end
end
private
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/exception_notifier/irc_notifier.rb new/lib/exception_notifier/irc_notifier.rb
--- old/lib/exception_notifier/irc_notifier.rb 2015-12-04 21:45:42.000000000 +0100
+++ new/lib/exception_notifier/irc_notifier.rb 2016-01-07 22:21:05.000000000 +0100
@@ -1,6 +1,7 @@
module ExceptionNotifier
- class IrcNotifier
+ class IrcNotifier < BaseNotifier
def initialize(options)
+ super
@config = OpenStruct.new
parse_options(options)
end
@@ -8,7 +9,11 @@
def call(exception, options={})
message = "'#{exception.message}'"
message += " on '#{exception.backtrace.first}'" if exception.backtrace
- send_message([*(a)config.prefix, *message].join(' ')) if active?
+ if active?
+ send_notice(exception, options, message) do |msg, _|
+ send_message([*(a)config.prefix, *msg].join(' '))
+ end
+ end
end
def send_message(message)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/exception_notifier/slack_notifier.rb new/lib/exception_notifier/slack_notifier.rb
--- old/lib/exception_notifier/slack_notifier.rb 2015-12-04 21:45:42.000000000 +0100
+++ new/lib/exception_notifier/slack_notifier.rb 2016-01-07 22:21:05.000000000 +0100
@@ -1,10 +1,11 @@
module ExceptionNotifier
- class SlackNotifier
+ class SlackNotifier < BaseNotifier
include ExceptionNotifier::BacktraceCleaner
attr_accessor :notifier
def initialize(options)
+ super
begin
@ignore_data_if = options[:ignore_data_if]
@@ -38,7 +39,11 @@
attchs = [color: 'danger', text: text, fields: fields, mrkdwn_in: %w(text fields)]
- @notifier.ping '', @message_opts.merge(attachments: attchs) if valid?
+ if valid?
+ send_notice(exception, options, clean_message, @message_opts.merge(attachments: attchs)) do |msg, message_opts|
+ @notifier.ping '', message_opts
+ end
+ end
end
protected
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/exception_notifier/views/exception_notifier/_environment.text.erb new/lib/exception_notifier/views/exception_notifier/_environment.text.erb
--- old/lib/exception_notifier/views/exception_notifier/_environment.text.erb 2015-12-04 21:45:42.000000000 +0100
+++ new/lib/exception_notifier/views/exception_notifier/_environment.text.erb 2016-01-07 22:21:05.000000000 +0100
@@ -1,5 +1,5 @@
<% filtered_env = @request.filtered_env -%>
<% max = filtered_env.keys.map(&:to_s).max { |a, b| a.length <=> b.length } -%>
<% filtered_env.keys.map(&:to_s).sort.each do |key| -%>
-* <%= raw("%-*s: %s" % [max.length, key, inspect_object(filtered_env[key])]) %>
+* <%= raw safe_encode("%-*s: %s" % [max.length, key, inspect_object(filtered_env[key])]) %>
<% end -%>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/exception_notifier/views/exception_notifier/_request.text.erb new/lib/exception_notifier/views/exception_notifier/_request.text.erb
--- old/lib/exception_notifier/views/exception_notifier/_request.text.erb 2015-12-04 21:45:42.000000000 +0100
+++ new/lib/exception_notifier/views/exception_notifier/_request.text.erb 2016-01-07 22:21:05.000000000 +0100
@@ -1,7 +1,7 @@
-* URL : <%= raw @request.url %>
+* URL : <%= raw safe_encode @request.url %>
* HTTP Method: <%= raw @request.request_method %>
* IP address : <%= raw @request.remote_ip %>
-* Parameters : <%= raw @request.filtered_parameters.inspect %>
+* Parameters : <%= raw safe_encode @request.filtered_parameters.inspect %>
* Timestamp : <%= raw Time.current %>
* Server : <%= raw Socket.gethostname %>
<% if defined?(Rails) && Rails.respond_to?(:root) %>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/exception_notifier/webhook_notifier.rb new/lib/exception_notifier/webhook_notifier.rb
--- old/lib/exception_notifier/webhook_notifier.rb 2015-12-04 21:45:42.000000000 +0100
+++ new/lib/exception_notifier/webhook_notifier.rb 2016-01-07 22:21:05.000000000 +0100
@@ -1,9 +1,10 @@
require 'action_dispatch'
module ExceptionNotifier
- class WebhookNotifier
+ class WebhookNotifier < BaseNotifier
def initialize(options)
+ super
@default_options = options
end
@@ -23,7 +24,7 @@
options[:body][:exception] = {:error_class => exception.class.to_s,
:message => exception.message.inspect,
:backtrace => exception.backtrace}
- options[:body][:data] = (env['exception_notifier.exception_data'] || {}).merge(options[:data] || {})
+ options[:body][:data] = (env && env['exception_notifier.exception_data'] || {}).merge(options[:data] || {})
unless env.nil?
request = ActionDispatch::Request.new(env)
@@ -38,8 +39,9 @@
options[:body][:session] = request.session
options[:body][:environment] = request.filtered_env
end
-
- HTTParty.send(http_method, url, options)
+ send_notice(exception, options, nil, @default_options) do |msg, opts|
+ HTTParty.send(http_method, url, opts)
+ end
end
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/exception_notifier.rb new/lib/exception_notifier.rb
--- old/lib/exception_notifier.rb 2015-12-04 21:45:42.000000000 +0100
+++ new/lib/exception_notifier.rb 2016-01-07 22:21:05.000000000 +0100
@@ -1,6 +1,7 @@
require 'logger'
require 'active_support/core_ext/string/inflections'
require 'active_support/core_ext/module/attribute_accessors'
+require 'exception_notifier/base_notifier'
module ExceptionNotifier
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/metadata new/metadata
--- old/metadata 2015-12-04 21:45:42.000000000 +0100
+++ new/metadata 2016-01-07 22:21:05.000000000 +0100
@@ -1,7 +1,7 @@
--- !ruby/object:Gem::Specification
name: exception_notification
version: !ruby/object:Gem::Version
- version: 4.1.2
+ version: 4.1.4
platform: ruby
authors:
- Jamis Buck
@@ -9,7 +9,7 @@
autorequire:
bindir: bin
cert_chain: []
-date: 2015-12-04 00:00:00.000000000 Z
+date: 2016-01-07 00:00:00.000000000 Z
dependencies:
- !ruby/object:Gem::Dependency
name: actionmailer
@@ -242,6 +242,7 @@
- lib/exception_notification/resque.rb
- lib/exception_notification/sidekiq.rb
- lib/exception_notifier.rb
+- lib/exception_notifier/base_notifier.rb
- lib/exception_notifier/campfire_notifier.rb
- lib/exception_notifier/email_notifier.rb
- lib/exception_notifier/hipchat_notifier.rb
@@ -353,7 +354,7 @@
version: 1.8.11
requirements: []
rubyforge_project:
-rubygems_version: 2.4.5
+rubygems_version: 2.4.5.1
signing_key:
specification_version: 4
summary: Exception notification for Rails apps
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/test/dummy/config/environment.rb new/test/dummy/config/environment.rb
--- old/test/dummy/config/environment.rb 2015-12-04 21:45:42.000000000 +0100
+++ new/test/dummy/config/environment.rb 2016-01-07 22:21:05.000000000 +0100
@@ -8,7 +8,9 @@
:exception_recipients => %w{dummyexceptions(a)example.com},
:email_headers => { "X-Custom-Header" => "foobar" },
:sections => ['new_section', 'request', 'session', 'environment', 'backtrace'],
- :background_sections => %w(new_bkg_section backtrace data)
+ :background_sections => %w(new_bkg_section backtrace data),
+ :pre_callback => proc { |opts, notifier, backtrace, message, message_opts| message_opts[:pre_callback_called] = 1 },
+ :post_callback => proc { |opts, notifier, backtrace, message, message_opts| message_opts[:post_callback_called] = 1 }
}
# Initialize the rails application
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/test/exception_notifier/campfire_notifier_test.rb new/test/exception_notifier/campfire_notifier_test.rb
--- old/test/exception_notifier/campfire_notifier_test.rb 2015-12-04 21:45:42.000000000 +0100
+++ new/test/exception_notifier/campfire_notifier_test.rb 2016-01-07 22:21:05.000000000 +0100
@@ -46,6 +46,30 @@
assert_nil campfire.call(fake_exception)
end
+ test "should call pre/post_callback if specified" do
+ pre_callback_called, post_callback_called = 0,0
+ Tinder::Campfire.stubs(:new).returns(Object.new)
+
+ campfire = ExceptionNotifier::CampfireNotifier.new(
+ {
+ :subdomain => 'test',
+ :token => 'test_token',
+ :room_name => 'test_room',
+ :pre_callback => proc { |opts, notifier, backtrace, message, message_opts|
+ pre_callback_called += 1
+ },
+ :post_callback => proc { |opts, notifier, backtrace, message, message_opts|
+ post_callback_called += 1
+ }
+ }
+ )
+ campfire.room = Object.new
+ campfire.room.stubs(:paste).returns(fake_notification)
+ campfire.call(fake_exception)
+ assert_equal(1, pre_callback_called)
+ assert_equal(1, post_callback_called)
+ end
+
private
def fake_notification
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/test/exception_notifier/email_notifier_test.rb new/test/exception_notifier/email_notifier_test.rb
--- old/test/exception_notifier/email_notifier_test.rb 2015-12-04 21:45:42.000000000 +0100
+++ new/test/exception_notifier/email_notifier_test.rb 2016-01-07 22:21:05.000000000 +0100
@@ -13,6 +13,11 @@
end
end
+ test "should call pre/post_callback if specified" do
+ assert_equal @email_notifier.options[:pre_callback_called], 1
+ assert_equal @email_notifier.options[:post_callback_called], 1
+ end
+
test "should have default sender address overridden" do
assert_equal @email_notifier.sender_address, %("Dummy Notifier" <dummynotifier(a)example.com>)
end
@@ -150,6 +155,26 @@
assert_nil @ignored_mail
end
+ test "should encode environment strings" do
+ email_notifier = ExceptionNotifier::EmailNotifier.new(
+ :sender_address => "<dummynotifier(a)example.com>",
+ :exception_recipients => %w{dummyexceptions(a)example.com},
+ :deliver_with => :deliver_now
+ )
+
+ mail = email_notifier.create_email(
+ @exception,
+ :env => {
+ "REQUEST_METHOD" => "GET",
+ "rack.input" => "",
+ "invalid_encoding" => "R\xC3\xA9sum\xC3\xA9".force_encoding(Encoding::ASCII),
+ },
+ :email_format => :text
+ )
+
+ assert_match /invalid_encoding\s+: R__sum__/, mail.encoded
+ end
+
if defined?(Rails) && ('4.2'...'5.0').cover?(Rails.version)
test "should be able to specify ActionMailer::MessageDelivery method" do
email_notifier = ExceptionNotifier::EmailNotifier.new(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/test/exception_notifier/hipchat_notifier_test.rb new/test/exception_notifier/hipchat_notifier_test.rb
--- old/test/exception_notifier/hipchat_notifier_test.rb 2015-12-04 21:45:42.000000000 +0100
+++ new/test/exception_notifier/hipchat_notifier_test.rb 2016-01-07 22:21:05.000000000 +0100
@@ -16,6 +16,24 @@
hipchat.call(fake_exception)
end
+ test "should call pre/post_callback if specified" do
+ pre_callback_called, post_callback_called = 0,0
+ options = {
+ :api_token => 'good_token',
+ :room_name => 'room_name',
+ :color => 'yellow',
+ :pre_callback => proc { |*| pre_callback_called += 1},
+ :post_callback => proc { |*| post_callback_called += 1}
+ }
+
+ HipChat::Room.any_instance.expects(:send).with('Exception', fake_body, { :color => 'yellow' }.merge(options.except(:api_token, :room_name)))
+
+ hipchat = ExceptionNotifier::HipchatNotifier.new(options)
+ hipchat.call(fake_exception)
+ assert_equal(1, pre_callback_called)
+ assert_equal(1, post_callback_called)
+ end
+
test "should send hipchat notification without backtrace info if properly configured" do
options = {
:api_token => 'good_token',
@@ -86,6 +104,22 @@
hipchat.call(fake_exception)
end
+ test "should send hipchat notification with HTML-escaped meessage if using default message_template" do
+ options = {
+ :api_token => 'good_token',
+ :room_name => 'room_name',
+ :color => 'yellow',
+ }
+
+ exception = fake_exception_with_html_characters
+ body = "A new exception occurred: '#{Rack::Utils.escape_html(exception.message)}' on '#{exception.backtrace.first}'"
+
+ HipChat::Room.any_instance.expects(:send).with('Exception', body, { :color => 'yellow' })
+
+ hipchat = ExceptionNotifier::HipchatNotifier.new(options)
+ hipchat.call(exception)
+ end
+
test "should use APIv1 if api_version is not specified" do
options = {
:api_token => 'good_token',
@@ -123,6 +157,14 @@
rescue Exception => e
e
end
+ end
+
+ def fake_exception_with_html_characters
+ exception = begin
+ raise StandardError.new('an error with <html> characters')
+ rescue Exception => e
+ e
+ end
end
def fake_body_without_backtrace
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/test/exception_notifier/irc_notifier_test.rb new/test/exception_notifier/irc_notifier_test.rb
--- old/test/exception_notifier/irc_notifier_test.rb 2015-12-04 21:45:42.000000000 +0100
+++ new/test/exception_notifier/irc_notifier_test.rb 2016-01-07 22:21:05.000000000 +0100
@@ -16,6 +16,25 @@
irc.call(fake_exception)
end
+ test "should call pre/post_callback if specified" do
+ pre_callback_called, post_callback_called = 0,0
+
+ options = {
+ :domain => 'irc.example.com',
+ :pre_callback => proc { |*| pre_callback_called += 1},
+ :post_callback => proc { |*| post_callback_called += 1}
+ }
+
+ CarrierPigeon.expects(:send).with(has_key(:uri)) do |v|
+ /divided by 0/.match(v[:message])
+ end
+
+ irc = ExceptionNotifier::IrcNotifier.new(options)
+ irc.call(fake_exception)
+ assert_equal(1, pre_callback_called)
+ assert_equal(1, post_callback_called)
+ end
+
test "should send irc notification without backtrace info if properly configured" do
options = {
:domain => 'irc.example.com'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/test/exception_notifier/slack_notifier_test.rb new/test/exception_notifier/slack_notifier_test.rb
--- old/test/exception_notifier/slack_notifier_test.rb 2015-12-04 21:45:42.000000000 +0100
+++ new/test/exception_notifier/slack_notifier_test.rb 2016-01-07 22:21:05.000000000 +0100
@@ -110,6 +110,35 @@
slack_notifier.call(@exception, notification_options)
end
+ test "should call pre/post_callback proc if specified" do
+ post_callback_called = 0
+ options = {
+ webhook_url: "http://slack.webhook.url",
+ username: "test",
+ custom_hook: "hook",
+ :pre_callback => proc { |opts, notifier, backtrace, message, message_opts|
+ (message_opts[:attachments] = []) << { text: "#{backtrace.join("\n")}", color: 'danger' }
+ },
+ :post_callback => proc { |opts, notifier, backtrace, message, message_opts|
+ post_callback_called = 1
+ },
+ additional_parameters: {
+ icon_url: "icon",
+ }
+ }
+
+ Slack::Notifier.any_instance.expects(:ping).with('',
+ {:icon_url => 'icon',
+ :attachments => [
+ {:text => "backtrace line 1\nbacktrace line 2",
+ :color => 'danger'}
+ ]})
+
+ slack_notifier = ExceptionNotifier::SlackNotifier.new(options)
+ slack_notifier.call(@exception)
+ assert_equal(post_callback_called, 1)
+ end
+
private
def fake_exception
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/test/exception_notifier/webhook_notifier_test.rb new/test/exception_notifier/webhook_notifier_test.rb
--- old/test/exception_notifier/webhook_notifier_test.rb 2015-12-04 21:45:42.000000000 +0100
+++ new/test/exception_notifier/webhook_notifier_test.rb 2016-01-07 22:21:05.000000000 +0100
@@ -25,6 +25,12 @@
assert response[:body][:data][:extra_data].has_key?(:data_item1)
end
+ test "should call pre/post_callback if specified" do
+ HTTParty.stubs(:send).returns(fake_response)
+ webhook = ExceptionNotifier::WebhookNotifier.new({:url => 'http://localhost:8000'})
+ webhook.call(fake_exception)
+ end
+
private
def fake_response
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/test/exception_notifier_test.rb new/test/exception_notifier_test.rb
--- old/test/exception_notifier_test.rb 2015-12-04 21:45:42.000000000 +0100
+++ new/test/exception_notifier_test.rb 2016-01-07 22:21:05.000000000 +0100
@@ -98,4 +98,5 @@
ExceptionNotifier.unregister_exception_notifier(:test)
end
+
end
1
0