diff --git a/src/main/scala/api/ApiCombinedCommitStatus.scala b/src/main/scala/api/ApiCombinedCommitStatus.scala deleted file mode 100644 index 898b58a..0000000 --- a/src/main/scala/api/ApiCombinedCommitStatus.scala +++ /dev/null @@ -1,25 +0,0 @@ -package api - -import gitbucket.core.model.{Account, CommitState, CommitStatus} - - -/** - * https://developer.github.com/v3/repos/statuses/#get-the-combined-status-for-a-specific-ref - */ -case class ApiCombinedCommitStatus( - state: String, - sha: String, - total_count: Int, - statuses: Iterable[ApiCommitStatus], - repository: ApiRepository){ - // val commit_url = ApiPath(s"/api/v3/repos/${repository.full_name}/${sha}") - val url = ApiPath(s"/api/v3/repos/${repository.full_name}/commits/${sha}/status") -} -object ApiCombinedCommitStatus { - def apply(sha:String, statuses: Iterable[(CommitStatus, Account)], repository:ApiRepository): ApiCombinedCommitStatus = ApiCombinedCommitStatus( - state = CommitState.combine(statuses.map(_._1.state).toSet).name, - sha = sha, - total_count= statuses.size, - statuses = statuses.map{ case (s, a)=> ApiCommitStatus(s, ApiUser(a)) }, - repository = repository) -} diff --git a/src/main/scala/api/ApiComment.scala b/src/main/scala/api/ApiComment.scala deleted file mode 100644 index 7ce23a4..0000000 --- a/src/main/scala/api/ApiComment.scala +++ /dev/null @@ -1,24 +0,0 @@ -package api - -import java.util.Date -import gitbucket.core.model.IssueComment - -/** - * https://developer.github.com/v3/issues/comments/ - */ -case class ApiComment( - id: Int, - user: ApiUser, - body: String, - created_at: Date, - updated_at: Date) - -object ApiComment{ - def apply(comment: IssueComment, user: ApiUser): ApiComment = - ApiComment( - id = comment.commentId, - user = user, - body = comment.content, - created_at = comment.registeredDate, - updated_at = comment.updatedDate) -} diff --git a/src/main/scala/api/ApiCommit.scala b/src/main/scala/api/ApiCommit.scala deleted file mode 100644 index 71110cc..0000000 --- a/src/main/scala/api/ApiCommit.scala +++ /dev/null @@ -1,41 +0,0 @@ -package api - -import java.util.Date -import org.eclipse.jgit.diff.DiffEntry -import gitbucket.core.util.JGitUtil -import gitbucket.core.util.JGitUtil.CommitInfo -import gitbucket.core.util.RepositoryName -import org.eclipse.jgit.api.Git - -/** - * 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) - } -} diff --git a/src/main/scala/api/ApiCommitListItem.scala b/src/main/scala/api/ApiCommitListItem.scala deleted file mode 100644 index d8f3b33..0000000 --- a/src/main/scala/api/ApiCommitListItem.scala +++ /dev/null @@ -1,42 +0,0 @@ -package api - -import gitbucket.core.util.JGitUtil.CommitInfo -// TODO(tanacasino): Fix package name -import gitbucket.core.util.RepositoryName -import ApiCommitListItem._ - -/** - * https://developer.github.com/v3/repos/commits/ - */ -case class ApiCommitListItem( - sha: String, - commit: Commit, - author: Option[ApiUser], - committer: Option[ApiUser], - parents: Seq[Parent])(repositoryName: RepositoryName) { - val url = ApiPath(s"/api/v3/repos/${repositoryName.fullName}/commits/${sha}") -} - -object ApiCommitListItem { - def apply(commit: CommitInfo, repositoryName: RepositoryName): ApiCommitListItem = ApiCommitListItem( - sha = commit.id, - commit = Commit( - message = commit.fullMessage, - author = ApiPersonIdent.author(commit), - committer = ApiPersonIdent.committer(commit) - )(commit.id, repositoryName), - author = None, - committer = None, - parents = commit.parents.map(Parent(_)(repositoryName)))(repositoryName) - - case class Parent(sha: String)(repositoryName: RepositoryName){ - val url = ApiPath(s"/api/v3/repos/${repositoryName.fullName}/commits/${sha}") - } - - case class Commit( - message: String, - author: ApiPersonIdent, - committer: ApiPersonIdent)(sha:String, repositoryName: RepositoryName) { - val url = ApiPath(s"/api/v3/repos/${repositoryName.fullName}/git/commits/${sha}") - } -} diff --git a/src/main/scala/api/ApiCommitStatus.scala b/src/main/scala/api/ApiCommitStatus.scala deleted file mode 100644 index 7508477..0000000 --- a/src/main/scala/api/ApiCommitStatus.scala +++ /dev/null @@ -1,35 +0,0 @@ -package api - -import java.util.Date -import gitbucket.core.model.CommitStatus -import gitbucket.core.util.RepositoryName - -/** - * https://developer.github.com/v3/repos/statuses/#create-a-status - * https://developer.github.com/v3/repos/statuses/#list-statuses-for-a-specific-ref - */ -case class ApiCommitStatus( - created_at: Date, - updated_at: Date, - state: String, - target_url: Option[String], - description: Option[String], - id: Int, - context: String, - creator: ApiUser -)(sha: String,repositoryName: RepositoryName) { - val url = ApiPath(s"/api/v3/repos/${repositoryName.fullName}/commits/${sha}/statuses") -} - -object ApiCommitStatus { - def apply(status: CommitStatus, creator:ApiUser): ApiCommitStatus = ApiCommitStatus( - created_at = status.registeredDate, - updated_at = status.updatedDate, - state = status.state.name, - target_url = status.targetUrl, - description= status.description, - id = status.commitStatusId, - context = status.context, - creator = creator - )(status.commitId, RepositoryName(status)) -} diff --git a/src/main/scala/api/ApiError.scala b/src/main/scala/api/ApiError.scala deleted file mode 100644 index 8acdba2..0000000 --- a/src/main/scala/api/ApiError.scala +++ /dev/null @@ -1,5 +0,0 @@ -package api - -case class ApiError( - message: String, - documentation_url: Option[String] = None) diff --git a/src/main/scala/api/ApiIssue.scala b/src/main/scala/api/ApiIssue.scala deleted file mode 100644 index d50723b..0000000 --- a/src/main/scala/api/ApiIssue.scala +++ /dev/null @@ -1,29 +0,0 @@ -package api - -import java.util.Date -import gitbucket.core.model.Issue - -/** - * https://developer.github.com/v3/issues/ - */ -case class ApiIssue( - number: Int, - title: String, - user: ApiUser, - // labels, - state: String, - created_at: Date, - updated_at: Date, - body: String) - -object ApiIssue{ - def apply(issue: Issue, user: ApiUser): ApiIssue = - ApiIssue( - number = issue.issueId, - title = issue.title, - user = user, - state = if(issue.closed){ "closed" }else{ "open" }, - body = issue.content.getOrElse(""), - created_at = issue.registeredDate, - updated_at = issue.updatedDate) -} diff --git a/src/main/scala/api/ApiPath.scala b/src/main/scala/api/ApiPath.scala deleted file mode 100644 index 1f6701e..0000000 --- a/src/main/scala/api/ApiPath.scala +++ /dev/null @@ -1,6 +0,0 @@ -package api - -/** - * path for api url. if set path '/repos/aa/bb' then, expand 'http://server:post/repos/aa/bb' when converted to json. - */ -case class ApiPath(path: String) diff --git a/src/main/scala/api/ApiPersonIdent.scala b/src/main/scala/api/ApiPersonIdent.scala deleted file mode 100644 index 393e69b..0000000 --- a/src/main/scala/api/ApiPersonIdent.scala +++ /dev/null @@ -1,22 +0,0 @@ -package api - -import java.util.Date -import gitbucket.core.util.JGitUtil.CommitInfo - -case class ApiPersonIdent( - name: String, - email: String, - date: Date) - -object ApiPersonIdent { - def author(commit: CommitInfo): ApiPersonIdent = - ApiPersonIdent( - name = commit.authorName, - email = commit.authorEmailAddress, - date = commit.authorTime) - def committer(commit: CommitInfo): ApiPersonIdent = - ApiPersonIdent( - name = commit.committerName, - email = commit.committerEmailAddress, - date = commit.commitTime) -} diff --git a/src/main/scala/api/ApiPullRequest.scala b/src/main/scala/api/ApiPullRequest.scala deleted file mode 100644 index a4ddccb..0000000 --- a/src/main/scala/api/ApiPullRequest.scala +++ /dev/null @@ -1,57 +0,0 @@ -package api - -import java.util.Date -import gitbucket.core.model.{Issue, PullRequest} - -/** - * https://developer.github.com/v3/pulls/ - */ -case class ApiPullRequest( - number: Int, - updated_at: Date, - created_at: Date, - head: ApiPullRequest.Commit, - base: ApiPullRequest.Commit, - mergeable: Option[Boolean], - title: String, - body: String, - user: ApiUser) { - val html_url = ApiPath(s"${base.repo.html_url.path}/pull/${number}") - //val diff_url = ApiPath(s"${base.repo.html_url.path}/pull/${number}.diff") - //val patch_url = ApiPath(s"${base.repo.html_url.path}/pull/${number}.patch") - val url = ApiPath(s"${base.repo.url.path}/pulls/${number}") - //val issue_url = ApiPath(s"${base.repo.url.path}/issues/${number}") - val commits_url = ApiPath(s"${base.repo.url.path}/pulls/${number}/commits") - val review_comments_url = ApiPath(s"${base.repo.url.path}/pulls/${number}/comments") - val review_comment_url = ApiPath(s"${base.repo.url.path}/pulls/comments/{number}") - val comments_url = ApiPath(s"${base.repo.url.path}/issues/${number}/comments") - val statuses_url = ApiPath(s"${base.repo.url.path}/statuses/${head.sha}") -} - -object ApiPullRequest{ - def apply(issue: Issue, pullRequest: PullRequest, headRepo: ApiRepository, baseRepo: ApiRepository, user: ApiUser): ApiPullRequest = ApiPullRequest( - number = issue.issueId, - updated_at = issue.updatedDate, - created_at = issue.registeredDate, - head = Commit( - sha = pullRequest.commitIdTo, - ref = pullRequest.requestBranch, - repo = headRepo)(issue.userName), - base = Commit( - sha = pullRequest.commitIdFrom, - ref = pullRequest.branch, - repo = baseRepo)(issue.userName), - mergeable = None, // TODO: need check mergeable. - title = issue.title, - body = issue.content.getOrElse(""), - user = user - ) - - case class Commit( - sha: String, - ref: String, - repo: ApiRepository)(baseOwner:String){ - val label = if( baseOwner == repo.owner.login ){ ref }else{ s"${repo.owner.login}:${ref}" } - val user = repo.owner - } -} diff --git a/src/main/scala/api/ApiRepository.scala b/src/main/scala/api/ApiRepository.scala deleted file mode 100644 index 60410b0..0000000 --- a/src/main/scala/api/ApiRepository.scala +++ /dev/null @@ -1,48 +0,0 @@ -package api - -import gitbucket.core.util.JGitUtil.CommitInfo -import gitbucket.core.service.RepositoryService.RepositoryInfo -import gitbucket.core.model.{Account, Repository} - -// https://developer.github.com/v3/repos/ -case class ApiRepository( - name: String, - full_name: String, - description: String, - watchers: Int, - forks: Int, - `private`: Boolean, - default_branch: String, - owner: ApiUser) { - val forks_count = forks - val watchers_coun = watchers - val url = ApiPath(s"/api/v3/repos/${full_name}") - val http_url = ApiPath(s"/git/${full_name}.git") - val clone_url = ApiPath(s"/git/${full_name}.git") - val html_url = ApiPath(s"/${full_name}") -} - -object ApiRepository{ - def apply( - repository: Repository, - owner: ApiUser, - forkedCount: Int =0, - watchers: Int = 0): ApiRepository = - ApiRepository( - name = repository.repositoryName, - full_name = s"${repository.userName}/${repository.repositoryName}", - description = repository.description.getOrElse(""), - watchers = 0, - forks = forkedCount, - `private` = repository.isPrivate, - default_branch = repository.defaultBranch, - owner = owner - ) - - def apply(repositoryInfo: RepositoryInfo, owner: ApiUser): ApiRepository = - ApiRepository(repositoryInfo.repository, owner, forkedCount=repositoryInfo.forkedCount) - - def apply(repositoryInfo: RepositoryInfo, owner: Account): ApiRepository = - this(repositoryInfo.repository, ApiUser(owner)) - -} diff --git a/src/main/scala/api/ApiUser.scala b/src/main/scala/api/ApiUser.scala deleted file mode 100644 index 6ccc8af..0000000 --- a/src/main/scala/api/ApiUser.scala +++ /dev/null @@ -1,33 +0,0 @@ -package api - -import java.util.Date -import gitbucket.core.model.Account - -case class ApiUser( - login: String, - email: String, - `type`: String, - site_admin: Boolean, - created_at: Date) { - val url = ApiPath(s"/api/v3/users/${login}") - val html_url = ApiPath(s"/${login}") - // val followers_url = ApiPath(s"/api/v3/users/${login}/followers") - // val following_url = ApiPath(s"/api/v3/users/${login}/following{/other_user}") - // val gists_url = ApiPath(s"/api/v3/users/${login}/gists{/gist_id}") - // val starred_url = ApiPath(s"/api/v3/users/${login}/starred{/owner}{/repo}") - // val subscriptions_url = ApiPath(s"/api/v3/users/${login}/subscriptions") - // val organizations_url = ApiPath(s"/api/v3/users/${login}/orgs") - // val repos_url = ApiPath(s"/api/v3/users/${login}/repos") - // val events_url = ApiPath(s"/api/v3/users/${login}/events{/privacy}") - // val received_events_url = ApiPath(s"/api/v3/users/${login}/received_events") -} - -object ApiUser{ - def apply(user: Account): ApiUser = ApiUser( - login = user.fullName, - email = user.mailAddress, - `type` = if(user.isGroupAccount){ "Organization" }else{ "User" }, - site_admin = user.isAdmin, - created_at = user.registeredDate - ) -} diff --git a/src/main/scala/api/CreateAComment.scala b/src/main/scala/api/CreateAComment.scala deleted file mode 100644 index 138f705..0000000 --- a/src/main/scala/api/CreateAComment.scala +++ /dev/null @@ -1,7 +0,0 @@ -package api - -/** - * https://developer.github.com/v3/issues/comments/#create-a-comment - * api form - */ -case class CreateAComment(body: String) diff --git a/src/main/scala/api/CreateAStatus.scala b/src/main/scala/api/CreateAStatus.scala deleted file mode 100644 index 5e988a6..0000000 --- a/src/main/scala/api/CreateAStatus.scala +++ /dev/null @@ -1,26 +0,0 @@ -package api - -import gitbucket.core.model.CommitState - -/** - * https://developer.github.com/v3/repos/statuses/#create-a-status - * api form - */ -case class CreateAStatus( - /* state is Required. The state of the status. Can be one of pending, success, error, or failure. */ - state: String, - /* context is a string label to differentiate this status from the status of other systems. Default: "default" */ - context: Option[String], - /* The target URL to associate with this status. This URL will be linked from the GitHub UI to allow users to easily see the ‘source’ of the Status. */ - target_url: Option[String], - /* description is a short description of the status.*/ - description: Option[String] -) { - def isValid: Boolean = { - CommitState.valueOf(state).isDefined && - // only http - target_url.filterNot(f => "\\Ahttps?://".r.findPrefixOf(f).isDefined && f.length<255).isEmpty && - context.filterNot(f => f.length<255).isEmpty && - description.filterNot(f => f.length<1000).isEmpty - } -} diff --git a/src/main/scala/api/JsonFormat.scala b/src/main/scala/api/JsonFormat.scala deleted file mode 100644 index 12906f1..0000000 --- a/src/main/scala/api/JsonFormat.scala +++ /dev/null @@ -1,40 +0,0 @@ -package api - -import org.json4s._ -import org.json4s.jackson.Serialization -import scala.util.Try -import org.joda.time.format._ -import org.joda.time.DateTime -import org.joda.time.DateTimeZone -import java.util.Date - - -object JsonFormat { - case class Context(baseUrl:String) - val parserISO = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss'Z'") - val jsonFormats = Serialization.formats(NoTypeHints) + new CustomSerializer[Date](format => - ( - { case JString(s) => Try(parserISO.parseDateTime(s)).toOption.map(_.toDate) - .getOrElse(throw new MappingException("Can't convert " + s + " to Date")) }, - { case x: Date => JString(parserISO.print(new DateTime(x).withZone(DateTimeZone.UTC))) } - ) - ) + FieldSerializer[ApiUser]() + FieldSerializer[ApiPullRequest]() + FieldSerializer[ApiRepository]() + - FieldSerializer[ApiCommitListItem.Parent]() + FieldSerializer[ApiCommitListItem]() + FieldSerializer[ApiCommitListItem.Commit]() + - FieldSerializer[ApiCommitStatus]() + FieldSerializer[ApiCommit]() + FieldSerializer[ApiCombinedCommitStatus]() + - FieldSerializer[ApiPullRequest.Commit]() - def apiPathSerializer(c: Context) = new CustomSerializer[ApiPath](format => - ( - { - case JString(s) if s.startsWith(c.baseUrl) => ApiPath(s.substring(c.baseUrl.length)) - case JString(s) => throw new MappingException("Can't convert " + s + " to ApiPath") - }, - { - case ApiPath(path) => JString(c.baseUrl+path) - } - ) - ) - /** - * convert object to json string - */ - def apply(obj: AnyRef)(implicit c: Context): String = Serialization.write(obj)(jsonFormats + apiPathSerializer(c)) -} diff --git a/src/main/scala/gitbucket/core/api/ApiCombinedCommitStatus.scala b/src/main/scala/gitbucket/core/api/ApiCombinedCommitStatus.scala new file mode 100644 index 0000000..6a2ccf8 --- /dev/null +++ b/src/main/scala/gitbucket/core/api/ApiCombinedCommitStatus.scala @@ -0,0 +1,25 @@ +package gitbucket.core.api + +import gitbucket.core.model.{Account, CommitState, CommitStatus} + + +/** + * https://developer.github.com/v3/repos/statuses/#get-the-combined-status-for-a-specific-ref + */ +case class ApiCombinedCommitStatus( + state: String, + sha: String, + total_count: Int, + statuses: Iterable[ApiCommitStatus], + repository: ApiRepository){ + // val commit_url = ApiPath(s"/api/v3/repos/${repository.full_name}/${sha}") + val url = ApiPath(s"/api/v3/repos/${repository.full_name}/commits/${sha}/status") +} +object ApiCombinedCommitStatus { + def apply(sha:String, statuses: Iterable[(CommitStatus, Account)], repository:ApiRepository): ApiCombinedCommitStatus = ApiCombinedCommitStatus( + state = CommitState.combine(statuses.map(_._1.state).toSet).name, + sha = sha, + total_count= statuses.size, + statuses = statuses.map{ case (s, a)=> ApiCommitStatus(s, ApiUser(a)) }, + repository = repository) +} diff --git a/src/main/scala/gitbucket/core/api/ApiComment.scala b/src/main/scala/gitbucket/core/api/ApiComment.scala new file mode 100644 index 0000000..fb6b688 --- /dev/null +++ b/src/main/scala/gitbucket/core/api/ApiComment.scala @@ -0,0 +1,26 @@ +package gitbucket.core.api + +import gitbucket.core.model.IssueComment + +import java.util.Date + + +/** + * https://developer.github.com/v3/issues/comments/ + */ +case class ApiComment( + id: Int, + user: ApiUser, + body: String, + created_at: Date, + updated_at: Date) + +object ApiComment{ + def apply(comment: IssueComment, user: ApiUser): ApiComment = + ApiComment( + id = comment.commentId, + user = user, + body = comment.content, + created_at = comment.registeredDate, + updated_at = comment.updatedDate) +} diff --git a/src/main/scala/gitbucket/core/api/ApiCommit.scala b/src/main/scala/gitbucket/core/api/ApiCommit.scala new file mode 100644 index 0000000..15b41d4 --- /dev/null +++ b/src/main/scala/gitbucket/core/api/ApiCommit.scala @@ -0,0 +1,48 @@ +package gitbucket.core.api + +import gitbucket.core.util.JGitUtil +import gitbucket.core.util.JGitUtil.CommitInfo +import gitbucket.core.util.RepositoryName + +import org.eclipse.jgit.diff.DiffEntry +import org.eclipse.jgit.api.Git + +import java.util.Date + +/** + * 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) + } +} diff --git a/src/main/scala/gitbucket/core/api/ApiCommitListItem.scala b/src/main/scala/gitbucket/core/api/ApiCommitListItem.scala new file mode 100644 index 0000000..a57431f --- /dev/null +++ b/src/main/scala/gitbucket/core/api/ApiCommitListItem.scala @@ -0,0 +1,42 @@ +package gitbucket.core.api + +import gitbucket.core.api.ApiCommitListItem._ +import gitbucket.core.util.JGitUtil.CommitInfo +import gitbucket.core.util.RepositoryName + + +/** + * https://developer.github.com/v3/repos/commits/ + */ +case class ApiCommitListItem( + sha: String, + commit: Commit, + author: Option[ApiUser], + committer: Option[ApiUser], + parents: Seq[Parent])(repositoryName: RepositoryName) { + val url = ApiPath(s"/api/v3/repos/${repositoryName.fullName}/commits/${sha}") +} + +object ApiCommitListItem { + def apply(commit: CommitInfo, repositoryName: RepositoryName): ApiCommitListItem = ApiCommitListItem( + sha = commit.id, + commit = Commit( + message = commit.fullMessage, + author = ApiPersonIdent.author(commit), + committer = ApiPersonIdent.committer(commit) + )(commit.id, repositoryName), + author = None, + committer = None, + parents = commit.parents.map(Parent(_)(repositoryName)))(repositoryName) + + case class Parent(sha: String)(repositoryName: RepositoryName){ + val url = ApiPath(s"/api/v3/repos/${repositoryName.fullName}/commits/${sha}") + } + + case class Commit( + message: String, + author: ApiPersonIdent, + committer: ApiPersonIdent)(sha:String, repositoryName: RepositoryName) { + val url = ApiPath(s"/api/v3/repos/${repositoryName.fullName}/git/commits/${sha}") + } +} diff --git a/src/main/scala/gitbucket/core/api/ApiCommitStatus.scala b/src/main/scala/gitbucket/core/api/ApiCommitStatus.scala new file mode 100644 index 0000000..03d8ef6 --- /dev/null +++ b/src/main/scala/gitbucket/core/api/ApiCommitStatus.scala @@ -0,0 +1,38 @@ +package gitbucket.core.api + +import gitbucket.core.model.CommitStatus +import gitbucket.core.util.RepositoryName + +import java.util.Date + + +/** + * https://developer.github.com/v3/repos/statuses/#create-a-status + * https://developer.github.com/v3/repos/statuses/#list-statuses-for-a-specific-ref + */ +case class ApiCommitStatus( + created_at: Date, + updated_at: Date, + state: String, + target_url: Option[String], + description: Option[String], + id: Int, + context: String, + creator: ApiUser +)(sha: String, repositoryName: RepositoryName) { + val url = ApiPath(s"/api/v3/repos/${repositoryName.fullName}/commits/${sha}/statuses") +} + + +object ApiCommitStatus { + def apply(status: CommitStatus, creator:ApiUser): ApiCommitStatus = ApiCommitStatus( + created_at = status.registeredDate, + updated_at = status.updatedDate, + state = status.state.name, + target_url = status.targetUrl, + description= status.description, + id = status.commitStatusId, + context = status.context, + creator = creator + )(status.commitId, RepositoryName(status)) +} diff --git a/src/main/scala/gitbucket/core/api/ApiError.scala b/src/main/scala/gitbucket/core/api/ApiError.scala new file mode 100644 index 0000000..95114d1 --- /dev/null +++ b/src/main/scala/gitbucket/core/api/ApiError.scala @@ -0,0 +1,5 @@ +package gitbucket.core.api + +case class ApiError( + message: String, + documentation_url: Option[String] = None) diff --git a/src/main/scala/gitbucket/core/api/ApiIssue.scala b/src/main/scala/gitbucket/core/api/ApiIssue.scala new file mode 100644 index 0000000..7fef81b --- /dev/null +++ b/src/main/scala/gitbucket/core/api/ApiIssue.scala @@ -0,0 +1,31 @@ +package gitbucket.core.api + +import gitbucket.core.model.Issue + +import java.util.Date + + +/** + * https://developer.github.com/v3/issues/ + */ +case class ApiIssue( + number: Int, + title: String, + user: ApiUser, + // labels, + state: String, + created_at: Date, + updated_at: Date, + body: String) + +object ApiIssue{ + def apply(issue: Issue, user: ApiUser): ApiIssue = + ApiIssue( + number = issue.issueId, + title = issue.title, + user = user, + state = if(issue.closed){ "closed" }else{ "open" }, + body = issue.content.getOrElse(""), + created_at = issue.registeredDate, + updated_at = issue.updatedDate) +} diff --git a/src/main/scala/gitbucket/core/api/ApiPath.scala b/src/main/scala/gitbucket/core/api/ApiPath.scala new file mode 100644 index 0000000..661ce47 --- /dev/null +++ b/src/main/scala/gitbucket/core/api/ApiPath.scala @@ -0,0 +1,6 @@ +package gitbucket.core.api + +/** + * path for api url. if set path '/repos/aa/bb' then, expand 'http://server:post/repos/aa/bb' when converted to json. + */ +case class ApiPath(path: String) diff --git a/src/main/scala/gitbucket/core/api/ApiPersonIdent.scala b/src/main/scala/gitbucket/core/api/ApiPersonIdent.scala new file mode 100644 index 0000000..3c31e15 --- /dev/null +++ b/src/main/scala/gitbucket/core/api/ApiPersonIdent.scala @@ -0,0 +1,25 @@ +package gitbucket.core.api + +import gitbucket.core.util.JGitUtil.CommitInfo + +import java.util.Date + + +case class ApiPersonIdent( + name: String, + email: String, + date: Date) + + +object ApiPersonIdent { + def author(commit: CommitInfo): ApiPersonIdent = + ApiPersonIdent( + name = commit.authorName, + email = commit.authorEmailAddress, + date = commit.authorTime) + def committer(commit: CommitInfo): ApiPersonIdent = + ApiPersonIdent( + name = commit.committerName, + email = commit.committerEmailAddress, + date = commit.commitTime) +} diff --git a/src/main/scala/gitbucket/core/api/ApiPullRequest.scala b/src/main/scala/gitbucket/core/api/ApiPullRequest.scala new file mode 100644 index 0000000..7577525 --- /dev/null +++ b/src/main/scala/gitbucket/core/api/ApiPullRequest.scala @@ -0,0 +1,59 @@ +package gitbucket.core.api + +import gitbucket.core.model.{Issue, PullRequest} + +import java.util.Date + + +/** + * https://developer.github.com/v3/pulls/ + */ +case class ApiPullRequest( + number: Int, + updated_at: Date, + created_at: Date, + head: ApiPullRequest.Commit, + base: ApiPullRequest.Commit, + mergeable: Option[Boolean], + title: String, + body: String, + user: ApiUser) { + val html_url = ApiPath(s"${base.repo.html_url.path}/pull/${number}") + //val diff_url = ApiPath(s"${base.repo.html_url.path}/pull/${number}.diff") + //val patch_url = ApiPath(s"${base.repo.html_url.path}/pull/${number}.patch") + val url = ApiPath(s"${base.repo.url.path}/pulls/${number}") + //val issue_url = ApiPath(s"${base.repo.url.path}/issues/${number}") + val commits_url = ApiPath(s"${base.repo.url.path}/pulls/${number}/commits") + val review_comments_url = ApiPath(s"${base.repo.url.path}/pulls/${number}/comments") + val review_comment_url = ApiPath(s"${base.repo.url.path}/pulls/comments/{number}") + val comments_url = ApiPath(s"${base.repo.url.path}/issues/${number}/comments") + val statuses_url = ApiPath(s"${base.repo.url.path}/statuses/${head.sha}") +} + +object ApiPullRequest{ + def apply(issue: Issue, pullRequest: PullRequest, headRepo: ApiRepository, baseRepo: ApiRepository, user: ApiUser): ApiPullRequest = ApiPullRequest( + number = issue.issueId, + updated_at = issue.updatedDate, + created_at = issue.registeredDate, + head = Commit( + sha = pullRequest.commitIdTo, + ref = pullRequest.requestBranch, + repo = headRepo)(issue.userName), + base = Commit( + sha = pullRequest.commitIdFrom, + ref = pullRequest.branch, + repo = baseRepo)(issue.userName), + mergeable = None, // TODO: need check mergeable. + title = issue.title, + body = issue.content.getOrElse(""), + user = user + ) + + case class Commit( + sha: String, + ref: String, + repo: ApiRepository)(baseOwner:String){ + val label = if( baseOwner == repo.owner.login ){ ref }else{ s"${repo.owner.login}:${ref}" } + val user = repo.owner + } +} diff --git a/src/main/scala/gitbucket/core/api/ApiRepository.scala b/src/main/scala/gitbucket/core/api/ApiRepository.scala new file mode 100644 index 0000000..0911882 --- /dev/null +++ b/src/main/scala/gitbucket/core/api/ApiRepository.scala @@ -0,0 +1,48 @@ +package gitbucket.core.api + +import gitbucket.core.model.{Account, Repository} +import gitbucket.core.service.RepositoryService.RepositoryInfo + + +// https://developer.github.com/v3/repos/ +case class ApiRepository( + name: String, + full_name: String, + description: String, + watchers: Int, + forks: Int, + `private`: Boolean, + default_branch: String, + owner: ApiUser) { + val forks_count = forks + val watchers_coun = watchers + val url = ApiPath(s"/api/v3/repos/${full_name}") + val http_url = ApiPath(s"/git/${full_name}.git") + val clone_url = ApiPath(s"/git/${full_name}.git") + val html_url = ApiPath(s"/${full_name}") +} + +object ApiRepository{ + def apply( + repository: Repository, + owner: ApiUser, + forkedCount: Int =0, + watchers: Int = 0): ApiRepository = + ApiRepository( + name = repository.repositoryName, + full_name = s"${repository.userName}/${repository.repositoryName}", + description = repository.description.getOrElse(""), + watchers = 0, + forks = forkedCount, + `private` = repository.isPrivate, + default_branch = repository.defaultBranch, + owner = owner + ) + + def apply(repositoryInfo: RepositoryInfo, owner: ApiUser): ApiRepository = + ApiRepository(repositoryInfo.repository, owner, forkedCount=repositoryInfo.forkedCount) + + def apply(repositoryInfo: RepositoryInfo, owner: Account): ApiRepository = + this(repositoryInfo.repository, ApiUser(owner)) + +} diff --git a/src/main/scala/gitbucket/core/api/ApiUser.scala b/src/main/scala/gitbucket/core/api/ApiUser.scala new file mode 100644 index 0000000..4c0ab38 --- /dev/null +++ b/src/main/scala/gitbucket/core/api/ApiUser.scala @@ -0,0 +1,36 @@ +package gitbucket.core.api + +import gitbucket.core.model.Account + +import java.util.Date + + +case class ApiUser( + login: String, + email: String, + `type`: String, + site_admin: Boolean, + created_at: Date) { + val url = ApiPath(s"/api/v3/users/${login}") + val html_url = ApiPath(s"/${login}") + // val followers_url = ApiPath(s"/api/v3/users/${login}/followers") + // val following_url = ApiPath(s"/api/v3/users/${login}/following{/other_user}") + // val gists_url = ApiPath(s"/api/v3/users/${login}/gists{/gist_id}") + // val starred_url = ApiPath(s"/api/v3/users/${login}/starred{/owner}{/repo}") + // val subscriptions_url = ApiPath(s"/api/v3/users/${login}/subscriptions") + // val organizations_url = ApiPath(s"/api/v3/users/${login}/orgs") + // val repos_url = ApiPath(s"/api/v3/users/${login}/repos") + // val events_url = ApiPath(s"/api/v3/users/${login}/events{/privacy}") + // val received_events_url = ApiPath(s"/api/v3/users/${login}/received_events") +} + + +object ApiUser{ + def apply(user: Account): ApiUser = ApiUser( + login = user.fullName, + email = user.mailAddress, + `type` = if(user.isGroupAccount){ "Organization" }else{ "User" }, + site_admin = user.isAdmin, + created_at = user.registeredDate + ) +} diff --git a/src/main/scala/gitbucket/core/api/CreateAComment.scala b/src/main/scala/gitbucket/core/api/CreateAComment.scala new file mode 100644 index 0000000..f636e8a --- /dev/null +++ b/src/main/scala/gitbucket/core/api/CreateAComment.scala @@ -0,0 +1,7 @@ +package gitbucket.core.api + +/** + * https://developer.github.com/v3/issues/comments/#create-a-comment + * api form + */ +case class CreateAComment(body: String) diff --git a/src/main/scala/gitbucket/core/api/CreateAStatus.scala b/src/main/scala/gitbucket/core/api/CreateAStatus.scala new file mode 100644 index 0000000..3871999 --- /dev/null +++ b/src/main/scala/gitbucket/core/api/CreateAStatus.scala @@ -0,0 +1,26 @@ +package gitbucket.core.api + +import gitbucket.core.model.CommitState + +/** + * https://developer.github.com/v3/repos/statuses/#create-a-status + * api form + */ +case class CreateAStatus( + /* state is Required. The state of the status. Can be one of pending, success, error, or failure. */ + state: String, + /* context is a string label to differentiate this status from the status of other systems. Default: "default" */ + context: Option[String], + /* The target URL to associate with this status. This URL will be linked from the GitHub UI to allow users to easily see the ‘source’ of the Status. */ + target_url: Option[String], + /* description is a short description of the status.*/ + description: Option[String] +) { + def isValid: Boolean = { + CommitState.valueOf(state).isDefined && + // only http + target_url.filterNot(f => "\\Ahttps?://".r.findPrefixOf(f).isDefined && f.length<255).isEmpty && + context.filterNot(f => f.length<255).isEmpty && + description.filterNot(f => f.length<1000).isEmpty + } +} diff --git a/src/main/scala/gitbucket/core/api/JsonFormat.scala b/src/main/scala/gitbucket/core/api/JsonFormat.scala new file mode 100644 index 0000000..bcca2f1 --- /dev/null +++ b/src/main/scala/gitbucket/core/api/JsonFormat.scala @@ -0,0 +1,44 @@ +package gitbucket.core.api + +import org.joda.time.DateTime +import org.joda.time.DateTimeZone +import org.joda.time.format._ +import org.json4s._ +import org.json4s.jackson.Serialization + +import java.util.Date + +import scala.util.Try + + +object JsonFormat { + case class Context(baseUrl:String) + val parserISO = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss'Z'") + val jsonFormats = Serialization.formats(NoTypeHints) + new CustomSerializer[Date](format => + ( + { case JString(s) => Try(parserISO.parseDateTime(s)).toOption.map(_.toDate) + .getOrElse(throw new MappingException("Can't convert " + s + " to Date")) }, + { case x: Date => JString(parserISO.print(new DateTime(x).withZone(DateTimeZone.UTC))) } + ) + ) + FieldSerializer[ApiUser]() + FieldSerializer[ApiPullRequest]() + FieldSerializer[ApiRepository]() + + FieldSerializer[ApiCommitListItem.Parent]() + FieldSerializer[ApiCommitListItem]() + FieldSerializer[ApiCommitListItem.Commit]() + + FieldSerializer[ApiCommitStatus]() + FieldSerializer[ApiCommit]() + FieldSerializer[ApiCombinedCommitStatus]() + + FieldSerializer[ApiPullRequest.Commit]() + + + def apiPathSerializer(c: Context) = new CustomSerializer[ApiPath](format => + ( + { + case JString(s) if s.startsWith(c.baseUrl) => ApiPath(s.substring(c.baseUrl.length)) + case JString(s) => throw new MappingException("Can't convert " + s + " to ApiPath") + }, + { + case ApiPath(path) => JString(c.baseUrl+path) + } + ) + ) + /** + * convert object to json string + */ + def apply(obj: AnyRef)(implicit c: Context): String = Serialization.write(obj)(jsonFormats + apiPathSerializer(c)) +} diff --git a/src/main/scala/gitbucket/core/controller/AccountController.scala b/src/main/scala/gitbucket/core/controller/AccountController.scala index 335d60c..29c89f0 100644 --- a/src/main/scala/gitbucket/core/controller/AccountController.scala +++ b/src/main/scala/gitbucket/core/controller/AccountController.scala @@ -1,26 +1,23 @@ package gitbucket.core.controller import gitbucket.core.account.html +import gitbucket.core.api._ import gitbucket.core.helper import gitbucket.core.model.GroupMember -import gitbucket.core.util._ -import gitbucket.core.util.Implicits._ -import gitbucket.core.util.Directory._ -import gitbucket.core.util.ControlUtil._ -import gitbucket.core.util.StringUtil._ -import gitbucket.core.ssh.SshUtil import gitbucket.core.service._ -import gitbucket.core.service.WebHookService._ +import gitbucket.core.ssh.SshUtil +import gitbucket.core.util.ControlUtil._ +import gitbucket.core.util.Directory._ +import gitbucket.core.util.Implicits._ +import gitbucket.core.util.StringUtil._ +import gitbucket.core.util._ + import jp.sf.amateras.scalatra.forms._ import org.apache.commons.io.FileUtils -import org.scalatra.i18n.Messages import org.eclipse.jgit.api.Git -import org.eclipse.jgit.lib.{FileMode, Constants} import org.eclipse.jgit.dircache.DirCache - - -// TODO(tanacasino): Fix package name -import api._ +import org.eclipse.jgit.lib.{FileMode, Constants} +import org.scalatra.i18n.Messages class AccountController extends AccountControllerBase @@ -28,6 +25,7 @@ with OneselfAuthenticator with UsersAuthenticator with GroupManagerAuthenticator with ReadableUsersAuthenticator with AccessTokenService with WebHookService + trait AccountControllerBase extends AccountManagementControllerBase { self: AccountService with RepositoryService with ActivityService with WikiService with LabelsService with SshKeyService with OneselfAuthenticator with UsersAuthenticator with GroupManagerAuthenticator with ReadableUsersAuthenticator diff --git a/src/main/scala/gitbucket/core/controller/ControllerBase.scala b/src/main/scala/gitbucket/core/controller/ControllerBase.scala index a1b732e..09cdc85 100644 --- a/src/main/scala/gitbucket/core/controller/ControllerBase.scala +++ b/src/main/scala/gitbucket/core/controller/ControllerBase.scala @@ -1,5 +1,6 @@ package gitbucket.core.controller +import gitbucket.core.api.ApiError import gitbucket.core.model.Account import gitbucket.core.service.{AccountService, SystemSettingsService} import gitbucket.core.util.ControlUtil._ @@ -113,7 +114,7 @@ org.scalatra.NotFound() } else if(request.hasAttribute(Keys.Request.APIv3)){ contentType = formats("json") - org.scalatra.NotFound(api.ApiError("Not Found")) + org.scalatra.NotFound(ApiError("Not Found")) } else { org.scalatra.NotFound(gitbucket.core.html.error("Not Found")) } @@ -123,7 +124,7 @@ org.scalatra.Unauthorized() } else if(request.hasAttribute(Keys.Request.APIv3)){ contentType = formats("json") - org.scalatra.Unauthorized(api.ApiError("Requires authentication")) + org.scalatra.Unauthorized(ApiError("Requires authentication")) } else { if(context.loginAccount.isDefined){ org.scalatra.Unauthorized(redirect("/")) diff --git a/src/main/scala/gitbucket/core/controller/IndexController.scala b/src/main/scala/gitbucket/core/controller/IndexController.scala index 3f0df29..b8cf09c 100644 --- a/src/main/scala/gitbucket/core/controller/IndexController.scala +++ b/src/main/scala/gitbucket/core/controller/IndexController.scala @@ -1,17 +1,20 @@ package gitbucket.core.controller -import gitbucket.core.html +import gitbucket.core.api._ import gitbucket.core.helper.xml +import gitbucket.core.html import gitbucket.core.model.Account import gitbucket.core.service.{RepositoryService, ActivityService, AccountService} -import gitbucket.core.util.{LDAPUtil, Keys, UsersAuthenticator} import gitbucket.core.util.Implicits._ +import gitbucket.core.util.{LDAPUtil, Keys, UsersAuthenticator} + import jp.sf.amateras.scalatra.forms._ -import api._ + class IndexController extends IndexControllerBase with RepositoryService with ActivityService with AccountService with UsersAuthenticator + trait IndexControllerBase extends ControllerBase { self: RepositoryService with ActivityService with AccountService with UsersAuthenticator => @@ -114,6 +117,6 @@ get("/api/v3/rate_limit"){ contentType = formats("json") // this message is same as github enterprise... - org.scalatra.NotFound(api.ApiError("Rate limiting is not enabled.")) + org.scalatra.NotFound(ApiError("Rate limiting is not enabled.")) } } diff --git a/src/main/scala/gitbucket/core/controller/IssuesController.scala b/src/main/scala/gitbucket/core/controller/IssuesController.scala index b598452..4f9c810 100644 --- a/src/main/scala/gitbucket/core/controller/IssuesController.scala +++ b/src/main/scala/gitbucket/core/controller/IssuesController.scala @@ -1,25 +1,20 @@ package gitbucket.core.controller +import gitbucket.core.api._ import gitbucket.core.issues.html import gitbucket.core.model.Issue +import gitbucket.core.service.IssuesService._ import gitbucket.core.service._ -import gitbucket.core.service.WebHookService._ -import gitbucket.core.util._ import gitbucket.core.util.ControlUtil._ import gitbucket.core.util.Implicits._ +import gitbucket.core.util._ import gitbucket.core.view import gitbucket.core.view.Markdown + import jp.sf.amateras.scalatra.forms._ - -import IssuesService._ import org.scalatra.Ok -// TODO(tanacasino): Fix package name -import api._ - - - class IssuesController extends IssuesControllerBase with IssuesService with RepositoryService with AccountService with LabelsService with MilestonesService with ActivityService with ReadableUsersAuthenticator with ReferrerAuthenticator with CollaboratorsAuthenticator with PullRequestService with WebHookIssueCommentService diff --git a/src/main/scala/gitbucket/core/controller/PullRequestsController.scala b/src/main/scala/gitbucket/core/controller/PullRequestsController.scala index edb165a..68815f9 100644 --- a/src/main/scala/gitbucket/core/controller/PullRequestsController.scala +++ b/src/main/scala/gitbucket/core/controller/PullRequestsController.scala @@ -1,12 +1,12 @@ package gitbucket.core.controller -import gitbucket.core.model.{Account, CommitStatus, CommitState, Repository, PullRequest, Issue} +import gitbucket.core.api._ +import gitbucket.core.model.{Account, CommitState, Repository, PullRequest, Issue} import gitbucket.core.pulls.html import gitbucket.core.service.CommitStatusService import gitbucket.core.service.MergeService import gitbucket.core.service.IssuesService._ import gitbucket.core.service.PullRequestService._ -import gitbucket.core.service.WebHookService._ import gitbucket.core.service._ import gitbucket.core.util.ControlUtil._ import gitbucket.core.util.Directory._ @@ -18,23 +18,18 @@ import jp.sf.amateras.scalatra.forms._ import org.eclipse.jgit.api.Git -import org.eclipse.jgit.errors.NoMergeBaseException -import org.eclipse.jgit.lib.{ObjectId, CommitBuilder, PersonIdent} -import org.eclipse.jgit.merge.MergeStrategy -import org.eclipse.jgit.transport.RefSpec +import org.eclipse.jgit.lib.PersonIdent import org.slf4j.LoggerFactory + import scala.collection.JavaConverters._ -// TODO(tanacasino): Fix package name -import api._ - - class PullRequestsController extends PullRequestsControllerBase with RepositoryService with AccountService with IssuesService with PullRequestService with MilestonesService with LabelsService with CommitsService with ActivityService with WebHookPullRequestService with ReferrerAuthenticator with CollaboratorsAuthenticator with CommitStatusService with MergeService + trait PullRequestsControllerBase extends ControllerBase { self: RepositoryService with AccountService with IssuesService with MilestonesService with LabelsService with CommitsService with ActivityService with PullRequestService with WebHookPullRequestService with ReferrerAuthenticator with CollaboratorsAuthenticator diff --git a/src/main/scala/gitbucket/core/controller/RepositoryViewerController.scala b/src/main/scala/gitbucket/core/controller/RepositoryViewerController.scala index 8062f46..1dca521 100644 --- a/src/main/scala/gitbucket/core/controller/RepositoryViewerController.scala +++ b/src/main/scala/gitbucket/core/controller/RepositoryViewerController.scala @@ -1,5 +1,6 @@ package gitbucket.core.controller +import gitbucket.core.api._ import gitbucket.core.repo.html import gitbucket.core.helper import gitbucket.core.service._ @@ -24,9 +25,6 @@ import org.eclipse.jgit.treewalk._ import org.scalatra._ -// TODO(tanacasino) Fix package name -import api._ - class RepositoryViewerController extends RepositoryViewerControllerBase with RepositoryService with AccountService with ActivityService with IssuesService with WebHookService with CommitsService diff --git a/src/main/scala/gitbucket/core/service/WebHookService.scala b/src/main/scala/gitbucket/core/service/WebHookService.scala index cba641d..2e8f786 100644 --- a/src/main/scala/gitbucket/core/service/WebHookService.scala +++ b/src/main/scala/gitbucket/core/service/WebHookService.scala @@ -1,33 +1,18 @@ package gitbucket.core.service -import gitbucket.core.model.{WebHook, Account, Issue, PullRequest, IssueComment, Repository} +import gitbucket.core.api._ +import gitbucket.core.model.{WebHook, Account, Issue, PullRequest, IssueComment} import gitbucket.core.model.Profile._ import profile.simple._ - -import gitbucket.core.service.RepositoryService.RepositoryInfo -import gitbucket.core.util.JGitUtil import gitbucket.core.util.JGitUtil.CommitInfo import gitbucket.core.util.RepositoryName - -import org.slf4j.LoggerFactory import gitbucket.core.service.RepositoryService.RepositoryInfo - - -import org.slf4j.LoggerFactory -import RepositoryService.RepositoryInfo -import org.eclipse.jgit.diff.DiffEntry -import JGitUtil.CommitInfo - - -import org.eclipse.jgit.api.Git -import org.apache.http.message.BasicNameValuePair -import org.apache.http.client.entity.UrlEncodedFormEntity import org.apache.http.NameValuePair -import java.util.Date - -// TODO(tanacasino): Fix package name -import api._ +import org.apache.http.client.entity.UrlEncodedFormEntity +import org.apache.http.message.BasicNameValuePair +import org.eclipse.jgit.api.Git +import org.slf4j.LoggerFactory trait WebHookService { diff --git a/src/main/scala/gitbucket/core/servlet/GitRepositoryServlet.scala b/src/main/scala/gitbucket/core/servlet/GitRepositoryServlet.scala index 0f490b3..88b8124 100644 --- a/src/main/scala/gitbucket/core/servlet/GitRepositoryServlet.scala +++ b/src/main/scala/gitbucket/core/servlet/GitRepositoryServlet.scala @@ -1,8 +1,16 @@ package gitbucket.core.servlet +import gitbucket.core.api import gitbucket.core.model.Session +import gitbucket.core.service.IssuesService.IssueSearchCondition +import gitbucket.core.service.WebHookService._ import gitbucket.core.service._ +import gitbucket.core.util.ControlUtil._ +import gitbucket.core.util.Implicits._ +import gitbucket.core.util.JGitUtil.CommitInfo import gitbucket.core.util._ + +import org.eclipse.jgit.api.Git import org.eclipse.jgit.http.server.GitServlet import org.eclipse.jgit.lib._ import org.eclipse.jgit.transport._ @@ -12,13 +20,7 @@ import javax.servlet.ServletConfig import javax.servlet.ServletContext import javax.servlet.http.{HttpServletResponse, HttpServletRequest} -import gitbucket.core.util.StringUtil -import gitbucket.core.util.ControlUtil._ -import gitbucket.core.util.Implicits._ -import WebHookService._ -import org.eclipse.jgit.api.Git -import JGitUtil.CommitInfo -import IssuesService.IssueSearchCondition + /** * Provides Git repository via HTTP. diff --git a/src/main/scala/gitbucket/core/util/Implicits.scala b/src/main/scala/gitbucket/core/util/Implicits.scala index d56424b..b9a6547 100644 --- a/src/main/scala/gitbucket/core/util/Implicits.scala +++ b/src/main/scala/gitbucket/core/util/Implicits.scala @@ -1,5 +1,6 @@ package gitbucket.core.util +import gitbucket.core.api.JsonFormat import gitbucket.core.controller.Context import gitbucket.core.servlet.Database @@ -19,7 +20,7 @@ // Convert to slick session. implicit def request2Session(implicit request: HttpServletRequest): JdbcBackend#Session = Database.getSession(request) - implicit def context2ApiJsonFormatContext(implicit context: Context): api.JsonFormat.Context = api.JsonFormat.Context(context.baseUrl) + implicit def context2ApiJsonFormatContext(implicit context: Context): JsonFormat.Context = JsonFormat.Context(context.baseUrl) implicit class RichSeq[A](seq: Seq[A]) {