mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-12-01 16:38:37 +00:00
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
|
@ -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