diff --git a/cmd/web.go b/cmd/web.go index 87468ee47..13dfdb9ef 100644 --- a/cmd/web.go +++ b/cmd/web.go @@ -243,6 +243,7 @@ func runWeb(ctx *cli.Context) { m.Get("/raw/*", middleware.RepoRef(), v1.GetRepoRawFile) m.Get("/archive/*", v1.GetRepoArchive) m.Post("/forks", v1.ForkRepo) + m.Get("/commits/:commitId", v1.CommitById) }, middleware.ApiRepoAssignment(), middleware.ApiReqToken()) }) diff --git a/routers/api/v1/repo_commits.go b/routers/api/v1/repo_commits.go new file mode 100644 index 000000000..151d575e4 --- /dev/null +++ b/routers/api/v1/repo_commits.go @@ -0,0 +1,63 @@ +// 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. + +package v1 + +import ( + api "github.com/gogits/go-gogs-client" + + "github.com/gogits/gogs/modules/git" + "github.com/gogits/gogs/models" + "github.com/gogits/gogs/modules/log" + "github.com/gogits/gogs/modules/middleware" +) + +func ToApiSignature(signature *git.Signature) *api.Signature { + return &api.Signature{ + Email: signature.Email, + Name: signature.Name, + When: signature.When, + } +} + +func ToApiCommit(commit *git.Commit) *api.Commit { + return &api.Commit{ + ID: commit.Id.String(), + Author: *ToApiSignature(commit.Author), + Committer: *ToApiSignature(commit.Committer), + CommitMessage: commit.CommitMessage, + } +} + +func convertToGitRepo(repository *models.Repository) (*git.Repository, error) { + repoPath, err := repository.RepoPath() + if err != nil { + return nil, err + } + + gitRepo, err := git.OpenRepository(repoPath) + if err != nil { + return nil, err + } + + return gitRepo, nil +} + +func CommitById(ctx *middleware.Context) { + gitRepo, err := convertToGitRepo(ctx.Repo.Repository) + if err != nil { + log.Error(4, "convertToGitRepo: %v", err) + ctx.Error(500) + return + } + + commit, err := gitRepo.GetCommit(ctx.Params(":commitId")) + if err != nil { + log.Error(4, "GetCommit: %v", err) + ctx.Error(500, err) + return + } + + ctx.JSON(200, ToApiCommit(commit)) +} \ No newline at end of file