mirror of
https://github.com/gitbucket/gitbucket.git
synced 2025-11-08 14:35:52 +01:00
Delete RELEASE_ID column from RELEASE and RELEASE_ASSET
This commit is contained in:
@@ -3,23 +3,21 @@
|
|||||||
<createTable tableName="RELEASE">
|
<createTable tableName="RELEASE">
|
||||||
<column name="USER_NAME" type="varchar(100)" nullable="false"/>
|
<column name="USER_NAME" type="varchar(100)" nullable="false"/>
|
||||||
<column name="REPOSITORY_NAME" type="varchar(100)" nullable="false"/>
|
<column name="REPOSITORY_NAME" type="varchar(100)" nullable="false"/>
|
||||||
<column name="RELEASE_ID" type="int" nullable="false" autoIncrement="true" unique="true"/>
|
|
||||||
<column name="NAME" type="varchar(100)" nullable="false"/>
|
|
||||||
<column name="TAG" type="varchar(100)" nullable="false"/>
|
<column name="TAG" type="varchar(100)" nullable="false"/>
|
||||||
|
<column name="NAME" type="varchar(100)" nullable="false"/>
|
||||||
<column name="AUTHOR" type="varchar(100)" nullable="false"/>
|
<column name="AUTHOR" type="varchar(100)" nullable="false"/>
|
||||||
<column name="CONTENT" type="text" nullable="true"/>
|
<column name="CONTENT" type="text" nullable="true"/>
|
||||||
<column name="REGISTERED_DATE" type="datetime" nullable="false"/>
|
<column name="REGISTERED_DATE" type="datetime" nullable="false"/>
|
||||||
<column name="UPDATED_DATE" type="datetime" nullable="false"/>
|
<column name="UPDATED_DATE" type="datetime" nullable="false"/>
|
||||||
</createTable>
|
</createTable>
|
||||||
|
|
||||||
<addPrimaryKey constraintName="IDX_RELEASE_PK" tableName="RELEASE" columnNames="USER_NAME, REPOSITORY_NAME, RELEASE_ID"/>
|
<addPrimaryKey constraintName="IDX_RELEASE_PK" tableName="RELEASE" columnNames="USER_NAME, REPOSITORY_NAME, TAG"/>
|
||||||
<addUniqueConstraint constraintName="IDX_RELEASE_UNIQ" tableName="RELEASE" columnNames="USER_NAME, REPOSITORY_NAME, TAG"/>
|
|
||||||
<addForeignKeyConstraint constraintName="IDX_RELEASE_FK0" baseTableName="RELEASE" baseColumnNames="USER_NAME, REPOSITORY_NAME" referencedTableName="REPOSITORY" referencedColumnNames="USER_NAME, REPOSITORY_NAME"/>
|
<addForeignKeyConstraint constraintName="IDX_RELEASE_FK0" baseTableName="RELEASE" baseColumnNames="USER_NAME, REPOSITORY_NAME" referencedTableName="REPOSITORY" referencedColumnNames="USER_NAME, REPOSITORY_NAME"/>
|
||||||
|
|
||||||
<createTable tableName="RELEASE_ASSET">
|
<createTable tableName="RELEASE_ASSET">
|
||||||
<column name="USER_NAME" type="varchar(100)" nullable="false"/>
|
<column name="USER_NAME" type="varchar(100)" nullable="false"/>
|
||||||
<column name="REPOSITORY_NAME" type="varchar(100)" nullable="false"/>
|
<column name="REPOSITORY_NAME" type="varchar(100)" nullable="false"/>
|
||||||
<column name="RELEASE_ID" type="int" nullable="false"/>
|
<column name="TAG" type="varchar(100)" nullable="false"/>
|
||||||
<column name="RELEASE_ASSET_ID" type="int" nullable="false" autoIncrement="true" unique="true"/>
|
<column name="RELEASE_ASSET_ID" type="int" nullable="false" autoIncrement="true" unique="true"/>
|
||||||
<column name="FILE_NAME" type="varchar(260)" nullable="false"/>
|
<column name="FILE_NAME" type="varchar(260)" nullable="false"/>
|
||||||
<column name="LABEL" type="varchar(100)" nullable="true"/>
|
<column name="LABEL" type="varchar(100)" nullable="true"/>
|
||||||
@@ -28,7 +26,6 @@
|
|||||||
<column name="REGISTERED_DATE" type="datetime" nullable="false"/>
|
<column name="REGISTERED_DATE" type="datetime" nullable="false"/>
|
||||||
<column name="UPDATED_DATE" type="datetime" nullable="false"/>
|
<column name="UPDATED_DATE" type="datetime" nullable="false"/>
|
||||||
</createTable>
|
</createTable>
|
||||||
<addPrimaryKey constraintName="IDX_RELEASE_ASSET_PK" tableName="RELEASE_ASSET" columnNames="USER_NAME, REPOSITORY_NAME, RELEASE_ID, FILE_NAME"
|
<addPrimaryKey constraintName="IDX_RELEASE_ASSET_PK" tableName="RELEASE_ASSET" columnNames="USER_NAME, REPOSITORY_NAME, TAG, FILE_NAME"/>
|
||||||
/>
|
<addForeignKeyConstraint constraintName="IDX_RELEASE_ASSET_FK1" baseTableName="RELEASE_ASSET" baseColumnNames="USER_NAME, REPOSITORY_NAME, TAG" referencedTableName="RELEASE" referencedColumnNames="USER_NAME, REPOSITORY_NAME, TAG"/>
|
||||||
<addForeignKeyConstraint constraintName="IDX_RELEASE_ASSET_FK1" baseTableName="RELEASE_ASSET" baseColumnNames="USER_NAME, REPOSITORY_NAME, RELEASE_ID" referencedTableName="RELEASE" referencedColumnNames="USER_NAME, REPOSITORY_NAME, RELEASE_ID"/>
|
|
||||||
</changeSet>
|
</changeSet>
|
||||||
|
|||||||
@@ -51,24 +51,25 @@ trait ReleaseControllerBase extends ControllerBase {
|
|||||||
hasDeveloperRole(repository.owner, repository.name, context.loginAccount))
|
hasDeveloperRole(repository.owner, repository.name, context.loginAccount))
|
||||||
})
|
})
|
||||||
|
|
||||||
get("/:owner/:repository/releases/:id")(referrersOnly {repository =>
|
get("/:owner/:repository/releases/:tag")(referrersOnly { repository =>
|
||||||
val id = params("id")
|
val tag = params("tag")
|
||||||
getRelease(repository.owner, repository.name, id).map{ release =>
|
getRelease(repository.owner, repository.name, tag).map { release =>
|
||||||
html.release(release, getReleaseAssets(repository.owner, repository.name, id), hasDeveloperRole(repository.owner, repository.name, context.loginAccount), repository)
|
html.release(release, getReleaseAssets(repository.owner, repository.name, tag), hasDeveloperRole(repository.owner, repository.name, context.loginAccount), repository)
|
||||||
}.getOrElse(NotFound())
|
}.getOrElse(NotFound())
|
||||||
})
|
})
|
||||||
|
|
||||||
get("/:owner/:repository/releases/:id/assets/:fileId")(referrersOnly {repository =>
|
get("/:owner/:repository/releases/:tag/assets/:fileId")(referrersOnly {repository =>
|
||||||
val releaseId = params("id")
|
val tag = params("tag")
|
||||||
val fileId = params("fileId")
|
val fileId = params("fileId")
|
||||||
(for {
|
(for {
|
||||||
release <- getRelease(repository.owner, repository.name, releaseId)
|
_ <- repository.tags.find(_.name == tag)
|
||||||
asset <- getReleaseAsset(repository.owner, repository.name, releaseId, fileId)
|
_ <- getRelease(repository.owner, repository.name, tag)
|
||||||
|
asset <- getReleaseAsset(repository.owner, repository.name, tag, fileId)
|
||||||
} yield {
|
} yield {
|
||||||
response.setHeader("Content-Disposition", s"attachment; filename=${asset.label}")
|
response.setHeader("Content-Disposition", s"attachment; filename=${asset.label}")
|
||||||
Some(RawData(
|
Some(RawData(
|
||||||
FileUtil.getMimeType(asset.label),
|
FileUtil.getMimeType(asset.label),
|
||||||
new File(getReleaseFilesDir(repository.owner, repository.name), release.tag + "/" + fileId)
|
new File(getReleaseFilesDir(repository.owner, repository.name), tag + "/" + fileId)
|
||||||
))
|
))
|
||||||
}).getOrElse(NotFound())
|
}).getOrElse(NotFound())
|
||||||
})
|
})
|
||||||
@@ -82,7 +83,7 @@ trait ReleaseControllerBase extends ControllerBase {
|
|||||||
val loginAccount = context.loginAccount.get
|
val loginAccount = context.loginAccount.get
|
||||||
|
|
||||||
// Insert into RELEASE
|
// Insert into RELEASE
|
||||||
val release = createRelease(repository.owner, repository.name, form.name, form.content, tag, loginAccount)
|
createRelease(repository.owner, repository.name, form.name, form.content, tag, loginAccount)
|
||||||
|
|
||||||
// Insert into RELEASE_ASSET
|
// Insert into RELEASE_ASSET
|
||||||
request.getParameterNames.asScala.filter(_.startsWith("file:")).foreach { paramName =>
|
request.getParameterNames.asScala.filter(_.startsWith("file:")).foreach { paramName =>
|
||||||
@@ -90,50 +91,51 @@ trait ReleaseControllerBase extends ControllerBase {
|
|||||||
val fileName = params(paramName)
|
val fileName = params(paramName)
|
||||||
val size = new java.io.File(getReleaseFilesDir(repository.owner, repository.name), tag + "/" + fileId).length
|
val size = new java.io.File(getReleaseFilesDir(repository.owner, repository.name), tag + "/" + fileId).length
|
||||||
|
|
||||||
createReleaseAsset(repository.owner, repository.name, release.releaseId, fileId, fileName, size, loginAccount)
|
createReleaseAsset(repository.owner, repository.name, tag, fileId, fileName, size, loginAccount)
|
||||||
}
|
}
|
||||||
|
|
||||||
recordReleaseActivity(repository.owner, repository.name, loginAccount.userName, release.releaseId, release.name)
|
recordReleaseActivity(repository.owner, repository.name, loginAccount.userName, form.name)
|
||||||
|
|
||||||
redirect(s"/${release.userName}/${release.repositoryName}/releases/${release.releaseId}")
|
redirect(s"/${repository.owner}/${repository.name}/releases/${tag}")
|
||||||
})
|
})
|
||||||
|
|
||||||
get("/:owner/:repository/releases/:id/edit")(writableUsersOnly {repository =>
|
get("/:owner/:repository/releases/:tag/edit")(writableUsersOnly {repository =>
|
||||||
val releaseId = params("id").toInt
|
val tag = params("tag")
|
||||||
getRelease(repository.owner, repository.name, releaseId).map { release =>
|
|
||||||
html.form(repository, release.tag, Some(release, getReleaseAssets(repository.owner, repository.name, releaseId)))
|
getRelease(repository.owner, repository.name, tag).map { release =>
|
||||||
|
html.form(repository, release.tag, Some(release, getReleaseAssets(repository.owner, repository.name, tag)))
|
||||||
}.getOrElse(NotFound())
|
}.getOrElse(NotFound())
|
||||||
})
|
})
|
||||||
|
|
||||||
post("/:owner/:repository/releases/:id/edit", releaseForm)(writableUsersOnly { (form, repository) =>
|
post("/:owner/:repository/releases/:tag/edit", releaseForm)(writableUsersOnly { (form, repository) =>
|
||||||
val releaseId = params("id").toInt
|
val tag = params("tag")
|
||||||
val loginAccount = context.loginAccount.get
|
val loginAccount = context.loginAccount.get
|
||||||
|
|
||||||
getRelease(repository.owner, repository.name, releaseId).map { release =>
|
getRelease(repository.owner, repository.name, tag).map { release =>
|
||||||
// Update RELEASE
|
// Update RELEASE
|
||||||
updateRelease(repository.owner, repository.name, releaseId, form.name, form.content)
|
updateRelease(repository.owner, repository.name, tag, form.name, form.content)
|
||||||
|
|
||||||
// Delete and Insert RELEASE_ASSET
|
// Delete and Insert RELEASE_ASSET
|
||||||
deleteReleaseAssets(repository.owner, repository.name, releaseId)
|
deleteReleaseAssets(repository.owner, repository.name, tag)
|
||||||
|
|
||||||
request.getParameterNames.asScala.filter(_.startsWith("file:")).foreach { paramName =>
|
request.getParameterNames.asScala.filter(_.startsWith("file:")).foreach { paramName =>
|
||||||
val Array(_, fileId) = paramName.split(":")
|
val Array(_, fileId) = paramName.split(":")
|
||||||
val fileName = params(paramName)
|
val fileName = params(paramName)
|
||||||
val size = new java.io.File(getReleaseFilesDir(repository.owner, repository.name), release.tag + "/" + fileId).length
|
val size = new java.io.File(getReleaseFilesDir(repository.owner, repository.name), release.tag + "/" + fileId).length
|
||||||
|
|
||||||
createReleaseAsset(repository.owner, repository.name, release.releaseId, fileId, fileName, size, loginAccount)
|
createReleaseAsset(repository.owner, repository.name, tag, fileId, fileName, size, loginAccount)
|
||||||
}
|
}
|
||||||
|
|
||||||
redirect(s"/${release.userName}/${release.repositoryName}/releases/${release.releaseId}")
|
redirect(s"/${release.userName}/${release.repositoryName}/releases/${tag}")
|
||||||
}.getOrElse(NotFound())
|
}.getOrElse(NotFound())
|
||||||
})
|
})
|
||||||
|
|
||||||
post("/:owner/:repository/releases/:id/delete")(writableUsersOnly { repository =>
|
post("/:owner/:repository/releases/:tag/delete")(writableUsersOnly { repository =>
|
||||||
val releaseId = params("id")
|
val tag = params("tag")
|
||||||
getRelease(repository.owner, repository.name, releaseId).foreach { release =>
|
getRelease(repository.owner, repository.name, tag).foreach { release =>
|
||||||
FileUtils.deleteDirectory(new File(getReleaseFilesDir(repository.owner, repository.name), release.tag))
|
FileUtils.deleteDirectory(new File(getReleaseFilesDir(repository.owner, repository.name), release.tag))
|
||||||
}
|
}
|
||||||
deleteRelease(repository.owner, repository.name, releaseId)
|
deleteRelease(repository.owner, repository.name, tag)
|
||||||
redirect(s"/${repository.owner}/${repository.name}/releases")
|
redirect(s"/${repository.owner}/${repository.name}/releases")
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ trait ReleaseComponent extends TemplateComponent {
|
|||||||
lazy val Releases = TableQuery[Releases]
|
lazy val Releases = TableQuery[Releases]
|
||||||
|
|
||||||
class Releases(tag_ : Tag) extends Table[Release](tag_, "RELEASE") with BasicTemplate {
|
class Releases(tag_ : Tag) extends Table[Release](tag_, "RELEASE") with BasicTemplate {
|
||||||
val releaseId = column[Int]("RELEASE_ID", O AutoInc)
|
|
||||||
val name = column[String]("NAME")
|
val name = column[String]("NAME")
|
||||||
val tag = column[String]("TAG")
|
val tag = column[String]("TAG")
|
||||||
val author = column[String]("AUTHOR")
|
val author = column[String]("AUTHOR")
|
||||||
@@ -17,29 +16,15 @@ trait ReleaseComponent extends TemplateComponent {
|
|||||||
val registeredDate = column[java.util.Date]("REGISTERED_DATE")
|
val registeredDate = column[java.util.Date]("REGISTERED_DATE")
|
||||||
val updatedDate = column[java.util.Date]("UPDATED_DATE")
|
val updatedDate = column[java.util.Date]("UPDATED_DATE")
|
||||||
|
|
||||||
def * = (userName, repositoryName, releaseId, name, tag, author, content, registeredDate, updatedDate) <> (Release.tupled, Release.unapply)
|
def * = (userName, repositoryName, name, tag, author, content, registeredDate, updatedDate) <> (Release.tupled, Release.unapply)
|
||||||
|
def byPrimaryKey(owner: String, repository: String, tag: String) = byTag(owner, repository, tag)
|
||||||
def byPrimaryKey(owner: String, repository: String, releaseId: Int) = byRelease(owner, repository, releaseId)
|
def byTag(owner: String, repository: String, tag: String) = byRepository(owner, repository) && (this.tag === tag.bind)
|
||||||
|
|
||||||
def byTag(owner: String, repository: String, tag: String) =
|
|
||||||
byRepository(owner, repository) && (this.tag === tag.bind)
|
|
||||||
|
|
||||||
def byTag(userName: Rep[String], repositoryName: Rep[String], tag: Rep[String]) =
|
|
||||||
byRepository(userName, repositoryName) && (this.tag === tag)
|
|
||||||
|
|
||||||
def byRelease(owner: String, repository: String, releaseId: Int) =
|
|
||||||
byRepository(owner, repository) && (this.releaseId === releaseId.bind)
|
|
||||||
|
|
||||||
def byRelease(userName: Rep[String], repositoryName: Rep[String], releaseId: Rep[Int]) =
|
|
||||||
byRepository(userName, repositoryName) && (this.releaseId === releaseId)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
case class Release(
|
case class Release(
|
||||||
userName: String,
|
userName: String,
|
||||||
repositoryName: String,
|
repositoryName: String,
|
||||||
releaseId: Int = 0,
|
|
||||||
name: String,
|
name: String,
|
||||||
tag: String,
|
tag: String,
|
||||||
author: String,
|
author: String,
|
||||||
|
|||||||
@@ -10,8 +10,8 @@ trait ReleaseAssetComponent extends TemplateComponent {
|
|||||||
|
|
||||||
lazy val ReleaseAssets = TableQuery[ReleaseAssets]
|
lazy val ReleaseAssets = TableQuery[ReleaseAssets]
|
||||||
|
|
||||||
class ReleaseAssets(tag : Tag) extends Table[ReleaseAsset](tag, "RELEASE_ASSET") with BasicTemplate {
|
class ReleaseAssets(tag_ : Tag) extends Table[ReleaseAsset](tag_, "RELEASE_ASSET") with BasicTemplate {
|
||||||
val releaseId = column[Int]("RELEASE_ID")
|
val tag = column[String]("TAG")
|
||||||
val releaseAssetId = column[Int]("RELEASE_ASSET_ID", O AutoInc)
|
val releaseAssetId = column[Int]("RELEASE_ASSET_ID", O AutoInc)
|
||||||
val fileName = column[String]("FILE_NAME")
|
val fileName = column[String]("FILE_NAME")
|
||||||
val label = column[String]("LABEL")
|
val label = column[String]("LABEL")
|
||||||
@@ -20,23 +20,16 @@ trait ReleaseAssetComponent extends TemplateComponent {
|
|||||||
val registeredDate = column[Date]("REGISTERED_DATE")
|
val registeredDate = column[Date]("REGISTERED_DATE")
|
||||||
val updatedDate = column[Date]("UPDATED_DATE")
|
val updatedDate = column[Date]("UPDATED_DATE")
|
||||||
|
|
||||||
def * = (userName, repositoryName, releaseId, releaseAssetId, fileName, label, size, uploader, registeredDate, updatedDate) <> (ReleaseAsset.tupled, ReleaseAsset.unapply)
|
def * = (userName, repositoryName, tag, releaseAssetId, fileName, label, size, uploader, registeredDate, updatedDate) <> (ReleaseAsset.tupled, ReleaseAsset.unapply)
|
||||||
|
def byPrimaryKey(owner: String, repository: String, tag: String, fileName: String) = byTag(owner, repository, tag) && (this.fileName === fileName.bind)
|
||||||
def byPrimaryKey(owner: String, repository: String, releaseId: Int, fileName: String) = byRelease(owner, repository, releaseId) && (this.fileName === fileName.bind)
|
def byTag(owner: String, repository: String, tag: String) = byRepository(owner, repository) && (this.tag === tag.bind)
|
||||||
|
|
||||||
def byRelease(owner: String, repository: String, releaseId: Int) =
|
|
||||||
byRepository(owner, repository) && (this.releaseId === releaseId.bind)
|
|
||||||
|
|
||||||
def byRelease(userName: Rep[String], repositoryName: Rep[String], releaseId: Rep[Int]) =
|
|
||||||
byRepository(userName, repositoryName) && (this.releaseId === releaseId)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
case class ReleaseAsset(
|
case class ReleaseAsset(
|
||||||
userName: String,
|
userName: String,
|
||||||
repositoryName: String,
|
repositoryName: String,
|
||||||
releaseId: Int,
|
tag: String,
|
||||||
releaseAssetId: Int = 0,
|
releaseAssetId: Int = 0,
|
||||||
fileName: String,
|
fileName: String,
|
||||||
label: String,
|
label: String,
|
||||||
|
|||||||
@@ -190,7 +190,7 @@ trait ActivityService {
|
|||||||
Some(message),
|
Some(message),
|
||||||
currentDate)
|
currentDate)
|
||||||
|
|
||||||
def recordReleaseActivity(userName: String, repositoryName: String, activityUserName: String, releaseId: Int, name: String)(implicit s: Session): Unit =
|
def recordReleaseActivity(userName: String, repositoryName: String, activityUserName: String, name: String)(implicit s: Session): Unit =
|
||||||
Activities insert Activity(userName, repositoryName, activityUserName,
|
Activities insert Activity(userName, repositoryName, activityUserName,
|
||||||
"release",
|
"release",
|
||||||
s"[user:${activityUserName}] released ${name} at [repo:${userName}/${repositoryName}]",
|
s"[user:${activityUserName}] released ${name} at [repo:${userName}/${repositoryName}]",
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package gitbucket.core.service
|
|||||||
|
|
||||||
import gitbucket.core.controller.Context
|
import gitbucket.core.controller.Context
|
||||||
import gitbucket.core.model.{Account, Release, ReleaseAsset}
|
import gitbucket.core.model.{Account, Release, ReleaseAsset}
|
||||||
import gitbucket.core.util.StringUtil._
|
|
||||||
import gitbucket.core.model.Profile.profile.blockingApi._
|
import gitbucket.core.model.Profile.profile.blockingApi._
|
||||||
import gitbucket.core.model.Profile._
|
import gitbucket.core.model.Profile._
|
||||||
import gitbucket.core.model.Profile.dateColumnType
|
import gitbucket.core.model.Profile.dateColumnType
|
||||||
@@ -10,11 +9,11 @@ import gitbucket.core.model.Profile.dateColumnType
|
|||||||
trait ReleaseService {
|
trait ReleaseService {
|
||||||
self: AccountService with RepositoryService =>
|
self: AccountService with RepositoryService =>
|
||||||
|
|
||||||
def createReleaseAsset(owner: String, repository: String, releaseId: Int, fileName: String, label: String, size: Long, loginAccount: Account)(implicit s: Session): Unit = {
|
def createReleaseAsset(owner: String, repository: String, tag: String, fileName: String, label: String, size: Long, loginAccount: Account)(implicit s: Session): Unit = {
|
||||||
ReleaseAssets insert ReleaseAsset(
|
ReleaseAssets insert ReleaseAsset(
|
||||||
userName = owner,
|
userName = owner,
|
||||||
repositoryName = repository,
|
repositoryName = repository,
|
||||||
releaseId = releaseId,
|
tag = tag,
|
||||||
fileName = fileName,
|
fileName = fileName,
|
||||||
label = label,
|
label = label,
|
||||||
size = size,
|
size = size,
|
||||||
@@ -24,34 +23,25 @@ trait ReleaseService {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
def getReleaseAssets(owner: String, repository: String, releaseId: Int)(implicit s: Session): Seq[ReleaseAsset] = {
|
def getReleaseAssets(owner: String, repository: String, tag: String)(implicit s: Session): Seq[ReleaseAsset] = {
|
||||||
ReleaseAssets.filter(x => x.byRelease(owner, repository, releaseId)).list
|
ReleaseAssets.filter(x => x.byTag(owner, repository, tag)).list
|
||||||
}
|
|
||||||
|
|
||||||
def getReleaseAssets(owner: String, repository: String, releaseId: String)(implicit s: Session): Seq[ReleaseAsset] = {
|
|
||||||
if (isInteger(releaseId))
|
|
||||||
getReleaseAssets(owner, repository, releaseId.toInt)
|
|
||||||
else
|
|
||||||
Seq.empty
|
|
||||||
}
|
}
|
||||||
|
|
||||||
def getReleaseAssetsMap(owner: String, repository: String)(implicit s: Session): Map[Release, Seq[ReleaseAsset]] = {
|
def getReleaseAssetsMap(owner: String, repository: String)(implicit s: Session): Map[Release, Seq[ReleaseAsset]] = {
|
||||||
val releases = getReleases(owner, repository)
|
val releases = getReleases(owner, repository)
|
||||||
releases.map(rel => (rel -> getReleaseAssets(owner, repository, rel.releaseId))).toMap
|
releases.map(rel => (rel -> getReleaseAssets(owner, repository, rel.tag))).toMap
|
||||||
}
|
}
|
||||||
|
|
||||||
def getReleaseAsset(owner: String, repository: String, releaseId: String, fileId: String)(implicit s: Session): Option[ReleaseAsset] = {
|
def getReleaseAsset(owner: String, repository: String, tag: String, fileId: String)(implicit s: Session): Option[ReleaseAsset] = {
|
||||||
if (isInteger(releaseId))
|
ReleaseAssets.filter(x => x.byPrimaryKey(owner, repository, tag, fileId)) firstOption
|
||||||
ReleaseAssets.filter(x => x.byPrimaryKey(owner, repository, releaseId.toInt, fileId)) firstOption
|
|
||||||
else None
|
|
||||||
}
|
}
|
||||||
|
|
||||||
def deleteReleaseAssets(owner: String, repository: String, releaseId: Int)(implicit s: Session): Unit = {
|
def deleteReleaseAssets(owner: String, repository: String, tag: String)(implicit s: Session): Unit = {
|
||||||
ReleaseAssets.filter(x => x.byRelease(owner, repository, releaseId)) delete
|
ReleaseAssets.filter(x => x.byTag(owner, repository, tag)) delete
|
||||||
}
|
}
|
||||||
|
|
||||||
def createRelease(owner: String, repository: String, name: String, content: Option[String], tag: String,
|
def createRelease(owner: String, repository: String, name: String, content: Option[String], tag: String,
|
||||||
loginAccount: Account)(implicit context: Context, s: Session): Release = {
|
loginAccount: Account)(implicit context: Context, s: Session): Int = {
|
||||||
Releases insert Release(
|
Releases insert Release(
|
||||||
userName = owner,
|
userName = owner,
|
||||||
repositoryName = repository,
|
repositoryName = repository,
|
||||||
@@ -62,39 +52,36 @@ trait ReleaseService {
|
|||||||
registeredDate = currentDate,
|
registeredDate = currentDate,
|
||||||
updatedDate = currentDate
|
updatedDate = currentDate
|
||||||
)
|
)
|
||||||
getReleaseByTag(owner, repository, tag).get
|
|
||||||
}
|
}
|
||||||
|
|
||||||
def getReleases(owner: String, repository: String)(implicit s: Session): Seq[Release] = {
|
def getReleases(owner: String, repository: String)(implicit s: Session): Seq[Release] = {
|
||||||
Releases.filter(x => x.byRepository(owner, repository)).list
|
Releases.filter(x => x.byRepository(owner, repository)).list
|
||||||
}
|
}
|
||||||
|
|
||||||
def getRelease(owner: String, repository: String, releaseId: Int)(implicit s: Session): Option[Release] = {
|
def getRelease(owner: String, repository: String, tag: String)(implicit s: Session): Option[Release] = {
|
||||||
Releases filter (_.byPrimaryKey(owner, repository, releaseId)) firstOption
|
//Releases filter (_.byPrimaryKey(owner, repository, releaseId)) firstOption
|
||||||
}
|
|
||||||
|
|
||||||
def getReleaseByTag(owner: String, repository: String, tag: String)(implicit s: Session): Option[Release] = {
|
|
||||||
Releases filter (_.byTag(owner, repository, tag)) firstOption
|
Releases filter (_.byTag(owner, repository, tag)) firstOption
|
||||||
}
|
}
|
||||||
|
|
||||||
def getRelease(owner: String, repository: String, releaseId: String)(implicit s: Session): Option[Release] = {
|
// def getReleaseByTag(owner: String, repository: String, tag: String)(implicit s: Session): Option[Release] = {
|
||||||
if (isInteger(releaseId))
|
// Releases filter (_.byTag(owner, repository, tag)) firstOption
|
||||||
getRelease(owner, repository, releaseId.toInt)
|
// }
|
||||||
else None
|
//
|
||||||
}
|
// def getRelease(owner: String, repository: String, releaseId: String)(implicit s: Session): Option[Release] = {
|
||||||
|
// if (isInteger(releaseId))
|
||||||
|
// getRelease(owner, repository, releaseId.toInt)
|
||||||
|
// else None
|
||||||
|
// }
|
||||||
|
|
||||||
def updateRelease(owner: String, repository: String, releaseId: Int, title: String, content: Option[String])(implicit s: Session): Int = {
|
def updateRelease(owner: String, repository: String, tag: String, title: String, content: Option[String])(implicit s: Session): Int = {
|
||||||
Releases
|
Releases
|
||||||
.filter (_.byPrimaryKey(owner, repository, releaseId))
|
.filter (_.byPrimaryKey(owner, repository, tag))
|
||||||
.map { t => (t.name, t.content, t.updatedDate) }
|
.map { t => (t.name, t.content, t.updatedDate) }
|
||||||
.update (title, content, currentDate)
|
.update (title, content, currentDate)
|
||||||
}
|
}
|
||||||
|
|
||||||
def deleteRelease(owner: String, repository: String, releaseId: String)(implicit s: Session): Unit = {
|
def deleteRelease(owner: String, repository: String, tag: String)(implicit s: Session): Unit = {
|
||||||
if (isInteger(releaseId)){
|
deleteReleaseAssets(owner, repository, tag)
|
||||||
val relId = releaseId.toInt
|
Releases filter (_.byPrimaryKey(owner, repository, tag)) delete
|
||||||
deleteReleaseAssets(owner, repository, relId)
|
|
||||||
Releases filter (_.byPrimaryKey(owner, repository, relId)) delete
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,18 +2,9 @@
|
|||||||
tag: String,
|
tag: String,
|
||||||
release: Option[(gitbucket.core.model.Release, Seq[gitbucket.core.model.ReleaseAsset])])(implicit context: gitbucket.core.controller.Context)
|
release: Option[(gitbucket.core.model.Release, Seq[gitbucket.core.model.ReleaseAsset])])(implicit context: gitbucket.core.controller.Context)
|
||||||
@import gitbucket.core.view.helpers
|
@import gitbucket.core.view.helpers
|
||||||
|
|
||||||
@action = {
|
|
||||||
@release.map { case (release, _) =>
|
|
||||||
@helpers.url(repository)/releases/@release.releaseId/edit
|
|
||||||
}.getOrElse {
|
|
||||||
@helpers.url(repository)/releases/@helpers.encodeRefName(tag)/create
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@gitbucket.core.html.main(s"New Release - ${repository.owner}/${repository.name}", Some(repository)){
|
@gitbucket.core.html.main(s"New Release - ${repository.owner}/${repository.name}", Some(repository)){
|
||||||
@gitbucket.core.html.menu("releases", repository){
|
@gitbucket.core.html.menu("releases", repository){
|
||||||
<form action="@action.toString.trim" method="POST" validate="true" class="form-group">
|
<form action="@helpers.url(repository)/releases/@helpers.encodeRefName(tag)/@if(release.isEmpty){create}else{edit}" method="POST" validate="true" class="form-group">
|
||||||
<div class="row-fluid">
|
<div class="row-fluid">
|
||||||
<div class="co`l-md-12">
|
<div class="co`l-md-12">
|
||||||
@if(release.isEmpty){
|
@if(release.isEmpty){
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
<div class="col-md-10" style="border-left: 1px solid #eee">
|
<div class="col-md-10" style="border-left: 1px solid #eee">
|
||||||
<div class="release-note markdown-body">
|
<div class="release-note markdown-body">
|
||||||
@release.map { case (release, assets) =>
|
@release.map { case (release, assets) =>
|
||||||
<h3><a href="@helpers.url(repository)/releases/@release.releaseId">@release.name</a></h3>
|
<h3><a href="@helpers.url(repository)/releases/@release.tag">@release.name</a></h3>
|
||||||
<p class="muted">
|
<p class="muted">
|
||||||
@helpers.avatar(release.author, 20) @helpers.user(release.author, styleClass="username") released this @gitbucket.core.helper.html.datetimeago(release.registeredDate)
|
@helpers.avatar(release.author, 20) @helpers.user(release.author, styleClass="username") released this @gitbucket.core.helper.html.datetimeago(release.registeredDate)
|
||||||
</p>
|
</p>
|
||||||
@@ -45,7 +45,7 @@
|
|||||||
@release.map { case (release, assets) =>
|
@release.map { case (release, assets) =>
|
||||||
@assets.map { asset =>
|
@assets.map { asset =>
|
||||||
<li>
|
<li>
|
||||||
<i class="octicon octicon-file"></i><a href="@helpers.url(repository)/releases/@release.releaseId/assets/@asset.fileName">@asset.label</a>
|
<i class="octicon octicon-file"></i><a href="@helpers.url(repository)/releases/@release.tag/assets/@asset.fileName">@asset.label</a>
|
||||||
<span class="label label-default">@helpers.readableSize(Some(asset.size))</span>
|
<span class="label label-default">@helpers.readableSize(Some(asset.size))</span>
|
||||||
</li>
|
</li>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
hasWritePermission: Boolean,
|
hasWritePermission: Boolean,
|
||||||
repository: gitbucket.core.service.RepositoryService.RepositoryInfo)(implicit context: gitbucket.core.controller.Context)
|
repository: gitbucket.core.service.RepositoryService.RepositoryInfo)(implicit context: gitbucket.core.controller.Context)
|
||||||
@import gitbucket.core.view.helpers
|
@import gitbucket.core.view.helpers
|
||||||
@gitbucket.core.html.main(s"${release.name} - Release ${release.releaseId} - ${repository.owner}/${repository.name}", Some(repository)){
|
@gitbucket.core.html.main(s"Release ${release.name} - ${repository.owner}/${repository.name}", Some(repository)){
|
||||||
@gitbucket.core.html.menu("releases", repository){
|
@gitbucket.core.html.menu("releases", repository){
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-2 text-right">
|
<div class="col-md-2 text-right">
|
||||||
@@ -21,8 +21,8 @@
|
|||||||
@release.name
|
@release.name
|
||||||
@if(hasWritePermission){
|
@if(hasWritePermission){
|
||||||
<div class="pull-right">
|
<div class="pull-right">
|
||||||
<form method="POST" action="@helpers.url(repository)/releases/@release.releaseId/delete" id="delete-form">
|
<form method="POST" action="@helpers.url(repository)/releases/@release.tag/delete" id="delete-form">
|
||||||
<a class="btn btn-default" href="@helpers.url(repository)/releases/@release.releaseId/edit" id="edit">Edit</a>
|
<a class="btn btn-default" href="@helpers.url(repository)/releases/@release.tag/edit" id="edit">Edit</a>
|
||||||
<input type="submit" class="btn btn-danger" value="Delete">
|
<input type="submit" class="btn btn-danger" value="Delete">
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
@@ -44,7 +44,7 @@
|
|||||||
<ul style="list-style: none; padding-left: 8px;" id="attachedFiles">
|
<ul style="list-style: none; padding-left: 8px;" id="attachedFiles">
|
||||||
@assets.map{ asset =>
|
@assets.map{ asset =>
|
||||||
<li>
|
<li>
|
||||||
<i class="octicon octicon-file"></i><a href="@helpers.url(repository)/releases/@release.releaseId/assets/@asset.fileName">@asset.label</a>
|
<i class="octicon octicon-file"></i><a href="@helpers.url(repository)/releases/@release.tag/assets/@asset.fileName">@asset.label</a>
|
||||||
<span class="label label-default">@helpers.readableSize(Some(asset.size))</span>
|
<span class="label label-default">@helpers.readableSize(Some(asset.size))</span>
|
||||||
</li>
|
</li>
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user