@@ -63,18 +63,19 @@ func (s *ContentStore) Put(pointer Pointer, r io.Reader) error {
63
63
// check again whether there is any error during the Save operation
64
64
// because some errors might be ignored by the Reader's caller
65
65
if wrappedRd .lastError != nil && ! errors .Is (wrappedRd .lastError , io .EOF ) {
66
- return wrappedRd .lastError
66
+ err = wrappedRd .lastError
67
+ } else if written != pointer .Size {
68
+ err = ErrSizeMismatch
67
69
}
68
70
69
- // This shouldn't happen but it is sensible to test
70
- if written != pointer . Size {
71
- if err := s .Delete (p ); err != nil {
72
- log .Error ("Cleaning the LFS OID[%s] failed: %v" , pointer .Oid , err )
71
+ // if the upload failed, try to delete the file
72
+ if err != nil {
73
+ if errDel := s .Delete (p ); errDel != nil {
74
+ log .Error ("Cleaning the LFS OID[%s] failed: %v" , pointer .Oid , errDel )
73
75
}
74
- return ErrSizeMismatch
75
76
}
76
77
77
- return nil
78
+ return err
78
79
}
79
80
80
81
// Exists returns true if the object exists in the content store.
@@ -123,9 +124,9 @@ type hashingReader struct {
123
124
// For example, MinIO's Put will ignore errors if the written size could equal to expected size
124
125
// So we must remember the error by ourselves,
125
126
// and later check again whether ErrSizeMismatch or ErrHashMismatch occurs during the Save operation
126
- func (r * hashingReader ) recordError (n int , err error ) ( int , error ) {
127
+ func (r * hashingReader ) recordError (err error ) error {
127
128
r .lastError = err
128
- return n , err
129
+ return err
129
130
}
130
131
131
132
func (r * hashingReader ) Read (b []byte ) (int , error ) {
@@ -135,22 +136,22 @@ func (r *hashingReader) Read(b []byte) (int, error) {
135
136
r .currentSize += int64 (n )
136
137
wn , werr := r .hash .Write (b [:n ])
137
138
if wn != n || werr != nil {
138
- return r .recordError (n , werr )
139
+ return n , r .recordError (werr )
139
140
}
140
141
}
141
142
142
143
if errors .Is (err , io .EOF ) || r .currentSize >= r .expectedSize {
143
144
if r .currentSize != r .expectedSize {
144
- return r .recordError (n , ErrSizeMismatch )
145
+ return n , r .recordError (ErrSizeMismatch )
145
146
}
146
147
147
148
shaStr := hex .EncodeToString (r .hash .Sum (nil ))
148
149
if shaStr != r .expectedHash {
149
- return r .recordError (n , ErrHashMismatch )
150
+ return n , r .recordError (ErrHashMismatch )
150
151
}
151
152
}
152
153
153
- return r .recordError (n , err )
154
+ return n , r .recordError (err )
154
155
}
155
156
156
157
func newHashingReader (expectedSize int64 , expectedHash string , reader io.Reader ) * hashingReader {
0 commit comments