diff options
| author | Vicent Martà <[email protected]> | 2013-03-07 12:03:14 -0800 |
|---|---|---|
| committer | Vicent Martà <[email protected]> | 2013-03-07 12:03:14 -0800 |
| commit | b57c792bf35630ba4f73388be28966ebac404432 (patch) | |
| tree | e94abbed1b756945550ed216731a88d3391bd454 /reference_test.go | |
| parent | bc3f9e02ee8d97c62282b90cb47ba8208ea66d56 (diff) | |
| parent | d5a5467738f996ac5661611f783ecb588421e7e0 (diff) | |
Merge pull request #8 from carlosmn/refs
Immutable refs
Diffstat (limited to 'reference_test.go')
| -rw-r--r-- | reference_test.go | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/reference_test.go b/reference_test.go new file mode 100644 index 0000000..ba32d81 --- /dev/null +++ b/reference_test.go @@ -0,0 +1,74 @@ +package git + +import ( + "os" + "runtime" + "testing" + "time" +) + +func TestRefModification(t *testing.T) { + repo := createTestRepo(t) + defer os.RemoveAll(repo.Workdir()) + + loc, err := time.LoadLocation("Europe/Berlin") + checkFatal(t, err) + sig := &Signature{ + Name: "Rand Om Hacker", + Email: "[email protected]", + When: time.Date(2013, 03, 06, 14, 30, 0, 0, loc), + } + + idx, err := repo.Index() + checkFatal(t, err) + err = idx.AddByPath("README") + checkFatal(t, err) + treeId, err := idx.WriteTree() + checkFatal(t, err) + + message := "This is a commit\n" + tree, err := repo.LookupTree(treeId) + checkFatal(t, err) + commitId, err := repo.CreateCommit("HEAD", sig, sig, message, tree) + checkFatal(t, err) + + _, 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) + + ref, err = ref.Resolve() + checkFatal(t, err) + checkRefType(t, ref, OID) + + 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) +} |
