mirror of
https://github.com/gitbucket/gitbucket.git
synced 2025-11-07 14:05:52 +01:00
(refs #408)Performance improvement for index page.
This commit is contained in:
@@ -21,8 +21,8 @@ trait IndexControllerBase extends ControllerBase {
|
|||||||
val loginAccount = context.loginAccount
|
val loginAccount = context.loginAccount
|
||||||
|
|
||||||
html.index(getRecentActivities(),
|
html.index(getRecentActivities(),
|
||||||
getVisibleRepositories(loginAccount, context.baseUrl),
|
getVisibleRepositories(loginAccount, context.baseUrl, withoutPhysicalInfo = true),
|
||||||
loginAccount.map{ account => getUserRepositories(account.userName, context.baseUrl) }.getOrElse(Nil)
|
loginAccount.map{ account => getUserRepositories(account.userName, context.baseUrl, withoutPhysicalInfo = true) }.getOrElse(Nil)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -155,13 +155,17 @@ trait RepositoryService { self: AccountService =>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
def getUserRepositories(userName: String, baseUrl: String): List[RepositoryInfo] = {
|
def getUserRepositories(userName: String, baseUrl: String, withoutPhysicalInfo: Boolean = false): List[RepositoryInfo] = {
|
||||||
Query(Repositories).filter { t1 =>
|
Query(Repositories).filter { t1 =>
|
||||||
(t1.userName is userName.bind) ||
|
(t1.userName is userName.bind) ||
|
||||||
(Query(Collaborators).filter { t2 => t2.byRepository(t1.userName, t1.repositoryName) && (t2.collaboratorName is userName.bind)} exists)
|
(Query(Collaborators).filter { t2 => t2.byRepository(t1.userName, t1.repositoryName) && (t2.collaboratorName is userName.bind)} exists)
|
||||||
}.sortBy(_.lastActivityDate desc).list.map{ repository =>
|
}.sortBy(_.lastActivityDate desc).list.map{ repository =>
|
||||||
new RepositoryInfo(
|
new RepositoryInfo(
|
||||||
JGitUtil.getRepositoryInfo(repository.userName, repository.repositoryName, baseUrl),
|
if(withoutPhysicalInfo){
|
||||||
|
new JGitUtil.RepositoryInfo(repository.userName, repository.repositoryName, baseUrl)
|
||||||
|
} else {
|
||||||
|
JGitUtil.getRepositoryInfo(repository.userName, repository.repositoryName, baseUrl)
|
||||||
|
},
|
||||||
repository,
|
repository,
|
||||||
getForkedCount(
|
getForkedCount(
|
||||||
repository.originUserName.getOrElse(repository.userName),
|
repository.originUserName.getOrElse(repository.userName),
|
||||||
@@ -178,9 +182,12 @@ trait RepositoryService { self: AccountService =>
|
|||||||
* @param loginAccount the logged in account
|
* @param loginAccount the logged in account
|
||||||
* @param baseUrl the base url of this application
|
* @param baseUrl the base url of this application
|
||||||
* @param repositoryUserName the repository owner (if None then returns all repositories which are visible for logged in user)
|
* @param repositoryUserName the repository owner (if None then returns all repositories which are visible for logged in user)
|
||||||
|
* @param withoutPhysicalInfo if true then the result does not include physical repository information such as commit count,
|
||||||
|
* branches and tags
|
||||||
* @return the repository information which is sorted in descending order of lastActivityDate.
|
* @return the repository information which is sorted in descending order of lastActivityDate.
|
||||||
*/
|
*/
|
||||||
def getVisibleRepositories(loginAccount: Option[Account], baseUrl: String, repositoryUserName: Option[String] = None): List[RepositoryInfo] = {
|
def getVisibleRepositories(loginAccount: Option[Account], baseUrl: String, repositoryUserName: Option[String] = None,
|
||||||
|
withoutPhysicalInfo: Boolean = false): List[RepositoryInfo] = {
|
||||||
(loginAccount match {
|
(loginAccount match {
|
||||||
// for Administrators
|
// for Administrators
|
||||||
case Some(x) if(x.isAdmin) => Query(Repositories)
|
case Some(x) if(x.isAdmin) => Query(Repositories)
|
||||||
@@ -195,7 +202,11 @@ trait RepositoryService { self: AccountService =>
|
|||||||
repositoryUserName.map { userName => t.userName is userName.bind } getOrElse ConstColumn.TRUE
|
repositoryUserName.map { userName => t.userName is userName.bind } getOrElse ConstColumn.TRUE
|
||||||
}.sortBy(_.lastActivityDate desc).list.map{ repository =>
|
}.sortBy(_.lastActivityDate desc).list.map{ repository =>
|
||||||
new RepositoryInfo(
|
new RepositoryInfo(
|
||||||
JGitUtil.getRepositoryInfo(repository.userName, repository.repositoryName, baseUrl),
|
if(withoutPhysicalInfo){
|
||||||
|
new JGitUtil.RepositoryInfo(repository.userName, repository.repositoryName, baseUrl)
|
||||||
|
} else {
|
||||||
|
JGitUtil.getRepositoryInfo(repository.userName, repository.repositoryName, baseUrl)
|
||||||
|
},
|
||||||
repository,
|
repository,
|
||||||
getForkedCount(
|
getForkedCount(
|
||||||
repository.originUserName.getOrElse(repository.userName),
|
repository.originUserName.getOrElse(repository.userName),
|
||||||
|
|||||||
@@ -35,7 +35,11 @@ object JGitUtil {
|
|||||||
* @param branchList the list of branch names
|
* @param branchList the list of branch names
|
||||||
* @param tags the list of tags
|
* @param tags the list of tags
|
||||||
*/
|
*/
|
||||||
case class RepositoryInfo(owner: String, name: String, url: String, commitCount: Int, branchList: List[String], tags: List[TagInfo])
|
case class RepositoryInfo(owner: String, name: String, url: String, commitCount: Int, branchList: List[String], tags: List[TagInfo]){
|
||||||
|
def this(owner: String, name: String, baseUrl: String) = {
|
||||||
|
this(owner, name, s"${baseUrl}/git/${owner}/${name}.git", 0, Nil, Nil)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The file data for the file list of the repository viewer.
|
* The file data for the file list of the repository viewer.
|
||||||
|
|||||||
Reference in New Issue
Block a user