Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions ext/rugged/rugged_reference.c
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,22 @@ static VALUE rb_git_ref_exist(VALUE klass, VALUE rb_repo, VALUE rb_name)
return Qtrue;
}

/*
* call-seq:
* Reference.valid?(name) -> true or false
*
* Checks whether the given string is a well-formed reference
* name. Note this just checks the syntax, no semantic checks
* are performed.
*/
static VALUE rb_git_ref_valid(VALUE self, VALUE rb_str)
{
if (git_reference_is_valid_name(StringValueCStr(rb_str)))
return Qtrue;
else
return Qfalse;
}

/*
* call-seq:
* Reference.create(repository, name, oid, force = false) -> new_ref
Expand Down Expand Up @@ -561,6 +577,7 @@ void Init_rugged_reference()
rb_define_singleton_method(rb_cRuggedReference, "lookup", rb_git_ref_lookup, 2);
rb_define_singleton_method(rb_cRuggedReference, "exist?", rb_git_ref_exist, 2);
rb_define_singleton_method(rb_cRuggedReference, "exists?", rb_git_ref_exist, 2);
rb_define_singleton_method(rb_cRuggedReference, "valid?", rb_git_ref_valid, 1);
rb_define_singleton_method(rb_cRuggedReference, "create", rb_git_ref_create, -1);
rb_define_singleton_method(rb_cRuggedReference, "pack_all", rb_git_ref_packall, 1);
rb_define_singleton_method(rb_cRuggedReference, "each", rb_git_ref_each, -1);
Expand Down
2 changes: 1 addition & 1 deletion ext/rugged/rugged_revwalk.c
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ static VALUE rb_git_walker_each(VALUE self)
rb_yield(rugged_object_new(rugged_owner(self), (git_object *)commit));
}

if (error != GIT_REVWALKOVER)
if (error != GIT_ITEROVER)
rugged_exception_check(error);

return Qnil;
Expand Down
3 changes: 2 additions & 1 deletion lib/rugged/repository.rb
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,8 @@ def create_branch(name, sha_or_ref = "HEAD")
when Rugged::Object
target = sha_or_ref.oid
else
if (ref = Rugged::Reference.lookup(self, sha_or_ref))
if Rugged::Reference.valid?(sha_or_ref)
ref = Rugged::Reference.lookup(self, sha_or_ref)
target = ref.resolve.target
else
target = Rugged::Commit.lookup(self, sha_or_ref)
Expand Down
7 changes: 7 additions & 0 deletions test/reference_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,13 @@
assert !exists
end

test "recognises valid/invalid reference names" do
assert Rugged::Reference.valid?("refs/heads/master")
assert Rugged::Reference.valid?("HEAD")
assert Rugged::Reference.valid?("refs/heads/n0n3x15t4nt") # Only syntax check
assert !Rugged::Reference.valid?("5b5b025afb0b4c913b4c338a42934a3863bf3644") # Commits are no valid reference *names*
end

test "can open packed reference" do
ref = Rugged::Reference.lookup(@repo, "refs/heads/packed")
assert_equal "41bc8c69075bbdb46c5c6f0566cc8cc5b46e8bd9", ref.target
Expand Down
2 changes: 1 addition & 1 deletion vendor/libgit2
Submodule libgit2 updated 182 files