mirror of
https://github.com/gitbucket/gitbucket.git
synced 2026-01-09 09:02:16 +01:00
change repository-wide release Id numbering to system-wide numbering.
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
<createTable tableName="RELEASE">
|
||||
<column name="USER_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="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="AUTHOR" type="varchar(100)" nullable="false"/>
|
||||
@@ -18,15 +18,6 @@
|
||||
<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"/>
|
||||
|
||||
<createTable tableName="RELEASE_ID">
|
||||
<column name="USER_NAME" type="varchar(100)" nullable="false"/>
|
||||
<column name="REPOSITORY_NAME" type="varchar(100)" nullable="false"/>
|
||||
<column name="RELEASE_ID" type="int" nullable="false"/>
|
||||
</createTable>
|
||||
|
||||
<addPrimaryKey constraintName="IDX_RELEASE_ID_PK" tableName="RELEASE_ID" columnNames="USER_NAME, REPOSITORY_NAME"/>
|
||||
<addForeignKeyConstraint constraintName="IDX_RELEASE_ID_FK1" baseTableName="RELEASE_ID" baseColumnNames="USER_NAME, REPOSITORY_NAME" referencedTableName="REPOSITORY" referencedColumnNames="USER_NAME, REPOSITORY_NAME"/>
|
||||
|
||||
<createTable tableName="RELEASE_ASSET">
|
||||
<column name="USER_NAME" type="varchar(100)" nullable="false"/>
|
||||
<column name="REPOSITORY_NAME" type="varchar(100)" nullable="false"/>
|
||||
|
||||
@@ -6,15 +6,8 @@ trait ReleaseComponent extends TemplateComponent {
|
||||
import profile.api._
|
||||
import self._
|
||||
|
||||
lazy val ReleaseId = TableQuery[ReleaseId]
|
||||
lazy val Releases = TableQuery[Releases]
|
||||
|
||||
class ReleaseId(tag: Tag) extends Table[(String, String, Int)](tag, "RELEASE_ID") with ReleaseTemplate {
|
||||
def * = (userName, repositoryName, releaseId)
|
||||
|
||||
def byPrimaryKey(owner: String, repository: String) = byRepository(owner, repository)
|
||||
}
|
||||
|
||||
class Releases(tag_ : Tag) extends Table[Release](tag_, "RELEASE") with ReleaseTemplate {
|
||||
val name = column[String]("NAME")
|
||||
val tag = column[String]("TAG")
|
||||
|
||||
@@ -55,10 +55,19 @@ trait ReleaseService {
|
||||
|
||||
def createRelease(repository: RepositoryInfo, name: String, content:Option[String], tag: String,
|
||||
isDraft: Boolean, isPrerelease: Boolean, loginAccount: Account)(implicit context: Context, s: Session): Release = {
|
||||
val releaseId = insertRelease(repository.owner, repository.name, loginAccount.userName, name, tag,
|
||||
content, isDraft, isPrerelease)
|
||||
val release = getRelease(repository.owner, repository.name, releaseId.toString).get
|
||||
release
|
||||
Releases insert Release(
|
||||
userName = repository.owner,
|
||||
repositoryName = repository.name,
|
||||
name = name,
|
||||
tag = tag,
|
||||
author = loginAccount.userName,
|
||||
content = content,
|
||||
isDraft = isDraft,
|
||||
isPrerelease = isPrerelease,
|
||||
registeredDate = currentDate,
|
||||
updatedDate = currentDate
|
||||
)
|
||||
getReleaseByTag(repository.owner, repository.name, tag).get
|
||||
}
|
||||
|
||||
def getReleases(owner: String, repository: String)(implicit s: Session): List[Release] = {
|
||||
@@ -69,6 +78,10 @@ trait ReleaseService {
|
||||
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
|
||||
}
|
||||
|
||||
def getRelease(owner: String, repository: String, releaseId: String)(implicit s: Session): Option[Release] = {
|
||||
if (isInteger(releaseId))
|
||||
getRelease(owner, repository, releaseId.toInt)
|
||||
@@ -80,38 +93,6 @@ trait ReleaseService {
|
||||
releases.map(rel => (rel.tag -> rel)).toMap
|
||||
}
|
||||
|
||||
def insertRelease(owner: String, repository: String, loginUser: String, name: String, tag: String,
|
||||
content: Option[String], isDraft: Boolean, isPrerelease: Boolean)(implicit s: Session): Int = {
|
||||
// next id number
|
||||
val id = sql"SELECT RELEASE_ID + 1 FROM RELEASE_ID WHERE USER_NAME = $owner AND REPOSITORY_NAME = $repository FOR UPDATE".as[Int]
|
||||
.firstOption.getOrElse(1)
|
||||
Releases insert Release(
|
||||
owner,
|
||||
repository,
|
||||
id,
|
||||
name,
|
||||
tag,
|
||||
loginUser,
|
||||
content,
|
||||
isDraft,
|
||||
isPrerelease,
|
||||
currentDate,
|
||||
currentDate
|
||||
)
|
||||
|
||||
// increment issue id
|
||||
if (id > 1){
|
||||
ReleaseId
|
||||
.filter(_.byPrimaryKey(owner, repository))
|
||||
.map(_.releaseId)
|
||||
.update(id) > 0
|
||||
}else{
|
||||
ReleaseId.insert(owner, repository, id)
|
||||
}
|
||||
|
||||
id
|
||||
}
|
||||
|
||||
def updateRelease(owner: String, repository: String, releaseId: Int, title: String, content: Option[String])(implicit s: Session): Int = {
|
||||
Releases
|
||||
.filter (_.byPrimaryKey(owner, repository, releaseId))
|
||||
|
||||
Reference in New Issue
Block a user