summaryrefslogtreecommitdiff
path: root/lib/oxidized/output
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/output
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/output')
-rw-r--r--lib/oxidized/output/git.rb51
1 files changed, 27 insertions, 24 deletions
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