From f3e43664fc2b96715637913937b5e91bc4a9382a Mon Sep 17 00:00:00 2001 From: Ewoud Kohl van Wijngaarden Date: Sat, 27 Jan 2024 17:09:45 +0100 Subject: [PATCH] Optimize fcontext parsing methods This uses filter_map (introduced in Ruby 2.7) to avoid constructing an array by pushing values. It also uses start_with to avoid a regex lookup. --- .../provider/selinux_fcontext/semanage.rb | 23 +++++++++---------- .../selinux_fcontext_equivalence/semanage.rb | 13 +++++------ 2 files changed, 17 insertions(+), 19 deletions(-) diff --git a/lib/puppet/provider/selinux_fcontext/semanage.rb b/lib/puppet/provider/selinux_fcontext/semanage.rb index c17c3106..d0a6e737 100644 --- a/lib/puppet/provider/selinux_fcontext/semanage.rb +++ b/lib/puppet/provider/selinux_fcontext/semanage.rb @@ -27,10 +27,9 @@ def self.file_type_map(val) end def self.parse_fcontext_lines(lines) - ret = [] - lines.each do |line| + lines.filter_map do |line| next if line.strip.empty? - next if line =~ %r{^#} + next if line.start_with?('#') split = line.split(%r{\s+}) if split.length == 2 @@ -45,16 +44,16 @@ def self.parse_fcontext_lines(lines) user = range = role = nil end ft = file_type_map(file_type) - ret.push(new(ensure: :present, - name: "#{path_spec}_#{ft}", - pathspec: path_spec, - seltype: type, - seluser: user, - selrole: role, - selrange: range, - file_type: ft)) + + new(ensure: :present, + name: "#{path_spec}_#{ft}", + pathspec: path_spec, + seltype: type, + seluser: user, + selrole: role, + selrange: range, + file_type: ft) end - ret end def self.parse_fcontext_file(path) diff --git a/lib/puppet/provider/selinux_fcontext_equivalence/semanage.rb b/lib/puppet/provider/selinux_fcontext_equivalence/semanage.rb index fa68c1cc..7483bead 100644 --- a/lib/puppet/provider/selinux_fcontext_equivalence/semanage.rb +++ b/lib/puppet/provider/selinux_fcontext_equivalence/semanage.rb @@ -11,17 +11,16 @@ mk_resource_methods def self.parse_fcontext_subs_lines(lines) - ret = [] - lines.each do |line| + lines.filter_map do |line| next if line.strip.empty? - next if line =~ %r{^#} + next if line.start_with?('#') source, target = line.split(%r{\s+}) - ret.push(new(ensure: :present, - name: source, - target: target)) + + new(ensure: :present, + name: source, + target: target) end - ret end def self.instances