Skip to content

Commit 99bc1c6

Browse files
author
Vicent Marti
committed
Merge pull request #580 from ethomson/strict_object_creation
Strict object creation
2 parents 84e8d15 + 351ba56 commit 99bc1c6

File tree

3 files changed

+31
-1
lines changed

3 files changed

+31
-1
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: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,4 +143,29 @@ def test_treebuilder_remove
143143
assert_equal builder.remove("nonexistent file"), false
144144
end
145145

146+
def test_treebuilder_add
147+
builder = Rugged::Tree::Builder.new(@repo, @repo.head.target.tree)
148+
builder << { :type => :blob, :name => "another-readme", :oid => "1385f264afb75a56a5bec74243be9b367ba4ca08", :filemode => 0100644 }
149+
newtree = builder.write
150+
assert_equal "71a3bbe701e60c1756edd23cfc0b207711dca1f2", newtree
151+
end
152+
153+
def test_treebuilder_add_nonexistent_fails
154+
builder = Rugged::Tree::Builder.new(@repo, @repo.head.target.tree)
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
170+
end
146171
end

0 commit comments

Comments
 (0)