diff --git a/src/main/scala/gitbucket/core/controller/api/ApiRepositoryContentsControllerBase.scala b/src/main/scala/gitbucket/core/controller/api/ApiRepositoryContentsControllerBase.scala index eb2b233..1de0714 100644 --- a/src/main/scala/gitbucket/core/controller/api/ApiRepositoryContentsControllerBase.scala +++ b/src/main/scala/gitbucket/core/controller/api/ApiRepositoryContentsControllerBase.scala @@ -135,36 +135,42 @@ */ put("/api/v3/repos/:owner/:repository/contents/*")(writableUsersOnly { repository => - JsonFormat(for { - data <- extractFromJsonBody[CreateAFile] - } yield { - val branch = data.branch.getOrElse(repository.repository.defaultBranch) - val commit = Using.resource(Git.open(getRepositoryDir(repository.owner, repository.name))) { git => - val revCommit = JGitUtil.getRevCommitFromId(git, git.getRepository.resolve(branch)) - revCommit.name - } - val paths = multiParams("splat").head.split("/") - val path = paths.take(paths.size - 1).toList.mkString("/") - if (data.sha.isDefined && data.sha.get != commit) { - ApiError("The blob SHA is not matched.", Some("https://developer.github.com/v3/repos/contents/#update-a-file")) - } else { - val objectId = commitFile( - repository, - branch, - path, - Some(paths.last), - data.sha.map(_ => paths.last), - StringUtil.base64Decode(data.content), - data.message, - commit, - context.loginAccount.get, - data.committer.map(_.name).getOrElse(context.loginAccount.get.fullName), - data.committer.map(_.email).getOrElse(context.loginAccount.get.mailAddress), - context.settings - ) - ApiContents("file", paths.last, path, objectId.name, None, None)(RepositoryName(repository)) - } - }) + context.withLoginAccount { + loginAccount => + JsonFormat(for { + data <- extractFromJsonBody[CreateAFile] + } yield { + val branch = data.branch.getOrElse(repository.repository.defaultBranch) + val commit = Using.resource(Git.open(getRepositoryDir(repository.owner, repository.name))) { git => + val revCommit = JGitUtil.getRevCommitFromId(git, git.getRepository.resolve(branch)) + revCommit.name + } + val paths = multiParams("splat").head.split("/") + val path = paths.take(paths.size - 1).toList.mkString("/") + if (data.sha.isDefined && data.sha.get != commit) { + ApiError( + "The blob SHA is not matched.", + Some("https://developer.github.com/v3/repos/contents/#update-a-file") + ) + } else { + val objectId = commitFile( + repository, + branch, + path, + Some(paths.last), + data.sha.map(_ => paths.last), + StringUtil.base64Decode(data.content), + data.message, + commit, + loginAccount, + data.committer.map(_.name).getOrElse(loginAccount.fullName), + data.committer.map(_.email).getOrElse(loginAccount.mailAddress), + context.settings + ) + ApiContents("file", paths.last, path, objectId.name, None, None)(RepositoryName(repository)) + } + }) + } }) /* diff --git a/src/main/scala/gitbucket/core/service/MergeService.scala b/src/main/scala/gitbucket/core/service/MergeService.scala index 7d2c7c7..50fd0d0 100644 --- a/src/main/scala/gitbucket/core/service/MergeService.scala +++ b/src/main/scala/gitbucket/core/service/MergeService.scala @@ -72,7 +72,7 @@ )(implicit s: Session, c: JsonFormat.Context): ObjectId = { val beforeCommitId = git.getRepository.resolve(s"refs/heads/${branch}") val afterCommitId = new MergeCacheInfo(git, repository.owner, repository.name, branch, issueId, getReceiveHooks()) - .merge(message, new PersonIdent(loginAccount.fullName, loginAccount.mailAddress)) + .merge(message, new PersonIdent(loginAccount.fullName, loginAccount.mailAddress), loginAccount.userName) callWebHook(git, repository, branch, beforeCommitId, afterCommitId, loginAccount, settings) afterCommitId } @@ -90,7 +90,7 @@ val beforeCommitId = git.getRepository.resolve(s"refs/heads/${branch}") val afterCommitId = new MergeCacheInfo(git, repository.owner, repository.name, branch, issueId, getReceiveHooks()) - .rebase(new PersonIdent(loginAccount.fullName, loginAccount.mailAddress), commits) + .rebase(new PersonIdent(loginAccount.fullName, loginAccount.mailAddress), loginAccount.userName, commits) callWebHook(git, repository, branch, beforeCommitId, afterCommitId, loginAccount, settings) afterCommitId } @@ -108,7 +108,7 @@ val beforeCommitId = git.getRepository.resolve(s"refs/heads/${branch}") val afterCommitId = new MergeCacheInfo(git, repository.owner, repository.name, branch, issueId, getReceiveHooks()) - .squash(message, new PersonIdent(loginAccount.fullName, loginAccount.mailAddress)) + .squash(message, new PersonIdent(loginAccount.fullName, loginAccount.mailAddress), loginAccount.userName) callWebHook(git, repository, branch, beforeCommitId, afterCommitId, loginAccount, settings) afterCommitId } @@ -648,7 +648,7 @@ } // update branch from cache - def merge(message: String, committer: PersonIdent)(implicit s: Session): ObjectId = { + def merge(message: String, committer: PersonIdent, pusher: String)(implicit s: Session): ObjectId = { if (checkConflict().isDefined) { throw new RuntimeException("This pull request can't merge automatically.") } @@ -665,7 +665,7 @@ // call pre-commit hooks val error = receiveHooks.flatMap { hook => - hook.preReceive(userName, repositoryName, receivePack, receiveCommand, committer.getName, true) + hook.preReceive(userName, repositoryName, receivePack, receiveCommand, pusher, true) }.headOption error.foreach { error => @@ -683,7 +683,7 @@ objectId } - def rebase(committer: PersonIdent, commits: Seq[RevCommit])(implicit s: Session): ObjectId = { + def rebase(committer: PersonIdent, pusher: String, commits: Seq[RevCommit])(implicit s: Session): ObjectId = { if (checkConflict().isDefined) { throw new RuntimeException("This pull request can't merge automatically.") } @@ -719,7 +719,7 @@ // call pre-commit hooks val error = receiveHooks.flatMap { hook => - hook.preReceive(userName, repositoryName, receivePack, receiveCommand, committer.getName, true) + hook.preReceive(userName, repositoryName, receivePack, receiveCommand, pusher, true) }.headOption error.foreach { error => @@ -738,7 +738,7 @@ objectId } - def squash(message: String, committer: PersonIdent)(implicit s: Session): ObjectId = { + def squash(message: String, committer: PersonIdent, pusher: String)(implicit s: Session): ObjectId = { if (checkConflict().isDefined) { throw new RuntimeException("This pull request can't merge automatically.") } @@ -769,7 +769,7 @@ // call pre-commit hooks val error = receiveHooks.flatMap { hook => - hook.preReceive(userName, repositoryName, receivePack, receiveCommand, committer.getName, true) + hook.preReceive(userName, repositoryName, receivePack, receiveCommand, pusher, true) }.headOption error.foreach { error => diff --git a/src/main/scala/gitbucket/core/service/PullRequestService.scala b/src/main/scala/gitbucket/core/service/PullRequestService.scala index 23093de..c9dd238 100644 --- a/src/main/scala/gitbucket/core/service/PullRequestService.scala +++ b/src/main/scala/gitbucket/core/service/PullRequestService.scala @@ -244,7 +244,7 @@ owner: String, repository: String, branch: String, - loginAccount: Account, + pusherAccount: Account, action: String, settings: SystemSettings )( @@ -296,7 +296,7 @@ action, getRepository(owner, repository).get, pullreq.requestBranch, - loginAccount, + pusherAccount, settings ) } diff --git a/src/main/scala/gitbucket/core/service/RepositoryCommitFileService.scala b/src/main/scala/gitbucket/core/service/RepositoryCommitFileService.scala index 24429fd..889d671 100644 --- a/src/main/scala/gitbucket/core/service/RepositoryCommitFileService.scala +++ b/src/main/scala/gitbucket/core/service/RepositoryCommitFileService.scala @@ -78,9 +78,9 @@ content: Array[Byte], message: String, commit: String, - loginAccount: Account, - fullName: String, - mailAddress: String, + pusherAccount: Account, + committerName: String, + committerMailAddress: String, settings: SystemSettings )(implicit s: Session, c: JsonFormat.Context): ObjectId = { @@ -91,7 +91,7 @@ if (path.length == 0) oldFileName else s"${path}/${oldFileName}" } - _commitFile(repository, branch, message, loginAccount, fullName, mailAddress, settings) { + _commitFile(repository, branch, message, pusherAccount, committerName, committerMailAddress, settings) { case (git, headTip, builder, inserter) => if (headTip.getName == commit) { val permission = JGitUtil @@ -120,7 +120,7 @@ repository: RepositoryService.RepositoryInfo, branch: String, message: String, - loginAccount: Account, + pusherAccount: Account, committerName: String, committerMailAddress: String, settings: SystemSettings @@ -156,7 +156,7 @@ // call pre-commit hook val error = PluginRegistry().getReceiveHooks.flatMap { hook => - hook.preReceive(repository.owner, repository.name, receivePack, receiveCommand, committerName, false) + hook.preReceive(repository.owner, repository.name, receivePack, receiveCommand, pusherAccount.userName, false) }.headOption error match { @@ -177,12 +177,12 @@ refUpdate.update() // update pull request - updatePullRequests(repository.owner, repository.name, branch, loginAccount, "synchronize", settings) + updatePullRequests(repository.owner, repository.name, branch, pusherAccount, "synchronize", settings) // record activity updateLastActivityDate(repository.owner, repository.name) val commitInfo = new CommitInfo(JGitUtil.getRevCommitFromId(git, commitId)) - val pushInfo = PushInfo(repository.owner, repository.name, loginAccount.userName, branch, List(commitInfo)) + val pushInfo = PushInfo(repository.owner, repository.name, pusherAccount.userName, branch, List(commitInfo)) recordActivity(pushInfo) // create issue comment by commit message @@ -192,17 +192,17 @@ if (branch == repository.repository.defaultBranch) { closeIssuesFromMessage(message, committerName, repository.owner, repository.name).foreach { issueId => getIssue(repository.owner, repository.name, issueId.toString).foreach { issue => - callIssuesWebHook("closed", repository, issue, loginAccount, settings) + callIssuesWebHook("closed", repository, issue, pusherAccount, settings) val closeIssueInfo = CloseIssueInfo( repository.owner, repository.name, - loginAccount.userName, + pusherAccount.userName, issue.issueId, issue.title ) recordActivity(closeIssueInfo) PluginRegistry().getIssueHooks - .foreach(_.closedByCommitComment(issue, repository, message, loginAccount)) + .foreach(_.closedByCommitComment(issue, repository, message, pusherAccount)) } } } @@ -217,7 +217,7 @@ getAccountByUserName(repository.owner).map { ownerAccount => WebHookPushPayload( git, - loginAccount, + pusherAccount, headName, repository, List(commit),