diff options
Diffstat (limited to 'lib/oxidized')
-rw-r--r-- | lib/oxidized/config/vars.rb | 3 | ||||
-rw-r--r-- | lib/oxidized/fix/grit.rb | 18 | ||||
-rw-r--r-- | lib/oxidized/model/ios.rb | 2 | ||||
-rw-r--r-- | lib/oxidized/output/git.rb | 51 |
4 files changed, 29 insertions, 45 deletions
diff --git a/lib/oxidized/config/vars.rb b/lib/oxidized/config/vars.rb index 0d6aaa7..40e4808 100644 --- a/lib/oxidized/config/vars.rb +++ b/lib/oxidized/config/vars.rb @@ -4,7 +4,6 @@ module Oxidized::Config::Vars def vars name r = @node.vars[name] unless @node.vars.nil? r ||= Oxidized::CFG.groups[@node.group].vars[name.to_s] if Oxidized::CFG.groups.has_key?(@node.group) - r ||= Oxidized::CFG.vars[name.to_s] + r ||= Oxidized::CFG.vars[name.to_s] if Oxidized::CFG.vars.has_key?(name) end end - diff --git a/lib/oxidized/fix/grit.rb b/lib/oxidized/fix/grit.rb deleted file mode 100644 index 49be76b..0000000 --- a/lib/oxidized/fix/grit.rb +++ /dev/null @@ -1,18 +0,0 @@ -Object.send :remove_const, :PACK_IDX_SIGNATURE -PACK_IDX_SIGNATURE = "\377tOc".b - -class String - if self.method_defined?(:ord) - def getord(offset); self[offset].ord; end - else - alias :getord :[] - end - - unless self.method_defined?(:b) - if self.method_defined?(:force_encoding) - def b; self.dup.force_encoding(Encoding::ASCII_8BIT); end - else - def b; self.dup; end - end - end -end diff --git a/lib/oxidized/model/ios.rb b/lib/oxidized/model/ios.rb index a9c2d3b..186c9e8 100644 --- a/lib/oxidized/model/ios.rb +++ b/lib/oxidized/model/ios.rb @@ -22,7 +22,7 @@ class IOS < Oxidized::Model cfg.each_line.to_a[1..-2].join end - cmd :secret do |cfg| + cmd :secret do |cfg| cfg.gsub! /^(snmp-server community).*/, '\\1 <configuration removed>' cfg.gsub! /username (\S+) privilege (\d+) (\S+).*/, '<secret hidden>' cfg diff --git a/lib/oxidized/output/git.rb b/lib/oxidized/output/git.rb index 70dd30f..848608f 100644 --- a/lib/oxidized/output/git.rb +++ b/lib/oxidized/output/git.rb @@ -1,12 +1,10 @@ module Oxidized class Git < Output begin - require 'grit' + require 'rugged' rescue LoadError - raise OxidizedError, 'grit not found: sudo gem install grit' + raise OxidizedError, 'rugged not found: sudo gem install rugged' end - require 'oxidized/fix/grit' if RUBY_VERSION[0..1] == '2.' - include Grit def initialize @cfg = CFG.output.git @@ -31,14 +29,11 @@ class Git < Output repo = File.join File.dirname(repo), opt[:group] + '.git' end begin - repo = Repo.new repo - actor = Actor.new user, email - update_repo repo, file, data, msg, actor - rescue Grit::NoSuchPathError - Repo.init_bare repo + repo = Rugged::Repository.new repo + update_repo repo, file, data, msg, user, email + rescue Rugged::OSError, Rugged::RepositoryError + Rugged::Repository.init_at repo, :bare retry - rescue Grit::Git::GitTimeout - Log.error "git timeout for #{file}" end end @@ -48,8 +43,10 @@ class Git < Output if group repo = File.join File.dirname(repo), group + '.git' end - repo = Repo.new(repo) - (repo.tree / node).data + repo = Rugged::Repository.new repo + index = repo.index + index.read_tree repo.head.target.tree unless repo.empty? + repo.read(index.get(node)[:oid]).data rescue 'node not found' end @@ -57,17 +54,23 @@ class Git < Output private - def update_repo repo, file, data, msg, actor - index = repo.index - index.read_tree 'master' - old = index.write_tree index.tree, index.current_tree - index.add file, data - new = index.write_tree index.tree, index.current_tree - if old != new - parent = repo.commits(nil, 1).first - parent = [parent] if parent - Log.debug "GIT: comitting #{file}" - index.commit msg, parent, actor + def update_repo repo, file, data, msg, user, email + oid = repo.write data, :blob + index = repo.index + index.read_tree repo.head.target.tree unless repo.empty? + + tree_old = index.write_tree repo + index.add :path=>file, :oid=>oid, :mode=>0100644 + tree_new = index.write_tree repo + + if tree_old != tree_new + Rugged::Commit.create(repo, + :tree => index.write_tree(repo), + :message => msg, + :parents => repo.empty? ? [] : [repo.head.target].compact, + :update_ref => 'HEAD', + :author => {:name=>user, :email=>email, :time=>Time.now.utc} + ) end end end |