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 c0951fe0e3b4dea38064515546b1825c1bcf19e1. * Add test for git-notes * testing ui * Polish CSS * Apply suggestions from code review Co-Authored-By: Lauris BH <lauris@nix.lv>tokarchuk/v1.17
parent
d5a98a2969
commit
a98e085031
@ -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 |
||||
} |
@ -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", ¬e) |
||||
assert.NoError(t, err) |
||||
assert.Equal(t, []byte("Note contents\n"), note.Message) |
||||
assert.Equal(t, "Vladimir Panteleev", note.Commit.Author.Name) |
||||
} |
Binary file not shown.
Binary file not shown.
@ -0,0 +1 @@ |
||||
ca6b5ddf303169a72d2a2971acde4f6eea194e5c |
Loading…
Reference in new issue