commit
b4ba35d85c
24
reference.go
24
reference.go
|
@ -315,6 +315,11 @@ func (v *Reference) IsTag() bool {
|
|||
return C.git_reference_is_tag(v.ptr) == 1
|
||||
}
|
||||
|
||||
// IsNote checks if the reference is a note.
|
||||
func (v *Reference) IsNote() bool {
|
||||
return C.git_reference_is_note(v.ptr) == 1
|
||||
}
|
||||
|
||||
func (v *Reference) Free() {
|
||||
runtime.SetFinalizer(v, nil)
|
||||
C.git_reference_free(v.ptr)
|
||||
|
@ -425,3 +430,22 @@ func (v *ReferenceIterator) Free() {
|
|||
runtime.SetFinalizer(v, nil)
|
||||
C.git_reference_iterator_free(v.ptr)
|
||||
}
|
||||
|
||||
// ReferenceIsValidName ensures the reference name is well-formed.
|
||||
//
|
||||
// Valid reference names must follow one of two patterns:
|
||||
//
|
||||
// 1. Top-level names must contain only capital letters and underscores,
|
||||
// and must begin and end with a letter. (e.g. "HEAD", "ORIG_HEAD").
|
||||
//
|
||||
// 2. Names prefixed with "refs/" can be almost anything. You must avoid
|
||||
// the characters '~', '^', ':', ' \ ', '?', '[', and '*', and the sequences
|
||||
// ".." and " @ {" which have special meaning to revparse.
|
||||
func ReferenceIsValidName(name string) bool {
|
||||
cname := C.CString(name)
|
||||
defer C.free(unsafe.Pointer(cname))
|
||||
if C.git_reference_is_valid_name(cname) == 1 {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
|
|
@ -176,6 +176,48 @@ func TestUtil(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestIsNote(t *testing.T) {
|
||||
repo := createTestRepo(t)
|
||||
defer cleanupTestRepo(t, repo)
|
||||
|
||||
commitID, _ := seedTestRepo(t, repo)
|
||||
|
||||
sig := &Signature{
|
||||
Name: "Rand Om Hacker",
|
||||
Email: "random@hacker.com",
|
||||
When: time.Now(),
|
||||
}
|
||||
|
||||
refname, err := repo.Notes.DefaultRef()
|
||||
checkFatal(t, err)
|
||||
|
||||
_, err = repo.Notes.Create(refname, sig, sig, commitID, "This is a note", false)
|
||||
checkFatal(t, err)
|
||||
|
||||
ref, err := repo.References.Lookup(refname)
|
||||
checkFatal(t, err)
|
||||
|
||||
if !ref.IsNote() {
|
||||
t.Fatalf("%s should be a note", ref.Name())
|
||||
}
|
||||
|
||||
ref, err = repo.References.Create("refs/heads/foo", commitID, true, "")
|
||||
checkFatal(t, err)
|
||||
|
||||
if ref.IsNote() {
|
||||
t.Fatalf("%s should not be a note", ref.Name())
|
||||
}
|
||||
}
|
||||
|
||||
func TestReferenceIsValidName(t *testing.T) {
|
||||
if !ReferenceIsValidName("HEAD") {
|
||||
t.Errorf("HEAD should be a valid reference name")
|
||||
}
|
||||
if ReferenceIsValidName("HEAD1") {
|
||||
t.Errorf("HEAD1 should not be a valid reference name")
|
||||
}
|
||||
}
|
||||
|
||||
func compareStringList(t *testing.T, expected, actual []string) {
|
||||
for i, v := range expected {
|
||||
if actual[i] != v {
|
||||
|
|
Loading…
Reference in New Issue