Use account name as pusher for commits by WebUI (#2745)

This commit is contained in:
Naoki Takezoe
2021-04-17 13:08:42 +09:00
committed by GitHub
parent 80112d3437
commit 781b1169a2
4 changed files with 59 additions and 53 deletions

View File

@@ -135,36 +135,42 @@ trait ApiRepositoryContentsControllerBase extends ControllerBase {
*/
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))
}
})
}
})
/*

View File

@@ -72,7 +72,7 @@ trait MergeService {
)(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 @@ trait MergeService {
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 @@ trait MergeService {
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 @@ object MergeService {
}
// 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 @@ object MergeService {
// 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 @@ object MergeService {
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 @@ object MergeService {
// 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 @@ object MergeService {
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 @@ object MergeService {
// 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 =>

View File

@@ -244,7 +244,7 @@ trait PullRequestService {
owner: String,
repository: String,
branch: String,
loginAccount: Account,
pusherAccount: Account,
action: String,
settings: SystemSettings
)(
@@ -296,7 +296,7 @@ trait PullRequestService {
action,
getRepository(owner, repository).get,
pullreq.requestBranch,
loginAccount,
pusherAccount,
settings
)
}

View File

@@ -78,9 +78,9 @@ trait RepositoryCommitFileService {
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 @@ trait RepositoryCommitFileService {
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 @@ trait RepositoryCommitFileService {
repository: RepositoryService.RepositoryInfo,
branch: String,
message: String,
loginAccount: Account,
pusherAccount: Account,
committerName: String,
committerMailAddress: String,
settings: SystemSettings
@@ -156,7 +156,7 @@ trait RepositoryCommitFileService {
// 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 @@ trait RepositoryCommitFileService {
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 @@ trait RepositoryCommitFileService {
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 @@ trait RepositoryCommitFileService {
getAccountByUserName(repository.owner).map { ownerAccount =>
WebHookPushPayload(
git,
loginAccount,
pusherAccount,
headName,
repository,
List(commit),