1package commitgraph
2
3import (
4 "strings"
5 "testing"
6
7 "github.com/go-git/go-git/v5/plumbing"
8 "github.com/go-git/go-git/v5/plumbing/cache"
9 commitgraph "github.com/go-git/go-git/v5/plumbing/format/commitgraph/v2"
10 "github.com/go-git/go-git/v5/plumbing/format/packfile"
11 "github.com/go-git/go-git/v5/storage/filesystem"
12 "github.com/stretchr/testify/assert"
13
14 fixtures "github.com/go-git/go-git-fixtures/v5"
15)
16
17func TestCommitNodeIter(t *testing.T) {
18 t.Parallel()
19
20 f := fixtures.ByTag("commit-graph-chain-2").One()
21
22 storer := newUnpackRepository(f)
23
24 index, err := commitgraph.OpenChainOrFileIndex(storer.Filesystem())
25 assert.NoError(t, err)
26
27 nodeIndex := NewGraphCommitNodeIndex(index, storer)
28
29 head, err := nodeIndex.Get(plumbing.NewHash("ec6f456c0e8c7058a29611429965aa05c190b54b"))
30 assert.NoError(t, err)
31
32 testTopoOrder(t, head)
33 testDateOrder(t, head)
34 testAuthorDateOrder(t, head)
35}
36
37func newUnpackRepository(f *fixtures.Fixture) *filesystem.Storage {
38 storer := filesystem.NewStorage(f.DotGit(), cache.NewObjectLRUDefault())
39 p := f.Packfile()
40 defer p.Close()
41 packfile.UpdateObjectStorage(storer, p)
42 return storer
43}
44
45func testTopoOrder(t *testing.T, head CommitNode) {
46 iter := NewCommitNodeIterTopoOrder(
47 head,
48 nil,
49 nil,
50 )
51
52 var commits []string
53 iter.ForEach(func(c CommitNode) error {
54 commits = append(commits, c.ID().String())
55 return nil
56 })
57
58 assert.Equal(t, commits, strings.Split(`ec6f456c0e8c7058a29611429965aa05c190b54b
59d82f291cde9987322c8a0c81a325e1ba6159684c
603048d280d2d5b258d9e582a226ff4bbed34fd5c9
6127aa8cdd2431068606741a589383c02c149ea625
62fa058d42fa3bc53f39108a56dad67157169b2191
636c629843a1750a27c9af01ed2985f362f619c47a
64d10a0e7c1f340a6cfc14540a5f8c508ce7e2eabf
65d0a18ccd8eea3bdabc76d6dc5420af1ea30aae9f
66cf2874632223220e0445abf0a7806dc772c0b37a
67758ac33217f092bfcded4ad4774954ac054c9609
68214e1dca024fb6da5ed65564d2de734df5dc2127
6970923099e61fa33f0bc5256d2f938fa44c4df10e
70bcaa1ac5644b16f1febb72f31e204720b7bb8934
71e1d8866ffa78fa16d2f39b0ba5344a7269ee5371
722275fa7d0c75d20103f90b0e1616937d5a9fc5e6
73bdd9a92789d4a86b20a8d3df462df373f41acf23
74b359f11ea09e642695edcd114b463da4395b10c1
756f43e8933ba3c04072d5d104acc6118aac3e52ee
76ccafe8bd5f9dbfb8b98b0da03ced29608dcfdeec
77939814f341fdd5d35e81a3845a33c4fedb19d2d2
785f5ad88bf2babe506f927d64d2b7a1e1493dc2ae
79a2014124ca3b3f9ff28fbab0a83ce3c71bf4622e
8077906b653c3eb8a1cd5bd7254e161c00c6086d83
81465cba710284204f9851854587c2887c247222db
82b9471b13256703d3f5eb88b280b4a16ce325ec1b
8362925030859646daeeaf5a4d386a0c41e00dda8a
845f56aea0ca8b74215a5b982bca32236e1e28c76b
8523148841baa5dbce48f6adcb7ddf83dcd97debb3
86c336d16298a017486c4164c40f8acb28afe64e84
8731eae7b619d166c366bf5df4991f04ba8cebea0a
88d2a38b4a5965d529566566640519d03d2bd10f6c
89b977a025ca21e3b5ca123d8093bd7917694f6da7
9035b585759cbf29f8ec428ef89da20705d59f99ec
91c2bbf9fe8009b22d0f390f3c8c3f13937067590f
92fc9f0643b21cfe571046e27e0c4565f3a1ee96c8
93c088fd6a7e1a38e9d5a9815265cb575bb08d08ff
945fddbeb678bd2c36c5e5c891ab8f2b143ced5baf
955d7303c49ac984a9fec60523f2d5297682e16646`, "\n"))
96}
97
98func testDateOrder(t *testing.T, head CommitNode) {
99 iter := NewCommitNodeIterDateOrder(
100 head,
101 nil,
102 nil,
103 )
104
105 var commits []string
106 iter.ForEach(func(c CommitNode) error {
107 commits = append(commits, c.ID().String())
108 return nil
109 })
110
111 assert.Equal(t, commits, strings.Split(`ec6f456c0e8c7058a29611429965aa05c190b54b
1123048d280d2d5b258d9e582a226ff4bbed34fd5c9
113d82f291cde9987322c8a0c81a325e1ba6159684c
11427aa8cdd2431068606741a589383c02c149ea625
115fa058d42fa3bc53f39108a56dad67157169b2191
116d0a18ccd8eea3bdabc76d6dc5420af1ea30aae9f
1176c629843a1750a27c9af01ed2985f362f619c47a
118cf2874632223220e0445abf0a7806dc772c0b37a
119d10a0e7c1f340a6cfc14540a5f8c508ce7e2eabf
120758ac33217f092bfcded4ad4774954ac054c9609
121214e1dca024fb6da5ed65564d2de734df5dc2127
12270923099e61fa33f0bc5256d2f938fa44c4df10e
123bcaa1ac5644b16f1febb72f31e204720b7bb8934
124e1d8866ffa78fa16d2f39b0ba5344a7269ee5371
1252275fa7d0c75d20103f90b0e1616937d5a9fc5e6
126bdd9a92789d4a86b20a8d3df462df373f41acf23
127b359f11ea09e642695edcd114b463da4395b10c1
1286f43e8933ba3c04072d5d104acc6118aac3e52ee
129ccafe8bd5f9dbfb8b98b0da03ced29608dcfdeec
130939814f341fdd5d35e81a3845a33c4fedb19d2d2
1315f5ad88bf2babe506f927d64d2b7a1e1493dc2ae
132a2014124ca3b3f9ff28fbab0a83ce3c71bf4622e
13377906b653c3eb8a1cd5bd7254e161c00c6086d83
134465cba710284204f9851854587c2887c247222db
135b9471b13256703d3f5eb88b280b4a16ce325ec1b
13662925030859646daeeaf5a4d386a0c41e00dda8a
1375f56aea0ca8b74215a5b982bca32236e1e28c76b
13823148841baa5dbce48f6adcb7ddf83dcd97debb3
139c336d16298a017486c4164c40f8acb28afe64e84
14031eae7b619d166c366bf5df4991f04ba8cebea0a
141b977a025ca21e3b5ca123d8093bd7917694f6da7
142d2a38b4a5965d529566566640519d03d2bd10f6c
14335b585759cbf29f8ec428ef89da20705d59f99ec
144c2bbf9fe8009b22d0f390f3c8c3f13937067590f
145fc9f0643b21cfe571046e27e0c4565f3a1ee96c8
146c088fd6a7e1a38e9d5a9815265cb575bb08d08ff
1475fddbeb678bd2c36c5e5c891ab8f2b143ced5baf
1485d7303c49ac984a9fec60523f2d5297682e16646`, "\n"))
149}
150
151func testAuthorDateOrder(t *testing.T, head CommitNode) {
152 iter := NewCommitNodeIterAuthorDateOrder(
153 head,
154 nil,
155 nil,
156 )
157
158 var commits []string
159 iter.ForEach(func(c CommitNode) error {
160 commits = append(commits, c.ID().String())
161 return nil
162 })
163
164 assert.Equal(t, commits, strings.Split(`ec6f456c0e8c7058a29611429965aa05c190b54b
1653048d280d2d5b258d9e582a226ff4bbed34fd5c9
166d82f291cde9987322c8a0c81a325e1ba6159684c
16727aa8cdd2431068606741a589383c02c149ea625
168fa058d42fa3bc53f39108a56dad67157169b2191
169d0a18ccd8eea3bdabc76d6dc5420af1ea30aae9f
1706c629843a1750a27c9af01ed2985f362f619c47a
171cf2874632223220e0445abf0a7806dc772c0b37a
172d10a0e7c1f340a6cfc14540a5f8c508ce7e2eabf
173758ac33217f092bfcded4ad4774954ac054c9609
174214e1dca024fb6da5ed65564d2de734df5dc2127
17570923099e61fa33f0bc5256d2f938fa44c4df10e
176bcaa1ac5644b16f1febb72f31e204720b7bb8934
177e1d8866ffa78fa16d2f39b0ba5344a7269ee5371
1782275fa7d0c75d20103f90b0e1616937d5a9fc5e6
179bdd9a92789d4a86b20a8d3df462df373f41acf23
180b359f11ea09e642695edcd114b463da4395b10c1
1816f43e8933ba3c04072d5d104acc6118aac3e52ee
182ccafe8bd5f9dbfb8b98b0da03ced29608dcfdeec
183939814f341fdd5d35e81a3845a33c4fedb19d2d2
1845f5ad88bf2babe506f927d64d2b7a1e1493dc2ae
185a2014124ca3b3f9ff28fbab0a83ce3c71bf4622e
18677906b653c3eb8a1cd5bd7254e161c00c6086d83
187465cba710284204f9851854587c2887c247222db
188b9471b13256703d3f5eb88b280b4a16ce325ec1b
1895f56aea0ca8b74215a5b982bca32236e1e28c76b
19062925030859646daeeaf5a4d386a0c41e00dda8a
19123148841baa5dbce48f6adcb7ddf83dcd97debb3
192c336d16298a017486c4164c40f8acb28afe64e84
19331eae7b619d166c366bf5df4991f04ba8cebea0a
194b977a025ca21e3b5ca123d8093bd7917694f6da7
195d2a38b4a5965d529566566640519d03d2bd10f6c
19635b585759cbf29f8ec428ef89da20705d59f99ec
197c2bbf9fe8009b22d0f390f3c8c3f13937067590f
198fc9f0643b21cfe571046e27e0c4565f3a1ee96c8
199c088fd6a7e1a38e9d5a9815265cb575bb08d08ff
2005fddbeb678bd2c36c5e5c891ab8f2b143ced5baf
2015d7303c49ac984a9fec60523f2d5297682e16646`, "\n"))
202}