fork of go-git with some jj specific features
at main 6.7 kB view raw
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}