Uploaded image for project: 'Jenkins'
  1. Jenkins
  2. JENKINS-43507

Allow SCMSource and SCMNavigator subtypes to share common traits

      Examples of traits from the JENKINS-43426 epic:

      • There will be a strategy to use switch the checkout to over SSH and this will have a option to select the SSH Credentials for checkout.
      • There will be at least one strategy to subset the branches by name (include / exclude)
        • There will one implementation that uses the existing wildcard style
        • Other strategies may be added later to support different branch name matching rules, e.g. Regex, etc. These secondary strategies do not form part of the MVP but it may prove assist extension point API validation to proof-of-concept implement a second one.
      • There will be three strategies to subset the branches by type:
        • There will be a strategy to select origin branches. This strategy will have a drop-down mode selection:
          • Only origin branches that are not filed as PRs
          • Only origin branches that are filed as PRs
          • All origin branches irrespective of whether filed as PR or not
        • There will be a strategy to select origin PRs. This strategy will have a drop-down mode selection:
          • Merge commit PRs
          • Head commit PRs
          • Both merge commit and head commit PRs
        • There will be a strategy to select fork PRs. This strategy will have a drop-down mode selection:
          • Merge commit PRs
          • Head commit PRs
          • Both merge commit and head commit PRs
      • There will also be a drop-down for trust selection:
          • Show all fork PRs but only trust fork PRs from repository contributors
          • Only show PRs from repository contributors
          • Show and trust all fork PRs
             TBD determine if we need to expose suppression of automatic builds of untrusted PRs here.
        • There will be a proof-of-concept implementation of a tag support branch selector. This is not a feature experienced by users today, but there are api's & code which is ready to provide it. We won't ship this enabled by default in the release.
      • There will be the ability to control a subset of the Git plugin’s additional behaviours for the generated SCM of branches. This will be an applies to all setting. The available options will be subject to a whitelisting extension point (so that plugins can define additional Git behaviours and whitelist them in at the same time). The default whitelist will be:
        • Advanced Checkout behaviours
        • Advanced Clone behaviours
        • Advanced Submodule behaviours
        • Clean after checkout
        • Clean before checkout
        • Custom user name / email address
        • Git LFS pull after checkout
        • Use commit author in changelog (says it requires workspace polling, but really does not / should not require workspace polling)
        • Wipe out repository & force clone

      Acceptance criteria

      • The SCM API provides the concept of a trait that applies to SCMSource and SCMNavigator
      • Traits will be opt-in, i.e. the SCMSource implementation must be written to use traits
      • Common trait implementations can be shared by multiple implementations.
      • Trait implementations can be specific to a single SCMSource or SCMNavigator
      • The SCM API will provide a trait implementation that allows for filtering branches based on include/exclude wildcard name matching
      • The SCM API MockSCM implementation will support traits
      • The common trait implementations in SCM API will have tests
      • The implementers guide will be updated to highlight the trait style of implementation and encourage following that path. 

          [JENKINS-43507] Allow SCMSource and SCMNavigator subtypes to share common traits

          Stephen Connolly created issue -
          Stephen Connolly made changes -
          Epic Link New: JENKINS-43426 [ 180671 ]
          Stephen Connolly made changes -
          Status Original: Open [ 1 ] New: In Progress [ 3 ]

          Code changed in jenkins
          User: Stephen Connolly
          Path:
          pom.xml
          src/main/java/jenkins/plugins/git/AbstractGitSCMSource.java
          src/main/java/jenkins/plugins/git/GitSCMBuilder.java
          src/main/java/jenkins/plugins/git/GitSCMFileSystem.java
          src/main/java/jenkins/plugins/git/GitSCMSource.java
          src/main/java/jenkins/plugins/git/GitSCMSourceContext.java
          src/main/java/jenkins/plugins/git/GitSCMSourceRequest.java
          src/main/java/jenkins/plugins/git/traits/AuthorInChangelogTrait.java
          src/main/java/jenkins/plugins/git/traits/CheckoutOptionTrait.java
          src/main/java/jenkins/plugins/git/traits/CleanAfterCheckoutTrait.java
          src/main/java/jenkins/plugins/git/traits/CleanBeforeCheckoutTrait.java
          src/main/java/jenkins/plugins/git/traits/CloneOptionTrait.java
          src/main/java/jenkins/plugins/git/traits/GitBrowserSCMSourceTrait.java
          src/main/java/jenkins/plugins/git/traits/GitLFSPullTrait.java
          src/main/java/jenkins/plugins/git/traits/GitSCMExtensionTrait.java
          src/main/java/jenkins/plugins/git/traits/GitSCMExtensionTraitDescriptor.java
          src/main/java/jenkins/plugins/git/traits/GitToolSCMSourceTrait.java
          src/main/java/jenkins/plugins/git/traits/IgnoreOnPushNotificationTrait.java
          src/main/java/jenkins/plugins/git/traits/LocalBranchTrait.java
          src/main/java/jenkins/plugins/git/traits/PruneStaleBranchTrait.java
          src/main/java/jenkins/plugins/git/traits/RefSpecsSCMSourceTrait.java
          src/main/java/jenkins/plugins/git/traits/RemoteNameSCMSourceTrait.java
          src/main/java/jenkins/plugins/git/traits/SubmoduleOptionTrait.java
          src/main/java/jenkins/plugins/git/traits/UserIdentityTrait.java
          src/main/java/jenkins/plugins/git/traits/WipeWorkspaceTrait.java
          src/main/resources/jenkins/plugins/git/GitSCMSource/config-detail.jelly
          src/main/resources/jenkins/plugins/git/traits/GitBrowserSCMSourceTrait/config.jelly
          src/main/resources/jenkins/plugins/git/traits/GitSCMExtensionTrait/config.jelly
          src/main/resources/jenkins/plugins/git/traits/GitToolSCMSourceTrait/config.jelly
          src/main/resources/jenkins/plugins/git/traits/LocalBranchTrait/config.jelly
          src/main/resources/jenkins/plugins/git/traits/Messages.properties
          src/main/resources/jenkins/plugins/git/traits/RefSpecsSCMSourceTrait/RefSpecTemplate/config.jelly
          src/main/resources/jenkins/plugins/git/traits/RefSpecsSCMSourceTrait/RefSpecTemplate/help-value.html
          src/main/resources/jenkins/plugins/git/traits/RefSpecsSCMSourceTrait/config.jelly
          src/main/resources/jenkins/plugins/git/traits/RemoteNameSCMSourceTrait/config.jelly
          src/test/java/jenkins/plugins/git/AbstractGitSCMSourceRetrieveHeadsTest.java
          http://jenkins-ci.org/commit/git-plugin/9504dd18c993edb5f48c0f856b56d7d25e077abe
          Log:
          JENKINS-43507 Check-pointing work in progress

          SCM/JIRA link daemon added a comment - Code changed in jenkins User: Stephen Connolly Path: pom.xml src/main/java/jenkins/plugins/git/AbstractGitSCMSource.java src/main/java/jenkins/plugins/git/GitSCMBuilder.java src/main/java/jenkins/plugins/git/GitSCMFileSystem.java src/main/java/jenkins/plugins/git/GitSCMSource.java src/main/java/jenkins/plugins/git/GitSCMSourceContext.java src/main/java/jenkins/plugins/git/GitSCMSourceRequest.java src/main/java/jenkins/plugins/git/traits/AuthorInChangelogTrait.java src/main/java/jenkins/plugins/git/traits/CheckoutOptionTrait.java src/main/java/jenkins/plugins/git/traits/CleanAfterCheckoutTrait.java src/main/java/jenkins/plugins/git/traits/CleanBeforeCheckoutTrait.java src/main/java/jenkins/plugins/git/traits/CloneOptionTrait.java src/main/java/jenkins/plugins/git/traits/GitBrowserSCMSourceTrait.java src/main/java/jenkins/plugins/git/traits/GitLFSPullTrait.java src/main/java/jenkins/plugins/git/traits/GitSCMExtensionTrait.java src/main/java/jenkins/plugins/git/traits/GitSCMExtensionTraitDescriptor.java src/main/java/jenkins/plugins/git/traits/GitToolSCMSourceTrait.java src/main/java/jenkins/plugins/git/traits/IgnoreOnPushNotificationTrait.java src/main/java/jenkins/plugins/git/traits/LocalBranchTrait.java src/main/java/jenkins/plugins/git/traits/PruneStaleBranchTrait.java src/main/java/jenkins/plugins/git/traits/RefSpecsSCMSourceTrait.java src/main/java/jenkins/plugins/git/traits/RemoteNameSCMSourceTrait.java src/main/java/jenkins/plugins/git/traits/SubmoduleOptionTrait.java src/main/java/jenkins/plugins/git/traits/UserIdentityTrait.java src/main/java/jenkins/plugins/git/traits/WipeWorkspaceTrait.java src/main/resources/jenkins/plugins/git/GitSCMSource/config-detail.jelly src/main/resources/jenkins/plugins/git/traits/GitBrowserSCMSourceTrait/config.jelly src/main/resources/jenkins/plugins/git/traits/GitSCMExtensionTrait/config.jelly src/main/resources/jenkins/plugins/git/traits/GitToolSCMSourceTrait/config.jelly src/main/resources/jenkins/plugins/git/traits/LocalBranchTrait/config.jelly src/main/resources/jenkins/plugins/git/traits/Messages.properties src/main/resources/jenkins/plugins/git/traits/RefSpecsSCMSourceTrait/RefSpecTemplate/config.jelly src/main/resources/jenkins/plugins/git/traits/RefSpecsSCMSourceTrait/RefSpecTemplate/help-value.html src/main/resources/jenkins/plugins/git/traits/RefSpecsSCMSourceTrait/config.jelly src/main/resources/jenkins/plugins/git/traits/RemoteNameSCMSourceTrait/config.jelly src/test/java/jenkins/plugins/git/AbstractGitSCMSourceRetrieveHeadsTest.java http://jenkins-ci.org/commit/git-plugin/9504dd18c993edb5f48c0f856b56d7d25e077abe Log: JENKINS-43507 Check-pointing work in progress

          Code changed in jenkins
          User: Stephen Connolly
          Path:
          src/main/java/hudson/plugins/git/extensions/impl/CleanBeforeCheckout.java
          src/main/java/hudson/plugins/git/extensions/impl/CleanCheckout.java
          src/main/java/hudson/plugins/git/extensions/impl/IgnoreNotifyCommit.java
          src/main/java/hudson/plugins/git/extensions/impl/LocalBranch.java
          src/main/java/jenkins/plugins/git/AbstractGitSCMSource.java
          src/test/java/jenkins/plugins/git/AbstractGitSCMSourceTest.java
          http://jenkins-ci.org/commit/git-plugin/3f8f67491cb5bff1b79fde8c4321320465e12050
          Log:
          JENKINS-43507 Fix test case in AbstractGitSCMSourceTest

          SCM/JIRA link daemon added a comment - Code changed in jenkins User: Stephen Connolly Path: src/main/java/hudson/plugins/git/extensions/impl/CleanBeforeCheckout.java src/main/java/hudson/plugins/git/extensions/impl/CleanCheckout.java src/main/java/hudson/plugins/git/extensions/impl/IgnoreNotifyCommit.java src/main/java/hudson/plugins/git/extensions/impl/LocalBranch.java src/main/java/jenkins/plugins/git/AbstractGitSCMSource.java src/test/java/jenkins/plugins/git/AbstractGitSCMSourceTest.java http://jenkins-ci.org/commit/git-plugin/3f8f67491cb5bff1b79fde8c4321320465e12050 Log: JENKINS-43507 Fix test case in AbstractGitSCMSourceTest

          Code changed in jenkins
          User: Stephen Connolly
          Path:
          src/main/java/jenkins/plugins/git/traits/GitToolSCMSourceTrait.java
          src/test/java/jenkins/plugins/git/AbstractGitSCMSourceRetrieveHeadsTest.java
          http://jenkins-ci.org/commit/git-plugin/8bf3f175d867018d75db9fdf049ee26bfc33be4a
          Log:
          JENKINS-43507 Fix test case in AbstractGitSCMSourceRetrieveHeadsTest

          Compare: https://github.com/jenkinsci/git-plugin/compare/bc51d2790091...8bf3f175d867

          SCM/JIRA link daemon added a comment - Code changed in jenkins User: Stephen Connolly Path: src/main/java/jenkins/plugins/git/traits/GitToolSCMSourceTrait.java src/test/java/jenkins/plugins/git/AbstractGitSCMSourceRetrieveHeadsTest.java http://jenkins-ci.org/commit/git-plugin/8bf3f175d867018d75db9fdf049ee26bfc33be4a Log: JENKINS-43507 Fix test case in AbstractGitSCMSourceRetrieveHeadsTest Compare: https://github.com/jenkinsci/git-plugin/compare/bc51d2790091...8bf3f175d867

          Code changed in jenkins
          User: Stephen Connolly
          Path:
          src/main/java/jenkins/scm/api/SCMBuilder.java
          src/main/java/jenkins/scm/api/trait/SCMHeadFilter.java
          src/main/java/jenkins/scm/api/trait/SCMSourceRequest.java
          src/main/java/jenkins/scm/api/trait/SCMSourceRequestBuilder.java
          src/main/java/jenkins/scm/api/trait/SCMSourceTrait.java
          src/main/java/jenkins/scm/api/trait/SCMSourceTraitDescriptor.java
          src/main/java/jenkins/scm/api/trait/package-info.java
          http://jenkins-ci.org/commit/scm-api-plugin/37da6daf780a7ea0805a9cbd4d3c3b356c8f5d56
          Log:
          JENKINS-43507 Refactoring to enable traits

          SCM/JIRA link daemon added a comment - Code changed in jenkins User: Stephen Connolly Path: src/main/java/jenkins/scm/api/SCMBuilder.java src/main/java/jenkins/scm/api/trait/SCMHeadFilter.java src/main/java/jenkins/scm/api/trait/SCMSourceRequest.java src/main/java/jenkins/scm/api/trait/SCMSourceRequestBuilder.java src/main/java/jenkins/scm/api/trait/SCMSourceTrait.java src/main/java/jenkins/scm/api/trait/SCMSourceTraitDescriptor.java src/main/java/jenkins/scm/api/trait/package-info.java http://jenkins-ci.org/commit/scm-api-plugin/37da6daf780a7ea0805a9cbd4d3c3b356c8f5d56 Log: JENKINS-43507 Refactoring to enable traits

          Code changed in jenkins
          User: Stephen Connolly
          Path:
          src/test/java/jenkins/scm/impl/mock/MockSCMBuilder.java
          src/test/java/jenkins/scm/impl/mock/MockSCMDiscoverBranches.java
          src/test/java/jenkins/scm/impl/mock/MockSCMDiscoverChangeRequests.java
          src/test/java/jenkins/scm/impl/mock/MockSCMDiscoverTags.java
          src/test/java/jenkins/scm/impl/mock/MockSCMNavigator.java
          src/test/java/jenkins/scm/impl/mock/MockSCMSource.java
          src/test/java/jenkins/scm/impl/mock/MockSCMSourceRequest.java
          src/test/java/jenkins/scm/impl/mock/MockSCMSourceRequestBuilder.java
          src/test/resources/jenkins/scm/impl/mock/MockSCMDiscoverChangeRequests/config.jelly
          src/test/resources/jenkins/scm/impl/mock/MockSCMNavigator/config.jelly
          src/test/resources/jenkins/scm/impl/mock/MockSCMSource/config-detail.jelly
          http://jenkins-ci.org/commit/scm-api-plugin/a3485be06b4841f37d052ed99d7b188cd6f93815
          Log:
          JENKINS-43507 Refactoring MockSCM to traits

          SCM/JIRA link daemon added a comment - Code changed in jenkins User: Stephen Connolly Path: src/test/java/jenkins/scm/impl/mock/MockSCMBuilder.java src/test/java/jenkins/scm/impl/mock/MockSCMDiscoverBranches.java src/test/java/jenkins/scm/impl/mock/MockSCMDiscoverChangeRequests.java src/test/java/jenkins/scm/impl/mock/MockSCMDiscoverTags.java src/test/java/jenkins/scm/impl/mock/MockSCMNavigator.java src/test/java/jenkins/scm/impl/mock/MockSCMSource.java src/test/java/jenkins/scm/impl/mock/MockSCMSourceRequest.java src/test/java/jenkins/scm/impl/mock/MockSCMSourceRequestBuilder.java src/test/resources/jenkins/scm/impl/mock/MockSCMDiscoverChangeRequests/config.jelly src/test/resources/jenkins/scm/impl/mock/MockSCMNavigator/config.jelly src/test/resources/jenkins/scm/impl/mock/MockSCMSource/config-detail.jelly http://jenkins-ci.org/commit/scm-api-plugin/a3485be06b4841f37d052ed99d7b188cd6f93815 Log: JENKINS-43507 Refactoring MockSCM to traits

          Code changed in jenkins
          User: Stephen Connolly
          Path:
          src/main/java/jenkins/scm/api/trait/SCMSourceRequest.java
          src/test/java/jenkins/scm/impl/mock/MockSCMDiscoverBranches.java
          src/test/java/jenkins/scm/impl/mock/MockSCMDiscoverChangeRequests.java
          src/test/java/jenkins/scm/impl/mock/MockSCMDiscoverTags.java
          src/test/java/jenkins/scm/impl/mock/MockSCMSource.java
          http://jenkins-ci.org/commit/scm-api-plugin/fd479ad33eba83b7680f9aab6120b11b07334c19
          Log:
          JENKINS-43507 Make more lambda friendly

          SCM/JIRA link daemon added a comment - Code changed in jenkins User: Stephen Connolly Path: src/main/java/jenkins/scm/api/trait/SCMSourceRequest.java src/test/java/jenkins/scm/impl/mock/MockSCMDiscoverBranches.java src/test/java/jenkins/scm/impl/mock/MockSCMDiscoverChangeRequests.java src/test/java/jenkins/scm/impl/mock/MockSCMDiscoverTags.java src/test/java/jenkins/scm/impl/mock/MockSCMSource.java http://jenkins-ci.org/commit/scm-api-plugin/fd479ad33eba83b7680f9aab6120b11b07334c19 Log: JENKINS-43507 Make more lambda friendly

          Code changed in jenkins
          User: Stephen Connolly
          Path:
          src/main/java/jenkins/scm/api/SCMHeadObserver.java
          src/main/java/jenkins/scm/api/trait/SCMHeadAuthority.java
          src/main/java/jenkins/scm/api/trait/SCMHeadAuthorityDescriptor.java
          src/main/java/jenkins/scm/api/trait/SCMHeadFilter.java
          src/main/java/jenkins/scm/api/trait/SCMHeadPrefilter.java
          src/main/java/jenkins/scm/api/trait/SCMSourceRequest.java
          src/main/java/jenkins/scm/api/trait/SCMSourceRequestBuilder.java
          src/main/java/jenkins/scm/api/trait/SCMSourceTrait.java
          src/main/java/jenkins/scm/api/trait/SCMSourceTraitDescriptor.java
          src/main/java/jenkins/scm/impl/trait/WildcardNameFilterTrait.java
          src/main/resources/jenkins/scm/impl/trait/Messages.properties
          src/main/resources/jenkins/scm/impl/trait/WIldcardNameFilterTrait/config.jelly
          src/main/resources/jenkins/scm/impl/trait/WIldcardNameFilterTrait/help-excludes.html
          src/main/resources/jenkins/scm/impl/trait/WIldcardNameFilterTrait/help-includes.html
          src/test/java/jenkins/scm/impl/mock/MockSCMDiscoverBranches.java
          src/test/java/jenkins/scm/impl/mock/MockSCMDiscoverChangeRequests.java
          src/test/java/jenkins/scm/impl/mock/MockSCMDiscoverTags.java
          src/test/java/jenkins/scm/impl/mock/MockSCMSource.java
          src/test/java/jenkins/scm/impl/mock/MockSCMSourceRequest.java
          src/test/java/jenkins/scm/impl/mock/MockSCMSourceRequestBuilder.java
          src/test/java/jenkins/scm/impl/trait/WildcardNameFilterTraitTest.java
          http://jenkins-ci.org/commit/scm-api-plugin/a1fa90b418fe71ed57fed32cb814b809d5541d89
          Log:
          JENKINS-43507 This stuff is seeming reasonably solid

          SCM/JIRA link daemon added a comment - Code changed in jenkins User: Stephen Connolly Path: src/main/java/jenkins/scm/api/SCMHeadObserver.java src/main/java/jenkins/scm/api/trait/SCMHeadAuthority.java src/main/java/jenkins/scm/api/trait/SCMHeadAuthorityDescriptor.java src/main/java/jenkins/scm/api/trait/SCMHeadFilter.java src/main/java/jenkins/scm/api/trait/SCMHeadPrefilter.java src/main/java/jenkins/scm/api/trait/SCMSourceRequest.java src/main/java/jenkins/scm/api/trait/SCMSourceRequestBuilder.java src/main/java/jenkins/scm/api/trait/SCMSourceTrait.java src/main/java/jenkins/scm/api/trait/SCMSourceTraitDescriptor.java src/main/java/jenkins/scm/impl/trait/WildcardNameFilterTrait.java src/main/resources/jenkins/scm/impl/trait/Messages.properties src/main/resources/jenkins/scm/impl/trait/WIldcardNameFilterTrait/config.jelly src/main/resources/jenkins/scm/impl/trait/WIldcardNameFilterTrait/help-excludes.html src/main/resources/jenkins/scm/impl/trait/WIldcardNameFilterTrait/help-includes.html src/test/java/jenkins/scm/impl/mock/MockSCMDiscoverBranches.java src/test/java/jenkins/scm/impl/mock/MockSCMDiscoverChangeRequests.java src/test/java/jenkins/scm/impl/mock/MockSCMDiscoverTags.java src/test/java/jenkins/scm/impl/mock/MockSCMSource.java src/test/java/jenkins/scm/impl/mock/MockSCMSourceRequest.java src/test/java/jenkins/scm/impl/mock/MockSCMSourceRequestBuilder.java src/test/java/jenkins/scm/impl/trait/WildcardNameFilterTraitTest.java http://jenkins-ci.org/commit/scm-api-plugin/a1fa90b418fe71ed57fed32cb814b809d5541d89 Log: JENKINS-43507 This stuff is seeming reasonably solid

            stephenconnolly Stephen Connolly
            stephenconnolly Stephen Connolly
            Votes:
            4 Vote for this issue
            Watchers:
            21 Start watching this issue

              Created:
              Updated:
              Resolved: