Method: Rugged::Tree#merge
- Defined in:
- ext/rugged/rugged_tree.c
#merge(*args) ⇒ Object
tree.merge(other_tree[, ancestor_tree[, options]]) -> Rugged::Index tree.merge(other_tree[, options]) -> Rugged::Index
Merges two trees and returns the a Rugged::Index object that reflects the result of the merge.
The following options can be passed in the options
Hash:
- :renames
-
If true, looking for renames will be enabled (‘–find-renames`), set to false to disable (default true).
- :rename_threshold
-
An integer specifying the minimum similarity of a file to be seen as an eligible rename source (default 50).
- :target_limit
-
An integer specifying the maximum byte size of a file before a it will be treated as binary. The default value is 512MB.
- :favor
-
Specifies how and if conflicts are auto-resolved by favoring a specific file output. Can be one of ‘:normal`, `:ours`, `:theirs` or `:union`.
533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 |
# File 'ext/rugged/rugged_tree.c', line 533
static VALUE rb_git_tree_merge(int argc, VALUE *argv, VALUE self)
{
VALUE rb_other_tree, rb_ancestor_tree, rb_options;
VALUE rb_repo = rugged_owner(self);
git_tree *tree, *other_tree, *ancestor_tree;
git_repository *repo;
git_index *index;
git_merge_options opts = GIT_MERGE_OPTIONS_INIT;
int error;
if (rb_scan_args(argc, argv, "12", &rb_other_tree, &rb_ancestor_tree, &rb_options) == 2) {
if (TYPE(rb_ancestor_tree) == T_HASH) {
rb_options = rb_ancestor_tree;
rb_ancestor_tree = Qnil;
}
}
if (!NIL_P(rb_options)) {
Check_Type(rb_options, T_HASH);
rugged_parse_merge_options(&opts, rb_options);
}
if (!rb_obj_is_kind_of(rb_other_tree, rb_cRuggedTree))
rb_raise(rb_eTypeError, "Expecting a Rugged::Tree instance");
else if (!NIL_P(rb_ancestor_tree) && !rb_obj_is_kind_of(rb_ancestor_tree, rb_cRuggedTree))
rb_raise(rb_eTypeError, "Expecting a Rugged::Tree instance");
Data_Get_Struct(self, git_tree, tree);
Data_Get_Struct(rb_repo, git_repository, repo);
Data_Get_Struct(rb_other_tree, git_tree, other_tree);
if (!NIL_P(rb_ancestor_tree))
Data_Get_Struct(rb_ancestor_tree, git_tree, ancestor_tree);
else
ancestor_tree = NULL;
error = git_merge_trees(&index, repo, ancestor_tree, tree, other_tree, &opts);
if (error == GIT_EMERGECONFLICT)
return Qnil;
rugged_exception_check(error);
return rugged_index_new(rb_cRuggedIndex, rb_repo, index);
}
|