Introducing CodeComments as type for map[string]map[int64][]*Comment
Other minor code improvements Signed-off-by: Jonas Franz <info@jonasfranz.software>
This commit is contained in:
parent
cb29fdb201
commit
021f0288c0
|
@ -193,6 +193,7 @@ func (c *Comment) HTMLURL() string {
|
||||||
}
|
}
|
||||||
if c.Review == nil {
|
if c.Review == nil {
|
||||||
if err := c.LoadReview(); err != nil {
|
if err := c.LoadReview(); err != nil {
|
||||||
|
log.Warn("LoadReview(%d): %v", c.ReviewID, err)
|
||||||
return fmt.Sprintf("%s/files#%s", c.Issue.HTMLURL(), c.HashTag())
|
return fmt.Sprintf("%s/files#%s", c.Issue.HTMLURL(), c.HashTag())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1061,12 +1062,15 @@ func DeleteComment(doer *User, comment *Comment) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func fetchCodeComments(e Engine, issue *Issue, currentUser *User) (map[string]map[int64][]*Comment, error) {
|
// CodeComments represents comments on code by using this structure: FILENAME -> LINE (+ == proposed; - == previous) -> COMMENTS
|
||||||
|
type CodeComments map[string]map[int64][]*Comment
|
||||||
|
|
||||||
|
func fetchCodeComments(e Engine, issue *Issue, currentUser *User) (CodeComments, error) {
|
||||||
return fetchCodeCommentsByReview(e, issue, currentUser, nil)
|
return fetchCodeCommentsByReview(e, issue, currentUser, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
func fetchCodeCommentsByReview(e Engine, issue *Issue, currentUser *User, review *Review) (map[string]map[int64][]*Comment, error) {
|
func fetchCodeCommentsByReview(e Engine, issue *Issue, currentUser *User, review *Review) (CodeComments, error) {
|
||||||
pathToLineToComment := make(map[string]map[int64][]*Comment)
|
pathToLineToComment := make(CodeComments)
|
||||||
if review == nil {
|
if review == nil {
|
||||||
review = &Review{ID: 0}
|
review = &Review{ID: 0}
|
||||||
}
|
}
|
||||||
|
@ -1126,6 +1130,6 @@ func fetchCodeCommentsByReview(e Engine, issue *Issue, currentUser *User, review
|
||||||
}
|
}
|
||||||
|
|
||||||
// FetchCodeComments will return a 2d-map: ["Path"]["Line"] = Comments at line
|
// FetchCodeComments will return a 2d-map: ["Path"]["Line"] = Comments at line
|
||||||
func FetchCodeComments(issue *Issue, currentUser *User) (map[string]map[int64][]*Comment, error) {
|
func FetchCodeComments(issue *Issue, currentUser *User) (CodeComments, error) {
|
||||||
return fetchCodeComments(x, issue, currentUser)
|
return fetchCodeComments(x, issue, currentUser)
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,7 +60,7 @@ type Review struct {
|
||||||
UpdatedUnix util.TimeStamp `xorm:"INDEX updated"`
|
UpdatedUnix util.TimeStamp `xorm:"INDEX updated"`
|
||||||
|
|
||||||
// CodeComments are the initial code comments of the review
|
// CodeComments are the initial code comments of the review
|
||||||
CodeComments map[string]map[int64][]*Comment `xorm:"-"`
|
CodeComments CodeComments `xorm:"-"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *Review) loadCodeComments(e Engine) (err error) {
|
func (r *Review) loadCodeComments(e Engine) (err error) {
|
||||||
|
|
|
@ -15,7 +15,6 @@ import (
|
||||||
"mime"
|
"mime"
|
||||||
"net/url"
|
"net/url"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"reflect"
|
|
||||||
"runtime"
|
"runtime"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
@ -190,7 +189,6 @@ func NewFuncMap() []template.FuncMap {
|
||||||
"DefaultTheme": func() string {
|
"DefaultTheme": func() string {
|
||||||
return setting.UI.DefaultTheme
|
return setting.UI.DefaultTheme
|
||||||
},
|
},
|
||||||
"mul": func(first int, second int64) int64 { return second * int64(first) },
|
|
||||||
"dict": func(values ...interface{}) (map[string]interface{}, error) {
|
"dict": func(values ...interface{}) (map[string]interface{}, error) {
|
||||||
if len(values) == 0 {
|
if len(values) == 0 {
|
||||||
return nil, errors.New("invalid dict call")
|
return nil, errors.New("invalid dict call")
|
||||||
|
@ -199,24 +197,21 @@ func NewFuncMap() []template.FuncMap {
|
||||||
dict := make(map[string]interface{})
|
dict := make(map[string]interface{})
|
||||||
|
|
||||||
for i := 0; i < len(values); i++ {
|
for i := 0; i < len(values); i++ {
|
||||||
key, isset := values[i].(string)
|
switch key := values[i].(type) {
|
||||||
if !isset {
|
case string:
|
||||||
if reflect.TypeOf(values[i]).Kind() == reflect.Map {
|
|
||||||
m := values[i].(map[string]interface{})
|
|
||||||
for i, v := range m {
|
|
||||||
dict[i] = v
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return nil, errors.New("dict values must be maps")
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
i++
|
i++
|
||||||
if i == len(values) {
|
if i == len(values) {
|
||||||
return nil, errors.New("specify the key for non array values")
|
return nil, errors.New("specify the key for non array values")
|
||||||
}
|
}
|
||||||
dict[key] = values[i]
|
dict[key] = values[i]
|
||||||
|
case map[string]interface{}:
|
||||||
|
m := values[i].(map[string]interface{})
|
||||||
|
for i, v := range m {
|
||||||
|
dict[i] = v
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
return nil, errors.New("dict values must be maps")
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
return dict, nil
|
return dict, nil
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in New Issue
Block a user