class RJGit::Plumbing::Index
Attributes
current_tree[RW]
jrepo[R]
treemap[RW]
Public Class Methods
new(repository)
click to toggle source
# File lib/rjgit.rb, line 343 def initialize(repository) @treemap = {} @jrepo = RJGit.repository_type(repository) @treebuilder = TreeBuilder.new(@jrepo) end
successful?(result)
click to toggle source
# File lib/rjgit.rb, line 422 def self.successful?(result) ["NEW", "FAST_FORWARD", "FORCED"].include?(result) end
Public Instance Methods
add(path, data)
click to toggle source
# File lib/rjgit.rb, line 349 def add(path, data) path = path[1..-1] if path[0] == '/' path = path.split('/') filename = path.pop current = self.treemap path.each do |dir| current[dir] ||= {} node = current[dir] current = node end current[filename] = data @treemap end
commit(message, author, parents = nil, ref = "refs/heads/
click to toggle source
# File lib/rjgit.rb, line 400 def commit(message, author, parents = nil, ref = "refs/heads/#{Constants::MASTER}", force = false) new_tree = build_new_tree(@treemap, "#{ref}^{tree}") return false if @current_tree && new_tree.name == @current_tree.name parents = parents ? parents : @jrepo.resolve(ref+"^{commit}") new_head = do_commit(message, author, parents, new_tree) # Point ref to the newest commit ru = @jrepo.updateRef(ref) ru.setNewObjectId(new_head) ru.setForceUpdate(force) ru.setRefLogIdent(author.person_ident) ru.setRefLogMessage("commit: #{message}", false) res = ru.update.to_string @current_tree = new_tree log = @treebuilder.log @treebuilder.init_log sha = ObjectId.to_string(new_head) return res, log, sha end
delete(path)
click to toggle source
# File lib/rjgit.rb, line 366 def delete(path) path = path[1..-1] if path[0] == '/' path = path.split('/') last = path.pop current = self.treemap path.each do |dir| current[dir] ||= {} node = current[dir] current = node end current[last] = false @treemap end
do_commit(message, author, parents, new_tree)
click to toggle source
# File lib/rjgit.rb, line 383 def do_commit(message, author, parents, new_tree) commit_builder = CommitBuilder.new person = author.person_ident commit_builder.setCommitter(person) commit_builder.setAuthor(person) commit_builder.setMessage(message) commit_builder.setTreeId(RJGit.tree_type(new_tree)) if parents.is_a?(Array) parents.each {|parent| commit_builder.addParentId(RJGit.commit_type(parent)) } elsif parents commit_builder.addParentId(RJGit.commit_type(parents)) end result = @treebuilder.object_inserter.insert(commit_builder) @treebuilder.object_inserter.flush result end
Private Instance Methods
build_new_tree(treemap, ref)
click to toggle source
# File lib/rjgit.rb, line 428 def build_new_tree(treemap, ref) @treebuilder.treemap = treemap new_tree = @treebuilder.build_tree(@current_tree ? RJGit.tree_type(@current_tree) : @jrepo.resolve(ref)) end