Episode 6
diff --git a/pom.xml b/pom.xml
index bbb5d5b..4b996ff 100644
--- a/pom.xml
+++ b/pom.xml
@@ -21,13 +21,13 @@
   <parent>
     <groupId>org.jenkins-ci.plugins</groupId>
     <artifactId>plugin</artifactId>
-    <version>2.19</version>
+    <version>3.0</version>
     <relativePath />
   </parent>
 
   <groupId>io.github.stephenc.apache</groupId>
   <artifactId>asf-gitpubsub-jenkins</artifactId>
-  <version>0.4-SNAPSHOT</version>
+  <version>0.5-SNAPSHOT</version>
   <packaging>hpi</packaging>
 
   <name>ASF GitPubSub Jenkins Notifications</name>
@@ -49,7 +49,7 @@
   </scm>
 
   <properties>
-    <jenkins.version>1.642.3</jenkins.version>
+    <jenkins.version>2.73.1</jenkins.version>
   </properties>
 
   <repositories>
@@ -67,14 +67,25 @@
 
   <dependencies>
     <dependency>
+      <groupId>org.jenkins-ci</groupId>
+      <artifactId>annotation-indexer</artifactId>
+      <version>1.12</version>
+      <optional>true</optional>
+    </dependency>
+    <dependency>
+      <groupId>org.jenkins-ci.plugins</groupId>
+      <artifactId>structs</artifactId>
+      <version>1.10</version>
+    </dependency>
+    <dependency>
       <groupId>org.jenkins-ci.plugins</groupId>
       <artifactId>scm-api</artifactId>
-      <version>2.2.3</version>
+      <version>2.2.5</version>
     </dependency>
     <dependency>
       <groupId>org.jenkins-ci.plugins</groupId>
       <artifactId>git</artifactId>
-      <version>3.6.2</version>
+      <version>3.6.4</version>
     </dependency>
     <dependency>
       <groupId>org.jenkins-ci.plugins</groupId>
@@ -86,6 +97,33 @@
       <artifactId>jackson2-api</artifactId>
       <version>2.7.3</version>
     </dependency>
+    <dependency>
+      <groupId>org.jenkins-ci.plugins</groupId>
+      <artifactId>jsoup</artifactId>
+      <version>1.10.3</version>
+    </dependency>
+    <dependency>
+      <groupId>com.damnhandy</groupId>
+      <artifactId>handy-uri-templates</artifactId>
+      <version>2.1.6</version>
+    </dependency>
+    <dependency>
+      <groupId>org.jenkins-ci.plugins</groupId>
+      <artifactId>junit</artifactId>
+      <version>1.3</version>
+      <optional>true</optional>
+    </dependency>
   </dependencies>
 
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.jenkins-ci.tools</groupId>
+        <artifactId>maven-hpi-plugin</artifactId>
+        <configuration>
+          <maskClasses>com.damnhandy.uri.template</maskClasses>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
 </project>
diff --git a/src/main/java/org/apache/jenkins/gitpubsub/ASFGitSCMFile.java b/src/main/java/org/apache/jenkins/gitpubsub/ASFGitSCMFile.java
new file mode 100644
index 0000000..2834ca4
--- /dev/null
+++ b/src/main/java/org/apache/jenkins/gitpubsub/ASFGitSCMFile.java
@@ -0,0 +1,37 @@
+package org.apache.jenkins.gitpubsub;
+
+import edu.umd.cs.findbugs.annotations.NonNull;
+import java.io.IOException;
+import java.io.InputStream;
+import jenkins.scm.api.SCMFile;
+
+public class ASFGitSCMFile extends SCMFile {
+    @NonNull
+    @Override
+    protected SCMFile newChild(@NonNull String name, boolean assumeIsDirectory) {
+        return null;
+    }
+
+    @NonNull
+    @Override
+    public Iterable<SCMFile> children() throws IOException, InterruptedException {
+        return null;
+    }
+
+    @Override
+    public long lastModified() throws IOException, InterruptedException {
+        return 0;
+    }
+
+    @NonNull
+    @Override
+    protected Type type() throws IOException, InterruptedException {
+        return null;
+    }
+
+    @NonNull
+    @Override
+    public InputStream content() throws IOException, InterruptedException {
+        return null;
+    }
+}
diff --git a/src/main/java/org/apache/jenkins/gitpubsub/ASFGitSCMFileSystem.java b/src/main/java/org/apache/jenkins/gitpubsub/ASFGitSCMFileSystem.java
new file mode 100644
index 0000000..34e6fec
--- /dev/null
+++ b/src/main/java/org/apache/jenkins/gitpubsub/ASFGitSCMFileSystem.java
@@ -0,0 +1,4 @@
+package org.apache.jenkins.gitpubsub;
+
+public class ASFGitSCMFileSystem {
+}
diff --git a/src/main/java/org/apache/jenkins/gitpubsub/GitPubSubPoll.java b/src/main/java/org/apache/jenkins/gitpubsub/GitPubSubPoll.java
index 9d437e0..86d6101 100644
--- a/src/main/java/org/apache/jenkins/gitpubsub/GitPubSubPoll.java
+++ b/src/main/java/org/apache/jenkins/gitpubsub/GitPubSubPoll.java
@@ -52,12 +52,14 @@
 import jenkins.plugins.asynchttpclient.AHCUtils;
 import jenkins.plugins.git.AbstractGitSCMSource;
 import jenkins.plugins.git.GitSCMSource;
+import jenkins.plugins.git.traits.IgnoreOnPushNotificationTrait;
 import jenkins.scm.api.SCMEvent;
 import jenkins.scm.api.SCMHead;
 import jenkins.scm.api.SCMHeadEvent;
 import jenkins.scm.api.SCMNavigator;
 import jenkins.scm.api.SCMRevision;
 import jenkins.scm.api.SCMSource;
+import jenkins.scm.api.trait.SCMTrait;
 import org.eclipse.jgit.lib.Constants;
 import org.eclipse.jgit.transport.RemoteConfig;
 import org.eclipse.jgit.transport.URIish;
@@ -342,7 +344,7 @@
         public Map<SCMHead, SCMRevision> heads(@NonNull SCMSource source) {
             if (source instanceof GitSCMSource) {
                 GitSCMSource git = (GitSCMSource) source;
-                if (git.isIgnoreOnPushNotifications() || remoteUri == null) {
+                if (SCMTrait.find(git.getTraits(), IgnoreOnPushNotificationTrait.class) != null || remoteUri == null) {
                     return Collections.emptyMap();
                 }
                 URIish remoteUri;