Add size to Save function (#15264)
Fix #15253 Signed-off-by: Andrew Thornton <art27@cantab.net>
This commit is contained in:
		
							parent
							
								
									3cc7d27b6f
								
							
						
					
					
						commit
						0bb8bd8190
					
				
					 7 changed files with 17 additions and 10 deletions
				
			
		|  | @ -122,7 +122,7 @@ func TestGetAttachment(t *testing.T) { | ||||||
| 		t.Run(tc.name, func(t *testing.T) { | 		t.Run(tc.name, func(t *testing.T) { | ||||||
| 			//Write empty file to be available for response
 | 			//Write empty file to be available for response
 | ||||||
| 			if tc.createFile { | 			if tc.createFile { | ||||||
| 				_, err := storage.Attachments.Save(models.AttachmentRelativePath(tc.uuid), strings.NewReader("hello world")) | 				_, err := storage.Attachments.Save(models.AttachmentRelativePath(tc.uuid), strings.NewReader("hello world"), -1) | ||||||
| 				assert.NoError(t, err) | 				assert.NoError(t, err) | ||||||
| 			} | 			} | ||||||
| 			//Actual test
 | 			//Actual test
 | ||||||
|  |  | ||||||
|  | @ -85,7 +85,7 @@ func (a *Attachment) LinkedRepository() (*Repository, UnitType, error) { | ||||||
| func NewAttachment(attach *Attachment, buf []byte, file io.Reader) (_ *Attachment, err error) { | func NewAttachment(attach *Attachment, buf []byte, file io.Reader) (_ *Attachment, err error) { | ||||||
| 	attach.UUID = gouuid.New().String() | 	attach.UUID = gouuid.New().String() | ||||||
| 
 | 
 | ||||||
| 	size, err := storage.Attachments.Save(attach.RelativePath(), io.MultiReader(bytes.NewReader(buf), file)) | 	size, err := storage.Attachments.Save(attach.RelativePath(), io.MultiReader(bytes.NewReader(buf), file), -1) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, fmt.Errorf("Create: %v", err) | 		return nil, fmt.Errorf("Create: %v", err) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | @ -82,7 +82,7 @@ func (s *ContentStore) Put(meta *models.LFSMetaObject, r io.Reader) error { | ||||||
| 
 | 
 | ||||||
| 	// now pass the wrapped reader to Save - if there is a size mismatch or hash mismatch then
 | 	// now pass the wrapped reader to Save - if there is a size mismatch or hash mismatch then
 | ||||||
| 	// the errors returned by the newHashingReader should percolate up to here
 | 	// the errors returned by the newHashingReader should percolate up to here
 | ||||||
| 	written, err := s.Save(p, wrappedRd) | 	written, err := s.Save(p, wrappedRd, meta.Size) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		log.Error("Whilst putting LFS OID[%s]: Failed to copy to tmpPath: %s Error: %v", meta.Oid, p, err) | 		log.Error("Whilst putting LFS OID[%s]: Failed to copy to tmpPath: %s Error: %v", meta.Oid, p, err) | ||||||
| 		return err | 		return err | ||||||
|  |  | ||||||
|  | @ -283,7 +283,7 @@ func (g *GiteaLocalUploader) CreateReleases(releases ...*base.Release) error { | ||||||
| 					} | 					} | ||||||
| 				} | 				} | ||||||
| 				defer rc.Close() | 				defer rc.Close() | ||||||
| 				_, err = storage.Attachments.Save(attach.RelativePath(), rc) | 				_, err = storage.Attachments.Save(attach.RelativePath(), rc, int64(*asset.Size)) | ||||||
| 				return err | 				return err | ||||||
| 			}() | 			}() | ||||||
| 			if err != nil { | 			if err != nil { | ||||||
|  |  | ||||||
|  | @ -66,7 +66,7 @@ func (l *LocalStorage) Open(path string) (Object, error) { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Save a file
 | // Save a file
 | ||||||
| func (l *LocalStorage) Save(path string, r io.Reader) (int64, error) { | func (l *LocalStorage) Save(path string, r io.Reader, size int64) (int64, error) { | ||||||
| 	p := filepath.Join(l.dir, path) | 	p := filepath.Join(l.dir, path) | ||||||
| 	if err := os.MkdirAll(filepath.Dir(p), os.ModePerm); err != nil { | 	if err := os.MkdirAll(filepath.Dir(p), os.ModePerm); err != nil { | ||||||
| 		return 0, err | 		return 0, err | ||||||
|  |  | ||||||
|  | @ -131,13 +131,13 @@ func (m *MinioStorage) Open(path string) (Object, error) { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Save save a file to minio
 | // Save save a file to minio
 | ||||||
| func (m *MinioStorage) Save(path string, r io.Reader) (int64, error) { | func (m *MinioStorage) Save(path string, r io.Reader, size int64) (int64, error) { | ||||||
| 	uploadInfo, err := m.client.PutObject( | 	uploadInfo, err := m.client.PutObject( | ||||||
| 		m.ctx, | 		m.ctx, | ||||||
| 		m.bucket, | 		m.bucket, | ||||||
| 		m.buildMinioPath(path), | 		m.buildMinioPath(path), | ||||||
| 		r, | 		r, | ||||||
| 		-1, | 		size, | ||||||
| 		minio.PutObjectOptions{ContentType: "application/octet-stream"}, | 		minio.PutObjectOptions{ContentType: "application/octet-stream"}, | ||||||
| 	) | 	) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|  |  | ||||||
|  | @ -65,7 +65,8 @@ type Object interface { | ||||||
| // ObjectStorage represents an object storage to handle a bucket and files
 | // ObjectStorage represents an object storage to handle a bucket and files
 | ||||||
| type ObjectStorage interface { | type ObjectStorage interface { | ||||||
| 	Open(path string) (Object, error) | 	Open(path string) (Object, error) | ||||||
| 	Save(path string, r io.Reader) (int64, error) | 	// Save store a object, if size is unknown set -1
 | ||||||
|  | 	Save(path string, r io.Reader, size int64) (int64, error) | ||||||
| 	Stat(path string) (os.FileInfo, error) | 	Stat(path string) (os.FileInfo, error) | ||||||
| 	Delete(path string) error | 	Delete(path string) error | ||||||
| 	URL(path, name string) (*url.URL, error) | 	URL(path, name string) (*url.URL, error) | ||||||
|  | @ -80,7 +81,13 @@ func Copy(dstStorage ObjectStorage, dstPath string, srcStorage ObjectStorage, sr | ||||||
| 	} | 	} | ||||||
| 	defer f.Close() | 	defer f.Close() | ||||||
| 
 | 
 | ||||||
| 	return dstStorage.Save(dstPath, f) | 	size := int64(-1) | ||||||
|  | 	fsinfo, err := f.Stat() | ||||||
|  | 	if err == nil { | ||||||
|  | 		size = fsinfo.Size() | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return dstStorage.Save(dstPath, f, size) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // SaveFrom saves data to the ObjectStorage with path p from the callback
 | // SaveFrom saves data to the ObjectStorage with path p from the callback
 | ||||||
|  | @ -94,7 +101,7 @@ func SaveFrom(objStorage ObjectStorage, p string, callback func(w io.Writer) err | ||||||
| 		} | 		} | ||||||
| 	}() | 	}() | ||||||
| 
 | 
 | ||||||
| 	_, err := objStorage.Save(p, pr) | 	_, err := objStorage.Save(p, pr, -1) | ||||||
| 	return err | 	return err | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue