From b218c2284e82ebcf0884ab9c03db264eca71c9fc Mon Sep 17 00:00:00 2001 From: Yasuhiro Takagi Date: Mon, 10 Apr 2017 21:21:47 +0900 Subject: [PATCH] To have compatibility with GitHub/GitHubEnterprise when archive downloading with sha1, even if supplied part of sha1, GH/GHE gives a filename with full(long) sha1. This patch make GitBucket to be compatible with GH/GHE behaviour. You can check that difference by following url. I upload same repo as in GitHuB to GitBucket demo site. GitHub: https://github.com/MunGell/awesome-for-beginners/archive/fc7d067.tar.gz GitBucket: http://gitbucket.herokuapp.com/root/awesome-for-beginners/archive/fc7d067.tar.gz GH returns, awesome-for-beginners-fc7d067cb13559f248bb362253ff2fa3b2617aba.tar.gz Otherwise GitBucket returns, awesome-for-beginners-fc7d067.tar.gz --- .../core/controller/RepositoryViewerController.scala | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/scala/gitbucket/core/controller/RepositoryViewerController.scala b/src/main/scala/gitbucket/core/controller/RepositoryViewerController.scala index 23eb612cf..f1eb9f2ae 100644 --- a/src/main/scala/gitbucket/core/controller/RepositoryViewerController.scala +++ b/src/main/scala/gitbucket/core/controller/RepositoryViewerController.scala @@ -670,12 +670,14 @@ trait RepositoryViewerControllerBase extends ControllerBase { private def archiveRepository(name: String, suffix: String, repository: RepositoryService.RepositoryInfo): Unit = { val revision = name.stripSuffix(suffix) - - val filename = repository.name + "-" + - (if(revision.length == 40) revision.substring(0, 10) else revision).replace('/', '-') + suffix - + using(Git.open(getRepositoryDir(repository.owner, repository.name))){ git => val revCommit = JGitUtil.getRevCommitFromId(git, git.getRepository.resolve(revision)) + + val sha1 = git.getRepository.resolve(revision).getName() + + val filename = repository.name + "-" + + (if(sha1.startsWith(revision)) sha1 else revision).replace('/','-') + suffix contentType = "application/octet-stream" response.setHeader("Content-Disposition", s"attachment; filename=${filename}")