diff --git a/src/main/java/hudson/plugins/git/extensions/impl/MessageExclusion.java b/src/main/java/hudson/plugins/git/extensions/impl/MessageExclusion.java index e5a83bc5a3..e44f80a5ef 100644 --- a/src/main/java/hudson/plugins/git/extensions/impl/MessageExclusion.java +++ b/src/main/java/hudson/plugins/git/extensions/impl/MessageExclusion.java @@ -16,6 +16,7 @@ import org.kohsuke.stapler.QueryParameter; import java.io.IOException; +import java.util.Objects; import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException; @@ -40,6 +41,41 @@ public class MessageExclusion extends GitSCMExtension { public String getExcludedMessage() { return excludedMessage; } + /** + * {@inheritDoc} + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + MessageExclusion that = (MessageExclusion) o; + + return Objects.equals(excludedMessage, that.excludedMessage); + } + + /** + * {@inheritDoc} + */ + @Override + public int hashCode() { + return Objects.hash(excludedMessage); + } + + /** + * {@inheritDoc} + */ + @Override + public String toString() { + return "MessageExclusion{" + + "excludedMessage='" + excludedMessage + '\'' + + '}'; + } + @Override @SuppressFBWarnings(value="NP_BOOLEAN_RETURN_NULL", justification="null used to indicate other extensions should decide") @CheckForNull diff --git a/src/main/java/jenkins/plugins/git/traits/MessageExclusionTrait.java b/src/main/java/jenkins/plugins/git/traits/MessageExclusionTrait.java new file mode 100644 index 0000000000..3fb2939320 --- /dev/null +++ b/src/main/java/jenkins/plugins/git/traits/MessageExclusionTrait.java @@ -0,0 +1,32 @@ +package jenkins.plugins.git.traits; + +import org.kohsuke.stapler.DataBoundConstructor; + +import hudson.Extension; +import hudson.plugins.git.extensions.impl.MessageExclusion; + +public class MessageExclusionTrait extends GitSCMExtensionTrait { + /** + * Stapler constructor. + * + * @param extension the {@link MessageExclusion}. + */ + @DataBoundConstructor + public MessageExclusionTrait(MessageExclusion extension) { + super(extension); + } + + /** + * Our {@link hudson.model.Descriptor} + */ + @Extension + public static class DescriptorImpl extends GitSCMExtensionTraitDescriptor { + /** + * {@inheritDoc} + */ + @Override + public String getDisplayName() { + return "Message exclusion"; + } + } +} diff --git a/src/test/java/jenkins/plugins/git/GitSCMSourceTraitsTest.java b/src/test/java/jenkins/plugins/git/GitSCMSourceTraitsTest.java index 1885ed521e..8ef7b4e0ac 100644 --- a/src/test/java/jenkins/plugins/git/GitSCMSourceTraitsTest.java +++ b/src/test/java/jenkins/plugins/git/GitSCMSourceTraitsTest.java @@ -9,6 +9,7 @@ import hudson.plugins.git.extensions.impl.CloneOption; import hudson.plugins.git.extensions.impl.GitLFSPull; import hudson.plugins.git.extensions.impl.LocalBranch; +import hudson.plugins.git.extensions.impl.MessageExclusion; import hudson.plugins.git.extensions.impl.PruneStaleBranch; import hudson.plugins.git.extensions.impl.SparseCheckoutPaths; import hudson.plugins.git.extensions.impl.SubmoduleOption; @@ -28,6 +29,7 @@ import jenkins.plugins.git.traits.GitLFSPullTrait; import jenkins.plugins.git.traits.IgnoreOnPushNotificationTrait; import jenkins.plugins.git.traits.LocalBranchTrait; +import jenkins.plugins.git.traits.MessageExclusionTrait; import jenkins.plugins.git.traits.PruneStaleBranchTrait; import jenkins.plugins.git.traits.RefSpecsSCMSourceTrait; import jenkins.plugins.git.traits.RemoteNameSCMSourceTrait; @@ -188,6 +190,13 @@ public void pimpped_out() throws Exception { hasProperty("localBranch", is("**")) ) ), + Matchers.instanceOf(CleanAfterCheckoutTrait.class), + Matchers.instanceOf(CleanBeforeCheckoutTrait.class), + Matchers.allOf( + instanceOf(MessageExclusionTrait.class), + hasProperty("extension", + hasProperty("excludedMessage", is("does not work"))) + ), Matchers.allOf( instanceOf(CleanBeforeCheckoutTrait.class), hasProperty("extension", @@ -272,6 +281,10 @@ public void pimpped_out() throws Exception { hasProperty("name", is("bob")), hasProperty("email", is("bob@example.com")) ), + Matchers.allOf( + instanceOf(MessageExclusion.class), + hasProperty("excludedMessage", is("does not work")) + ), Matchers.instanceOf(GitLFSPull.class), Matchers.instanceOf(PruneStaleBranch.class), Matchers.instanceOf(AuthorInChangelog.class), diff --git a/src/test/resources/jenkins/plugins/git/configuration-as-code.yaml b/src/test/resources/jenkins/plugins/git/configuration-as-code.yaml index 4e99674ac5..a2b2c1fd76 100644 --- a/src/test/resources/jenkins/plugins/git/configuration-as-code.yaml +++ b/src/test/resources/jenkins/plugins/git/configuration-as-code.yaml @@ -19,6 +19,8 @@ unclassified: - userIdentity: email: "customuser@acmecorp.com" name: "custom user" + - messageExclusion: + excludedMessage: "does not work" - preBuildMerge: options: mergeRemote: "myrepo"