2021-08-11 04:01:40 +03:00
// Copyright 2021 The Gitea Authors. All rights reserved.
2022-11-27 21:20:29 +03:00
// SPDX-License-Identifier: MIT
2021-08-11 04:01:40 +03:00
package repo
import (
"fmt"
"net/http"
"code.gitea.io/gitea/modules/context"
"code.gitea.io/gitea/modules/git"
api "code.gitea.io/gitea/modules/structs"
2022-12-29 05:57:15 +03:00
"code.gitea.io/gitea/services/convert"
2021-08-11 04:01:40 +03:00
)
// GetNote Get a note corresponding to a single commit from a repository
func GetNote ( ctx * context . APIContext ) {
// swagger:operation GET /repos/{owner}/{repo}/git/notes/{sha} repository repoGetNote
// ---
// summary: Get a note corresponding to a single commit 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: sha
// in: path
// description: a git ref or commit sha
// type: string
// required: true
// responses:
// "200":
// "$ref": "#/responses/Note"
// "422":
// "$ref": "#/responses/validationError"
// "404":
// "$ref": "#/responses/notFound"
sha := ctx . Params ( ":sha" )
2022-09-04 13:47:56 +03:00
if ! git . IsValidRefPattern ( sha ) {
2021-08-11 04:01:40 +03:00
ctx . Error ( http . StatusUnprocessableEntity , "no valid ref or sha" , fmt . Sprintf ( "no valid ref or sha: %s" , sha ) )
return
}
getNote ( ctx , sha )
}
func getNote ( ctx * context . APIContext , identifier string ) {
2022-04-21 18:17:57 +03:00
if ctx . Repo . GitRepo == nil {
ctx . InternalServerError ( fmt . Errorf ( "no open git repo" ) )
2021-08-11 04:01:40 +03:00
return
}
2022-04-21 18:17:57 +03:00
2023-03-08 15:21:23 +03:00
commitSHA , err := ctx . Repo . GitRepo . ConvertToSHA1 ( identifier )
if err != nil {
if git . IsErrNotExist ( err ) {
ctx . NotFound ( err )
} else {
ctx . Error ( http . StatusInternalServerError , "ConvertToSHA1" , err )
}
return
}
2021-08-11 04:01:40 +03:00
var note git . Note
2023-03-08 15:21:23 +03:00
if err := git . GetNote ( ctx , ctx . Repo . GitRepo , commitSHA . String ( ) , & note ) ; err != nil {
2021-08-11 04:01:40 +03:00
if git . IsErrNotExist ( err ) {
ctx . NotFound ( identifier )
return
}
ctx . Error ( http . StatusInternalServerError , "GetNote" , err )
return
}
2023-05-09 04:06:05 +03:00
cmt , err := convert . ToCommit ( ctx , ctx . Repo . Repository , ctx . Repo . GitRepo , note . Commit , nil , convert . ToCommitOptions { Stat : true } )
2021-08-11 04:01:40 +03:00
if err != nil {
ctx . Error ( http . StatusInternalServerError , "ToCommit" , err )
return
}
apiNote := api . Note { Message : string ( note . Message ) , Commit : cmt }
ctx . JSON ( http . StatusOK , apiNote )
}