Pre-hook exluding PRs
Asked by Daniel Schneider:

Hi all - I am trying to write a custom pre-hook using scriptrunner that will block direct pushes to a repo (non-PRs) that include a certain filename:
>
> ```
> if (pathsMatchExcludingDeletes('glob:something.yml')) { 
>     return false
> }
> return true
> ```

However, seems like this hook runs even when it's a PR and it errors out:

```
2020-09-04 11:26:37,080 ERROR [c.o.s.c.b.h.e.PreRepositoryHookExecutor]: *************************************************************************************2020-09-04 11:26:37,081 ERROR [c.o.s.c.b.h.e.PreRepositoryHookExecutor]: Script pre-hook failed:, repository: gpsjava.lang.IllegalStateException: At least one commit must be provided to include	at com.atlassian.bitbucket.commit.CommitsBetweenRequest.<init>(CommitsBetweenRequest.java:108)	at com.atlassian.bitbucket.commit.CommitsBetweenRequest.<init>(CommitsBetweenRequest.java:83)	at com.atlassian.bitbucket.commit.CommitsBetweenRequest$Builder.build(CommitsBetweenRequest.java:216)	at com.atlassian.bitbucket.commit.CommitsBetweenRequest$Builder$build$1.call(Unknown Source)	at com.onresolve.scriptrunner.canned.bitbucket.util.BitbucketConditionExtensions.createCommitsBetweenRequest(BitbucketConditionExtensions.groovy:167)	at com.onresolve.scriptrunner.canned.bitbucket.util.BitbucketConditionExtensions$createCommitsBetweenRequest.call(Unknown Source)	at com.onresolve.scriptrunner.canned.bitbucket.util.PathsMatchExtensions.streamAllMatchingChanges(PathsMatchExtensions.groovy:79)	at com.onresolve.scriptrunner.canned.bitbucket.util.PathsMatchExtensions.pathsMatchWithConfig(PathsMatchExtensions.groovy:67)	at com.onresolve.scriptrunner.canned.bitbucket.util.PathsMatchExtensions$pathsMatchWithConfig.call(Unknown Source)	at com.onresolve.scriptrunner.canned.bitbucket.util.BitbucketExtensions.pathsMatchExcludingDeletes(BitbucketExtensions.groovy:74)	at com.onresolve.scriptrunner.canned.bitbucket.util.BitbucketConditionUtils$_setupBinding_closure3$_closure4.doCall(BitbucketConditionUtils.groovy:243)	at com.onresolve.scriptrunner.canned.bitbucket.util.BitbucketConditionUtils$_setupBinding_closure3$_closure4.doCall(BitbucketConditionUtils.groovy)	at Script11.run(Script11.groovy:1)at com.atlassian.bitbucket.commit.CommitsBetweenRequest.<init>(CommitsBetweenRequest.java:108)at com.atlassian.bitbucket.commit.CommitsBetweenRequest.<init>(CommitsBetweenRequest.java:83)at com.atlassian.bitbucket.commit.CommitsBetweenRequest$Builder.build(CommitsBetweenRequest.java:216)at com.atlassian.bitbucket.commit.CommitsBetweenRequest$Builder$build$1.call(Unknown Source)at com.onresolve.scriptrunner.canned.bitbucket.util.BitbucketConditionExtensions.createCommitsBetweenRequest(BitbucketConditionExtensions.groovy:167)at com.onresolve.scriptrunner.canned.bitbucket.util.BitbucketConditionExtensions$createCommitsBetweenRequest.call(Unknown Source)at com.onresolve.scriptrunner.canned.bitbucket.util.PathsMatchExtensions.streamAllMatchingChanges(PathsMatchExtensions.groovy:79)at com.onresolve.scriptrunner.canned.bitbucket.util.PathsMatchExtensions.pathsMatchWithConfig(PathsMatchExtensions.groovy:67)at com.onresolve.scriptrunner.canned.bitbucket.util.PathsMatchExtensions$pathsMatchWithConfig.call(Unknown Source)at com.onresolve.scriptrunner.canned.bitbucket.util.BitbucketExtensions.pathsMatchExcludingDeletes(BitbucketExtensions.groovy:74)at com.onresolve.scriptrunner.canned.bitbucket.util.BitbucketConditionUtils$_setupBinding_closure3$_closure4.doCall(BitbucketConditionUtils.groovy:243)at com.onresolve.scriptrunner.canned.bitbucket.util.BitbucketConditionUtils$_setupBinding_closure3$_closure4.doCall(BitbucketConditionUtils.groovy)
```

How can I make this hook ignore (or evaluate to true?) if the trigger is a PR?


Answers:
author: Antony Jordan
body: I have found that the following works for me:

```
refChanges != [] && !pathsMatchExcludingDeletes('glob:something.yml')
```


author: Antony Jordan
body: Did you ever find a solution to this issue?

I am facing the same thing at the moment.


Tags: bitbucket-server

scriptrunner

server