Skip to content

Commit 720fef4

Browse files
authored
Merge pull request #109 from fluxcd/fix-git-semver
Fix Git semver checkout
2 parents c60134a + 5044d46 commit 720fef4

File tree

2 files changed

+48
-7
lines changed

2 files changed

+48
-7
lines changed

pkg/git/checkout.go

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -212,23 +212,28 @@ func (c *CheckoutSemVer) Checkout(ctx context.Context, path, url string, auth tr
212212
semver.Sort(svers)
213213
v := svers[len(svers)-1]
214214
t := svTags[v.String()]
215-
commitRef := tags[t]
216215

217216
w, err := repo.Worktree()
218217
if err != nil {
219218
return nil, "", fmt.Errorf("git worktree error: %w", err)
220219
}
221220

222-
commit, err := repo.CommitObject(plumbing.NewHash(commitRef))
223-
if err != nil {
224-
return nil, "", fmt.Errorf("git commit '%s' not found: %w", commitRef, err)
225-
}
226221
err = w.Checkout(&git.CheckoutOptions{
227-
Hash: commit.Hash,
222+
Branch: plumbing.NewTagReferenceName(t),
228223
})
229224
if err != nil {
230225
return nil, "", fmt.Errorf("git checkout error: %w", err)
231226
}
232227

233-
return commit, fmt.Sprintf("%s/%s", t, commitRef), nil
228+
head, err := repo.Head()
229+
if err != nil {
230+
return nil, "", fmt.Errorf("git resolve HEAD error: %w", err)
231+
}
232+
233+
commit, err := repo.CommitObject(head.Hash())
234+
if err != nil {
235+
return nil, "", fmt.Errorf("git commit '%s' not found: %w", head.Hash(), err)
236+
}
237+
238+
return commit, fmt.Sprintf("%s/%s", t, head.Hash().String()), nil
234239
}

pkg/git/checkout_test.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package git
2+
3+
import (
4+
"context"
5+
"io/ioutil"
6+
"os"
7+
"testing"
8+
)
9+
10+
func TestCheckoutTagSemVer_Checkout(t *testing.T) {
11+
tag := CheckoutTag{
12+
tag: "v1.7.0",
13+
}
14+
tmpDir, _ := ioutil.TempDir("", "test")
15+
defer os.RemoveAll(tmpDir)
16+
17+
cTag, _, err := tag.Checkout(context.TODO(), tmpDir, "https://github.com/projectcontour/contour", nil)
18+
if err != nil {
19+
t.Error(err)
20+
}
21+
22+
semVer := CheckoutSemVer{
23+
semVer: ">=1.0.0 <=1.7.0",
24+
}
25+
tmpDir2, _ := ioutil.TempDir("", "test")
26+
defer os.RemoveAll(tmpDir2)
27+
28+
cSemVer, _, err := semVer.Checkout(context.TODO(), tmpDir2, "https://github.com/projectcontour/contour", nil)
29+
if err != nil {
30+
t.Error(err)
31+
}
32+
33+
if cTag.Hash.String() != cSemVer.Hash.String() {
34+
t.Errorf("expected semver hash %s, got %s", cTag.Hash.String(), cSemVer.Hash.String())
35+
}
36+
}

0 commit comments

Comments
 (0)