Add explore/commits page
parent
9fa0822570
commit
64250dbe44
|
@ -181,6 +181,7 @@ func runWeb(ctx *cli.Context) error {
|
||||||
ctx.Redirect(setting.AppSubURL + "/explore/repos")
|
ctx.Redirect(setting.AppSubURL + "/explore/repos")
|
||||||
})
|
})
|
||||||
m.Get("/repos", routers.ExploreRepos)
|
m.Get("/repos", routers.ExploreRepos)
|
||||||
|
m.Get("/commits", routers.ExploreCommits)
|
||||||
m.Get("/users", routers.ExploreUsers)
|
m.Get("/users", routers.ExploreUsers)
|
||||||
m.Get("/organizations", routers.ExploreOrganizations)
|
m.Get("/organizations", routers.ExploreOrganizations)
|
||||||
}, ignSignIn)
|
}, ignSignIn)
|
||||||
|
|
|
@ -140,9 +140,11 @@ issues.in_your_repos = In your repositories
|
||||||
|
|
||||||
[explore]
|
[explore]
|
||||||
repos = Repositories
|
repos = Repositories
|
||||||
|
commits = Commits
|
||||||
users = Users
|
users = Users
|
||||||
organizations = Organizations
|
organizations = Organizations
|
||||||
search = Search
|
search = Search
|
||||||
|
commits.repo = Repository
|
||||||
|
|
||||||
[auth]
|
[auth]
|
||||||
create_new_account = Create New Account
|
create_new_account = Create New Account
|
||||||
|
|
|
@ -140,9 +140,11 @@ issues.in_your_repos=В ваших репозиториях
|
||||||
|
|
||||||
[explore]
|
[explore]
|
||||||
repos=Репозитории
|
repos=Репозитории
|
||||||
|
commits=Коммиты
|
||||||
users=Пользователи
|
users=Пользователи
|
||||||
organizations=Организации
|
organizations=Организации
|
||||||
search=Поиск
|
search=Поиск
|
||||||
|
commits.repo=Репозиторий
|
||||||
|
|
||||||
[auth]
|
[auth]
|
||||||
create_new_account=Создать новый аккаунт
|
create_new_account=Создать новый аккаунт
|
||||||
|
|
|
@ -8,6 +8,7 @@ import (
|
||||||
"time"
|
"time"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/go-xorm/xorm"
|
||||||
"github.com/go-xorm/builder"
|
"github.com/go-xorm/builder"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -25,15 +26,32 @@ type Commit struct {
|
||||||
Repo *Repository `xorm:"-"`
|
Repo *Repository `xorm:"-"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func FulltextSearchCommits(q string) ([]*Commit, error) {
|
func FulltextSearchCommits(userid int64, q string, limit int, offset int) ([]*Commit, int64, error) {
|
||||||
sess := x.NewSession()
|
sess := x.NewSession()
|
||||||
sess.Where(builder.Match{"message", q})
|
sess.Join("INNER", "repository", "repository.id = commit.repo_id")
|
||||||
|
if userid > 0 {
|
||||||
|
sess.Join("LEFT", "access", "access.repo_id = commit.repo_id AND access.user_id="+string(userid))
|
||||||
|
sess.Where("NOT repository.is_private OR access.user_id IS NOT NULL OR repository.owner_id="+string(userid))
|
||||||
|
} else {
|
||||||
|
sess.Where("NOT repository.is_private")
|
||||||
|
}
|
||||||
|
if q != "" {
|
||||||
|
sess.Where(builder.Match{"message", q})
|
||||||
|
}
|
||||||
|
var countSess xorm.Session
|
||||||
|
countSess = *sess
|
||||||
|
count, err := countSess.Count(new(Commit))
|
||||||
|
if err != nil {
|
||||||
|
return nil, 0, fmt.Errorf("Count: %v", err)
|
||||||
|
}
|
||||||
|
sess.OrderBy("commit.committer_time DESC")
|
||||||
|
sess.Limit(limit, offset)
|
||||||
commits := make([]*Commit, 0)
|
commits := make([]*Commit, 0)
|
||||||
if err := sess.Find(&commits); err != nil {
|
if err := sess.Find(&commits); err != nil {
|
||||||
return nil, fmt.Errorf("Find: %v", err)
|
return nil, 0, fmt.Errorf("Find: %v", err)
|
||||||
}
|
}
|
||||||
if len(commits) == 0 {
|
if len(commits) == 0 {
|
||||||
return commits, nil
|
return commits, count, nil
|
||||||
}
|
}
|
||||||
// Load repositories
|
// Load repositories
|
||||||
set := make(map[int64]*Repository)
|
set := make(map[int64]*Repository)
|
||||||
|
@ -46,13 +64,16 @@ func FulltextSearchCommits(q string) ([]*Commit, error) {
|
||||||
}
|
}
|
||||||
repos := make([]*Repository, 0, len(ids))
|
repos := make([]*Repository, 0, len(ids))
|
||||||
if err := sess.In("id", ids).Find(&repos); err != nil {
|
if err := sess.In("id", ids).Find(&repos); err != nil {
|
||||||
return nil, fmt.Errorf("find users: %v", err)
|
return nil, 0, fmt.Errorf("Find repos: %v", err)
|
||||||
|
}
|
||||||
|
if err = RepositoryList(repos).LoadAttributes(); err != nil {
|
||||||
|
return nil, 0, fmt.Errorf("Load repo attrs: %v", err)
|
||||||
}
|
}
|
||||||
for i := range repos {
|
for i := range repos {
|
||||||
set[repos[i].ID] = repos[i]
|
set[repos[i].ID] = repos[i]
|
||||||
}
|
}
|
||||||
for i := range commits {
|
for i := range commits {
|
||||||
commits[i].Repo = set[repos[i].RepoID]
|
commits[i].Repo = set[commits[i].RepoID]
|
||||||
}
|
}
|
||||||
return commits, nil
|
return commits, count, nil
|
||||||
}
|
}
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -16,6 +16,7 @@ import (
|
||||||
const (
|
const (
|
||||||
HOME = "home"
|
HOME = "home"
|
||||||
EXPLORE_REPOS = "explore/repos"
|
EXPLORE_REPOS = "explore/repos"
|
||||||
|
EXPLORE_COMMITS = "explore/commits"
|
||||||
EXPLORE_USERS = "explore/users"
|
EXPLORE_USERS = "explore/users"
|
||||||
EXPLORE_ORGANIZATIONS = "explore/organizations"
|
EXPLORE_ORGANIZATIONS = "explore/organizations"
|
||||||
)
|
)
|
||||||
|
@ -77,6 +78,32 @@ func ExploreRepos(ctx *context.Context) {
|
||||||
ctx.HTML(200, EXPLORE_REPOS)
|
ctx.HTML(200, EXPLORE_REPOS)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ExploreCommits(ctx *context.Context) {
|
||||||
|
ctx.Data["Title"] = ctx.Tr("explore")
|
||||||
|
ctx.Data["PageIsExplore"] = true
|
||||||
|
ctx.Data["PageIsExploreCommits"] = true
|
||||||
|
|
||||||
|
page := ctx.QueryInt("page")
|
||||||
|
if page <= 0 {
|
||||||
|
page = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
keyword := ctx.Query("q")
|
||||||
|
commits, count, err := models.FulltextSearchCommits(
|
||||||
|
ctx.UserID(), keyword, setting.UI.ExplorePagingNum,
|
||||||
|
setting.UI.ExplorePagingNum * (page-1))
|
||||||
|
if err != nil {
|
||||||
|
ctx.Handle(500, "FulltextSearchCommits", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
ctx.Data["Keyword"] = keyword
|
||||||
|
ctx.Data["Total"] = count
|
||||||
|
ctx.Data["Page"] = paginater.New(int(count), setting.UI.ExplorePagingNum, page, 5)
|
||||||
|
ctx.Data["Commits"] = commits
|
||||||
|
|
||||||
|
ctx.HTML(200, EXPLORE_COMMITS)
|
||||||
|
}
|
||||||
|
|
||||||
type UserSearchOptions struct {
|
type UserSearchOptions struct {
|
||||||
Type models.UserType
|
Type models.UserType
|
||||||
Counter func() int64
|
Counter func() int64
|
||||||
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
{{if .Commits}}
|
||||||
|
<div class="ui attached table segment">
|
||||||
|
<table class="ui very basic striped fixed table single line" id="commits-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th class="three wide">{{.i18n.Tr "explore.commits.repo"}}</th>
|
||||||
|
<th class="four wide">{{.i18n.Tr "repo.commits.author"}}</th>
|
||||||
|
<th class="nine wide message"><span class="sha">SHA1</span> {{.i18n.Tr "repo.commits.message"}}</th>
|
||||||
|
<th class="three wide right aligned">{{.i18n.Tr "repo.commits.date"}}</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{{range .Commits}}
|
||||||
|
<tr>
|
||||||
|
<td class="repo">
|
||||||
|
<a rel="nofollow" class="name" href="{{.Repo.Link}}">{{.Repo.Owner.Name}}/{{.Repo.Name}}</a>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td class="author">
|
||||||
|
<img class="ui avatar image" src="{{AvatarLink .AuthorEmail}}" alt=""/> {{.AuthorName}}
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td class="message collapsing has-emoji">
|
||||||
|
<a rel="nofollow" class="ui sha label" href="{{.Repo.Link}}/commit/{{.Sha}}">{{ShortSHA1 .Sha}}</a>
|
||||||
|
<span>{{RenderCommitMessage false .Message .Repo.Link .Repo.ComposeMetas}}</span>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td class="grey text right aligned">{{TimeSince .AuthorTime $.Lang}}</td>
|
||||||
|
</tr>
|
||||||
|
{{end}}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
{{end}}
|
|
@ -0,0 +1,14 @@
|
||||||
|
{{template "base/head" .}}
|
||||||
|
<div class="explore commits">
|
||||||
|
<div class="ui container">
|
||||||
|
<div class="ui grid">
|
||||||
|
{{template "explore/navbar" .}}
|
||||||
|
<div class="twelve wide column content">
|
||||||
|
{{template "explore/search" .}}
|
||||||
|
{{template "explore/commit_list" .}}
|
||||||
|
{{template "explore/page" .}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{template "base/footer" .}}
|
|
@ -4,6 +4,9 @@
|
||||||
<a class="{{if .PageIsExploreRepositories}}active{{end}} item" href="{{AppSubURL}}/explore/repos">
|
<a class="{{if .PageIsExploreRepositories}}active{{end}} item" href="{{AppSubURL}}/explore/repos">
|
||||||
<span class="octicon octicon-repo"></span> {{.i18n.Tr "explore.repos"}}
|
<span class="octicon octicon-repo"></span> {{.i18n.Tr "explore.repos"}}
|
||||||
</a>
|
</a>
|
||||||
|
<a class="{{if .PageIsExploreCommits}}active{{end}} item" href="{{AppSubURL}}/explore/commits">
|
||||||
|
<span class="octicon octicon-git-commit"></span> {{.i18n.Tr "explore.commits"}}
|
||||||
|
</a>
|
||||||
<a class="{{if .PageIsExploreUsers}}active{{end}} item" href="{{AppSubURL}}/explore/users">
|
<a class="{{if .PageIsExploreUsers}}active{{end}} item" href="{{AppSubURL}}/explore/users">
|
||||||
<span class="octicon octicon-person"></span> {{.i18n.Tr "explore.users"}}
|
<span class="octicon octicon-person"></span> {{.i18n.Tr "explore.users"}}
|
||||||
</a>
|
</a>
|
||||||
|
|
Loading…
Reference in New Issue