package git import ( "os" "runtime" "testing" ) func TestRefModification(t *testing.T) { repo := createTestRepo(t) defer os.RemoveAll(repo.Workdir()) commitId, treeId := seedTestRepo(t, repo) _, err := repo.CreateReference("refs/tags/tree", treeId, true) checkFatal(t, err) tag, err := repo.LookupReference("refs/tags/tree") checkFatal(t, err) checkRefType(t, tag, OID) ref, err := repo.LookupReference("HEAD") checkFatal(t, err) checkRefType(t, ref, SYMBOLIC) if target := ref.Target(); target != nil { t.Fatalf("Expected nil *Oid, got %v", target) } ref, err = ref.Resolve() checkFatal(t, err) checkRefType(t, ref, OID) if target := ref.Target(); target == nil { t.Fatalf("Expected valid target got nil") } if target := ref.SymbolicTarget(); target != "" { t.Fatalf("Expected empty string, got %v", target) } if commitId.String() != ref.Target().String() { t.Fatalf("Wrong ref target") } _, err = tag.Rename("refs/tags/renamed", false) checkFatal(t, err) tag, err = repo.LookupReference("refs/tags/renamed") checkFatal(t, err) checkRefType(t, ref, OID) } func checkRefType(t *testing.T, ref *Reference, kind int) { if ref.Type() == kind { return } // The failure happens at wherever we were called, not here _, file, line, ok := runtime.Caller(1) if !ok { t.Fatal() } t.Fatalf("Wrong ref type at %v:%v; have %v, expected %v", file, line, ref.Type(), kind) }