diff options
author | Saku Ytti <saku@ytti.fi> | 2014-07-13 13:56:20 +0300 |
---|---|---|
committer | Saku Ytti <saku@ytti.fi> | 2014-07-13 13:56:20 +0300 |
commit | 2110aa95c4ad9474f5e1967986809d452b39139f (patch) | |
tree | 5d382fd4af0f4dcd1355234f457ec6a14b28155a /lib/oxidized | |
parent | 2b587078e82fcbb3795b8f0fb3598de52ca630a4 (diff) |
Change from grit to rugged
a) grit is not supported, rugged is
b) grit requires git CLI installed, rugged does not
c) grit needs monkey patching to work, rugged does not
Closes #21
Closes #22
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 |