2014-11-17 04:27:04 +03:00
// Copyright 2014 The Gogs Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
2015-12-05 01:16:42 +03:00
package repo
2014-11-17 05:32:26 +03:00
import (
2016-11-10 19:24:48 +03:00
"code.gitea.io/git"
2015-12-10 04:46:05 +03:00
2016-11-10 19:24:48 +03:00
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/context"
"code.gitea.io/gitea/routers/repo"
2014-11-17 05:32:26 +03:00
)
2016-11-24 10:04:31 +03:00
// GetRawFile get a file by path on a repository
2016-03-14 01:49:16 +03:00
func GetRawFile ( ctx * context . APIContext ) {
2017-11-13 10:02:25 +03:00
// swagger:operation GET /repos/{owner}/{repo}/raw/{filepath} repository repoGetRawFile
// ---
// summary: Get a file from a repository
// produces:
// - application/json
// parameters:
// - name: owner
// in: path
// description: owner of the repo
// type: string
// required: true
// - name: repo
// in: path
// description: name of the repo
// type: string
// required: true
// - name: filepath
// in: path
// description: filepath of the file to get
// type: string
// required: true
// responses:
// 200:
2015-02-16 13:51:56 +03:00
if ! ctx . Repo . HasAccess ( ) {
2016-03-14 01:49:16 +03:00
ctx . Status ( 404 )
2014-11-17 05:32:26 +03:00
return
}
2017-06-11 05:57:28 +03:00
if ctx . Repo . Repository . IsBare {
ctx . Status ( 404 )
return
}
2016-08-25 07:35:03 +03:00
blob , err := ctx . Repo . Commit . GetBlobByPath ( ctx . Repo . TreePath )
2014-11-17 05:32:26 +03:00
if err != nil {
2015-12-10 04:46:05 +03:00
if git . IsErrNotExist ( err ) {
2016-03-14 01:49:16 +03:00
ctx . Status ( 404 )
2014-11-17 05:32:26 +03:00
} else {
2016-03-14 01:49:16 +03:00
ctx . Error ( 500 , "GetBlobByPath" , err )
2014-11-17 05:32:26 +03:00
}
return
}
2016-03-14 01:49:16 +03:00
if err = repo . ServeBlob ( ctx . Context , blob ) ; err != nil {
ctx . Error ( 500 , "ServeBlob" , err )
2014-11-17 05:32:26 +03:00
}
}
2015-09-02 16:54:35 +03:00
2016-11-24 10:04:31 +03:00
// GetArchive get archive of a repository
2016-03-14 01:49:16 +03:00
func GetArchive ( ctx * context . APIContext ) {
2017-11-13 10:02:25 +03:00
// swagger:operation GET /repos/{owner}/{repo}/archive/{filepath} repository repoGetArchive
// ---
// summary: Get an archive of a repository
// produces:
// - application/json
// parameters:
// - name: owner
// in: path
// description: owner of the repo
// type: string
// required: true
// - name: repo
// in: path
// description: name of the repo
// type: string
// required: true
// - name: archive
// in: path
// description: archive to download, consisting of a git reference and archive
// type: string
// required: true
// responses:
// 200:
2015-09-02 16:54:35 +03:00
repoPath := models . RepoPath ( ctx . Params ( ":username" ) , ctx . Params ( ":reponame" ) )
gitRepo , err := git . OpenRepository ( repoPath )
if err != nil {
2016-03-14 01:49:16 +03:00
ctx . Error ( 500 , "OpenRepository" , err )
2015-09-02 16:54:35 +03:00
return
}
ctx . Repo . GitRepo = gitRepo
2016-03-14 01:49:16 +03:00
repo . Download ( ctx . Context )
2015-09-02 16:54:35 +03:00
}
2016-08-31 02:18:40 +03:00
2016-11-24 10:04:31 +03:00
// GetEditorconfig get editor config of a repository
2016-08-31 02:18:40 +03:00
func GetEditorconfig ( ctx * context . APIContext ) {
2017-11-13 10:02:25 +03:00
// swagger:operation GET /repos/{owner}/{repo}/editorconfig/{filepath} repository repoGetEditorConfig
// ---
// summary: Get the EditorConfig definitions of a file in a repository
// produces:
// - application/json
// parameters:
// - name: owner
// in: path
// description: owner of the repo
// type: string
// required: true
// - name: repo
// in: path
// description: name of the repo
// type: string
// required: true
// - name: filepath
// in: path
// description: filepath of file to get
// type: string
// required: true
// responses:
// 200:
2016-08-31 02:18:40 +03:00
ec , err := ctx . Repo . GetEditorconfig ( )
if err != nil {
if git . IsErrNotExist ( err ) {
ctx . Error ( 404 , "GetEditorconfig" , err )
} else {
ctx . Error ( 500 , "GetEditorconfig" , err )
}
return
}
fileName := ctx . Params ( "filename" )
def := ec . GetDefinitionForFilename ( fileName )
if def == nil {
ctx . Error ( 404 , "GetDefinitionForFilename" , err )
return
}
ctx . JSON ( 200 , def )
}