Skip to content

Commit 5acf0ba

Browse files
authored
Merge pull request #698 from ajnavarro/perf/list-only-reachable-objects
Perf: Traverse commit history instead of reading the packfile
2 parents 58f5f13 + 9748ee3 commit 5acf0ba

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+1505
-122
lines changed

Gopkg.lock

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Gopkg.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
[[constraint]]
1818
name = "gopkg.in/src-d/go-git.v4"
1919
source = "github.com/src-d/go-git"
20-
version = "4.9.1"
20+
revision = "4d8bd13a73d6efd41b6be0b2eba5130c498fae0d"
2121

2222
[[constraint]]
2323
name = "gopkg.in/src-d/go-git-fixtures.v3"

commit_blobs.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"bytes"
55
"io"
66

7+
git "gopkg.in/src-d/go-git.v4"
78
"gopkg.in/src-d/go-git.v4/plumbing"
89
"gopkg.in/src-d/go-git.v4/plumbing/object"
910
"gopkg.in/src-d/go-mysql-server.v0/sql"
@@ -219,7 +220,9 @@ func (i *commitBlobsRowIter) init() error {
219220
if len(i.commits) > 0 {
220221
i.iter, err = NewCommitsByHashIter(i.repo, i.commits)
221222
} else {
222-
i.iter, err = i.repo.CommitObjects()
223+
i.iter, err = i.repo.Log(&git.LogOptions{
224+
All: true,
225+
})
223226
}
224227

225228
return err

commit_files.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"io"
66

77
"github.com/sirupsen/logrus"
8+
git "gopkg.in/src-d/go-git.v4"
89
"gopkg.in/src-d/go-git.v4/plumbing"
910
"gopkg.in/src-d/go-git.v4/plumbing/filemode"
1011
"gopkg.in/src-d/go-git.v4/plumbing/object"
@@ -196,7 +197,10 @@ func (i *commitFilesRowIter) init() error {
196197
if len(i.commitHashes) > 0 {
197198
i.commits, err = NewCommitsByHashIter(i.repo, i.commitHashes)
198199
} else {
199-
i.commits, err = i.repo.CommitObjects()
200+
i.commits, err = i.repo.
201+
Log(&git.LogOptions{
202+
All: true,
203+
})
200204
}
201205

202206
return err
@@ -433,7 +437,10 @@ func newCommitFilesKeyValueIter(
433437
return nil, err
434438
}
435439

436-
commits, err := repo.CommitObjects()
440+
commits, err := repo.
441+
Log(&git.LogOptions{
442+
All: true,
443+
})
437444
if err != nil {
438445
return nil, err
439446
}

commit_files_test.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"testing"
66

77
"github.com/stretchr/testify/require"
8+
git "gopkg.in/src-d/go-git.v4"
89
"gopkg.in/src-d/go-git.v4/plumbing"
910
"gopkg.in/src-d/go-mysql-server.v0/sql"
1011
"gopkg.in/src-d/go-mysql-server.v0/sql/expression"
@@ -35,7 +36,9 @@ func TestCommitFilesTableRowIter(t *testing.T) {
3536

3637
require.NoError(err)
3738

38-
commits, err := repo.CommitObjects()
39+
commits, err := repo.Log(&git.LogOptions{
40+
All: true,
41+
})
3942
require.NoError(err)
4043

4144
for {

commit_trees.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"bytes"
55
"io"
66

7+
git "gopkg.in/src-d/go-git.v4"
78
"gopkg.in/src-d/go-git.v4/plumbing"
89

910
"gopkg.in/src-d/go-git.v4/plumbing/filemode"
@@ -215,7 +216,9 @@ func (i *commitTreesRowIter) init() error {
215216
if len(i.commitHashes) > 0 {
216217
i.commits, err = NewCommitsByHashIter(i.repo, i.commitHashes)
217218
} else {
218-
i.commits, err = i.repo.CommitObjects()
219+
i.commits, err = i.repo.Log(&git.LogOptions{
220+
All: true,
221+
})
219222
}
220223

221224
return err

commit_trees_test.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,17 @@ func TestCommitTreesRowIter(t *testing.T) {
2323
}
2424

2525
expected := []sql.Row{
26-
{"e8d3ffab552895c19b9fcf7aa264d277cde33881", "dbd3641b371024f44d0e469a9c8f5457b0660de1"},
27-
{"e8d3ffab552895c19b9fcf7aa264d277cde33881", "a39771a7651f97faf5c72e08224d857fc35133db"},
28-
{"e8d3ffab552895c19b9fcf7aa264d277cde33881", "5a877e6a906a2743ad6e45d99c1793642aaf8eda"},
29-
{"e8d3ffab552895c19b9fcf7aa264d277cde33881", "586af567d0bb5e771e49bdd9434f5e0fb76d25fa"},
30-
3126
{"6ecf0ef2c2dffb796033e5a02219af86ec6584e5", "a8d315b2b1c615d43042c3a62402b8a54288cf5c"},
3227
{"6ecf0ef2c2dffb796033e5a02219af86ec6584e5", "a39771a7651f97faf5c72e08224d857fc35133db"},
3328
{"6ecf0ef2c2dffb796033e5a02219af86ec6584e5", "5a877e6a906a2743ad6e45d99c1793642aaf8eda"},
3429
{"6ecf0ef2c2dffb796033e5a02219af86ec6584e5", "586af567d0bb5e771e49bdd9434f5e0fb76d25fa"},
3530
{"6ecf0ef2c2dffb796033e5a02219af86ec6584e5", "cf4aa3b38974fb7d81f367c0830f7d78d65ab86b"},
3631

32+
{"e8d3ffab552895c19b9fcf7aa264d277cde33881", "dbd3641b371024f44d0e469a9c8f5457b0660de1"},
33+
{"e8d3ffab552895c19b9fcf7aa264d277cde33881", "a39771a7651f97faf5c72e08224d857fc35133db"},
34+
{"e8d3ffab552895c19b9fcf7aa264d277cde33881", "5a877e6a906a2743ad6e45d99c1793642aaf8eda"},
35+
{"e8d3ffab552895c19b9fcf7aa264d277cde33881", "586af567d0bb5e771e49bdd9434f5e0fb76d25fa"},
36+
3737
{"918c48b83bd081e863dbe1b80f8998f058cd8294", "fb72698cab7617ac416264415f13224dfd7a165e"},
3838
{"918c48b83bd081e863dbe1b80f8998f058cd8294", "a39771a7651f97faf5c72e08224d857fc35133db"},
3939
{"918c48b83bd081e863dbe1b80f8998f058cd8294", "5a877e6a906a2743ad6e45d99c1793642aaf8eda"},
@@ -44,13 +44,13 @@ func TestCommitTreesRowIter(t *testing.T) {
4444

4545
{"1669dce138d9b841a518c64b10914d88f5e488ea", "eba74343e2f15d62adedfd8c883ee0262b5c8021"},
4646

47-
{"a5b8b09e2f8fcb0bb99d3ccb0958157b40890d69", "c2d30fa8ef288618f65f6eed6e168e0d514886f4"},
48-
49-
{"b8e471f58bcbca63b07bda20e428190409c2db47", "c2d30fa8ef288618f65f6eed6e168e0d514886f4"},
50-
5147
{"35e85108805c84807bc66a02d91535e1e24b38b9", "8dcef98b1d52143e1e2dbc458ffe38f925786bf2"},
5248

5349
{"b029517f6300c2da0f4b651b8642506cd6aaf45d", "aa9b383c260e1d05fbbf6b30a02914555e20c725"},
50+
51+
{"a5b8b09e2f8fcb0bb99d3ccb0958157b40890d69", "c2d30fa8ef288618f65f6eed6e168e0d514886f4"},
52+
53+
{"b8e471f58bcbca63b07bda20e428190409c2db47", "c2d30fa8ef288618f65f6eed6e168e0d514886f4"},
5454
}
5555

5656
require.Equal(expected, rows)
@@ -90,8 +90,8 @@ func TestCommitTreesPushdown(t *testing.T) {
9090
),
9191
},
9292
[]sql.Row{
93-
{"e8d3ffab552895c19b9fcf7aa264d277cde33881", "586af567d0bb5e771e49bdd9434f5e0fb76d25fa"},
9493
{"6ecf0ef2c2dffb796033e5a02219af86ec6584e5", "586af567d0bb5e771e49bdd9434f5e0fb76d25fa"},
94+
{"e8d3ffab552895c19b9fcf7aa264d277cde33881", "586af567d0bb5e771e49bdd9434f5e0fb76d25fa"},
9595
{"918c48b83bd081e863dbe1b80f8998f058cd8294", "586af567d0bb5e771e49bdd9434f5e0fb76d25fa"},
9696
},
9797
},

commits.go

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package gitbase
33
import (
44
"io"
55

6+
git "gopkg.in/src-d/go-git.v4"
67
"gopkg.in/src-d/go-mysql-server.v0/sql"
78

89
"gopkg.in/src-d/go-git.v4/plumbing"
@@ -161,7 +162,10 @@ func (i *commitIter) init() error {
161162
if len(i.hashes) > 0 {
162163
i.iter, err = NewCommitsByHashIter(i.repo, i.hashes)
163164
} else {
164-
i.iter, err = i.repo.CommitObjects()
165+
i.iter, err =
166+
i.repo.Log(&git.LogOptions{
167+
All: true,
168+
})
165169
}
166170

167171
return err
@@ -245,7 +249,10 @@ func NewCommitsByHashIter(
245249
var commitIter object.CommitIter
246250
var err error
247251
if len(hashes) == 0 {
248-
commitIter, err = repo.CommitObjects()
252+
commitIter, err =
253+
repo.Log(&git.LogOptions{
254+
All: true,
255+
})
249256
if err != nil {
250257
return nil, err
251258
}
@@ -333,7 +340,10 @@ func newCommitsKeyValueIter(
333340
return nil, err
334341
}
335342

336-
commits, err := repo.CommitObjects()
343+
commits, err :=
344+
repo.Log(&git.LogOptions{
345+
All: true,
346+
})
337347
if err != nil {
338348
return nil, err
339349
}

commits_test.go

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -101,14 +101,14 @@ func TestCommitsParents(t *testing.T) {
101101
}{
102102
{
103103
name: "test commits parents 1",
104-
hash: "e8d3ffab552895c19b9fcf7aa264d277cde33881",
104+
hash: "6ecf0ef2c2dffb796033e5a02219af86ec6584e5",
105105
parents: []string{
106106
"918c48b83bd081e863dbe1b80f8998f058cd8294",
107107
},
108108
},
109109
{
110110
name: "test commits parents 2",
111-
hash: "6ecf0ef2c2dffb796033e5a02219af86ec6584e5",
111+
hash: "e8d3ffab552895c19b9fcf7aa264d277cde33881",
112112
parents: []string{
113113
"918c48b83bd081e863dbe1b80f8998f058cd8294",
114114
},
@@ -137,30 +137,30 @@ func TestCommitsParents(t *testing.T) {
137137
},
138138
{
139139
name: "test commits parents 6",
140-
hash: "a5b8b09e2f8fcb0bb99d3ccb0958157b40890d69",
140+
hash: "35e85108805c84807bc66a02d91535e1e24b38b9",
141141
parents: []string{
142142
"b029517f6300c2da0f4b651b8642506cd6aaf45d",
143-
"b8e471f58bcbca63b07bda20e428190409c2db47",
144143
},
145144
},
146145
{
147-
name: "test commits parents 7",
148-
hash: "b8e471f58bcbca63b07bda20e428190409c2db47",
149-
parents: []string{
150-
"b029517f6300c2da0f4b651b8642506cd6aaf45d",
151-
},
146+
name: "test commits parents 7",
147+
hash: "b029517f6300c2da0f4b651b8642506cd6aaf45d",
148+
parents: []string{},
152149
},
153150
{
154151
name: "test commits parents 8",
155-
hash: "35e85108805c84807bc66a02d91535e1e24b38b9",
152+
hash: "a5b8b09e2f8fcb0bb99d3ccb0958157b40890d69",
156153
parents: []string{
157154
"b029517f6300c2da0f4b651b8642506cd6aaf45d",
155+
"b8e471f58bcbca63b07bda20e428190409c2db47",
158156
},
159157
},
160158
{
161-
name: "test commits parents 9",
162-
hash: "b029517f6300c2da0f4b651b8642506cd6aaf45d",
163-
parents: []string{},
159+
name: "test commits parents 9",
160+
hash: "b8e471f58bcbca63b07bda20e428190409c2db47",
161+
parents: []string{
162+
"b029517f6300c2da0f4b651b8642506cd6aaf45d",
163+
},
164164
},
165165
}
166166

@@ -188,65 +188,65 @@ func TestCommitsIndexKeyValueIter(t *testing.T) {
188188
assertEncodeKey(t, &packOffsetIndexKey{
189189
Repository: path,
190190
Packfile: "323a4b6b5de684f9966953a043bc800154e5dbfa",
191-
Offset: 682,
191+
Offset: 186,
192192
}),
193193
[]interface{}{
194-
"1669dce138d9b841a518c64b10914d88f5e488ea",
194+
"6ecf0ef2c2dffb796033e5a02219af86ec6584e5",
195195
196196
},
197197
},
198198
{
199199
assertEncodeKey(t, &packOffsetIndexKey{
200200
Repository: path,
201201
Packfile: "323a4b6b5de684f9966953a043bc800154e5dbfa",
202-
Offset: 1292,
202+
Offset: 12,
203203
}),
204204
[]interface{}{
205-
"35e85108805c84807bc66a02d91535e1e24b38b9",
205+
"e8d3ffab552895c19b9fcf7aa264d277cde33881",
206206
207207
},
208208
},
209209
{
210210
assertEncodeKey(t, &packOffsetIndexKey{
211211
Repository: path,
212212
Packfile: "323a4b6b5de684f9966953a043bc800154e5dbfa",
213-
Offset: 186,
213+
Offset: 353,
214214
}),
215215
[]interface{}{
216-
"6ecf0ef2c2dffb796033e5a02219af86ec6584e5",
216+
"918c48b83bd081e863dbe1b80f8998f058cd8294",
217217
218218
},
219219
},
220220
{
221221
assertEncodeKey(t, &packOffsetIndexKey{
222222
Repository: path,
223223
Packfile: "323a4b6b5de684f9966953a043bc800154e5dbfa",
224-
Offset: 353,
224+
Offset: 516,
225225
}),
226226
[]interface{}{
227-
"918c48b83bd081e863dbe1b80f8998f058cd8294",
227+
"af2d6a6954d532f8ffb47615169c8fdf9d383a1a",
228228
229229
},
230230
},
231231
{
232232
assertEncodeKey(t, &packOffsetIndexKey{
233233
Repository: path,
234234
Packfile: "323a4b6b5de684f9966953a043bc800154e5dbfa",
235-
Offset: 905,
235+
Offset: 682,
236236
}),
237237
[]interface{}{
238-
"a5b8b09e2f8fcb0bb99d3ccb0958157b40890d69",
238+
"1669dce138d9b841a518c64b10914d88f5e488ea",
239239
240240
},
241241
},
242242
{
243243
assertEncodeKey(t, &packOffsetIndexKey{
244244
Repository: path,
245245
Packfile: "323a4b6b5de684f9966953a043bc800154e5dbfa",
246-
Offset: 516,
246+
Offset: 1292,
247247
}),
248248
[]interface{}{
249-
"af2d6a6954d532f8ffb47615169c8fdf9d383a1a",
249+
"35e85108805c84807bc66a02d91535e1e24b38b9",
250250
251251
},
252252
},
@@ -265,22 +265,22 @@ func TestCommitsIndexKeyValueIter(t *testing.T) {
265265
assertEncodeKey(t, &packOffsetIndexKey{
266266
Repository: path,
267267
Packfile: "323a4b6b5de684f9966953a043bc800154e5dbfa",
268-
Offset: 1130,
268+
Offset: 905,
269269
}),
270270
[]interface{}{
271-
"b8e471f58bcbca63b07bda20e428190409c2db47",
272-
271+
"a5b8b09e2f8fcb0bb99d3ccb0958157b40890d69",
272+
273273
},
274274
},
275275
{
276276
assertEncodeKey(t, &packOffsetIndexKey{
277277
Repository: path,
278278
Packfile: "323a4b6b5de684f9966953a043bc800154e5dbfa",
279-
Offset: 12,
279+
Offset: 1130,
280280
}),
281281
[]interface{}{
282-
"e8d3ffab552895c19b9fcf7aa264d277cde33881",
283-
282+
"b8e471f58bcbca63b07bda20e428190409c2db47",
283+
284284
},
285285
},
286286
}

0 commit comments

Comments
 (0)