Revert "Improve API compatibility for SourceTree and Drone.io (#2286)" (#2323)

This reverts commit 841e6d110c.
This commit is contained in:
Naoki Takezoe
2019-06-02 19:56:41 +09:00
committed by GitHub
parent 6cf00c5c66
commit f1e4116672
21 changed files with 38 additions and 423 deletions

View File

@@ -1,58 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<changeSet>
<!-- add ID column to REPOSITORY table -->
<!-- drop other table's foreign keys -->
<dropForeignKeyConstraint constraintName="IDX_ACTIVITY_FK0" baseTableName="ACTIVITY"/>
<dropForeignKeyConstraint constraintName="IDX_COLLABORATOR_FK0" baseTableName="COLLABORATOR"/>
<dropForeignKeyConstraint constraintName="IDX_COMMIT_COMMENT_FK0" baseTableName="COMMIT_COMMENT"/>
<dropForeignKeyConstraint constraintName="IDX_COMMIT_STATUS_FK1" baseTableName="COMMIT_STATUS"/>
<dropForeignKeyConstraint constraintName="IDX_LABEL_FK0" baseTableName="LABEL"/>
<dropForeignKeyConstraint constraintName="IDX_MILESTONE_FK0" baseTableName="MILESTONE"/>
<dropForeignKeyConstraint constraintName="IDX_ISSUE_FK0" baseTableName="ISSUE"/>
<dropForeignKeyConstraint constraintName="IDX_ISSUE_ID_FK1" baseTableName="ISSUE_ID"/>
<dropForeignKeyConstraint constraintName="IDX_WEB_HOOK_FK0" baseTableName="WEB_HOOK"/>
<dropForeignKeyConstraint constraintName="IDX_PROTECTED_BRANCH_FK0" baseTableName="PROTECTED_BRANCH"/>
<dropForeignKeyConstraint constraintName="IDX_DEPLOY_KEY_FK0" baseTableName="DEPLOY_KEY"/>
<dropForeignKeyConstraint constraintName="IDX_PRIORITY_FK0" baseTableName="PRIORITY"/>
<dropForeignKeyConstraint constraintName="IDX_RELEASE_TAG_FK0" baseTableName="RELEASE_TAG"/>
<!-- modify REPOSITORY table -->
<dropForeignKeyConstraint constraintName="IDX_REPOSITORY_FK0" baseTableName="REPOSITORY"/>
<dropPrimaryKey tableName="REPOSITORY" constraintName="IDX_REPOSITORY_PK"/>
<addColumn tableName="REPOSITORY">
<column name="REPOSITORY_ID" type="int" nullable="false" autoIncrement="false" unique="true"/>
</addColumn>
<addPrimaryKey constraintName="IDX_REPOSITORY_PK" tableName="REPOSITORY" columnNames="REPOSITORY_ID"/>
<addAutoIncrement tableName="REPOSITORY" columnName="REPOSITORY_ID" columnDataType="int"/>
<addUniqueConstraint constraintName="IDX_REPOSITORY_1" tableName="REPOSITORY" columnNames="USER_NAME, REPOSITORY_NAME"/>
<addForeignKeyConstraint constraintName="IDX_REPOSITORY_FK0" baseTableName="REPOSITORY" baseColumnNames="USER_NAME" referencedTableName="ACCOUNT" referencedColumnNames="USER_NAME"/>
<!-- Repair other table's foreign keys -->
<addForeignKeyConstraint constraintName="IDX_ACTIVITY_FK0" baseTableName="ACTIVITY" baseColumnNames="USER_NAME, REPOSITORY_NAME" referencedTableName="REPOSITORY" referencedColumnNames="USER_NAME, REPOSITORY_NAME"/>
<addForeignKeyConstraint constraintName="IDX_COLLABORATOR_FK0" baseTableName="COLLABORATOR" baseColumnNames="USER_NAME, REPOSITORY_NAME" referencedTableName="REPOSITORY" referencedColumnNames="USER_NAME, REPOSITORY_NAME"/>
<addForeignKeyConstraint constraintName="IDX_COMMIT_COMMENT_FK0" baseTableName="COMMIT_COMMENT" baseColumnNames="USER_NAME, REPOSITORY_NAME" referencedTableName="REPOSITORY" referencedColumnNames="USER_NAME, REPOSITORY_NAME"/>
<addForeignKeyConstraint constraintName="IDX_COMMIT_STATUS_FK1" baseTableName="COMMIT_STATUS" baseColumnNames="USER_NAME, REPOSITORY_NAME" referencedTableName="REPOSITORY" referencedColumnNames="USER_NAME, REPOSITORY_NAME" onDelete="CASCADE" onUpdate="CASCADE"/>
<addForeignKeyConstraint constraintName="IDX_LABEL_FK0" baseTableName="LABEL" baseColumnNames="USER_NAME, REPOSITORY_NAME" referencedTableName="REPOSITORY" referencedColumnNames="USER_NAME, REPOSITORY_NAME"/>
<addForeignKeyConstraint constraintName="IDX_MILESTONE_FK0" baseTableName="MILESTONE" baseColumnNames="USER_NAME, REPOSITORY_NAME" referencedTableName="REPOSITORY" referencedColumnNames="USER_NAME, REPOSITORY_NAME"/>
<addForeignKeyConstraint constraintName="IDX_ISSUE_FK0" baseTableName="ISSUE" baseColumnNames="USER_NAME, REPOSITORY_NAME" referencedTableName="REPOSITORY" referencedColumnNames="USER_NAME, REPOSITORY_NAME"/>
<addForeignKeyConstraint constraintName="IDX_ISSUE_ID_FK1" baseTableName="ISSUE_ID" baseColumnNames="USER_NAME, REPOSITORY_NAME" referencedTableName="REPOSITORY" referencedColumnNames="USER_NAME, REPOSITORY_NAME"/>
<addForeignKeyConstraint constraintName="IDX_WEB_HOOK_FK0" baseTableName="WEB_HOOK" baseColumnNames="USER_NAME, REPOSITORY_NAME" referencedTableName="REPOSITORY" referencedColumnNames="USER_NAME, REPOSITORY_NAME"/>
<addForeignKeyConstraint constraintName="IDX_PROTECTED_BRANCH_FK0" baseTableName="PROTECTED_BRANCH" baseColumnNames="USER_NAME, REPOSITORY_NAME" referencedTableName="REPOSITORY" referencedColumnNames="USER_NAME, REPOSITORY_NAME" onDelete="CASCADE" onUpdate="CASCADE"/>
<addForeignKeyConstraint constraintName="IDX_DEPLOY_KEY_FK0" baseTableName="DEPLOY_KEY" baseColumnNames="USER_NAME, REPOSITORY_NAME" referencedTableName="REPOSITORY" referencedColumnNames="USER_NAME, REPOSITORY_NAME"/>
<addForeignKeyConstraint constraintName="IDX_PRIORITY_FK0" baseTableName="PRIORITY" baseColumnNames="USER_NAME, REPOSITORY_NAME" referencedTableName="REPOSITORY" referencedColumnNames="USER_NAME, REPOSITORY_NAME"/>
<addForeignKeyConstraint constraintName="IDX_RELEASE_TAG_FK0" baseTableName="RELEASE_TAG" baseColumnNames="USER_NAME, REPOSITORY_NAME" referencedTableName="REPOSITORY" referencedColumnNames="USER_NAME, REPOSITORY_NAME"/>
<!-- add ID column to WEB_HOOK table -->
<dropForeignKeyConstraint constraintName="IDX_WEB_HOOK_EVENT_FK0" baseTableName="WEB_HOOK_EVENT"/>
<dropForeignKeyConstraint constraintName="IDX_WEB_HOOK_FK0" baseTableName="WEB_HOOK"/>
<dropPrimaryKey tableName="WEB_HOOK" constraintName="IDX_WEB_HOOK_PK"/>
<addColumn tableName="WEB_HOOK">
<column name="WEB_HOOK_ID" type="int" nullable="false" autoIncrement="false" unique="true"/>
</addColumn>
<addPrimaryKey constraintName="IDX_WEB_HOOK_PK" tableName="WEB_HOOK" columnNames="WEB_HOOK_ID"/>
<addAutoIncrement tableName="WEB_HOOK" columnName="WEB_HOOK_ID" columnDataType="int"/>
<addForeignKeyConstraint constraintName="IDX_WEB_HOOK_FK0" baseTableName="WEB_HOOK" baseColumnNames="USER_NAME, REPOSITORY_NAME" referencedTableName="REPOSITORY" referencedColumnNames="USER_NAME, REPOSITORY_NAME"/>
<addUniqueConstraint constraintName="IDX_WEB_HOOK_1" tableName="WEB_HOOK" columnNames="USER_NAME, REPOSITORY_NAME, URL"/>
<addForeignKeyConstraint constraintName="IDX_WEB_HOOK_EVENT_FK0" baseTableName="WEB_HOOK_EVENT" baseColumnNames="USER_NAME, REPOSITORY_NAME, URL" referencedTableName="WEB_HOOK" referencedColumnNames="USER_NAME, REPOSITORY_NAME, URL" onDelete="CASCADE" onUpdate="CASCADE"/>
</changeSet>

View File

@@ -63,6 +63,5 @@ object GitBucketCoreModule
new Version("4.30.1"),
new Version("4.31.0", new LiquibaseMigration("update/gitbucket-core_4.31.xml")),
new Version("4.31.1"),
new Version("4.31.2"),
new Version("4.32.0", new LiquibaseMigration("update/gitbucket-core_4.32.xml"))
new Version("4.31.2")
)

View File

@@ -1,16 +0,0 @@
package gitbucket.core.api
import gitbucket.core.model.Account
case class ApiEmail(
email: String,
primary: Boolean
) {
val verified = true
val visibility = "public"
}
object ApiEmail {
def fromMailAddresses(primaryMailAddress: String, extraMailAddresses: List[String]): List[ApiEmail] = {
ApiEmail(primaryMailAddress, true) :: extraMailAddresses.map { ApiEmail(_, false) }
}
}

View File

@@ -1,13 +0,0 @@
package gitbucket.core.api
import gitbucket.core.service.RepositoryService
case class ApiPermission(
admin: Boolean,
push: Boolean,
pull: Boolean
)
object ApiPermission {
def apply(permission: RepositoryService.RepositoryPermission): ApiPermission =
ApiPermission(permission.isOwner, permission.isDeveloper, permission.isGuest)
}

View File

@@ -1,9 +1,6 @@
package gitbucket.core.api
import java.time.Instant
import gitbucket.core.model.{Account, Repository}
import gitbucket.core.service.RepositoryService
import gitbucket.core.service.RepositoryService.RepositoryInfo
// https://developer.github.com/v3/repos/
@@ -11,17 +8,13 @@ case class ApiRepository(
name: String,
full_name: String,
description: String,
id: Int,
watchers: Int,
forks: Int,
`private`: Boolean,
fork: Boolean,
default_branch: String,
owner: ApiUser,
created_at: java.util.Date,
updated_at: java.util.Date,
permissions: Option[ApiPermission]
owner: ApiUser
) {
val id = 0 // dummy id
val forks_count = forks
val watchers_count = watchers
val url = ApiPath(s"/api/v3/repos/${full_name}")
@@ -35,7 +28,6 @@ object ApiRepository {
def apply(
repository: Repository,
owner: ApiUser,
permission: Option[RepositoryService.RepositoryPermission],
forkedCount: Int = 0,
watchers: Int = 0
): ApiRepository =
@@ -43,45 +35,28 @@ object ApiRepository {
name = repository.repositoryName,
full_name = s"${repository.userName}/${repository.repositoryName}",
description = repository.description.getOrElse(""),
id = repository.repositoryId,
watchers = watchers,
forks = forkedCount,
`private` = repository.isPrivate,
fork = repository.parentRepositoryName.isDefined,
default_branch = repository.defaultBranch,
owner = owner,
created_at = repository.registeredDate,
updated_at = repository.updatedDate,
permission.map(ApiPermission(_))
owner = owner
)
def apply(
repositoryInfo: RepositoryInfo,
owner: Account,
permission: RepositoryService.RepositoryPermission
): ApiRepository =
ApiRepository(repositoryInfo.repository, ApiUser(owner), Some(permission), forkedCount = repositoryInfo.forkedCount)
def apply(repositoryInfo: RepositoryInfo, owner: ApiUser): ApiRepository =
ApiRepository(repositoryInfo.repository, owner, forkedCount = repositoryInfo.forkedCount)
def apply(
repositoryInfo: RepositoryInfo,
owner: Account
): ApiRepository =
ApiRepository(repositoryInfo.repository, ApiUser(owner), None, forkedCount = repositoryInfo.forkedCount)
def apply(repositoryInfo: RepositoryInfo, owner: Account): ApiRepository =
this(repositoryInfo, ApiUser(owner))
def forDummyPayload(owner: ApiUser): ApiRepository =
ApiRepository(
name = "dummy",
full_name = s"${owner.login}/dummy",
description = "",
id = 0,
watchers = 0,
forks = 0,
`private` = false,
fork = false,
default_branch = "master",
owner = owner,
new java.util.Date,
new java.util.Date,
Some(ApiPermission(RepositoryService.RepositoryPermission(true, true, true)))
owner = owner
)
}

View File

@@ -1,23 +0,0 @@
package gitbucket.core.api
import gitbucket.core.model.RepositoryWebHook
import gitbucket.core.model.WebHook
case class ApiRepositoryWebhook(
id: Int,
events: Seq[String],
config: ApiWebhook
) {
val active = true
val name = "web"
}
object ApiRepositoryWebhook {
def apply(repositoryWebhook: RepositoryWebHook, events: Set[WebHook.Event]): ApiRepositoryWebhook =
ApiRepositoryWebhook(
id = repositoryWebhook.webHookId,
events = events.map { e =>
e.name
}.toSeq,
config = ApiWebhook(repositoryWebhook.url, repositoryWebhook.ctype.ctype)
)
}

View File

@@ -1,4 +0,0 @@
package gitbucket.core.api
import gitbucket.core.model.WebHook
case class ApiWebhook(url: String, content_type: String)

View File

@@ -1,15 +0,0 @@
package gitbucket.core.api
case class CreateAWebhookConfig(
url: String,
content_type: String = "form",
secret: Option[String],
insecure_ssl: Option[String]
)
case class CreateAWebhook(
name: Option[String],
config: CreateAWebhookConfig,
events: Seq[String],
active: Option[Boolean]
)

View File

@@ -45,10 +45,6 @@ object JsonFormat {
FieldSerializer[ApiCommits.File]() +
FieldSerializer[ApiRelease]() +
FieldSerializer[ApiReleaseAsset]() +
FieldSerializer[ApiPermission]() +
FieldSerializer[ApiWebhook]() +
FieldSerializer[ApiRepositoryWebhook]() +
FieldSerializer[ApiEmail]() +
ApiBranchProtection.enforcementLevelSerializer
def apiPathSerializer(c: Context) =

View File

@@ -22,7 +22,6 @@ class ApiController
with ApiRepositoryContentsControllerBase
with ApiRepositoryControllerBase
with ApiRepositoryStatusControllerBase
with ApiRepositoryWebhookcontrollerBase
with ApiUserControllerBase
with RepositoryService
with AccountService

View File

@@ -53,12 +53,8 @@ trait ApiPullRequestControllerBase extends ControllerBase {
ApiPullRequest(
issue = issue,
pullRequest = pullRequest,
headRepo = ApiRepository(
headRepo,
ApiUser(headOwner),
Some(getPermission(headRepo.userName, headRepo.repositoryName, context.loginAccount))
),
baseRepo = ApiRepository(repository, baseOwner),
headRepo = ApiRepository(headRepo, ApiUser(headOwner)),
baseRepo = ApiRepository(repository, ApiUser(baseOwner)),
user = ApiUser(issueUser),
labels = getIssueLabels(repository.owner, repository.name, issue.issueId)
.map(ApiLabel(_, RepositoryName(repository))),
@@ -243,8 +239,8 @@ trait ApiPullRequestControllerBase extends ControllerBase {
ApiPullRequest(
issue = issue,
pullRequest = pullRequest,
headRepo = ApiRepository(headRepo, headOwner),
baseRepo = ApiRepository(repository, baseOwner),
headRepo = ApiRepository(headRepo, ApiUser(headOwner)),
baseRepo = ApiRepository(repository, ApiUser(baseOwner)),
user = ApiUser(issueUser),
labels = getIssueLabels(repository.owner, repository.name, issue.issueId)
.map(ApiLabel(_, RepositoryName(repository))),

View File

@@ -30,7 +30,7 @@ trait ApiRepositoryControllerBase extends ControllerBase {
*/
get("/api/v3/user/repos")(usersOnly {
JsonFormat(getVisibleRepositories(context.loginAccount, Option(context.loginAccount.get.userName)).map { r =>
ApiRepository(r, getAccountByUserName(r.owner).get, getPermission(r.owner, r.name, context.loginAccount))
ApiRepository(r, getAccountByUserName(r.owner).get)
})
})
@@ -40,7 +40,7 @@ trait ApiRepositoryControllerBase extends ControllerBase {
*/
get("/api/v3/users/:userName/repos") {
JsonFormat(getVisibleRepositories(context.loginAccount, Some(params("userName"))).map { r =>
ApiRepository(r, getAccountByUserName(r.owner).get, getPermission(r.owner, r.name, context.loginAccount))
ApiRepository(r, getAccountByUserName(r.owner).get)
})
}
@@ -50,7 +50,7 @@ trait ApiRepositoryControllerBase extends ControllerBase {
*/
get("/api/v3/orgs/:orgName/repos") {
JsonFormat(getVisibleRepositories(context.loginAccount, Some(params("orgName"))).map { r =>
ApiRepository(r, getAccountByUserName(r.owner).get, getPermission(r.owner, r.name, context.loginAccount))
ApiRepository(r, getAccountByUserName(r.owner).get)
})
}
@@ -90,13 +90,7 @@ trait ApiRepositoryControllerBase extends ControllerBase {
val repository = Database() withTransaction { session =>
getRepository(owner, data.name)(session).get
}
JsonFormat(
ApiRepository(
repository,
getAccountByUserName(owner).get,
getPermission(repository.owner, repository.name, context.loginAccount)
)
)
JsonFormat(ApiRepository(repository, ApiUser(getAccountByUserName(owner).get)))
} else {
ApiError(
"A repository with this name already exists on this account",
@@ -130,13 +124,7 @@ trait ApiRepositoryControllerBase extends ControllerBase {
val repository = Database() withTransaction { session =>
getRepository(groupName, data.name).get
}
JsonFormat(
ApiRepository(
repository,
getAccountByUserName(groupName).get,
getPermission(repository.owner, repository.name, context.loginAccount)
)
)
JsonFormat(ApiRepository(repository, ApiUser(getAccountByUserName(groupName).get)))
} else {
ApiError(
"A repository with this name already exists for this group",
@@ -152,13 +140,7 @@ trait ApiRepositoryControllerBase extends ControllerBase {
* https://developer.github.com/v3/repos/#get
*/
get("/api/v3/repos/:owner/:repository")(referrersOnly { repository =>
JsonFormat(
ApiRepository(
repository,
getAccountByUserName(repository.owner).get,
getPermission(repository.owner, repository.name, context.loginAccount)
)
)
JsonFormat(ApiRepository(repository, ApiUser(getAccountByUserName(repository.owner).get)))
})
/*

View File

@@ -1,100 +0,0 @@
package gitbucket.core.controller.api
import gitbucket.core.api.{ApiRepositoryWebhook, CreateAWebhook, JsonFormat}
import gitbucket.core.controller.ControllerBase
import gitbucket.core.model.{WebHook, WebHookContentType}
import gitbucket.core.service.WebHookService
import gitbucket.core.util.OwnerAuthenticator
import gitbucket.core.util.Implicits._
import org.scalatra.{NoContent, NotFound}
trait ApiRepositoryWebhookcontrollerBase extends ControllerBase {
self: WebHookService with OwnerAuthenticator =>
/**
* i. List hooks
* https://developer.github.com/v3/repos/hooks/#list-hooks
*/
get("/api/v3/repos/:owner/:repository/hooks")(ownerOnly { repository =>
JsonFormat(getWebHooks(repository.owner, repository.name).map {
case (wh, events) =>
ApiRepositoryWebhook(wh, events)
})
})
/*
* ii. Get single hook
* https://developer.github.com/v3/repos/hooks/#get-single-hook
* not implemented
*/
get("/api/v3/repos/:owner/:repository/hooks/:id")(ownerOnly { repository =>
params
.get("id")
.map { id =>
getWebHookById(repository.owner, repository.name, id.toInt)
.map {
case (hook, events) =>
JsonFormat(ApiRepositoryWebhook(hook, events))
}
.getOrElse(NotFound)
}
.getOrElse(NotFound)
})
/**
* iii. Create a hook
* https://developer.github.com/v3/repos/hooks/#create-a-hook
*/
post("/api/v3/repos/:owner/:repository/hooks")(ownerOnly { repository =>
(for {
data <- extractFromJsonBody[CreateAWebhook]
loginAccount <- context.loginAccount
} yield {
val url = data.config.url
val events = data.events.map(WebHook.Event.valueOf(_)).toSet
val ctype = WebHookContentType.valueOf(data.config.content_type)
val webHook = addWebHook(repository.owner, repository.name, url, events, ctype, data.config.secret)
JsonFormat(ApiRepositoryWebhook(webHook, events))
}).getOrElse(NotFound())
})
/*
* iv. Edit a hook
* https://developer.github.com/v3/repos/hooks/#edit-a-hook
* not implemented
*/
/*
* v. Test a push hook
* https://developer.github.com/v3/repos/hooks/#test-a-push-hook
* not implemented
*/
/*
* vi. Ping a hook
* https://developer.github.com/v3/repos/hooks/#ping-a-hook
* not implemented
*/
/*
* vii. Delete a hook
* https://developer.github.com/v3/repos/hooks/#delete-a-hook
* not implemented
*/
delete("/api/v3/repos/:owner/:repository/hooks/:id")(ownerOnly { repository =>
deleteWebHook(repository.owner, repository.name, params("id").toInt)
NoContent()
})
/*
* viii. Receiving Webhooks
* https://developer.github.com/v3/repos/hooks/#receiving-webhooks
* not implemented
*/
/*
* ix. PubSubHubbub
* https://developer.github.com/v3/repos/hooks/#pubsubhubbub
* not implemented
*/
}

View File

@@ -1,5 +1,5 @@
package gitbucket.core.controller.api
import gitbucket.core.api._
import gitbucket.core.api.{ApiUser, CreateAUser, JsonFormat, UpdateAUser}
import gitbucket.core.controller.ControllerBase
import gitbucket.core.service.{AccountService, RepositoryService}
import gitbucket.core.util.{AdminAuthenticator, UsersAuthenticator}
@@ -111,37 +111,4 @@ trait ApiUserControllerBase extends ControllerBase {
NotFound()
}
})
/**
* Emails i. List email addresses for a user
* https://developer.github.com/v3/users/emails/#list-email-addresses-for-a-user
*/
get("/api/v3/user/emails")(usersOnly {
JsonFormat(
ApiEmail.fromMailAddresses(
context.loginAccount.get.mailAddress,
getAccountExtraMailAddresses(context.loginAccount.get.userName)
)
)
})
/*
* ii. List public email addresses for a user
* https://developer.github.com/v3/users/emails/#list-public-email-addresses-for-a-user
*/
/*
* iii. Add email address(es)
* https://developer.github.com/v3/users/emails/#add-email-addresses
*/
/*
* iv. Delete email address(es)
* https://developer.github.com/v3/users/emails/#delete-email-addresses
*/
/*
* v. Toggle primary email visibility
* https://developer.github.com/v3/users/emails/#toggle-primary-email-visibility
*/
}

View File

@@ -10,7 +10,6 @@ trait RepositoryComponent extends TemplateComponent { self: Profile =>
val isPrivate = column[Boolean]("PRIVATE")
val description = column[String]("DESCRIPTION")
val defaultBranch = column[String]("DEFAULT_BRANCH")
val repositoryId = column[Int]("REPOSITORY_ID", O AutoInc)
val registeredDate = column[java.util.Date]("REGISTERED_DATE")
val updatedDate = column[java.util.Date]("UPDATED_DATE")
val lastActivityDate = column[java.util.Date]("LAST_ACTIVITY_DATE")
@@ -37,7 +36,6 @@ trait RepositoryComponent extends TemplateComponent { self: Profile =>
registeredDate,
updatedDate,
lastActivityDate,
repositoryId,
originUserName.?,
originRepositoryName.?,
parentUserName.?,
@@ -59,7 +57,6 @@ trait RepositoryComponent extends TemplateComponent { self: Profile =>
repository._10,
repository._11,
repository._12,
repository._13,
RepositoryOptions.tupled.apply(options)
)
}, { (r: Repository) =>
@@ -74,7 +71,6 @@ trait RepositoryComponent extends TemplateComponent { self: Profile =>
r.registeredDate,
r.updatedDate,
r.lastActivityDate,
r.repositoryId,
r.originUserName,
r.originRepositoryName,
r.parentUserName,
@@ -100,7 +96,6 @@ case class Repository(
registeredDate: java.util.Date,
updatedDate: java.util.Date,
lastActivityDate: java.util.Date,
repositoryId: Int = 0,
originUserName: Option[String],
originRepositoryName: Option[String],
parentUserName: Option[String],

View File

@@ -12,15 +12,11 @@ trait RepositoryWebHookComponent extends TemplateComponent { self: Profile =>
val url = column[String]("URL")
val token = column[Option[String]]("TOKEN")
val ctype = column[WebHookContentType]("CTYPE")
val webHookId = column[Int]("WEB_HOOK_ID", O AutoInc)
def * =
(userName, repositoryName, url, ctype, token, webHookId) <> ((RepositoryWebHook.apply _).tupled, RepositoryWebHook.unapply)
(userName, repositoryName, url, ctype, token) <> ((RepositoryWebHook.apply _).tupled, RepositoryWebHook.unapply)
def byPrimaryKey(owner: String, repository: String, url: String) =
byRepository(owner, repository) && (this.url === url.bind)
def byId(owner: String, repository: String, id: Int) =
byRepository(owner, repository) && (this.webHookId === id.bind)
}
}
@@ -29,6 +25,5 @@ case class RepositoryWebHook(
repositoryName: String,
url: String,
ctype: WebHookContentType,
token: Option[String],
webHookId: Int = 0
token: Option[String]
) extends WebHook

View File

@@ -728,15 +728,6 @@ trait RepositoryService {
}
}
def getPermission(owner: String, repository: String, loginAccount: Option[Account])(
implicit s: Session
): RepositoryPermission =
RepositoryPermission(
hasOwnerRole(owner, repository, loginAccount),
hasDeveloperRole(owner, repository, loginAccount),
hasGuestRole(owner, repository, loginAccount)
)
private def getForkedCount(userName: String, repositoryName: String)(implicit s: Session): Int =
Query(Repositories.filter { t =>
(t.originUserName === userName.bind) && (t.originRepositoryName === repositoryName.bind)
@@ -787,8 +778,6 @@ trait RepositoryService {
}
object RepositoryService {
case class RepositoryPermission(isOwner: Boolean, isDeveloper: Boolean, isGuest: Boolean)
case class RepositoryInfo(
owner: String,
name: String,

View File

@@ -74,22 +74,6 @@ trait WebHookService {
.list
.distinct
/** get WebHook by Id */
def getWebHookById(owner: String, repository: String, id: Int)(
implicit s: Session
): Option[(RepositoryWebHook, Set[WebHook.Event])] =
RepositoryWebHooks
.filter(_.byId(owner, repository, id))
.join(RepositoryWebHookEvents)
.on { (w, t) =>
t.byRepositoryWebHook(w)
}
.map { case (w, t) => w -> t.event }
.list
.groupBy(_._1)
.mapValues(_.map(_._2).toSet)
.headOption
/** get All WebHook information from repository to url */
def getWebHook(owner: String, repository: String, url: String)(
implicit s: Session
@@ -113,14 +97,11 @@ trait WebHookService {
events: Set[WebHook.Event],
ctype: WebHookContentType,
token: Option[String]
)(implicit s: Session): RepositoryWebHook = {
val hook = RepositoryWebHook(owner, repository, url, ctype, token)
RepositoryWebHooks insert hook
)(implicit s: Session): Unit = {
RepositoryWebHooks insert RepositoryWebHook(owner, repository, url, ctype, token)
events.map { event: WebHook.Event =>
RepositoryWebHookEvents insert RepositoryWebHookEvent(owner, repository, url, event)
event
}.toSet
hook
}
}
def updateWebHook(
@@ -144,9 +125,6 @@ trait WebHookService {
def deleteWebHook(owner: String, repository: String, url: String)(implicit s: Session): Unit =
RepositoryWebHooks.filter(_.byPrimaryKey(owner, repository, url)).delete
def deleteWebHook(owner: String, repository: String, id: Int)(implicit s: Session): Unit =
RepositoryWebHooks.filter(_.byId(owner, repository, id)).delete
/** get All AccountWebHook informations of user */
def getAccountWebHooks(owner: String)(implicit s: Session): List[(AccountWebHook, Set[WebHook.Event])] =
AccountWebHooks
@@ -344,7 +322,7 @@ trait WebHookPullRequestService extends WebHookService {
WebHookIssuesPayload(
action = action,
number = issue.issueId,
repository = ApiRepository(repository, repoOwner),
repository = ApiRepository(repository, ApiUser(repoOwner)),
issue = ApiIssue(
issue,
RepositoryName(repository),

View File

@@ -182,8 +182,7 @@ object ApiSpecModels {
repository = repository,
owner = apiUser,
forkedCount = repositoryInfo.forkedCount,
watchers = 0,
permission = None
watchers = 0
)
val apiLabel = ApiLabel(
@@ -410,8 +409,6 @@ object ApiSpecModels {
assets = Seq(apiReleaseAsset)
)
val apiEmail = ApiEmail("root@localhost", true)
// JSON String for APIs
val jsonUser = """{
@@ -430,15 +427,12 @@ object ApiSpecModels {
|"name":"Hello-World",
|"full_name":"octocat/Hello-World",
|"description":"This your first repo!",
|"id":0,
|"watchers":0,
|"forks":1,
|"private":false,
|"fork":true,
|"default_branch":"master",
|"owner":$jsonUser,
|"created_at":"2011-04-14T16:00:49Z",
|"updated_at":"2011-04-14T16:00:49Z",
|"id":0,
|"forks_count":1,
|"watchers_count":0,
|"url":"http://gitbucket.exmple.com/api/v3/repos/octocat/Hello-World",
@@ -693,12 +687,4 @@ object ApiSpecModels {
|"author":${jsonUser},
|"assets":[${jsonReleaseAsset}]
|}""".stripMargin
val jsonEmail =
s"""{
|"email":"root@localhost",
|"primary":true,
|"verified":true,
|"visibility":"public"
|}""".stripMargin
}

View File

@@ -79,7 +79,4 @@ class JsonFormatSpec extends FunSuite {
test("apiRelease") {
assert(JsonFormat(apiRelease) == expected(jsonRelease))
}
test("apiEmail") {
assert(JsonFormat(apiEmail) == expected(jsonEmail))
}
}

View File

@@ -52,27 +52,19 @@ class WebHookServiceSpec extends FunSuite with ServiceSpecBase {
val formType = WebHookContentType.FORM
val jsonType = WebHookContentType.JSON
service.addWebHook("user1", "repo1", "http://example.com", Set(WebHook.PullRequest), formType, Some("key"))
val hookId = 1
assert(
service.getWebHooks("user1", "repo1") == List(
(
RepositoryWebHook("user1", "repo1", "http://example.com", formType, Some("key"), hookId),
Set(WebHook.PullRequest)
)
(RepositoryWebHook("user1", "repo1", "http://example.com", formType, Some("key")), Set(WebHook.PullRequest))
)
)
assert(
service.getWebHook("user1", "repo1", "http://example.com") == Some(
(
RepositoryWebHook("user1", "repo1", "http://example.com", formType, Some("key"), hookId),
Set(WebHook.PullRequest)
)
(RepositoryWebHook("user1", "repo1", "http://example.com", formType, Some("key")), Set(WebHook.PullRequest))
)
)
assert(
service.getWebHooksByEvent("user1", "repo1", WebHook.PullRequest) == List(
(RepositoryWebHook("user1", "repo1", "http://example.com", formType, Some("key"), hookId))
(RepositoryWebHook("user1", "repo1", "http://example.com", formType, Some("key")))
)
)
assert(service.getWebHooksByEvent("user1", "repo1", WebHook.Push) == Nil)
@@ -90,7 +82,7 @@ class WebHookServiceSpec extends FunSuite with ServiceSpecBase {
assert(
service.getWebHook("user1", "repo1", "http://example.com") == Some(
(
RepositoryWebHook("user1", "repo1", "http://example.com", jsonType, Some("key"), hookId),
RepositoryWebHook("user1", "repo1", "http://example.com", jsonType, Some("key")),
Set(WebHook.Push, WebHook.Issues)
)
)
@@ -98,7 +90,7 @@ class WebHookServiceSpec extends FunSuite with ServiceSpecBase {
assert(service.getWebHooksByEvent("user1", "repo1", WebHook.PullRequest) == Nil)
assert(
service.getWebHooksByEvent("user1", "repo1", WebHook.Push) == List(
(RepositoryWebHook("user1", "repo1", "http://example.com", jsonType, Some("key"), hookId))
(RepositoryWebHook("user1", "repo1", "http://example.com", jsonType, Some("key")))
)
)
service.deleteWebHook("user1", "repo1", "http://example.com")
@@ -122,11 +114,9 @@ class WebHookServiceSpec extends FunSuite with ServiceSpecBase {
)
assert(
service.getWebHooks("user1", "repo1") == List(
RepositoryWebHook("user1", "repo1", "http://example.com/1", ctype, Some("key"), 1) -> Set(
WebHook.PullRequest
),
RepositoryWebHook("user1", "repo1", "http://example.com/2", ctype, Some("key"), 2) -> Set(WebHook.Push),
RepositoryWebHook("user1", "repo1", "http://example.com/3", ctype, Some("key"), 3) -> Set(
RepositoryWebHook("user1", "repo1", "http://example.com/1", ctype, Some("key")) -> Set(WebHook.PullRequest),
RepositoryWebHook("user1", "repo1", "http://example.com/2", ctype, Some("key")) -> Set(WebHook.Push),
RepositoryWebHook("user1", "repo1", "http://example.com/3", ctype, Some("key")) -> Set(
WebHook.PullRequest,
WebHook.Push
)
@@ -134,8 +124,8 @@ class WebHookServiceSpec extends FunSuite with ServiceSpecBase {
)
assert(
service.getWebHooksByEvent("user1", "repo1", WebHook.PullRequest) == List(
RepositoryWebHook("user1", "repo1", "http://example.com/1", ctype, Some("key"), 1),
RepositoryWebHook("user1", "repo1", "http://example.com/3", ctype, Some("key"), 3)
RepositoryWebHook("user1", "repo1", "http://example.com/1", ctype, Some("key")),
RepositoryWebHook("user1", "repo1", "http://example.com/3", ctype, Some("key"))
)
)
}