Skip to content

Commit 351ba56

Browse files
author
Edward Thomson
committed
Tree::Builder: test invalid entry fails by default
Tree::Builder should (by default) not allow consumers to add an entry that is nonexistent. However, this should be disabled with the `strict_object_creation` setting.
1 parent 0b0c54f commit 351ba56

File tree

2 files changed

+21
-4
lines changed

2 files changed

+21
-4
lines changed

ext/rugged/rugged_settings.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,11 @@ static VALUE rb_git_set_option(VALUE self, VALUE option, VALUE value)
9898
set_search_path(GIT_CONFIG_LEVEL_SYSTEM, value);
9999
}
100100

101+
else if (strcmp(opt, "strict_object_creation") == 0) {
102+
int strict = RTEST(value) ? 1 : 0;
103+
git_libgit2_opts(GIT_OPT_ENABLE_STRICT_OBJECT_CREATION, strict);
104+
}
105+
101106
else {
102107
rb_raise(rb_eArgError, "Unknown option specified");
103108
}

test/tree_test.rb

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -150,10 +150,22 @@ def test_treebuilder_add
150150
assert_equal "71a3bbe701e60c1756edd23cfc0b207711dca1f2", newtree
151151
end
152152

153-
def test_treebuilder_add_nonexistent
153+
def test_treebuilder_add_nonexistent_fails
154154
builder = Rugged::Tree::Builder.new(@repo, @repo.head.target.tree)
155-
builder << { :type => :blob, :name => "another-readme", :oid => "0000000000000000000000000000000000000000", :filemode => 0100644 }
156-
newtree = builder.write
157-
assert_equal "7c98360ac03064bb67c6f0949e6a354155ce1b04", newtree
155+
assert_raises Rugged::TreeError do
156+
builder << { :type => :blob, :name => "another-readme", :oid => "0000000000000000000000000000000000000000", :filemode => 0100644 }
157+
end
158+
end
159+
160+
def test_treebuilder_add_nonexistent_can_pass
161+
begin
162+
Rugged::Settings['strict_object_creation'] = false
163+
builder = Rugged::Tree::Builder.new(@repo, @repo.head.target.tree)
164+
builder << { :type => :blob, :name => "another-readme", :oid => "0000000000000000000000000000000000000000", :filemode => 0100644 }
165+
newtree = builder.write
166+
assert_equal "7c98360ac03064bb67c6f0949e6a354155ce1b04", newtree
167+
ensure
168+
Rugged::Settings['strict_object_creation'] = true
169+
end
158170
end
159171
end

0 commit comments

Comments
 (0)