class Rugged::Tree::Builder
Public Class Methods
new([tree])
click to toggle source
Create a new Rugged::Trebuilder instance.
If an optional tree
is given, the returned TreeBuilder will be
initialized with the entry of tree
. Otherwise, the TreeBuilder
will be empty and has to be filled manually.
static VALUE rb_git_treebuilder_init(int argc, VALUE *argv, VALUE self) { git_treebuilder *builder; git_tree *tree = NULL; VALUE rb_object; int error; if (rb_scan_args(argc, argv, "01", &rb_object) == 1) { if (!rb_obj_is_kind_of(rb_object, rb_cRuggedTree)) rb_raise(rb_eTypeError, "A Rugged::Tree instance is required"); Data_Get_Struct(rb_object, git_tree, tree); } error = git_treebuilder_create(&builder, tree); rugged_exception_check(error); DATA_PTR(self) = builder; return Qnil; }
Public Instance Methods
builder << entry → nil
click to toggle source
Inser a new entry into builder
.
static VALUE rb_git_treebuilder_insert(VALUE self, VALUE rb_entry) { git_treebuilder *builder; VALUE rb_path, rb_oid, rb_attr; git_oid oid; int error; Data_Get_Struct(self, git_treebuilder, builder); Check_Type(rb_entry, T_HASH); rb_path = rb_hash_aref(rb_entry, CSTR2SYM("name")); Check_Type(rb_path, T_STRING); rb_oid = rb_hash_aref(rb_entry, CSTR2SYM("oid")); Check_Type(rb_oid, T_STRING); rugged_exception_check(git_oid_fromstr(&oid, StringValueCStr(rb_oid))); rb_attr = rb_hash_aref(rb_entry, CSTR2SYM("filemode")); Check_Type(rb_attr, T_FIXNUM); error = git_treebuilder_insert(NULL, builder, StringValueCStr(rb_path), &oid, FIX2INT(rb_attr)); rugged_exception_check(error); return Qnil; }
builder[path] → entry
click to toggle source
Return an entry from builder
based on its relative path.
static VALUE rb_git_treebuilder_get(VALUE self, VALUE path) { git_treebuilder *builder; Data_Get_Struct(self, git_treebuilder, builder); Check_Type(path, T_STRING); return rb_git_treeentry_fromC(git_treebuilder_get(builder, StringValueCStr(path))); }
clear → nil
click to toggle source
Clear all entries in builder
.
static VALUE rb_git_treebuilder_clear(VALUE self) { git_treebuilder *builder; Data_Get_Struct(self, git_treebuilder, builder); git_treebuilder_clear(builder); return Qnil; }
insert(entry) → nil
click to toggle source
Inser a new entry into builder
.
static VALUE rb_git_treebuilder_insert(VALUE self, VALUE rb_entry) { git_treebuilder *builder; VALUE rb_path, rb_oid, rb_attr; git_oid oid; int error; Data_Get_Struct(self, git_treebuilder, builder); Check_Type(rb_entry, T_HASH); rb_path = rb_hash_aref(rb_entry, CSTR2SYM("name")); Check_Type(rb_path, T_STRING); rb_oid = rb_hash_aref(rb_entry, CSTR2SYM("oid")); Check_Type(rb_oid, T_STRING); rugged_exception_check(git_oid_fromstr(&oid, StringValueCStr(rb_oid))); rb_attr = rb_hash_aref(rb_entry, CSTR2SYM("filemode")); Check_Type(rb_attr, T_FIXNUM); error = git_treebuilder_insert(NULL, builder, StringValueCStr(rb_path), &oid, FIX2INT(rb_attr)); rugged_exception_check(error); return Qnil; }
reject! { |entry| block } → nil
click to toggle source
Deletes every tree entry
from builder
for which
the given block
evaluates to true.
static VALUE rb_git_treebuilder_filter(VALUE self) { git_treebuilder *builder; rb_need_block(); Data_Get_Struct(self, git_treebuilder, builder); git_treebuilder_filter(builder, &treebuilder_cb, (void *)rb_block_proc()); return Qnil; }
remove(path) → true or false
click to toggle source
Remove an entry from builder
by its relative
path
.
Returns true
if the entry was successfully removed, or
false
if the entry was not found.
static VALUE rb_git_treebuilder_remove(VALUE self, VALUE path) { git_treebuilder *builder; int error; Data_Get_Struct(self, git_treebuilder, builder); Check_Type(path, T_STRING); error = git_treebuilder_remove(builder, StringValueCStr(path)); if (error == GIT_ENOTFOUND) return Qfalse; rugged_exception_check(error); return Qtrue; }
write(repo) → oid
click to toggle source
Write builder
's content as a tree to the given
repo
and return the oid
for the newly created
tree.
static VALUE rb_git_treebuilder_write(VALUE self, VALUE rb_repo) { git_treebuilder *builder; git_repository *repo; git_oid written_id; int error; rugged_check_repo(rb_repo); Data_Get_Struct(rb_repo, git_repository, repo); Data_Get_Struct(self, git_treebuilder, builder); error = git_treebuilder_write(&written_id, repo, builder); rugged_exception_check(error); return rugged_create_oid(&written_id); }