Show git-notes (#6984)

* Show git-notes

* Make git-notes heading text localizable

* Refactor git-notes data fetching to a separate function

* Display the author and time of git notes

* Move note bubble inside the commit bubble

* Revert "Move note bubble inside the commit bubble"

This reverts commit c0951fe0e3.

* Add test for git-notes

* testing ui

* Polish CSS

* Apply suggestions from code review

Co-Authored-By: Lauris BH <lauris@nix.lv>
This commit is contained in:
Vladimir Panteleev
2019-05-24 10:52:05 +03:00
committed by Lauris BH
parent d5a98a2969
commit a98e085031
13 changed files with 146 additions and 1 deletions

60
modules/git/notes.go Normal file
View File

@ -0,0 +1,60 @@
// 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"
"gopkg.in/src-d/go-git.v4/plumbing"
)
// 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
}
entry, err := notes.GetTreeEntryByPath(commitID)
if err != nil {
return err
}
blob := entry.Blob()
dataRc, err := blob.DataAsync()
if err != nil {
return err
}
defer dataRc.Close()
d, err := ioutil.ReadAll(dataRc)
if err != nil {
return err
}
note.Message = d
commit, err := repo.gogitRepo.CommitObject(plumbing.Hash(notes.ID))
if err != nil {
return err
}
lastCommits, err := getLastCommitForPaths(commit, "", []string{commitID})
if err != nil {
return err
}
note.Commit = convertCommit(lastCommits[commitID])
return nil
}

24
modules/git/notes_test.go Normal file
View File

@ -0,0 +1,24 @@
// 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 (
"path/filepath"
"testing"
"github.com/stretchr/testify/assert"
)
func TestGetNotes(t *testing.T) {
bareRepo1Path := filepath.Join(testReposDir, "repo1_bare")
bareRepo1, err := OpenRepository(bareRepo1Path)
assert.NoError(t, err)
note := Note{}
err = GetNote(bareRepo1, "95bb4d39648ee7e325106df01a621c530863a653", &note)
assert.NoError(t, err)
assert.Equal(t, []byte("Note contents\n"), note.Message)
assert.Equal(t, "Vladimir Panteleev", note.Commit.Author.Name)
}

View File

@ -19,13 +19,14 @@ func TestRepository_GetRefs(t *testing.T) {
refs, err := bareRepo1.GetRefs()
assert.NoError(t, err)
assert.Len(t, refs, 4)
assert.Len(t, refs, 5)
expectedRefs := []string{
BranchPrefix + "branch1",
BranchPrefix + "branch2",
BranchPrefix + "master",
TagPrefix + "test",
NotesRef,
}
for _, ref := range refs {

View File

@ -0,0 +1,4 @@
x<01><>M
<EFBFBD>0F]<5D><14><>B<EFBFBD>&&m"<22>@\<5C>Of<4F>6<EFBFBD>HG<48><47><EFBFBD><EFBFBD>
~˷x<CBB7><78>y<1C><><EFBFBD><EFBFBD> <20><19>?[<5B><><EFBFBD><EFBFBD>B<EFBFBD>&
H<b<>yߙNGt<47><74>ڨ<EFBFBD><DAA8>~.<2E>"<22>1x<>Ix`<60><><EFBFBD><EFBFBD><EFBFBD>&=㚸,}<7D><>{<7B>X<EFBFBD><58><EFBFBD><EFBFBD><EFBFBD> <09>p<><70>)<29><><EFBFBD>j<7F>}^ 1AZ<41><5A><0E><>3<EFBFBD>,<2C><><01><>I0

View File

@ -0,0 +1 @@
ca6b5ddf303169a72d2a2971acde4f6eea194e5c