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);
}