2019-05-24 10:52:05 +03:00
// Copyright 2019 The Gitea 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 git
import (
"io/ioutil"
2019-09-12 04:14:41 +03:00
2020-03-17 19:19:58 +03:00
"github.com/go-git/go-git/v5/plumbing/object"
2019-05-24 10:52:05 +03:00
)
// NotesRef is the git ref where Gitea will look for git-notes data.
// The value ("refs/notes/commits") is the default ref used by git-notes.
const NotesRef = "refs/notes/commits"
// Note stores information about a note created using git-notes.
type Note struct {
Message [ ] byte
Commit * Commit
}
// GetNote retrieves the git-notes data for a given commit.
func GetNote ( repo * Repository , commitID string , note * Note ) error {
notes , err := repo . GetCommit ( NotesRef )
if err != nil {
return err
}
2019-09-12 04:14:41 +03:00
remainingCommitID := commitID
path := ""
currentTree := notes . Tree . gogitTree
var file * object . File
for len ( remainingCommitID ) > 2 {
file , err = currentTree . File ( remainingCommitID )
if err == nil {
path += remainingCommitID
break
}
if err == object . ErrFileNotFound {
currentTree , err = currentTree . Tree ( remainingCommitID [ 0 : 2 ] )
path += remainingCommitID [ 0 : 2 ] + "/"
remainingCommitID = remainingCommitID [ 2 : ]
}
if err != nil {
return err
}
2019-05-24 10:52:05 +03:00
}
2019-09-12 04:14:41 +03:00
blob := file . Blob
dataRc , err := blob . Reader ( )
2019-05-24 10:52:05 +03:00
if err != nil {
return err
}
defer dataRc . Close ( )
d , err := ioutil . ReadAll ( dataRc )
if err != nil {
return err
}
note . Message = d
2019-07-02 05:15:14 +03:00
commitNodeIndex , commitGraphFile := repo . CommitNodeIndex ( )
if commitGraphFile != nil {
defer commitGraphFile . Close ( )
}
2019-09-12 04:14:41 +03:00
commitNode , err := commitNodeIndex . Get ( notes . ID )
2019-07-02 05:15:14 +03:00
if err != nil {
2019-09-12 04:14:41 +03:00
return err
2019-07-02 05:15:14 +03:00
}
2019-09-12 04:14:41 +03:00
lastCommits , err := getLastCommitForPaths ( commitNode , "" , [ ] string { path } )
2019-05-24 10:52:05 +03:00
if err != nil {
return err
}
2019-09-12 04:14:41 +03:00
note . Commit = convertCommit ( lastCommits [ path ] )
2019-05-24 10:52:05 +03:00
return nil
}