summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/oxidized/config/vars.rb3
-rw-r--r--lib/oxidized/fix/grit.rb18
-rw-r--r--lib/oxidized/model/ios.rb2
-rw-r--r--lib/oxidized/output/git.rb51
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