diff options
author | Dennis Chen <barracks510@gmail.com> | 2017-01-28 14:59:21 -0800 |
---|---|---|
committer | 无闻 <u@gogs.io> | 2017-01-28 17:59:21 -0500 |
commit | c98aa0e8950393ac43dc66e8de85973d9cd029ef (patch) | |
tree | 948b0130f336bc74ba2cb6492f82a7ecb7079637 /routers/api/v1/repo/repo.go | |
parent | 263203ec28584d5c9c671257016b510783ef7c9f (diff) |
api: display repository forks (#3252)
Lists the forks of a repository at the /:user/:repo/forks endpoint.
Signed-off-by: Dennis Chen <barracks510@gmail.com>
Diffstat (limited to 'routers/api/v1/repo/repo.go')
-rw-r--r-- | routers/api/v1/repo/repo.go | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/routers/api/v1/repo/repo.go b/routers/api/v1/repo/repo.go index e36f18b0..76d63543 100644 --- a/routers/api/v1/repo/repo.go +++ b/routers/api/v1/repo/repo.go @@ -297,3 +297,26 @@ func Delete(ctx *context.APIContext) { log.Trace("Repository deleted: %s/%s", owner.Name, repo.Name) ctx.Status(204) } + +func ListForks(ctx *context.APIContext) { + forks, err := ctx.Repo.Repository.GetForks() + if err != nil { + ctx.Error(500, "GetForks", err) + return + } + + apiForks := make([]*api.Repository, len(forks)) + for i := range forks { + if err := forks[i].GetOwner(); err != nil { + ctx.Error(500, "GetOwner", err) + return + } + apiForks[i] = forks[i].APIFormat(&api.Permission{ + Admin: ctx.User.IsAdminOfRepo(forks[i]), + Push: ctx.User.IsWriterOfRepo(forks[i]), + Pull: true, + }) + } + + ctx.JSON(200, &apiForks) +} |