Newer
Older
gitbucket_jkp / src / main / scala / api / ApiCommit.scala
@nazoking nazoking on 1 Mar 2015 1 KB move api classes to api package
package api

import java.util.Date
import org.eclipse.jgit.diff.DiffEntry
import util.JGitUtil
import util.JGitUtil.CommitInfo
import org.eclipse.jgit.api.Git
import util.RepositoryName

/**
 * https://developer.github.com/v3/repos/commits/
 */
case class ApiCommit(
  id: String,
  message: String,
  timestamp: Date,
  added: List[String],
  removed: List[String],
  modified: List[String],
  author: ApiPersonIdent,
  committer: ApiPersonIdent)(repositoryName:RepositoryName){
  val url = ApiPath(s"/api/v3/${repositoryName.fullName}/commits/${id}")
  val html_url = ApiPath(s"/${repositoryName.fullName}/commit/${id}")
}

object ApiCommit{
  def apply(git: Git, repositoryName: RepositoryName, commit: CommitInfo): ApiCommit = {
    val diffs = JGitUtil.getDiffs(git, commit.id, false)
    ApiCommit(
      id        = commit.id,
      message   = commit.fullMessage,
      timestamp = commit.commitTime,
      added     = diffs._1.collect { case x if(x.changeType == DiffEntry.ChangeType.ADD)    => x.newPath },
      removed   = diffs._1.collect { case x if(x.changeType == DiffEntry.ChangeType.DELETE) => x.oldPath },
      modified  = diffs._1.collect { case x if(x.changeType != DiffEntry.ChangeType.ADD &&
        x.changeType != DiffEntry.ChangeType.DELETE) => x.newPath },
      author    = ApiPersonIdent.author(commit),
      committer = ApiPersonIdent.committer(commit)
    )(repositoryName)
  }
}