forked from forgejo/forgejo
Rewrite of the LFS server (#15523)
* Restructured code. Moved static checks out of loop. * Restructured batch api. Add support for individual errors. * Let router decide if LFS is enabled. * Renamed methods. * Return correct status from verify handler. * Unified media type check in router. * Changed error code according to spec. * Moved checks into router. * Removed invalid v1 api methods. * Unified methods. * Display better error messages. * Added size parameter. Create meta object on upload. * Use object error on invalid size. * Skip upload if object exists. * Moved methods. * Suppress fields in response. * Changed error on accept. * Added tests. * Use ErrorResponse object. * Test against message property. * Add support for the old invalid lfs client. * Fixed the check because MinIO wraps the error. * Use individual repositories. Co-authored-by: 6543 <6543@obermui.de> Co-authored-by: Lauris BH <lauris@nix.lv>
This commit is contained in:
parent
683cfe39ef
commit
ee5e1c4a88
7 changed files with 759 additions and 439 deletions
|
@ -17,25 +17,16 @@ import (
|
|||
"code.gitea.io/gitea/modules/setting"
|
||||
"code.gitea.io/gitea/routers/routes"
|
||||
|
||||
jsoniter "github.com/json-iterator/go"
|
||||
gzipp "github.com/klauspost/compress/gzip"
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
var lfsID = int64(20000)
|
||||
|
||||
func storeObjectInRepo(t *testing.T, repositoryID int64, content *[]byte) string {
|
||||
pointer, err := lfs.GeneratePointer(bytes.NewReader(*content))
|
||||
assert.NoError(t, err)
|
||||
var lfsMetaObject *models.LFSMetaObject
|
||||
|
||||
if setting.Database.UsePostgreSQL {
|
||||
lfsMetaObject = &models.LFSMetaObject{ID: lfsID, Pointer: pointer, RepositoryID: repositoryID}
|
||||
} else {
|
||||
lfsMetaObject = &models.LFSMetaObject{Pointer: pointer, RepositoryID: repositoryID}
|
||||
}
|
||||
|
||||
lfsID++
|
||||
lfsMetaObject, err = models.NewLFSMetaObject(lfsMetaObject)
|
||||
_, err = models.NewLFSMetaObject(&models.LFSMetaObject{Pointer: pointer, RepositoryID: repositoryID})
|
||||
assert.NoError(t, err)
|
||||
contentStore := lfs.NewContentStore()
|
||||
exist, err := contentStore.Exists(pointer)
|
||||
|
@ -210,7 +201,14 @@ func TestGetLFSRange(t *testing.T) {
|
|||
"Range": []string{tt.in},
|
||||
}
|
||||
resp := storeAndGetLfs(t, &content, &h, tt.status)
|
||||
assert.Equal(t, tt.out, resp.Body.String())
|
||||
if tt.status == http.StatusPartialContent || tt.status == http.StatusOK {
|
||||
assert.Equal(t, tt.out, resp.Body.String())
|
||||
} else {
|
||||
var er lfs.ErrorResponse
|
||||
err := jsoniter.Unmarshal(resp.Body.Bytes(), &er)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, tt.out, er.Message)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue