forked from x/icebergs
92 lines
2.6 KiB
Go
92 lines
2.6 KiB
Go
package git
|
|
|
|
import (
|
|
"path"
|
|
"strings"
|
|
|
|
ice "shylinux.com/x/icebergs"
|
|
"shylinux.com/x/icebergs/base/mdb"
|
|
"shylinux.com/x/icebergs/base/nfs"
|
|
"shylinux.com/x/icebergs/core/code"
|
|
kit "shylinux.com/x/toolkits"
|
|
)
|
|
|
|
func _count_count(m *ice.Message, arg []string, cb func(string)) {
|
|
if len(arg) == 0 || arg[0] == "usr/" {
|
|
m.Echo("to many file, please choice sub dir")
|
|
return
|
|
}
|
|
m.Cmdy(nfs.DIR, arg, kit.Dict(nfs.DIR_DEEP, ice.TRUE, nfs.DIR_TYPE, nfs.TYPE_CAT), func(file string) {
|
|
if strings.Contains(file, "node_modules/") {
|
|
return
|
|
}
|
|
if strings.Contains(file, "bin/") {
|
|
return
|
|
}
|
|
if strings.Contains(file, "var/") {
|
|
return
|
|
}
|
|
if strings.Contains(file, "tags") {
|
|
return
|
|
}
|
|
switch kit.Ext(file) {
|
|
case "sum", "log":
|
|
return
|
|
}
|
|
cb(file)
|
|
})
|
|
}
|
|
|
|
const COUNT = "count"
|
|
|
|
func init() {
|
|
Index.MergeCommands(ice.Commands{
|
|
COUNT: {Name: "count path auto count order tags", Help: "代码行", Actions: ice.Actions{
|
|
"order": {Help: "排行", Hand: func(m *ice.Message, arg ...string) {
|
|
files := map[string]int{}
|
|
_count_count(m, arg, func(file string) {
|
|
m.Cmdy(nfs.CAT, file, func(text string) { files[strings.TrimPrefix(file, arg[0])]++ })
|
|
})
|
|
kit.Fetch(files, func(k string, v int) { m.Push("files", k).Push("lines", v) })
|
|
m.StatusTimeCount().SortIntR("lines")
|
|
}},
|
|
"tags": {Help: "索引", Hand: func(m *ice.Message, arg ...string) {
|
|
count := map[string]int{}
|
|
m.Cmd(nfs.CAT, path.Join(arg[0], nfs.TAGS), func(line string) {
|
|
if ls := strings.SplitN(line, ice.TB, 3); len(ls) < 3 {
|
|
return
|
|
} else if ls = strings.SplitN(ls[2], ";\"", 2); len(ls) < 2 {
|
|
return
|
|
} else {
|
|
count[kit.Split(ls[1])[0]]++
|
|
}
|
|
})
|
|
kit.Fetch(count, func(k string, v int) { m.Push(mdb.TYPE, k).Push(mdb.COUNT, v) })
|
|
m.SortIntR(mdb.COUNT)
|
|
}},
|
|
COUNT: {Help: "计数", Hand: func(m *ice.Message, arg ...string) {
|
|
files := map[string]int{}
|
|
lines := map[string]int{}
|
|
_count_count(m, arg, func(file string) {
|
|
files[mdb.TOTAL]++
|
|
files[kit.Ext(file)]++
|
|
m.Cmdy(nfs.CAT, file, func(text string) {
|
|
if kit.Ext(file) == code.GO {
|
|
switch {
|
|
case strings.HasPrefix(text, "func"):
|
|
lines["_func"]++
|
|
case strings.HasPrefix(text, "type"):
|
|
lines["_type"]++
|
|
}
|
|
}
|
|
lines[mdb.TOTAL]++
|
|
lines[kit.Ext(file)]++
|
|
})
|
|
})
|
|
kit.Fetch(lines, func(k string, v int) { m.Push(mdb.TYPE, k).Push("files", files[k]).Push("lines", lines[k]) })
|
|
m.StatusTime().SortIntR("lines")
|
|
}},
|
|
}, Hand: func(m *ice.Message, arg ...string) { m.Cmdy(nfs.DIR, arg) }},
|
|
})
|
|
}
|