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 | 
