From 359fb62437949f12be58f55e6d6ff2030fedb772 Mon Sep 17 00:00:00 2001 From: Martin Henschke Date: Thu, 2 Feb 2023 17:24:27 +1100 Subject: [PATCH 1/3] JENKINS-70275 git scm owner is reinitialized if null whenever accessing in BitbucketSCMSource --- .../internal/scm/BitbucketSCMSource.java | 3 +++ .../internal/scm/BitbucketSCMSourceTest.java | 22 +++++++++++++++---- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/atlassian/bitbucket/jenkins/internal/scm/BitbucketSCMSource.java b/src/main/java/com/atlassian/bitbucket/jenkins/internal/scm/BitbucketSCMSource.java index 7650936c7..2434dbb94 100644 --- a/src/main/java/com/atlassian/bitbucket/jenkins/internal/scm/BitbucketSCMSource.java +++ b/src/main/java/com/atlassian/bitbucket/jenkins/internal/scm/BitbucketSCMSource.java @@ -181,6 +181,9 @@ public BitbucketSCMRepository getBitbucketSCMRepository() { CustomGitSCMSource getAndInitializeGitSCMSourceIfNull() { if (gitSCMSource == null) { initializeGitScmSource(); + } + if (getOwner() != null && gitSCMSource.getOwner() == null) { + gitSCMSource.setOwner(getOwner()); } return gitSCMSource; } diff --git a/src/test/java/com/atlassian/bitbucket/jenkins/internal/scm/BitbucketSCMSourceTest.java b/src/test/java/com/atlassian/bitbucket/jenkins/internal/scm/BitbucketSCMSourceTest.java index 5389865f1..4535e80f8 100644 --- a/src/test/java/com/atlassian/bitbucket/jenkins/internal/scm/BitbucketSCMSourceTest.java +++ b/src/test/java/com/atlassian/bitbucket/jenkins/internal/scm/BitbucketSCMSourceTest.java @@ -14,10 +14,7 @@ import hudson.model.Action; import hudson.model.Actionable; import jenkins.branch.MultiBranchProject; -import jenkins.scm.api.SCMHead; -import jenkins.scm.api.SCMHeadEvent; -import jenkins.scm.api.SCMSourceDescriptor; -import jenkins.scm.api.SCMSourceEvent; +import jenkins.scm.api.*; import jenkins.scm.api.metadata.PrimaryInstanceMetadataAction; import org.apache.commons.lang3.StringUtils; @@ -216,6 +213,23 @@ public void testInitializeSCMSourceHTTP() { CustomGitSCMSource gitSource = source.getAndInitializeGitSCMSourceIfNull(); assertThat(gitSource.getRemote(), equalTo(HTTP_CLONE_LINK)); } + + @Test + public void testGetAndInitializeGitSCMSourceSetsOwnerIfNull() { + BitbucketSCMSource source = new SCMSourceBuilder(CREDENTIAL_ID) + .serverId(SERVER_ID) + .projectName(PROJECT_NAME) + .repositoryName(REPOSITORY_NAME) + .build(); + CustomGitSCMSource gitSource = source.getAndInitializeGitSCMSourceIfNull(); // Initializes with no owner + assertThat(gitSource.getOwner(), equalTo(null)); + + SCMSourceOwner owner = mock(SCMSourceOwner.class); + source.setOwner(owner); // This is handled by Jenkins during typical execution + + gitSource = source.getAndInitializeGitSCMSourceIfNull(); + assertThat(gitSource.getOwner(), equalTo(owner)); + } @Test public void testInitializeSCMSourceSSH() { From 8c93cc693b4b7b631a2031cfab88dfeb1aaf9e5d Mon Sep 17 00:00:00 2001 From: Martin Henschke Date: Fri, 3 Feb 2023 16:01:01 +1100 Subject: [PATCH 2/3] Updated name for get initialized scm method --- .../jenkins/internal/scm/BitbucketSCMSource.java | 9 +++++---- .../jenkins/internal/scm/BitbucketSCMSourceTest.java | 12 ++++++------ 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/atlassian/bitbucket/jenkins/internal/scm/BitbucketSCMSource.java b/src/main/java/com/atlassian/bitbucket/jenkins/internal/scm/BitbucketSCMSource.java index 2434dbb94..0a7dacebc 100644 --- a/src/main/java/com/atlassian/bitbucket/jenkins/internal/scm/BitbucketSCMSource.java +++ b/src/main/java/com/atlassian/bitbucket/jenkins/internal/scm/BitbucketSCMSource.java @@ -105,7 +105,7 @@ public SCM build(SCMHead head, @CheckForNull SCMRevision revision) { if (LOGGER.isLoggable(Level.FINE)) { LOGGER.fine("Building SCM for " + head.getName() + " at revision " + revision); } - return getAndInitializeGitSCMSourceIfNull().build(head, revision); + return getFullyInitializedGitSCMSource().build(head, revision); } @Override @@ -178,12 +178,13 @@ public BitbucketSCMRepository getBitbucketSCMRepository() { return repository; } - CustomGitSCMSource getAndInitializeGitSCMSourceIfNull() { + CustomGitSCMSource getFullyInitializedGitSCMSource() { if (gitSCMSource == null) { initializeGitScmSource(); } if (getOwner() != null && gitSCMSource.getOwner() == null) { gitSCMSource.setOwner(getOwner()); + gitSCMSource.setBrowser(new BitbucketServer(selfLink)); } return gitSCMSource; } @@ -211,7 +212,7 @@ public String getProjectName() { } public String getRemote() { - return getAndInitializeGitSCMSourceIfNull().getRemote(); + return getFullyInitializedGitSCMSource().getRemote(); } public String getRepositoryName() { @@ -285,7 +286,7 @@ protected void retrieve(@CheckForNull SCMSourceCriteria criteria, SCMHeadObserve " Check the configuration before running this job again."); return; } - getAndInitializeGitSCMSourceIfNull().accessibleRetrieve(criteria, observer, event, listener); + getFullyInitializedGitSCMSource().accessibleRetrieve(criteria, observer, event, listener); } } diff --git a/src/test/java/com/atlassian/bitbucket/jenkins/internal/scm/BitbucketSCMSourceTest.java b/src/test/java/com/atlassian/bitbucket/jenkins/internal/scm/BitbucketSCMSourceTest.java index 4535e80f8..31b312ad3 100644 --- a/src/test/java/com/atlassian/bitbucket/jenkins/internal/scm/BitbucketSCMSourceTest.java +++ b/src/test/java/com/atlassian/bitbucket/jenkins/internal/scm/BitbucketSCMSourceTest.java @@ -184,7 +184,7 @@ public void testInitializeSCMSourceForMirrorHTTP() { .mirrorName(MIRROR_NAME) .build(); - CustomGitSCMSource gitSource = source.getAndInitializeGitSCMSourceIfNull(); + CustomGitSCMSource gitSource = source.getFullyInitializedGitSCMSource(); assertThat(gitSource.getRemote(), equalTo(HTTP_MIRROR_CLONE_LINK)); } @@ -198,7 +198,7 @@ public void testInitializeSCMSourceForMirrorSSH() { .mirrorName(MIRROR_NAME) .build(); - CustomGitSCMSource gitSource = source.getAndInitializeGitSCMSourceIfNull(); + CustomGitSCMSource gitSource = source.getFullyInitializedGitSCMSource(); assertThat(gitSource.getRemote(), equalTo(SSH_MIRROR_CLONE_LINK)); } @@ -210,7 +210,7 @@ public void testInitializeSCMSourceHTTP() { .repositoryName(REPOSITORY_NAME) .build(); - CustomGitSCMSource gitSource = source.getAndInitializeGitSCMSourceIfNull(); + CustomGitSCMSource gitSource = source.getFullyInitializedGitSCMSource(); assertThat(gitSource.getRemote(), equalTo(HTTP_CLONE_LINK)); } @@ -221,13 +221,13 @@ public void testGetAndInitializeGitSCMSourceSetsOwnerIfNull() { .projectName(PROJECT_NAME) .repositoryName(REPOSITORY_NAME) .build(); - CustomGitSCMSource gitSource = source.getAndInitializeGitSCMSourceIfNull(); // Initializes with no owner + CustomGitSCMSource gitSource = source.getFullyInitializedGitSCMSource(); // Initializes with no owner assertThat(gitSource.getOwner(), equalTo(null)); SCMSourceOwner owner = mock(SCMSourceOwner.class); source.setOwner(owner); // This is handled by Jenkins during typical execution - gitSource = source.getAndInitializeGitSCMSourceIfNull(); + gitSource = source.getFullyInitializedGitSCMSource(); assertThat(gitSource.getOwner(), equalTo(owner)); } @@ -240,7 +240,7 @@ public void testInitializeSCMSourceSSH() { .repositoryName(REPOSITORY_NAME) .build(); - CustomGitSCMSource gitSource = source.getAndInitializeGitSCMSourceIfNull(); + CustomGitSCMSource gitSource = source.getFullyInitializedGitSCMSource(); assertThat(gitSource.getRemote(), equalTo(SSH_CLONE_LINK)); } From 97e80ee6328c6bf8a9e49729afffba73c7d13953 Mon Sep 17 00:00:00 2001 From: Martin Henschke Date: Thu, 9 Feb 2023 15:35:26 +1100 Subject: [PATCH 3/3] JENKSIN-70275 removed uninitialized self link reference --- .../bitbucket/jenkins/internal/scm/BitbucketSCMSource.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/atlassian/bitbucket/jenkins/internal/scm/BitbucketSCMSource.java b/src/main/java/com/atlassian/bitbucket/jenkins/internal/scm/BitbucketSCMSource.java index 0a7dacebc..979194d91 100644 --- a/src/main/java/com/atlassian/bitbucket/jenkins/internal/scm/BitbucketSCMSource.java +++ b/src/main/java/com/atlassian/bitbucket/jenkins/internal/scm/BitbucketSCMSource.java @@ -184,7 +184,6 @@ CustomGitSCMSource getFullyInitializedGitSCMSource() { } if (getOwner() != null && gitSCMSource.getOwner() == null) { gitSCMSource.setOwner(getOwner()); - gitSCMSource.setBrowser(new BitbucketServer(selfLink)); } return gitSCMSource; }