From 2110aa95c4ad9474f5e1967986809d452b39139f Mon Sep 17 00:00:00 2001 From: Saku Ytti Date: Sun, 13 Jul 2014 13:56:20 +0300 Subject: 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 --- lib/oxidized/output/git.rb | 51 ++++++++++++++++++++++++---------------------- 1 file changed, 27 insertions(+), 24 deletions(-) (limited to 'lib/oxidized/output') 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 -- cgit v1.2.1