Skip to content

Commit e80c607

Browse files
dannylongeuaychristophwitzko
authored andcommitted
fix(*): 🐛 check commits log ordering
1 parent cb5045b commit e80c607

File tree

3 files changed

+74
-2
lines changed

3 files changed

+74
-2
lines changed

pkg/provider/git.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,8 @@ func (repo *Repository) GetCommits(fromSha, toSha string) ([]*semrel.RawCommit,
108108
}
109109

110110
commits, err := repo.repo.Log(&git.LogOptions{
111-
From: *toHash,
111+
From: *toHash,
112+
Order: git.LogOrderCommitterTime,
112113
})
113114
if err != nil {
114115
return nil, err

pkg/provider/git_test.go

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ func TestGit(t *testing.T) {
2626
t.Run("GetInfo", getInfo)
2727
t.Run("GetReleases", getReleases)
2828
t.Run("GetCommits", getCommits)
29+
t.Run("GetCommitsNoFFMerge", getCommitsNoFFMerge)
2930
t.Run("CreateRelease", createRelease)
3031
}
3132

@@ -151,6 +152,31 @@ func createRepo() (*Repository, error) {
151152
return repo, nil
152153
}
153154

155+
func cloneRepo(path string, url string) (*Repository, error) {
156+
_, err := git.PlainClone(path, false, &git.CloneOptions{
157+
Auth: &http.BasicAuth{
158+
Username: "test",
159+
Password: "test",
160+
},
161+
URL: url,
162+
})
163+
if err != nil {
164+
return nil, err
165+
}
166+
repo := &Repository{}
167+
err = repo.Init(map[string]string{
168+
"git_path": path,
169+
"auth": "basic",
170+
"auth_username": "test",
171+
"auth_password": "test",
172+
})
173+
if err != nil {
174+
return nil, err
175+
}
176+
177+
return repo, nil
178+
}
179+
154180
func getInfo(t *testing.T) {
155181
require := require.New(t)
156182
repo, err := createRepo()
@@ -179,6 +205,20 @@ func getCommits(t *testing.T) {
179205
}
180206
}
181207

208+
func getCommitsNoFFMerge(t *testing.T) {
209+
require := require.New(t)
210+
dir, err := os.MkdirTemp("", "provider-git")
211+
require.NoError(err)
212+
repo, err := cloneRepo(dir, "http://localhost:3000/test/no_ff_merge.git")
213+
require.NoError(err)
214+
releases, err := repo.GetReleases("")
215+
require.Len(releases, 1)
216+
initialCommitSha := releases[0].GetSHA()
217+
commits, err := repo.GetCommits(initialCommitSha, "master")
218+
require.NoError(err)
219+
require.Len(commits, 2)
220+
}
221+
182222
func createRelease(t *testing.T) {
183223
require := require.New(t)
184224
repo, err := createRepo()
@@ -211,14 +251,27 @@ func createRelease(t *testing.T) {
211251
Changelog: testCase.changelog,
212252
})
213253
require.NoError(err)
254+
tagName := "v" + testCase.version
214255

215-
tagRef, err := gRepo.Tag("v" + testCase.version)
256+
tagRef, err := gRepo.Tag(tagName)
216257
require.NoError(err)
217258

218259
tagObj, err := gRepo.TagObject(tagRef.Hash())
219260
require.NoError(err)
220261

221262
require.Equal(testCase.changelog+"\n", tagObj.Message)
263+
264+
// Clean up tags so future test runs succeed
265+
tagRefName := ":refs/tags/" + tagName
266+
err = gRepo.Push(&git.PushOptions{
267+
RemoteName: "origin",
268+
RefSpecs: []config.RefSpec{config.RefSpec(tagRefName)},
269+
Auth: &http.BasicAuth{
270+
Username: "test",
271+
Password: "test",
272+
},
273+
})
274+
require.NoError(err)
222275
}
223276
}
224277

scripts/start-gitea.sh

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,21 @@ sleep 10
1717

1818
echo "creating test repo..."
1919
curl -u 'test:test' -XPOST -H 'Content-Type: application/json' -d '{"name":"test"}' http://localhost:3000/api/v1/user/repos
20+
21+
echo "creating no_ff_merge repo..."
22+
curl -u 'test:test' -XPOST -H 'Content-Type: application/json' -d '{"name":"no_ff_merge"}' http://localhost:3000/api/v1/user/repos
23+
24+
echo "populating no_ff_merge repo..."
25+
tmpdir=$(mktemp -d 2>/dev/null || mktemp -d -t 'tmpdir')
26+
cd $tmpdir
27+
git init --initial-branch=master
28+
git commit -m "feat: initial commit" --allow-empty
29+
git tag v1.0.0
30+
git switch -C feature
31+
sleep 1
32+
git commit -m "feat: feature" --allow-empty
33+
git switch master
34+
git merge --no-ff feature --no-edit
35+
git push http://test:test@localhost:3000/test/no_ff_merge.git master --tags
36+
cd -
37+
rm -rf $tmpdir

0 commit comments

Comments
 (0)