summaryrefslogtreecommitdiff
path: root/lib/oxidized
diff options
context:
space:
mode:
authorSaku Ytti <saku@ytti.fi>2014-07-13 13:56:20 +0300
committerSaku Ytti <saku@ytti.fi>2014-07-13 13:56:20 +0300
commit2110aa95c4ad9474f5e1967986809d452b39139f (patch)
tree5d382fd4af0f4dcd1355234f457ec6a14b28155a /lib/oxidized
parent2b587078e82fcbb3795b8f0fb3598de52ca630a4 (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.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