summaryrefslogtreecommitdiff
path: root/lib/oxidized/output
diff options
context:
space:
mode:
authorNeil Lathwood <neil@lathwood.co.uk>2018-04-27 10:51:39 +0100
committerNeil Lathwood <neil@lathwood.co.uk>2018-04-27 10:51:39 +0100
commit6574f129bca9633d728c178b12e49a2e9be89cdd (patch)
treea2d630fca3156658aea07469b9a5c3fdf00f6846 /lib/oxidized/output
parentd96cfac1f09ff4055f54ab604358290865d41f62 (diff)
parent34fd5369feee94ab45c5a81d7769b1df717e4c8c (diff)
Rebased from master
Diffstat (limited to 'lib/oxidized/output')
-rw-r--r--lib/oxidized/output/file.rb83
-rw-r--r--lib/oxidized/output/git.rb228
-rw-r--r--lib/oxidized/output/gitcrypt.rb483
-rw-r--r--lib/oxidized/output/http.rb50
-rw-r--r--lib/oxidized/output/output.rb3
5 files changed, 419 insertions, 428 deletions
diff --git a/lib/oxidized/output/file.rb b/lib/oxidized/output/file.rb
index 45f72e1..bad1b6a 100644
--- a/lib/oxidized/output/file.rb
+++ b/lib/oxidized/output/file.rb
@@ -1,59 +1,58 @@
module Oxidized
-class OxidizedFile < Output
- require 'fileutils'
+ class OxidizedFile < Output
+ require 'fileutils'
- attr_reader :commitref
+ attr_reader :commitref
- def initialize
- @cfg = Oxidized.config.output.file
- end
+ def initialize
+ @cfg = Oxidized.config.output.file
+ end
- def setup
- if @cfg.empty?
- Oxidized.asetus.user.output.file.directory = File.join(Config::Root, 'configs')
- Oxidized.asetus.save :user
- raise NoConfig, 'no output file config, edit ~/.config/oxidized/config'
+ def setup
+ if @cfg.empty?
+ Oxidized.asetus.user.output.file.directory = File.join(Config::Root, 'configs')
+ Oxidized.asetus.save :user
+ raise NoConfig, 'no output file config, edit ~/.config/oxidized/config'
+ end
end
- end
- def store node, outputs, opt={}
- file = File.expand_path @cfg.directory
- if opt[:group]
- file = File.join File.dirname(file), opt[:group]
+ def store node, outputs, opt = {}
+ file = File.expand_path @cfg.directory
+ if opt[:group]
+ file = File.join File.dirname(file), opt[:group]
+ end
+ FileUtils.mkdir_p file
+ file = File.join file, node
+ open(file, 'w') { |fh| fh.write outputs.to_cfg }
+ @commitref = file
end
- FileUtils.mkdir_p file
- file = File.join file, node
- open(file, 'w') { |fh| fh.write outputs.to_cfg }
- @commitref = file
- end
- def fetch node, group
- cfg_dir = File.expand_path @cfg.directory
- node_name = node.name
+ def fetch node, group
+ cfg_dir = File.expand_path @cfg.directory
+ node_name = node.name
- if group # group is explicitly defined by user
- cfg_dir = File.join File.dirname(cfg_dir), group
- File.read File.join(cfg_dir, node_name)
- else
- if File.exists? File.join(cfg_dir, node_name) # node configuration file is stored on base directory
+ if group # group is explicitly defined by user
+ cfg_dir = File.join File.dirname(cfg_dir), group
File.read File.join(cfg_dir, node_name)
else
- path = Dir.glob(File.join(File.dirname(cfg_dir), '**', node_name)).first # fetch node in all groups
- File.read path
+ if File.exists? File.join(cfg_dir, node_name) # node configuration file is stored on base directory
+ File.read File.join(cfg_dir, node_name)
+ else
+ path = Dir.glob(File.join(File.dirname(cfg_dir), '**', node_name)).first # fetch node in all groups
+ File.read path
+ end
end
+ rescue Errno::ENOENT
+ return nil
end
- rescue Errno::ENOENT
- return nil
- end
- def version node, group
- # not supported
- []
- end
+ def version node, group
+ # not supported
+ []
+ end
- def get_version node, group, oid
- 'not supported'
+ def get_version node, group, oid
+ 'not supported'
+ end
end
-
-end
end
diff --git a/lib/oxidized/output/git.rb b/lib/oxidized/output/git.rb
index fee0ab6..8acfd46 100644
--- a/lib/oxidized/output/git.rb
+++ b/lib/oxidized/output/git.rb
@@ -1,74 +1,73 @@
module Oxidized
-class Git < Output
- class GitError < OxidizedError; end
- begin
- require 'rugged'
- rescue LoadError
- raise OxidizedError, 'rugged not found: sudo gem install rugged'
- end
-
- attr_reader :commitref
+ class Git < Output
+ class GitError < OxidizedError; end
+ begin
+ require 'rugged'
+ rescue LoadError
+ raise OxidizedError, 'rugged not found: sudo gem install rugged'
+ end
- def initialize
- @cfg = Oxidized.config.output.git
- end
+ attr_reader :commitref
- def setup
- if @cfg.empty?
- Oxidized.asetus.user.output.git.user = 'Oxidized'
- Oxidized.asetus.user.output.git.email = 'o@example.com'
- Oxidized.asetus.user.output.git.repo = File.join(Config::Root, 'oxidized.git')
- Oxidized.asetus.save :user
- raise NoConfig, 'no output git config, edit ~/.config/oxidized/config'
+ def initialize
+ @cfg = Oxidized.config.output.git
end
- if @cfg.repo.respond_to?(:each)
- @cfg.repo.each do |group, repo|
- @cfg.repo["#{group}="] = File.expand_path repo
+ def setup
+ if @cfg.empty?
+ Oxidized.asetus.user.output.git.user = 'Oxidized'
+ Oxidized.asetus.user.output.git.email = 'o@example.com'
+ Oxidized.asetus.user.output.git.repo = File.join(Config::Root, 'oxidized.git')
+ Oxidized.asetus.save :user
+ raise NoConfig, 'no output git config, edit ~/.config/oxidized/config'
end
- else
- @cfg.repo = File.expand_path @cfg.repo
- end
- end
- def store file, outputs, opt={}
- @msg = opt[:msg]
- @user = (opt[:user] or @cfg.user)
- @email = (opt[:email] or @cfg.email)
- @opt = opt
- @commitref = nil
- repo = @cfg.repo
-
- outputs.types.each do |type|
- type_cfg = ''
- type_repo = File.join(File.dirname(repo), type + '.git')
- outputs.type(type).each do |output|
- (type_cfg << output; next) if not output.name
- type_file = file + '--' + output.name
- if @cfg.type_as_directory?
- type_file = type + '/' + type_file
- type_repo = repo
+ if @cfg.repo.respond_to?(:each)
+ @cfg.repo.each do |group, repo|
+ @cfg.repo["#{group}="] = File.expand_path repo
end
- update type_repo, type_file, output
+ else
+ @cfg.repo = File.expand_path @cfg.repo
end
- update type_repo, file, type_cfg
end
- update repo, file, outputs.to_cfg
- end
+ def store file, outputs, opt = {}
+ @msg = opt[:msg]
+ @user = (opt[:user] or @cfg.user)
+ @email = (opt[:email] or @cfg.email)
+ @opt = opt
+ @commitref = nil
+ repo = @cfg.repo
+
+ outputs.types.each do |type|
+ type_cfg = ''
+ type_repo = File.join(File.dirname(repo), type + '.git')
+ outputs.type(type).each do |output|
+ (type_cfg << output; next) if not output.name
+ type_file = file + '--' + output.name
+ if @cfg.type_as_directory?
+ type_file = type + '/' + type_file
+ type_repo = repo
+ end
+ update type_repo, type_file, output
+ end
+ update type_repo, file, type_cfg
+ end
+ update repo, file, outputs.to_cfg
+ end
- def fetch node, group
- begin
- repo, path = yield_repo_and_path(node, group)
- repo = Rugged::Repository.new repo
- index = repo.index
- index.read_tree repo.head.target.tree unless repo.empty?
- repo.read(index.get(path)[:oid]).data
- rescue
- 'node not found'
+ def fetch node, group
+ begin
+ repo, path = yield_repo_and_path(node, group)
+ repo = Rugged::Repository.new repo
+ index = repo.index
+ index.read_tree repo.head.target.tree unless repo.empty?
+ repo.read(index.get(path)[:oid]).data
+ rescue
+ 'node not found'
+ end
end
- end
# give a hash of all oid revision for the given node, and the date of the commit
def version node, group
@@ -80,7 +79,7 @@ class Git < Output
walker.sorting(Rugged::SORT_DATE)
walker.push(repo.head.target)
i = -1
- tab = []
+ tab = []
walker.each do |commit|
if commit.diff(paths: [path]).size > 0
hash = {}
@@ -98,18 +97,18 @@ class Git < Output
end
end
- #give the blob of a specific revision
+ # give the blob of a specific revision
def get_version node, group, oid
begin
repo, path = yield_repo_and_path(node, group)
repo = Rugged::Repository.new repo
- repo.blob_at(oid,path).content
+ repo.blob_at(oid, path).content
rescue
'version not found'
end
end
- #give a hash with the patch of a diff between 2 revision and the stats (added and deleted lines)
+ # give a hash with the patch of a diff between 2 revision and the stats (added and deleted lines)
def get_diff node, group, oid1, oid2
begin
diff_commits = nil
@@ -122,15 +121,15 @@ class Git < Output
diff = repo.diff(commit_old, commit)
diff.each do |patch|
if /#{node.name}\s+/.match(patch.to_s.lines.first)
- diff_commits = {:patch => patch.to_s, :stat => patch.stat}
+ diff_commits = { :patch => patch.to_s, :stat => patch.stat }
break
end
end
else
stat = commit.parents[0].diff(commit).stat
- stat = [stat[1],stat[2]]
+ stat = [stat[1], stat[2]]
patch = commit.parents[0].diff(commit).patch
- diff_commits = {:patch => patch, :stat => stat}
+ diff_commits = { :patch => patch, :stat => stat }
end
diff_commits
@@ -139,68 +138,67 @@ class Git < Output
end
end
- private
+ private
- def yield_repo_and_path(node, group)
- repo, path = node.repo, node.name
+ def yield_repo_and_path(node, group)
+ repo, path = node.repo, node.name
- if group and @cfg.single_repo?
- path = "#{group}/#{node.name}"
- end
+ if group and @cfg.single_repo?
+ path = "#{group}/#{node.name}"
+ end
- [repo, path]
- end
+ [repo, path]
+ end
- def update repo, file, data
- return if data.empty?
+ def update repo, file, data
+ return if data.empty?
- if @opt[:group]
- if @cfg.single_repo?
- file = File.join @opt[:group], file
- else
- repo = if repo.is_a?(::String)
- File.join File.dirname(repo), @opt[:group] + '.git'
- else
- repo[@opt[:group]]
- end
+ if @opt[:group]
+ if @cfg.single_repo?
+ file = File.join @opt[:group], file
+ else
+ repo = if repo.is_a?(::String)
+ File.join File.dirname(repo), @opt[:group] + '.git'
+ else
+ repo[@opt[:group]]
+ end
+ end
end
- end
- begin
- repo = Rugged::Repository.new repo
- update_repo repo, file, data, @msg, @user, @email
- rescue Rugged::OSError, Rugged::RepositoryError => open_error
begin
- Rugged::Repository.init_at repo, :bare
- rescue => create_error
- raise GitError, "first '#{open_error.message}' was raised while opening git repo, then '#{create_error.message}' was while trying to create git repo"
+ repo = Rugged::Repository.new repo
+ update_repo repo, file, data, @msg, @user, @email
+ rescue Rugged::OSError, Rugged::RepositoryError => open_error
+ begin
+ Rugged::Repository.init_at repo, :bare
+ rescue => create_error
+ raise GitError, "first '#{open_error.message}' was raised while opening git repo, then '#{create_error.message}' was while trying to create git repo"
+ end
+ retry
end
- retry
end
- end
- 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
- repo.config['user.name'] = user
- repo.config['user.email'] = email
- @commitref = Rugged::Commit.create(repo,
- :tree => index.write_tree(repo),
- :message => msg,
- :parents => repo.empty? ? [] : [repo.head.target].compact,
- :update_ref => 'HEAD',
- )
-
- index.write
- true
+ 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
+ repo.config['user.name'] = user
+ repo.config['user.email'] = email
+ @commitref = Rugged::Commit.create(repo,
+ :tree => index.write_tree(repo),
+ :message => msg,
+ :parents => repo.empty? ? [] : [repo.head.target].compact,
+ :update_ref => 'HEAD',)
+
+ index.write
+ true
+ end
end
end
end
-end
diff --git a/lib/oxidized/output/gitcrypt.rb b/lib/oxidized/output/gitcrypt.rb
index b0d80f2..2da0179 100644
--- a/lib/oxidized/output/gitcrypt.rb
+++ b/lib/oxidized/output/gitcrypt.rb
@@ -1,244 +1,243 @@
module Oxidized
- class GitCrypt < Output
- class GitCryptError < OxidizedError; end
- begin
- require 'git'
- rescue LoadError
- raise OxidizedError, 'git not found: sudo gem install ruby-git'
- end
-
- attr_reader :commitref
-
- def initialize
- @cfg = Oxidized.config.output.gitcrypt
- @gitcrypt_cmd = "/usr/bin/git-crypt"
- @gitcrypt_init = @gitcrypt_cmd + " init"
- @gitcrypt_unlock = @gitcrypt_cmd + " unlock"
- @gitcrypt_lock = @gitcrypt_cmd + " lock"
- @gitcrypt_adduser = @gitcrypt_cmd + " add-gpg-user --trusted "
- end
-
- def setup
- if @cfg.empty?
- Oxidized.asetus.user.output.gitcrypt.user = 'Oxidized'
- Oxidized.asetus.user.output.gitcrypt.email = 'o@example.com'
- Oxidized.asetus.user.output.gitcrypt.repo = File.join(Config::Root, 'oxidized.git')
- Oxidized.asetus.save :user
- raise NoConfig, 'no output git config, edit ~/.config/oxidized/config'
- end
-
- if @cfg.repo.respond_to?(:each)
- @cfg.repo.each do |group, repo|
- @cfg.repo["#{group}="] = File.expand_path repo
- end
- else
- @cfg.repo = File.expand_path @cfg.repo
- end
- end
-
- def crypt_init repo
- repo.chdir do
- system(@gitcrypt_init)
- @cfg.users.each do |user|
- system("#{@gitcrypt_adduser} #{user}")
- end
- File.write(".gitattributes", "* filter=git-crypt diff=git-crypt\n.gitattributes !filter !diff")
- repo.add(".gitattributes")
- repo.commit("Initial commit: crypt all config files")
- end
- end
-
- def lock repo
- repo.chdir do
- system(@gitcrypt_lock)
- end
- end
-
- def unlock repo
- repo.chdir do
- system(@gitcrypt_unlock)
- end
- end
-
- def store file, outputs, opt={}
- @msg = opt[:msg]
- @user = (opt[:user] or @cfg.user)
- @email = (opt[:email] or @cfg.email)
- @opt = opt
- @commitref = nil
- repo = @cfg.repo
-
- outputs.types.each do |type|
- type_cfg = ''
- type_repo = File.join(File.dirname(repo), type + '.git')
- outputs.type(type).each do |output|
- (type_cfg << output; next) if not output.name
- type_file = file + '--' + output.name
- if @cfg.type_as_directory?
- type_file = type + '/' + type_file
- type_repo = repo
- end
- update type_repo, type_file, output
- end
- update type_repo, file, type_cfg
- end
-
- update repo, file, outputs.to_cfg
- end
-
-
- def fetch node, group
- begin
- repo, path = yield_repo_and_path(node, group)
- repo = Git.open repo
- unlock repo
- index = repo.index
- # Empty repo ?
- empty = File.exists? index.path
- if empty
- raise 'Empty git repo'
- else
- File.read path
- end
- lock repo
- rescue
- 'node not found'
- end
- end
-
- # give a hash of all oid revision for the given node, and the date of the commit
- def version node, group
- begin
- repo, path = yield_repo_and_path(node, group)
-
- repo = Git.open repo
- unlock repo
- walker = repo.log.path(path)
- i = -1
- tab = []
- walker.each do |commit|
- hash = {}
- hash[:date] = commit.date.to_s
- hash[:oid] = commit.objectish
- hash[:author] = commit.author
- hash[:message] = commit.message
- tab[i += 1] = hash
- end
- walker.reset
- tab
- rescue
- 'node not found'
- end
- end
-
- #give the blob of a specific revision
- def get_version node, group, oid
- begin
- repo, path = yield_repo_and_path(node, group)
- repo = Git.open repo
- unlock repo
- repo.gtree(oid).files[path].contents
- rescue
- 'version not found'
- ensure
- lock repo
- end
- end
-
- #give a hash with the patch of a diff between 2 revision and the stats (added and deleted lines)
- def get_diff node, group, oid1, oid2
- begin
- diff_commits = nil
- repo, path = yield_repo_and_path(node, group)
- repo = Git.open repo
- unlock repo
- commit = repo.gcommit(oid1)
-
- if oid2
- commit_old = repo.gcommit(oid2)
- diff = repo.diff(commit_old, commit)
- stats = [diff.stats[:files][node.name][:insertions], diff.stats[:files][node.name][:deletions]]
- diff.each do |patch|
- if /#{node.name}\s+/.match(patch.patch.to_s.lines.first)
- diff_commits = {:patch => patch.patch.to_s, :stat => stats}
- break
- end
- end
- else
- stat = commit.parents[0].diff(commit).stats
- stat = [stat[:files][node.name][:insertions],stat[:files][node.name][:deletions]]
- patch = commit.parents[0].diff(commit).patch
- diff_commits = {:patch => patch, :stat => stat}
- end
- lock repo
- diff_commits
- rescue
- 'no diffs'
- ensure
- lock repo
- end
- end
-
- private
-
- def yield_repo_and_path(node, group)
- repo, path = node.repo, node.name
-
- if group and @cfg.single_repo?
- path = "#{group}/#{node.name}"
- end
-
- [repo, path]
- end
-
- def update repo, file, data
- return if data.empty?
-
- if @opt[:group]
- if @cfg.single_repo?
- file = File.join @opt[:group], file
- else
- repo = if repo.is_a?(::String)
- File.join File.dirname(repo), @opt[:group] + '.git'
- else
- repo[@opt[:group]]
- end
- end
- end
-
- begin
- update_repo repo, file, data, @msg, @user, @email
- rescue Git::GitExecuteError, ArgumentError => open_error
- Oxidized.logger.debug "open_error #{open_error} #{file}"
- begin
- grepo = Git.init repo
- crypt_init grepo
- rescue => create_error
- raise GitCryptError, "first '#{open_error.message}' was raised while opening git repo, then '#{create_error.message}' was while trying to create git repo"
- end
- retry
- end
- end
-
- def update_repo repo, file, data, msg, user, email
- grepo = Git.open repo
- grepo.config('user.name', user)
- grepo.config('user.email', email)
- grepo.chdir do
- unlock grepo
- File.write(file, data)
- grepo.add(file)
- if grepo.status[file].nil?
- grepo.commit(msg)
- @commitref = grepo.log(1).first.objectish
- true
- elsif !grepo.status[file].type.nil?
- grepo.commit(msg)
- @commitref = grepo.log(1).first.objectish
- true
- end
- lock grepo
- end
- end
- end
+ class GitCrypt < Output
+ class GitCryptError < OxidizedError; end
+ begin
+ require 'git'
+ rescue LoadError
+ raise OxidizedError, 'git not found: sudo gem install ruby-git'
+ end
+
+ attr_reader :commitref
+
+ def initialize
+ @cfg = Oxidized.config.output.gitcrypt
+ @gitcrypt_cmd = "/usr/bin/git-crypt"
+ @gitcrypt_init = @gitcrypt_cmd + " init"
+ @gitcrypt_unlock = @gitcrypt_cmd + " unlock"
+ @gitcrypt_lock = @gitcrypt_cmd + " lock"
+ @gitcrypt_adduser = @gitcrypt_cmd + " add-gpg-user --trusted "
+ end
+
+ def setup
+ if @cfg.empty?
+ Oxidized.asetus.user.output.gitcrypt.user = 'Oxidized'
+ Oxidized.asetus.user.output.gitcrypt.email = 'o@example.com'
+ Oxidized.asetus.user.output.gitcrypt.repo = File.join(Config::Root, 'oxidized.git')
+ Oxidized.asetus.save :user
+ raise NoConfig, 'no output git config, edit ~/.config/oxidized/config'
+ end
+
+ if @cfg.repo.respond_to?(:each)
+ @cfg.repo.each do |group, repo|
+ @cfg.repo["#{group}="] = File.expand_path repo
+ end
+ else
+ @cfg.repo = File.expand_path @cfg.repo
+ end
+ end
+
+ def crypt_init repo
+ repo.chdir do
+ system(@gitcrypt_init)
+ @cfg.users.each do |user|
+ system("#{@gitcrypt_adduser} #{user}")
+ end
+ File.write(".gitattributes", "* filter=git-crypt diff=git-crypt\n.gitattributes !filter !diff")
+ repo.add(".gitattributes")
+ repo.commit("Initial commit: crypt all config files")
+ end
+ end
+
+ def lock repo
+ repo.chdir do
+ system(@gitcrypt_lock)
+ end
+ end
+
+ def unlock repo
+ repo.chdir do
+ system(@gitcrypt_unlock)
+ end
+ end
+
+ def store file, outputs, opt = {}
+ @msg = opt[:msg]
+ @user = (opt[:user] or @cfg.user)
+ @email = (opt[:email] or @cfg.email)
+ @opt = opt
+ @commitref = nil
+ repo = @cfg.repo
+
+ outputs.types.each do |type|
+ type_cfg = ''
+ type_repo = File.join(File.dirname(repo), type + '.git')
+ outputs.type(type).each do |output|
+ (type_cfg << output; next) if not output.name
+ type_file = file + '--' + output.name
+ if @cfg.type_as_directory?
+ type_file = type + '/' + type_file
+ type_repo = repo
+ end
+ update type_repo, type_file, output
+ end
+ update type_repo, file, type_cfg
+ end
+
+ update repo, file, outputs.to_cfg
+ end
+
+ def fetch node, group
+ begin
+ repo, path = yield_repo_and_path(node, group)
+ repo = Git.open repo
+ unlock repo
+ index = repo.index
+ # Empty repo ?
+ empty = File.exists? index.path
+ if empty
+ raise 'Empty git repo'
+ else
+ File.read path
+ end
+ lock repo
+ rescue
+ 'node not found'
+ end
+ end
+
+ # give a hash of all oid revision for the given node, and the date of the commit
+ def version node, group
+ begin
+ repo, path = yield_repo_and_path(node, group)
+
+ repo = Git.open repo
+ unlock repo
+ walker = repo.log.path(path)
+ i = -1
+ tab = []
+ walker.each do |commit|
+ hash = {}
+ hash[:date] = commit.date.to_s
+ hash[:oid] = commit.objectish
+ hash[:author] = commit.author
+ hash[:message] = commit.message
+ tab[i += 1] = hash
+ end
+ walker.reset
+ tab
+ rescue
+ 'node not found'
+ end
+ end
+
+ # give the blob of a specific revision
+ def get_version node, group, oid
+ begin
+ repo, path = yield_repo_and_path(node, group)
+ repo = Git.open repo
+ unlock repo
+ repo.gtree(oid).files[path].contents
+ rescue
+ 'version not found'
+ ensure
+ lock repo
+ end
+ end
+
+ # give a hash with the patch of a diff between 2 revision and the stats (added and deleted lines)
+ def get_diff node, group, oid1, oid2
+ begin
+ diff_commits = nil
+ repo, path = yield_repo_and_path(node, group)
+ repo = Git.open repo
+ unlock repo
+ commit = repo.gcommit(oid1)
+
+ if oid2
+ commit_old = repo.gcommit(oid2)
+ diff = repo.diff(commit_old, commit)
+ stats = [diff.stats[:files][node.name][:insertions], diff.stats[:files][node.name][:deletions]]
+ diff.each do |patch|
+ if /#{node.name}\s+/.match(patch.patch.to_s.lines.first)
+ diff_commits = { :patch => patch.patch.to_s, :stat => stats }
+ break
+ end
+ end
+ else
+ stat = commit.parents[0].diff(commit).stats
+ stat = [stat[:files][node.name][:insertions], stat[:files][node.name][:deletions]]
+ patch = commit.parents[0].diff(commit).patch
+ diff_commits = { :patch => patch, :stat => stat }
+ end
+ lock repo
+ diff_commits
+ rescue
+ 'no diffs'
+ ensure
+ lock repo
+ end
+ end
+
+ private
+
+ def yield_repo_and_path(node, group)
+ repo, path = node.repo, node.name
+
+ if group and @cfg.single_repo?
+ path = "#{group}/#{node.name}"
+ end
+
+ [repo, path]
+ end
+
+ def update repo, file, data
+ return if data.empty?
+
+ if @opt[:group]
+ if @cfg.single_repo?
+ file = File.join @opt[:group], file
+ else
+ repo = if repo.is_a?(::String)
+ File.join File.dirname(repo), @opt[:group] + '.git'
+ else
+ repo[@opt[:group]]
+ end
+ end
+ end
+
+ begin
+ update_repo repo, file, data, @msg, @user, @email
+ rescue Git::GitExecuteError, ArgumentError => open_error
+ Oxidized.logger.debug "open_error #{open_error} #{file}"
+ begin
+ grepo = Git.init repo
+ crypt_init grepo
+ rescue => create_error
+ raise GitCryptError, "first '#{open_error.message}' was raised while opening git repo, then '#{create_error.message}' was while trying to create git repo"
+ end
+ retry
+ end
+ end
+
+ def update_repo repo, file, data, msg, user, email
+ grepo = Git.open repo
+ grepo.config('user.name', user)
+ grepo.config('user.email', email)
+ grepo.chdir do
+ unlock grepo
+ File.write(file, data)
+ grepo.add(file)
+ if grepo.status[file].nil?
+ grepo.commit(msg)
+ @commitref = grepo.log(1).first.objectish
+ true
+ elsif !grepo.status[file].type.nil?
+ grepo.commit(msg)
+ @commitref = grepo.log(1).first.objectish
+ true
+ end
+ lock grepo
+ end
+ end
+ end
end
diff --git a/lib/oxidized/output/http.rb b/lib/oxidized/output/http.rb
index 13ba300..0467261 100644
--- a/lib/oxidized/output/http.rb
+++ b/lib/oxidized/output/http.rb
@@ -7,9 +7,9 @@ module Oxidized
def setup
if @cfg.empty?
- CFGS.user.output.http.user = 'Oxidized'
+ CFGS.user.output.http.user = 'Oxidized'
CFGS.user.output.http.pasword = 'secret'
- CFGS.user.output.http.url = 'http://localhost/web-api/oxidized'
+ CFGS.user.output.http.url = 'http://localhost/web-api/oxidized'
CFGS.save :user
raise NoConfig, 'no output http config, edit ~/.config/oxidized/config'
end
@@ -17,42 +17,38 @@ module Oxidized
require "net/http"
require "uri"
require "json"
- def store node, outputs, opt={}
+ def store node, outputs, opt = {}
@commitref = nil
json = JSON.pretty_generate(
- {
- 'msg' => opt[:msg],
- 'user' => opt[:user],
- 'email' => opt[:email],
- 'group' => opt[:group],
- 'node' => node,
- 'config' => outputs.to_cfg,
- # actually we need to also iterate outputs, for other types like in gitlab. But most people don't use 'type' functionality.
- }
+ {
+ 'msg' => opt[:msg],
+ 'user' => opt[:user],
+ 'email' => opt[:email],
+ 'group' => opt[:group],
+ 'node' => node,
+ 'config' => outputs.to_cfg,
+ # actually we need to also iterate outputs, for other types like in gitlab. But most people don't use 'type' functionality.
+ }
)
uri = URI.parse @cfg.url
http = Net::HTTP.new uri.host, uri.port
- #http.use_ssl = true if uri.scheme = 'https'
- req = Net::HTTP::Post.new(uri.request_uri, initheader = { 'Content-Type' => 'application/json'})
+ # http.use_ssl = true if uri.scheme = 'https'
+ req = Net::HTTP::Post.new(uri.request_uri, initheader = { 'Content-Type' => 'application/json' })
req.basic_auth @cfg.user, @cfg.password
req.body = json
response = http.request req
case response.code.to_i
- when 200 || 201
- Oxidized.logger.info "Configuration http backup complete for #{node}"
- p [:success]
- when (400..499)
- Oxidized.logger.info "Configuration http backup for #{node} failed status: #{response.body}"
- p [:bad_request]
- when (500..599)
- p [:server_problems]
- Oxidized.logger.info "Configuration http backup for #{node} failed status: #{response.body}"
+ when 200 || 201
+ Oxidized.logger.info "Configuration http backup complete for #{node}"
+ p [:success]
+ when (400..499)
+ Oxidized.logger.info "Configuration http backup for #{node} failed status: #{response.body}"
+ p [:bad_request]
+ when (500..599)
+ p [:server_problems]
+ Oxidized.logger.info "Configuration http backup for #{node} failed status: #{response.body}"
end
-
end
-
end
end
-
-
diff --git a/lib/oxidized/output/output.rb b/lib/oxidized/output/output.rb
index 1355d03..9fae7b0 100644
--- a/lib/oxidized/output/output.rb
+++ b/lib/oxidized/output/output.rb
@@ -3,8 +3,7 @@ module Oxidized
class NoConfig < OxidizedError; end
def cfg_to_str cfg
- cfg.select{ |h| h[:type]=='cfg' }.map{ |h| h[:data] }.join
+ cfg.select { |h| h[:type] == 'cfg' }.map { |h| h[:data] }.join
end
-
end
end