GetFile api
This commit is contained in:
		
							parent
							
								
									340a4595dd
								
							
						
					
					
						commit
						a0f9197b45
					
				
					 6 changed files with 73 additions and 26 deletions
				
			
		|  | @ -183,6 +183,7 @@ func runWeb(*cli.Context) { | |||
| 				m.Group("/:username/:reponame", func() { | ||||
| 					m.Combo("/hooks").Get(v1.ListRepoHooks).Post(bind(v1.CreateRepoHookForm{}), v1.CreateRepoHook) | ||||
| 					m.Patch("/hooks/:id:int", bind(v1.EditRepoHookForm{}), v1.EditRepoHook) | ||||
| 					m.Get("/raw/*", middleware.RepoRef(), v1.GetRepoRawFile) | ||||
| 				}, middleware.ApiRepoAssignment(), middleware.ApiReqToken()) | ||||
| 			}) | ||||
| 
 | ||||
|  |  | |||
|  | @ -33,11 +33,17 @@ import ( | |||
| 	"github.com/nfnt/resize" | ||||
| 
 | ||||
| 	"github.com/gogits/gogs/modules/log" | ||||
| 	"github.com/gogits/gogs/modules/setting" | ||||
| ) | ||||
| 
 | ||||
| var ( | ||||
| 	gravatar = "http://www.gravatar.com/avatar" | ||||
| ) | ||||
| var gravatarSource string | ||||
| 
 | ||||
| func init() { | ||||
| 	gravatarSource = setting.GravatarSource | ||||
| 	if !strings.HasPrefix(gravatarSource, "http:") { | ||||
| 		gravatarSource = "http:" + gravatarSource | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // hash email to md5 string
 | ||||
| // keep this func in order to make this package indenpent
 | ||||
|  | @ -121,7 +127,7 @@ func (this *Avatar) Encode(wr io.Writer, size int) (err error) { | |||
| 
 | ||||
| // get image from gravatar.com
 | ||||
| func (this *Avatar) Update() { | ||||
| 	thunder.Fetch(gravatar+"/"+this.Hash+"?"+this.reqParams, | ||||
| 	thunder.Fetch(gravatarSource+this.Hash+"?"+this.reqParams, | ||||
| 		this.imagePath) | ||||
| } | ||||
| 
 | ||||
|  | @ -129,7 +135,7 @@ func (this *Avatar) UpdateTimeout(timeout time.Duration) (err error) { | |||
| 	select { | ||||
| 	case <-time.After(timeout): | ||||
| 		err = fmt.Errorf("get gravatar image %s timeout", this.Hash) | ||||
| 	case err = <-thunder.GoFetch(gravatar+"/"+this.Hash+"?"+this.reqParams, | ||||
| 	case err = <-thunder.GoFetch(gravatarSource+this.Hash+"?"+this.reqParams, | ||||
| 		this.imagePath): | ||||
| 	} | ||||
| 	return err | ||||
|  |  | |||
|  | @ -122,6 +122,17 @@ func RepoRef() macaron.Handler { | |||
| 			err     error | ||||
| 		) | ||||
| 
 | ||||
| 		// For API calls.
 | ||||
| 		if ctx.Repo.GitRepo == nil { | ||||
| 			repoPath := models.RepoPath(ctx.Repo.Owner.Name, ctx.Repo.Repository.Name) | ||||
| 			gitRepo, err := git.OpenRepository(repoPath) | ||||
| 			if err != nil { | ||||
| 				ctx.Handle(500, "RepoRef Invalid repo "+repoPath, err) | ||||
| 				return | ||||
| 			} | ||||
| 			ctx.Repo.GitRepo = gitRepo | ||||
| 		} | ||||
| 
 | ||||
| 		// Get default branch.
 | ||||
| 		if len(ctx.Params("*")) == 0 { | ||||
| 			refName = ctx.Repo.Repository.DefaultBranch | ||||
|  |  | |||
|  | @ -15,6 +15,7 @@ import ( | |||
| 
 | ||||
| 	"github.com/gogits/gogs/models" | ||||
| 	"github.com/gogits/gogs/modules/auth" | ||||
| 	"github.com/gogits/gogs/modules/base" | ||||
| 	"github.com/gogits/gogs/modules/log" | ||||
| 	"github.com/gogits/gogs/modules/middleware" | ||||
| 	"github.com/gogits/gogs/modules/setting" | ||||
|  | @ -161,20 +162,14 @@ func Migrate(ctx *middleware.Context, form auth.MigrateRepoForm) { | |||
| func ListMyRepos(ctx *middleware.Context) { | ||||
| 	ownRepos, err := models.GetRepositories(ctx.User.Id, true) | ||||
| 	if err != nil { | ||||
| 		ctx.JSON(500, map[string]interface{}{ | ||||
| 			"ok":    false, | ||||
| 			"error": err.Error(), | ||||
| 		}) | ||||
| 		ctx.JSON(500, &base.ApiJsonErr{"GetRepositories: " + err.Error(), base.DOC_URL}) | ||||
| 		return | ||||
| 	} | ||||
| 	numOwnRepos := len(ownRepos) | ||||
| 
 | ||||
| 	collaRepos, err := models.GetCollaborativeRepos(ctx.User.Name) | ||||
| 	if err != nil { | ||||
| 		ctx.JSON(500, map[string]interface{}{ | ||||
| 			"ok":    false, | ||||
| 			"error": err.Error(), | ||||
| 		}) | ||||
| 		ctx.JSON(500, &base.ApiJsonErr{"GetCollaborativeRepos: " + err.Error(), base.DOC_URL}) | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
|  | @ -204,10 +199,7 @@ func ListMyRepos(ctx *middleware.Context) { | |||
| 	} | ||||
| 	for i := range collaRepos { | ||||
| 		if err = collaRepos[i].GetOwner(); err != nil { | ||||
| 			ctx.JSON(500, map[string]interface{}{ | ||||
| 				"ok":    false, | ||||
| 				"error": err.Error(), | ||||
| 			}) | ||||
| 			ctx.JSON(500, &base.ApiJsonErr{"GetOwner: " + err.Error(), base.DOC_URL}) | ||||
| 			return | ||||
| 		} | ||||
| 		j := i + numOwnRepos | ||||
|  |  | |||
|  | @ -3,3 +3,30 @@ | |||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package v1 | ||||
| 
 | ||||
| import ( | ||||
| 	"github.com/gogits/gogs/modules/base" | ||||
| 	"github.com/gogits/gogs/modules/git" | ||||
| 	"github.com/gogits/gogs/modules/middleware" | ||||
| 	"github.com/gogits/gogs/routers/repo" | ||||
| ) | ||||
| 
 | ||||
| func GetRepoRawFile(ctx *middleware.Context) { | ||||
| 	if ctx.Repo.Repository.IsPrivate && !ctx.Repo.HasAccess { | ||||
| 		ctx.Error(404) | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	blob, err := ctx.Repo.Commit.GetBlobByPath(ctx.Repo.TreeName) | ||||
| 	if err != nil { | ||||
| 		if err == git.ErrNotExist { | ||||
| 			ctx.Error(404) | ||||
| 		} else { | ||||
| 			ctx.JSON(500, &base.ApiJsonErr{"GetBlobByPath: " + err.Error(), base.DOC_URL}) | ||||
| 		} | ||||
| 		return | ||||
| 	} | ||||
| 	if err = repo.ServeBlob(ctx, blob); err != nil { | ||||
| 		ctx.JSON(500, &base.ApiJsonErr{"ServeBlob: " + err.Error(), base.DOC_URL}) | ||||
| 	} | ||||
| } | ||||
|  |  | |||
|  | @ -9,20 +9,14 @@ import ( | |||
| 	"path" | ||||
| 
 | ||||
| 	"github.com/gogits/gogs/modules/base" | ||||
| 	"github.com/gogits/gogs/modules/git" | ||||
| 	"github.com/gogits/gogs/modules/middleware" | ||||
| ) | ||||
| 
 | ||||
| func SingleDownload(ctx *middleware.Context) { | ||||
| 	blob, err := ctx.Repo.Commit.GetBlobByPath(ctx.Repo.TreeName) | ||||
| 	if err != nil { | ||||
| 		ctx.Handle(500, "GetBlobByPath", err) | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| func ServeBlob(ctx *middleware.Context, blob *git.Blob) error { | ||||
| 	dataRc, err := blob.Data() | ||||
| 	if err != nil { | ||||
| 		ctx.Handle(500, "Data", err) | ||||
| 		return | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	buf := make([]byte, 1024) | ||||
|  | @ -40,4 +34,20 @@ func SingleDownload(ctx *middleware.Context) { | |||
| 	} | ||||
| 	ctx.Resp.Write(buf) | ||||
| 	io.Copy(ctx.Resp, dataRc) | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func SingleDownload(ctx *middleware.Context) { | ||||
| 	blob, err := ctx.Repo.Commit.GetBlobByPath(ctx.Repo.TreeName) | ||||
| 	if err != nil { | ||||
| 		if err == git.ErrNotExist { | ||||
| 			ctx.Handle(404, "GetBlobByPath", nil) | ||||
| 		} else { | ||||
| 			ctx.Handle(500, "GetBlobByPath", err) | ||||
| 		} | ||||
| 		return | ||||
| 	} | ||||
| 	if err = ServeBlob(ctx, blob); err != nil { | ||||
| 		ctx.Handle(500, "ServeBlob", err) | ||||
| 	} | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue