Class: Rugged::Tree::Builder

Inherits:
Object
  • Object
show all
Defined in:
ext/rugged/rugged_tree.c

Instance Method Summary collapse

Constructor Details

#new([tree]) ⇒ Object

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.



628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
# File 'ext/rugged/rugged_tree.c', line 628

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

Instance Method Details

#<<(entry) ⇒ nil #insert(entry) ⇒ nil

Inser a new entry into builder.

Overloads:

  • #<<(entry) ⇒ nil

    Returns:

    • (nil)
  • #insert(entry) ⇒ nil

    Returns:

    • (nil)


686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
# File 'ext/rugged/rugged_tree.c', line 686

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

#[](path) ⇒ Object

Return an entry from builder based on its relative path.



669
670
671
672
673
674
675
676
677
# File 'ext/rugged/rugged_tree.c', line 669

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

#clearnil

Clear all entries in builder.

Returns:

  • (nil)


655
656
657
658
659
660
661
# File 'ext/rugged/rugged_tree.c', line 655

static VALUE rb_git_treebuilder_clear(VALUE self)
{
	git_treebuilder *builder;
	Data_Get_Struct(self, git_treebuilder, builder);
	git_treebuilder_clear(builder);
	return Qnil;
}

#<<(entry) ⇒ nil #insert(entry) ⇒ nil

Inser a new entry into builder.

Overloads:

  • #<<(entry) ⇒ nil

    Returns:

    • (nil)
  • #insert(entry) ⇒ nil

    Returns:

    • (nil)


686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
# File 'ext/rugged/rugged_tree.c', line 686

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| ... } ⇒ nil

Deletes every tree entry from builder for which the given block evaluates to true.

Yields:

  • (entry)

Returns:

  • (nil)


780
781
782
783
784
785
786
787
788
789
# File 'ext/rugged/rugged_tree.c', line 780

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) ⇒ Boolean

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.

Returns:

  • (Boolean)


725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
# File 'ext/rugged/rugged_tree.c', line 725

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) ⇒ Object

Write builder‘s content as a tree to the given repo and return the oid for the newly created tree.



748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
# File 'ext/rugged/rugged_tree.c', line 748

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