diff --git a/src/main/scala/service/ActivityService.scala b/src/main/scala/service/ActivityService.scala index 59bdf48..f225482 100644 --- a/src/main/scala/service/ActivityService.scala +++ b/src/main/scala/service/ActivityService.scala @@ -25,50 +25,76 @@ def recordCreateRepositoryActivity(userName: String, repositoryName: String, activityUserName: String): Unit = Activities.autoInc insert(userName, repositoryName, activityUserName, "create_repository", - "[[%s]] created [[%s/%s]]".format(activityUserName, userName, repositoryName), + s"[user:${activityUserName}] created [repo:${userName}/${repositoryName}]", None, currentDate) def recordCreateIssueActivity(userName: String, repositoryName: String, activityUserName: String, issueId: Int, title: String): Unit = Activities.autoInc insert(userName, repositoryName, activityUserName, "open_issue", - "[[%s]] opened issue [[%s/%s#%d]]".format(activityUserName, userName, repositoryName, issueId), + s"[user:${activityUserName}] opened issue [issue:${userName}/${repositoryName}#${issueId}]", Some(title), currentDate) def recordCloseIssueActivity(userName: String, repositoryName: String, activityUserName: String, issueId: Int, title: String): Unit = Activities.autoInc insert(userName, repositoryName, activityUserName, "close_issue", - "[[%s]] closed issue [[%s/%s#%d]]".format(activityUserName, userName, repositoryName, issueId), + s"[user:${activityUserName}] closed issue [issue:${userName}/${repositoryName}#${issueId}]", Some(title), currentDate) def recordReopenIssueActivity(userName: String, repositoryName: String, activityUserName: String, issueId: Int, title: String): Unit = Activities.autoInc insert(userName, repositoryName, activityUserName, "reopen_issue", - "[[%s]] closed reopened [[%s/%s#%d]]".format(activityUserName, userName, repositoryName, issueId), + s"[user:${activityUserName}] closed reopened [issue:${userName}/${repositoryName}#${issueId}]", Some(title), currentDate) def recordCommentIssueActivity(userName: String, repositoryName: String, activityUserName: String, issueId: Int, comment: String): Unit = Activities.autoInc insert(userName, repositoryName, activityUserName, "comment_issue", - "[[%s]] commented on issue [[%s/%s#%d]]".format(activityUserName, userName, repositoryName, issueId), - Some(comment), + s"[user:${activityUserName}] commented on issue [issue:${userName}/${repositoryName}#${issueId}]", + Some(cut(comment, 200)), currentDate) def recordCreateWikiPageActivity(userName: String, repositoryName: String, activityUserName: String, pageName: String) = Activities.autoInc insert(userName, repositoryName, activityUserName, "create_wiki", - "[[%s]] created the [[%s/%s]] wiki".format(activityUserName, userName, repositoryName), + s"[user:${activityUserName}] created the [repo:${userName}/${repositoryName}] wiki", Some(pageName), currentDate) def recordEditWikiPageActivity(userName: String, repositoryName: String, activityUserName: String, pageName: String) = Activities.autoInc insert(userName, repositoryName, activityUserName, "edit_wiki", - "[[%s]] edited the [[%s/%s]] wiki".format(activityUserName, userName, repositoryName), + s"[user:${activityUserName}] edited the [repo:${userName}/${repositoryName}] wiki", Some(pageName), currentDate) + def recordPushActivity(userName: String, repositoryName: String, activityUserName: String, + branchName: String, commits: List[util.JGitUtil.CommitInfo]) = + Activities.autoInc insert(userName, repositoryName, activityUserName, + "push", + s"[user:${activityUserName}] pushed to [branch:${userName}/${repositoryName}#${branchName}] at [repo:${userName}/${repositoryName}]", + Some(commits.map { commit => commit.id + ":" + commit.shortMessage }.mkString("\n")), + currentDate) + + def recordCreateTagActivity(userName: String, repositoryName: String, activityUserName: String, + tagName: String, commits: List[util.JGitUtil.CommitInfo]) = + Activities.autoInc insert(userName, repositoryName, activityUserName, + "create_tag", + s"[user:${activityUserName}] created tag [tag:${userName}/${repositoryName}#${tagName}] at [repo:${userName}/${repositoryName}]", + None, + currentDate) + + def recordCreateBranchActivity(userName: String, repositoryName: String, activityUserName: String, + branchName: String, commits: List[util.JGitUtil.CommitInfo]) = + Activities.autoInc insert(userName, repositoryName, activityUserName, + "create_tag", + s"[user:${activityUserName}] created branch [tag:${userName}/${repositoryName}#${branchName}] at [repo:${userName}/${repositoryName}]", + None, + currentDate) + + private def cut(value: String, length: Int): String = + if(value.length > length) value.substring(0, length) + "..." else value } diff --git a/src/main/scala/servlet/GitRepositoryServlet.scala b/src/main/scala/servlet/GitRepositoryServlet.scala index c9d0394..61e6106 100644 --- a/src/main/scala/servlet/GitRepositoryServlet.scala +++ b/src/main/scala/servlet/GitRepositoryServlet.scala @@ -49,7 +49,7 @@ override def create(request: HttpServletRequest, db: Repository): ReceivePack = { val receivePack = new ReceivePack(db) - val userName = request.getAttribute("USER_NAME") + val userName = request.getAttribute("USER_NAME").asInstanceOf[String] logger.debug("requestURI: " + request.getRequestURI) logger.debug("userName:" + userName) @@ -60,29 +60,54 @@ logger.debug("repository:" + owner + "/" + repository) - receivePack.setPostReceiveHook(new CommitLogHook(owner, repository)) + receivePack.setPostReceiveHook(new CommitLogHook(owner, repository, userName)) receivePack } } import scala.collection.JavaConverters._ -class CommitLogHook(owner: String, repository: String) extends PostReceiveHook - with RepositoryService with AccountService with IssuesService { +class CommitLogHook(owner: String, repository: String, userName: String) extends PostReceiveHook + with RepositoryService with AccountService with IssuesService with ActivityService { private val logger = LoggerFactory.getLogger(classOf[CommitLogHook]) def onPostReceive(receivePack: ReceivePack, commands: java.util.Collection[ReceiveCommand]): Unit = { JGitUtil.withGit(Directory.getRepositoryDir(owner, repository)) { git => commands.asScala.foreach { command => - JGitUtil.getCommitLog(git, command.getOldId.name, command.getNewId.name).foreach { commit => - "(^|\\W)#(\\d+)(\\W|$)".r.findAllIn(commit.fullMessage).matchData.foreach { matchData => - val issueId = matchData.group(2) - if(getAccountByUserName(commit.committer).isDefined && getIssue(owner, repository, issueId).isDefined){ - createComment(owner, repository, commit.committer, issueId.toInt, commit.fullMessage, None) + val commits = JGitUtil.getCommitLog(git, command.getOldId.name, command.getNewId.name) + .filter(commit => JGitUtil.getBranchesOfCommit(git, commit.id).length == 1) + val refName = command.getRefName.split("/") + + println("****************************") + println(command.getRefName) + println(command.getMessage) + println(command.getResult) + println(command.getType) + println("****************************") + + // apply issue comment + if(refName(1) == "heads"){ + commits.foreach { commit => + "(^|\\W)#(\\d+)(\\W|$)".r.findAllIn(commit.fullMessage).matchData.foreach { matchData => + val issueId = matchData.group(2) + if(getAccountByUserName(commit.committer).isDefined && getIssue(owner, repository, issueId).isDefined){ + createComment(owner, repository, commit.committer, issueId.toInt, commit.fullMessage, None) + } } } } + + git.getRepository.getAllRefs.asScala.map { e => + println(e._1) + } + + // record activity + if(refName(1) == "heads"){ + recordPushActivity(owner, repository, userName, refName(2), commits) + } else if(refName(1) == "tags"){ + recordCreateTagActivity(owner, repository, userName, refName(2), commits) + } } } // update repository last modified time. diff --git a/src/main/scala/view/helpers.scala b/src/main/scala/view/helpers.scala index 35086d3..db2d804 100644 --- a/src/main/scala/view/helpers.scala +++ b/src/main/scala/view/helpers.scala @@ -34,10 +34,14 @@ } def activityMessage(message: String)(implicit context: app.Context): Html = { + val a = s"a $message aa $$1 a" + Html(message - .replaceAll("\\[\\[([^\\s]+?)/([^\\s]+?)#((\\d+))\\]\\]", "$1/$2#$3".format(context.path)) - .replaceAll("\\[\\[([^\\s]+?)/([^\\s]+?)\\]\\]", "$1/$2".format(context.path)) - .replaceAll("\\[\\[([^\\s]+?)\\]\\]", "$1".format(context.path)) + .replaceAll("\\[issue:([^\\s]+?)/([^\\s]+?)#((\\d+))\\]" , s"""$$1/$$2#$$3""") + .replaceAll("\\[repo:([^\\s]+?)/([^\\s]+?)\\]" , s"""$$1/$$2""") + .replaceAll("\\[branch:([^\\s]+?)/([^\\s]+?)#([^\\s]+?)\\]", s"""$$3""") + .replaceAll("\\[tag:([^\\s]+?)/([^\\s]+?)#([^\\s]+?)\\]" , s"""$$3""") + .replaceAll("\\[user:([^\\s]+?)\\]" , s"""$$1""") ) } diff --git a/src/main/twirl/account/activity.scala.html b/src/main/twirl/account/activity.scala.html index fedb46c..e5008c8 100644 --- a/src/main/twirl/account/activity.scala.html +++ b/src/main/twirl/account/activity.scala.html @@ -30,6 +30,16 @@ case "edit_wiki" => {
Edited {additionalInfo}.
} + case "push" => { +
+ {additionalInfo.split("\n").map{ commit => +
+ {commit.substring(0, 7)} + {commit.substring(41)} +
+ }} +
+ } case _ => {
{additionalInfo}
}