I'm trying to write a ScriptRunner pre-receive hook that rejects merge commits except from master.
I'm able to enumerate the refChanges, but I don't see how to get a reference to a CommitService instance so that I can get the message and parents of each commit.
Here's what I have thus far:
import com.atlassian.stash.commit.Commit
import com.atlassian.stash.commit.CommitService
import com.atlassian.stash.commit.CommitsBetweenRequest
import com.atlassian.stash.hook.HookResponse
import com.atlassian.stash.repository.RefChange
import com.atlassian.stash.repository.Repository
import com.atlassian.stash.util.Page
import com.atlassian.stash.util.PageRequestImpl
import com.atlassian.stash.util.PageUtils
Repository repository = repository
Collection<RefChange> refChanges = refChanges
HookResponse hookResponse = hookResponse
for (refChange in refChanges) {
hookResponse.out().print("from ${refChange.getFromHash()} to ${refChange.getToHash()}\n")
hookResponse.out().print(">>> ${refChange.getRefId()}\n")
CommitsBetweenRequest request = new CommitsBetweenRequest.Builder(repository)
.exclude(refChange.getFromHash())
.include(refChange.getToHash())
.build()
try {
Page<Commit> commits =
commitService.getCommitsBetween(request, PageUtils.newRequest(0, 25))
} catch (e) {
hookResponse.out().println("DOH: ${e.getMessage()}")
return false
}
for (commit in commits) {
hookResponse.out().println(">>> ${commit.getMessage()}")
hookResponse.out().println(">>> parents: ${commit.getParents().length}")
}
}
return true
Well, I can't answer my own question, apparently, but the solution is to use ComponentLocator:
import com.atlassian.sal.api.component.ComponentLocator import com.atlassian.stash.commit.CommitService CommitService commitService = ComponentLocator.getComponent(CommitService)
The solution is to use ComponentLocator ![]()
You just need to be aware that you will have to modify that import when you come to upgrade to Bitbucket server: https://scriptrunner.adaptavist.com/latest/bitbucket/releases/release-4.1.2.html
There is also a method tacked on to refChanges which will get all the commits:
refChanges.getCommits(repository).each { Commit commit -> ...
Thanks! That is useful. It would be great to add some documentation about this to https://scriptrunner.adaptavist.com/latest/bitbucket/PreReceiveHooks.html
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Some of the extension methods are doc'd at https://scriptrunner.adaptavist.com/latest/bitbucket/#_condition_methods, unfortunately not that one.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.