|
- package main
-
- import (
- "bytes"
- "fmt"
- . "gopkg.in/check.v1"
- "sort"
- )
-
- var _ = Suite(&RefsSuite{})
-
- type RefsSuite struct{}
-
- type refsTest struct {
- summary string
- original string
- version string
- changed string
- versions []string
- }
-
- var refsTests = []refsTest{{
- "Version v0 works even without any references",
- reflines(
- "hash1 HEAD",
- ),
- "v0",
- reflines(
- "hash1 HEAD",
- ),
- nil,
- }, {
- "Preserve original capabilities",
- reflines(
- "hash1 HEAD\x00caps",
- ),
- "v0",
- reflines(
- "hash1 HEAD\x00caps",
- ),
- nil,
- }, {
- "Matching major version branch",
- reflines(
- "00000000000000000000000000000000000hash1 HEAD",
- "00000000000000000000000000000000000hash2 refs/heads/v0",
- "00000000000000000000000000000000000hash3 refs/heads/v1",
- "00000000000000000000000000000000000hash4 refs/heads/v2",
- ),
- "v1",
- reflines(
- "00000000000000000000000000000000000hash3 HEAD\x00symref=HEAD:refs/heads/v1",
- "00000000000000000000000000000000000hash3 refs/heads/master",
- "00000000000000000000000000000000000hash2 refs/heads/v0",
- "00000000000000000000000000000000000hash3 refs/heads/v1",
- "00000000000000000000000000000000000hash4 refs/heads/v2",
- ),
- []string{"v0", "v1", "v2"},
- }, {
- "Matching minor version branch",
- reflines(
- "00000000000000000000000000000000000hash1 HEAD",
- "00000000000000000000000000000000000hash2 refs/heads/v1.1",
- "00000000000000000000000000000000000hash3 refs/heads/v1.3",
- "00000000000000000000000000000000000hash4 refs/heads/v1.2",
- ),
- "v1",
- reflines(
- "00000000000000000000000000000000000hash3 HEAD\x00symref=HEAD:refs/heads/v1.3",
- "00000000000000000000000000000000000hash3 refs/heads/master",
- "00000000000000000000000000000000000hash2 refs/heads/v1.1",
- "00000000000000000000000000000000000hash3 refs/heads/v1.3",
- "00000000000000000000000000000000000hash4 refs/heads/v1.2",
- ),
- []string{"v1.1", "v1.2", "v1.3"},
- }, {
- "Disable original symref capability",
- reflines(
- "00000000000000000000000000000000000hash1 HEAD\x00foo symref=bar baz",
- "00000000000000000000000000000000000hash2 refs/heads/v1",
- ),
- "v1",
- reflines(
- "00000000000000000000000000000000000hash2 HEAD\x00symref=HEAD:refs/heads/v1 foo oldref=bar baz",
- "00000000000000000000000000000000000hash2 refs/heads/master",
- "00000000000000000000000000000000000hash2 refs/heads/v1",
- ),
- []string{"v1"},
- }, {
- "Replace original master branch",
- reflines(
- "00000000000000000000000000000000000hash1 HEAD",
- "00000000000000000000000000000000000hash1 refs/heads/master",
- "00000000000000000000000000000000000hash2 refs/heads/v1",
- ),
- "v1",
- reflines(
- "00000000000000000000000000000000000hash2 HEAD\x00symref=HEAD:refs/heads/v1",
- "00000000000000000000000000000000000hash2 refs/heads/master",
- "00000000000000000000000000000000000hash2 refs/heads/v1",
- ),
- []string{"v1"},
- }, {
- "Matching tag",
- reflines(
- "00000000000000000000000000000000000hash1 HEAD",
- "00000000000000000000000000000000000hash2 refs/tags/v0",
- "00000000000000000000000000000000000hash3 refs/tags/v1",
- "00000000000000000000000000000000000hash4 refs/tags/v2",
- ),
- "v1",
- reflines(
- "00000000000000000000000000000000000hash3 HEAD",
- "00000000000000000000000000000000000hash3 refs/heads/master",
- "00000000000000000000000000000000000hash2 refs/tags/v0",
- "00000000000000000000000000000000000hash3 refs/tags/v1",
- "00000000000000000000000000000000000hash4 refs/tags/v2",
- ),
- []string{"v0", "v1", "v2"},
- }, {
- "Tag peeling",
- reflines(
- "00000000000000000000000000000000000hash1 HEAD",
- "00000000000000000000000000000000000hash2 refs/heads/master",
- "00000000000000000000000000000000000hash3 refs/tags/v1",
- "00000000000000000000000000000000000hash4 refs/tags/v1^{}",
- "00000000000000000000000000000000000hash5 refs/tags/v2",
- ),
- "v1",
- reflines(
- "00000000000000000000000000000000000hash4 HEAD",
- "00000000000000000000000000000000000hash4 refs/heads/master",
- "00000000000000000000000000000000000hash3 refs/tags/v1",
- "00000000000000000000000000000000000hash4 refs/tags/v1^{}",
- "00000000000000000000000000000000000hash5 refs/tags/v2",
- ),
- []string{"v1", "v1", "v2"},
- }, {
- "Matching unstable versions",
- reflines(
- "00000000000000000000000000000000000hash1 HEAD",
- "00000000000000000000000000000000000hash2 refs/heads/master",
- "00000000000000000000000000000000000hash3 refs/heads/v1",
- "00000000000000000000000000000000000hash4 refs/heads/v1.1-unstable",
- "00000000000000000000000000000000000hash5 refs/heads/v1.3-unstable",
- "00000000000000000000000000000000000hash6 refs/heads/v1.2-unstable",
- "00000000000000000000000000000000000hash7 refs/heads/v2",
- ),
- "v1-unstable",
- reflines(
- "00000000000000000000000000000000000hash5 HEAD\x00symref=HEAD:refs/heads/v1.3-unstable",
- "00000000000000000000000000000000000hash5 refs/heads/master",
- "00000000000000000000000000000000000hash3 refs/heads/v1",
- "00000000000000000000000000000000000hash4 refs/heads/v1.1-unstable",
- "00000000000000000000000000000000000hash5 refs/heads/v1.3-unstable",
- "00000000000000000000000000000000000hash6 refs/heads/v1.2-unstable",
- "00000000000000000000000000000000000hash7 refs/heads/v2",
- ),
- []string{"v1", "v1.1-unstable", "v1.2-unstable", "v1.3-unstable", "v2"},
- }}
-
- func reflines(lines ...string) string {
- var buf bytes.Buffer
- buf.WriteString("001e# service=git-upload-pack\n0000")
- for _, l := range lines {
- buf.WriteString(fmt.Sprintf("%04x%s\n", len(l)+5, l))
- }
- buf.WriteString("0000")
- return buf.String()
- }
-
- func (s *RefsSuite) TestChangeRefs(c *C) {
- for _, test := range refsTests {
- c.Logf(test.summary)
-
- v, ok := parseVersion(test.version)
- if !ok {
- c.Fatalf("Test has an invalid version: %q", test.version)
- }
-
- changed, versions, err := changeRefs([]byte(test.original), v)
- c.Assert(err, IsNil)
-
- c.Assert(string(changed), Equals, test.changed)
-
- sort.Sort(versions)
-
- var vs []string
- for _, v := range versions {
- vs = append(vs, v.String())
- }
- c.Assert(vs, DeepEquals, test.versions)
- }
- }
|