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.