Skip to content

Commit dec0148

Browse files
committed
Revert "Discard unread data of git cat-file (go-gitea#29297) (go-gitea#29310)"
This reverts commit ed5e0c8. This causes Edit File on larger files to time out.
1 parent 2c583e4 commit dec0148

10 files changed

+80
-66
lines changed

modules/git/batch_reader.go

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,16 @@ headerLoop:
203203
}
204204

205205
// Discard the rest of the tag
206-
return id, DiscardFull(rd, size-n+1)
206+
discard := size - n + 1
207+
for discard > math.MaxInt32 {
208+
_, err := rd.Discard(math.MaxInt32)
209+
if err != nil {
210+
return id, err
211+
}
212+
discard -= math.MaxInt32
213+
}
214+
_, err := rd.Discard(int(discard))
215+
return id, err
207216
}
208217

209218
// ReadTreeID reads a tree ID from a cat-file --batch stream, throwing away the rest of the stream.
@@ -229,7 +238,16 @@ headerLoop:
229238
}
230239

231240
// Discard the rest of the commit
232-
return id, DiscardFull(rd, size-n+1)
241+
discard := size - n + 1
242+
for discard > math.MaxInt32 {
243+
_, err := rd.Discard(math.MaxInt32)
244+
if err != nil {
245+
return id, err
246+
}
247+
discard -= math.MaxInt32
248+
}
249+
_, err := rd.Discard(int(discard))
250+
return id, err
233251
}
234252

235253
// git tree files are a list:
@@ -327,21 +345,3 @@ func init() {
327345
_, filename, _, _ := runtime.Caller(0)
328346
callerPrefix = strings.TrimSuffix(filename, "modules/git/batch_reader.go")
329347
}
330-
331-
func DiscardFull(rd *bufio.Reader, discard int64) error {
332-
if discard > math.MaxInt32 {
333-
n, err := rd.Discard(math.MaxInt32)
334-
discard -= int64(n)
335-
if err != nil {
336-
return err
337-
}
338-
}
339-
for discard > 0 {
340-
n, err := rd.Discard(int(discard))
341-
discard -= int64(n)
342-
if err != nil {
343-
return err
344-
}
345-
}
346-
return nil
347-
}

modules/git/blob_nogogit.go

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"bufio"
1010
"bytes"
1111
"io"
12+
"math"
1213

1314
"code.gitea.io/gitea/modules/log"
1415
)
@@ -103,6 +104,25 @@ func (b *blobReader) Read(p []byte) (n int, err error) {
103104
// Close implements io.Closer
104105
func (b *blobReader) Close() error {
105106
defer b.cancel()
106-
107-
return DiscardFull(b.rd, b.n+1)
107+
if b.n > 0 {
108+
for b.n > math.MaxInt32 {
109+
n, err := b.rd.Discard(math.MaxInt32)
110+
b.n -= int64(n)
111+
if err != nil {
112+
return err
113+
}
114+
b.n -= math.MaxInt32
115+
}
116+
n, err := b.rd.Discard(int(b.n))
117+
b.n -= int64(n)
118+
if err != nil {
119+
return err
120+
}
121+
}
122+
if b.n == 0 {
123+
_, err := b.rd.Discard(1)
124+
b.n--
125+
return err
126+
}
127+
return nil
108128
}

modules/git/commit_info_nogogit.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -151,9 +151,6 @@ func GetLastCommitForPaths(ctx context.Context, commit *Commit, treePath string,
151151
return nil, err
152152
}
153153
if typ != "commit" {
154-
if err := DiscardFull(batchReader, size+1); err != nil {
155-
return nil, err
156-
}
157154
return nil, fmt.Errorf("unexpected type: %s for commit id: %s", typ, commitID)
158155
}
159156
c, err = CommitFromReader(commit.repo, MustIDFromString(commitID), io.LimitReader(batchReader, size))

modules/git/pipeline/lfs_nogogit.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -170,10 +170,6 @@ func FindLFSFile(repo *git.Repository, hash git.SHA1) ([]*LFSResult, error) {
170170
} else {
171171
break commitReadingLoop
172172
}
173-
default:
174-
if err := git.DiscardFull(batchReader, size+1); err != nil {
175-
return nil, err
176-
}
177173
}
178174
}
179175
}

modules/git/repo_commit_nogogit.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,8 @@ func (repo *Repository) getCommitFromBatchReader(rd *bufio.Reader, id SHA1) (*Co
121121
return commit, nil
122122
default:
123123
log.Debug("Unknown typ: %s", typ)
124-
if err := DiscardFull(rd, size+1); err != nil {
124+
_, err = rd.Discard(int(size) + 1)
125+
if err != nil {
125126
return nil, err
126127
}
127128
return nil, ErrNotExist{

modules/git/repo_language_stats_nogogit.go

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,10 @@
66
package git
77

88
import (
9+
"bufio"
910
"bytes"
1011
"io"
12+
"math"
1113
"strings"
1214

1315
"code.gitea.io/gitea/modules/analyze"
@@ -166,7 +168,8 @@ func (repo *Repository) GetLanguageStats(commitID string) (map[string]int64, err
166168
return nil, err
167169
}
168170
content = contentBuf.Bytes()
169-
if err := DiscardFull(batchReader, discard); err != nil {
171+
err = discardFull(batchReader, discard)
172+
if err != nil {
170173
return nil, err
171174
}
172175
}
@@ -209,3 +212,21 @@ func (repo *Repository) GetLanguageStats(commitID string) (map[string]int64, err
209212

210213
return mergeLanguageStats(sizes), nil
211214
}
215+
216+
func discardFull(rd *bufio.Reader, discard int64) error {
217+
if discard > math.MaxInt32 {
218+
n, err := rd.Discard(math.MaxInt32)
219+
discard -= int64(n)
220+
if err != nil {
221+
return err
222+
}
223+
}
224+
for discard > 0 {
225+
n, err := rd.Discard(int(discard))
226+
discard -= int64(n)
227+
if err != nil {
228+
return err
229+
}
230+
}
231+
return nil
232+
}

modules/git/repo_tag_nogogit.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -103,9 +103,6 @@ func (repo *Repository) getTag(tagID SHA1, name string) (*Tag, error) {
103103
return nil, err
104104
}
105105
if typ != "tag" {
106-
if err := DiscardFull(rd, size+1); err != nil {
107-
return nil, err
108-
}
109106
return nil, ErrNotExist{ID: tagID.String()}
110107
}
111108

modules/git/repo_tree_nogogit.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,6 @@ func (repo *Repository) getTree(id SHA1) (*Tree, error) {
5858
tree.entriesParsed = true
5959
return tree, nil
6060
default:
61-
if err := DiscardFull(rd, size+1); err != nil {
62-
return nil, err
63-
}
6461
return nil, ErrNotExist{
6562
ID: id.String(),
6663
}

modules/git/tree_nogogit.go

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ package git
77

88
import (
99
"io"
10+
"math"
1011
"strings"
1112
)
1213

@@ -62,8 +63,19 @@ func (t *Tree) ListEntries() (Entries, error) {
6263
}
6364

6465
// Not a tree just use ls-tree instead
65-
if err := DiscardFull(rd, sz+1); err != nil {
66-
return nil, err
66+
for sz > math.MaxInt32 {
67+
discarded, err := rd.Discard(math.MaxInt32)
68+
sz -= int64(discarded)
69+
if err != nil {
70+
return nil, err
71+
}
72+
}
73+
for sz > 0 {
74+
discarded, err := rd.Discard(int(sz))
75+
sz -= int64(discarded)
76+
if err != nil {
77+
return nil, err
78+
}
6779
}
6880
}
6981

modules/git/tree_test.go

Lines changed: 0 additions & 27 deletions
This file was deleted.

0 commit comments

Comments
 (0)