diff --git a/src/main/scala/gitbucket/core/controller/FileUploadController.scala b/src/main/scala/gitbucket/core/controller/FileUploadController.scala index 79c1566..36a4775 100644 --- a/src/main/scala/gitbucket/core/controller/FileUploadController.scala +++ b/src/main/scala/gitbucket/core/controller/FileUploadController.scala @@ -131,7 +131,7 @@ } getOrElse BadRequest() } - post("/release/:owner/:repository/:tag") { + post("/release/:owner/:repository/*") { setMultipartConfigForLargeFile() session .get(Keys.Session.LoginAccount) @@ -139,7 +139,7 @@ case _: Account => val owner = params("owner") val repository = params("repository") - val tag = params("tag") + val tag = multiParams("splat").head execute( { (file, fileId) => FileUtils.writeByteArrayToFile( diff --git a/src/main/scala/gitbucket/core/controller/ReleasesController.scala b/src/main/scala/gitbucket/core/controller/ReleasesController.scala index de326e9..cc84449 100644 --- a/src/main/scala/gitbucket/core/controller/ReleasesController.scala +++ b/src/main/scala/gitbucket/core/controller/ReleasesController.scala @@ -63,8 +63,8 @@ ) }) - get("/:owner/:repository/releases/:tag")(referrersOnly { repository => - val tagName = params("tag") + get("/:owner/:repository/releases/*")(referrersOnly { repository => + val tagName = multiParams("splat").head getRelease(repository.owner, repository.name, tagName) .map { release => html.release( @@ -77,8 +77,8 @@ .getOrElse(NotFound()) }) - get("/:owner/:repository/releases/:tag/assets/:fileId")(referrersOnly { repository => - val tagName = params("tag") + get("/:owner/:repository/releases/*/assets/:fileId")(referrersOnly { repository => + val tagName = multiParams("splat").head val fileId = params("fileId") (for { _ <- repository.tags.find(_.name == tagName) @@ -93,8 +93,8 @@ }).getOrElse(NotFound()) }) - get("/:owner/:repository/releases/:tag/create")(writableUsersOnly { repository => - val tagName = params("tag") + get("/:owner/:repository/releases/*/create")(writableUsersOnly { repository => + val tagName = multiParams("splat").head val previousTags = repository.tags.takeWhile(_.name != tagName).reverse repository.tags @@ -105,10 +105,11 @@ .getOrElse(NotFound()) }) - post("/:owner/:repository/releases/:tag/create", releaseForm)(writableUsersOnly { (form, repository) => + post("/:owner/:repository/releases/*/create", releaseForm)(writableUsersOnly { (form, repository) => context.withLoginAccount { loginAccount => - val tagName = params("tag") + val tagName = multiParams("splat").head + // Insert into RELEASE createRelease(repository.owner, repository.name, form.name, form.content, tagName, loginAccount) @@ -151,8 +152,8 @@ commitLog }) - get("/:owner/:repository/releases/:tag/edit")(writableUsersOnly { repository => - val tagName = params("tag") + get("/:owner/:repository/releases/*/edit")(writableUsersOnly { repository => + val tagName = multiParams("splat").head val previousTags = repository.tags.takeWhile(_.name != tagName).reverse (for { @@ -169,10 +170,10 @@ }).getOrElse(NotFound()) }) - post("/:owner/:repository/releases/:tag/edit", releaseForm)(writableUsersOnly { (form, repository) => + post("/:owner/:repository/releases/*/edit", releaseForm)(writableUsersOnly { (form, repository) => context.withLoginAccount { loginAccount => - val tagName = params("tag") + val tagName = multiParams("splat").head getRelease(repository.owner, repository.name, tagName) .map { @@ -215,8 +216,8 @@ } }) - post("/:owner/:repository/releases/:tag/delete")(writableUsersOnly { repository => - val tagName = params("tag") + post("/:owner/:repository/releases/*/delete")(writableUsersOnly { repository => + val tagName = multiParams("splat").head getRelease(repository.owner, repository.name, tagName).foreach { release => FileUtils.deleteDirectory( new File(getReleaseFilesDir(repository.owner, repository.name), FileUtil.checkFilename(release.tag)) @@ -227,7 +228,6 @@ }) private def fetchReleases(repository: RepositoryService.RepositoryInfo, page: Int) = { - import gitbucket.core.service.ReleaseService._ val (offset, limit) = ((page - 1) * ReleaseLimit, ReleaseLimit) diff --git a/src/main/scala/gitbucket/core/service/RepositoryService.scala b/src/main/scala/gitbucket/core/service/RepositoryService.scala index 846a65f..7b11310 100644 --- a/src/main/scala/gitbucket/core/service/RepositoryService.scala +++ b/src/main/scala/gitbucket/core/service/RepositoryService.scala @@ -816,11 +816,13 @@ def sshUrl(implicit context: Context): Option[String] = RepositoryService.sshUrl(owner, name) def splitPath(path: String): (String, String) = { - val id = branchList.collectFirst { - case branch if (path == branch || path.startsWith(branch + "/")) => branch - } orElse tags.collectFirst { - case tag if (path == tag.name || path.startsWith(tag.name + "/")) => tag.name - } getOrElse path.split("/")(0) + val names = (branchList ++ tags.map(_.name)).sortBy(_.length).reverse + + val id = names.collectFirst { + case name if (path == name || path.startsWith(name + "/")) => name + } getOrElse { + path.split("/")(0) + } (id, path.substring(id.length).stripPrefix("/")) } diff --git a/src/main/twirl/gitbucket/core/releases/form.scala.html b/src/main/twirl/gitbucket/core/releases/form.scala.html index 1fda93a..92f3042 100644 --- a/src/main/twirl/gitbucket/core/releases/form.scala.html +++ b/src/main/twirl/gitbucket/core/releases/form.scala.html @@ -44,7 +44,7 @@ @release.map { case (release, assets) => @assets.map { asset =>
  • - @asset.label + @asset.label (remove)
  • @@ -56,9 +56,9 @@
    @if(release.isEmpty){ - + } else { - + }
    diff --git a/src/main/twirl/gitbucket/core/releases/list.scala.html b/src/main/twirl/gitbucket/core/releases/list.scala.html index 4107f4a..3c8b9ec 100644 --- a/src/main/twirl/gitbucket/core/releases/list.scala.html +++ b/src/main/twirl/gitbucket/core/releases/list.scala.html @@ -15,14 +15,14 @@
    - @tag.name
    + @tag.name
    @tag.id.substring(0, 7)
    @gitbucket.core.helper.html.datetimeago(tag.time)
    @release.map { case (release, assets) => -

    @release.name

    +

    @release.name

    @helpers.avatarLink(release.author, 20) @helpers.user(release.author, styleClass="username") released this @gitbucket.core.helper.html.datetimeago(release.registeredDate)

    diff --git a/src/main/twirl/gitbucket/core/releases/release.scala.html b/src/main/twirl/gitbucket/core/releases/release.scala.html index 55a754c..f645a0d 100644 --- a/src/main/twirl/gitbucket/core/releases/release.scala.html +++ b/src/main/twirl/gitbucket/core/releases/release.scala.html @@ -9,7 +9,7 @@
    @defining(repository.tags.find(_.name == release.tag)){ tag => @tag.map { tag => - @tag.name
    + @tag.name
    @tag.id.substring(0, 7)
    @gitbucket.core.helper.html.datetimeago(tag.time) }