|
17 | 17 | package git |
18 | 18 |
|
19 | 19 | import ( |
| 20 | + "fmt" |
20 | 21 | "os" |
21 | 22 | "os/exec" |
22 | 23 | "path/filepath" |
| 24 | + "regexp" |
23 | 25 | "testing" |
24 | 26 |
|
25 | 27 | log "github.com/sirupsen/logrus" |
@@ -82,6 +84,48 @@ func TestGitRunReportsErrors(t *testing.T) { |
82 | 84 | assert.Error(t, err) |
83 | 85 | } |
84 | 86 |
|
| 87 | +func TestRevParse(t *testing.T) { |
| 88 | + reSha1 := regexp.MustCompile("^[0-9a-f]{40}$") |
| 89 | + logdir := t.TempDir() |
| 90 | + |
| 91 | + dir := gitInit(t) |
| 92 | + gitCommitAll(t, dir, "commit") |
| 93 | + |
| 94 | + // Resolving head |
| 95 | + headSha, err := RevParse(dir, "HEAD", logdir) |
| 96 | + assert.NoError(t, err) |
| 97 | + assert.Regexp(t, reSha1, headSha) |
| 98 | + |
| 99 | + // Resolving branch |
| 100 | + branchSha1, err := RevParse(dir, "main", logdir) |
| 101 | + assert.NoError(t, err) |
| 102 | + assert.Equal(t, headSha, branchSha1) |
| 103 | + |
| 104 | + branchSha2, err := RevParse(dir, "refs/heads/main", logdir) |
| 105 | + assert.NoError(t, err) |
| 106 | + assert.Equal(t, headSha, branchSha2) |
| 107 | + |
| 108 | + // Resolving tag |
| 109 | + git(t, dir, []string{"tag", "v1.0.0"}) |
| 110 | + tagSha1, err := RevParse(dir, "v1.0.0", logdir) |
| 111 | + assert.NoError(t, err) |
| 112 | + assert.Equal(t, headSha, tagSha1) |
| 113 | + |
| 114 | + tagSha2, err := RevParse(dir, "refs/tags/v1.0.0", logdir) |
| 115 | + assert.NoError(t, err) |
| 116 | + assert.Equal(t, headSha, tagSha2) |
| 117 | + |
| 118 | + // Resolving short SHA1 |
| 119 | + shortSha, err := RevParse(dir, headSha[:5], logdir) |
| 120 | + assert.NoError(t, err) |
| 121 | + assert.Equal(t, headSha, shortSha) |
| 122 | + |
| 123 | + // Resolving full SHA1 |
| 124 | + headShaSha, err := RevParse(dir, headSha, logdir) |
| 125 | + assert.NoError(t, err) |
| 126 | + assert.Equal(t, headSha, headShaSha) |
| 127 | +} |
| 128 | + |
85 | 129 | func deferredCleanup(path string) { |
86 | 130 | err := os.RemoveAll(path) |
87 | 131 | if err != nil { |
@@ -128,3 +172,24 @@ func gitClone(repoURL, directory string, revision string, branch string) error { |
128 | 172 | } |
129 | 173 | return nil |
130 | 174 | } |
| 175 | + |
| 176 | +func gitInit(t *testing.T) string { |
| 177 | + dir := t.TempDir() |
| 178 | + git(t, dir, []string{"init", "--initial-branch=main"}) |
| 179 | + return dir |
| 180 | +} |
| 181 | + |
| 182 | +func gitCommitAll(t *testing.T, cwd string, message string) { |
| 183 | + git(t, cwd, []string{"commit", "--all", "--allow-empty", "--allow-empty-message", "--message", message}) |
| 184 | +} |
| 185 | + |
| 186 | +func git(t *testing.T, cwd string, command []string) string { |
| 187 | + logdir := t.TempDir() |
| 188 | + defer assert.NoError(t, os.RemoveAll(logdir)) |
| 189 | + |
| 190 | + command = append([]string{"-c", "user.name=Test", "-c", "user.email="}, command...) |
| 191 | + stdout, stderr, err := gitRun(cwd, command, logdir) |
| 192 | + assert.NoError(t, err) |
| 193 | + fmt.Print(stderr) |
| 194 | + return stdout |
| 195 | +} |
0 commit comments