From 2510bd3797b2379dd679f033a94cc556abd96ddc Mon Sep 17 00:00:00 2001 From: Rishabh Budhouliya Date: Fri, 31 Jan 2020 01:54:20 +0530 Subject: [PATCH 1/5] =[JENKINS-56063] added expansion of env variables in refspec in case of honor refspec --- .../plugins/git/extensions/impl/CloneOption.java | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/main/java/hudson/plugins/git/extensions/impl/CloneOption.java b/src/main/java/hudson/plugins/git/extensions/impl/CloneOption.java index be46f4339b..ffd3036965 100644 --- a/src/main/java/hudson/plugins/git/extensions/impl/CloneOption.java +++ b/src/main/java/hudson/plugins/git/extensions/impl/CloneOption.java @@ -14,6 +14,7 @@ import hudson.plugins.git.util.GitUtils; import hudson.slaves.NodeProperty; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Objects; import org.eclipse.jgit.transport.RefSpec; @@ -148,7 +149,20 @@ public void decorateCloneCommand(GitSCM scm, Run build, GitClient git, Tas // in a single job definition. RemoteConfig rc = scm.getRepositories().get(0); List refspecs = rc.getFetchRefSpecs(); - cmd.refspecs(refspecs); + List expandedrefSpecs = new ArrayList<>(); + Boolean check = false; + for (RefSpec ref:refspecs) { + if(ref.toString().contains("$")){ + EnvVars env = build.getEnvironment(listener); + expandedrefSpecs.add(new RefSpec(env.expand(ref.toString()))); + check = true; + } + } + if(!check) { + cmd.refspecs(refspecs); + } else{ + cmd.refspecs(expandedrefSpecs); + } } cmd.timeout(timeout); From 7d7f67057c8c79c050d8fcab00535e091deec978 Mon Sep 17 00:00:00 2001 From: Rishabh Budhouliya Date: Fri, 31 Jan 2020 12:55:51 +0530 Subject: [PATCH 2/5] =removed the check flag and changed the implementation --- .../plugins/git/extensions/impl/CloneOption.java | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/src/main/java/hudson/plugins/git/extensions/impl/CloneOption.java b/src/main/java/hudson/plugins/git/extensions/impl/CloneOption.java index ffd3036965..eda5fa9785 100644 --- a/src/main/java/hudson/plugins/git/extensions/impl/CloneOption.java +++ b/src/main/java/hudson/plugins/git/extensions/impl/CloneOption.java @@ -149,20 +149,12 @@ public void decorateCloneCommand(GitSCM scm, Run build, GitClient git, Tas // in a single job definition. RemoteConfig rc = scm.getRepositories().get(0); List refspecs = rc.getFetchRefSpecs(); - List expandedrefSpecs = new ArrayList<>(); - Boolean check = false; + List expandedRefSpecs = new ArrayList<>(); + EnvVars env = build.getEnvironment(listener); for (RefSpec ref:refspecs) { - if(ref.toString().contains("$")){ - EnvVars env = build.getEnvironment(listener); - expandedrefSpecs.add(new RefSpec(env.expand(ref.toString()))); - check = true; - } - } - if(!check) { - cmd.refspecs(refspecs); - } else{ - cmd.refspecs(expandedrefSpecs); + expandedRefSpecs.add(new RefSpec(env.expand(ref.toString()))); } + cmd.refspecs(expandedRefSpecs); } cmd.timeout(timeout); From 58320c4ee6a1db6b432c09511fcfa67c78889560 Mon Sep 17 00:00:00 2001 From: rishabhBudhouliya <31189405+rishabhBudhouliya@users.noreply.github.com> Date: Sat, 1 Feb 2020 12:28:40 +0530 Subject: [PATCH 3/5] Changed minor indentation issues --- .../java/hudson/plugins/git/extensions/impl/CloneOption.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/hudson/plugins/git/extensions/impl/CloneOption.java b/src/main/java/hudson/plugins/git/extensions/impl/CloneOption.java index eda5fa9785..fb1bdf6933 100644 --- a/src/main/java/hudson/plugins/git/extensions/impl/CloneOption.java +++ b/src/main/java/hudson/plugins/git/extensions/impl/CloneOption.java @@ -151,10 +151,10 @@ public void decorateCloneCommand(GitSCM scm, Run build, GitClient git, Tas List refspecs = rc.getFetchRefSpecs(); List expandedRefSpecs = new ArrayList<>(); EnvVars env = build.getEnvironment(listener); - for (RefSpec ref:refspecs) { + for (RefSpec ref : refspecs) { expandedRefSpecs.add(new RefSpec(env.expand(ref.toString()))); } - cmd.refspecs(expandedRefSpecs); + cmd.refspecs(expandedRefSpecs); } cmd.timeout(timeout); From 19fa1c456c4480f3443d155698de5b4b25a8fc39 Mon Sep 17 00:00:00 2001 From: Rishabh Budhouliya Date: Fri, 7 Feb 2020 21:24:21 +0530 Subject: [PATCH 4/5] =Added testfile for CloneOption fix --- .../impl/CloneOptionHonorRefSpecTest.java | 85 +++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 src/test/java/hudson/plugins/git/extensions/impl/CloneOptionHonorRefSpecTest.java diff --git a/src/test/java/hudson/plugins/git/extensions/impl/CloneOptionHonorRefSpecTest.java b/src/test/java/hudson/plugins/git/extensions/impl/CloneOptionHonorRefSpecTest.java new file mode 100644 index 0000000000..f8a031035c --- /dev/null +++ b/src/test/java/hudson/plugins/git/extensions/impl/CloneOptionHonorRefSpecTest.java @@ -0,0 +1,85 @@ +package hudson.plugins.git.extensions.impl; + +import hudson.model.FreeStyleBuild; +import hudson.model.FreeStyleProject; +import hudson.model.Result; +import hudson.model.TaskListener; +import hudson.plugins.git.AbstractGitTestCase; +import hudson.plugins.git.BranchSpec; +import hudson.plugins.git.GitSCM; +import hudson.plugins.git.UserRemoteConfig; +import org.eclipse.jgit.transport.RefSpec; +import org.jenkinsci.plugins.gitclient.CloneCommand; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import java.io.PrintStream; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +import static org.mockito.Mockito.*; + +@RunWith(Parameterized.class) +public class CloneOptionHonorRefSpecTest extends AbstractGitTestCase { + + private GitSCM gitSCM; + private FreeStyleBuild build; + private String refSpecVar; + private TaskListener listener; + + public CloneOptionHonorRefSpecTest(String useRefSpecVariable) { + this.refSpecVar = useRefSpecVariable; + } + + @Parameterized.Parameters(name = "{0}") + public static Collection permuteRefSpecVariable() { + List values = new ArrayList<>(); + String[] allowed = {"${BUILD_NO}","${BUILD_ID}", + "${GIT_COMMIT}"}; + for (String refSpecValue : allowed) { + Object[] combination = {refSpecValue}; + values.add(combination); + } + return values; + } + + @Before + public void setupProjectAndDependencies() throws Exception{ + listener = mock(TaskListener.class); + // create initial commit + final String commitFile1 = "commitFile1"; + commit(commitFile1, johnDoe, "Commit in master"); + + List repos = new ArrayList<>(); + repos.add(new UserRemoteConfig(testRepo.gitDir.getAbsolutePath(), "origin", "+refs/heads/master:refs/remotes/origin/master" + refSpecVar, null)); + + /* Creating a project */ + FreeStyleProject project = setupProject(repos, Collections.singletonList(new BranchSpec("master" + refSpecVar)), null, false, null); + build = build(project, Result.SUCCESS, commitFile1); + gitSCM = (GitSCM) project.getScm(); + } + + @Test + public void decorateCloneCommandWithHonorRefSpec() throws Exception { + List refSpecs = new ArrayList<>(); + String envKey = refSpecVar.substring(refSpecVar.indexOf("{")+1, refSpecVar.indexOf("}")); + String refSpecVariable = build.getEnvironment(listener).get(envKey); + refSpecs.add(new RefSpec("+refs/heads/master:refs/remotes/origin/master" + refSpecVariable)); + + PrintStream logger = mock(PrintStream.class); + when(listener.getLogger()).thenReturn(logger); + + CloneCommand cloneCommand = mock(CloneCommand.class); + + /* Creating a clone option which would honor refspec for initial clone */ + CloneOption cloneOption = new CloneOption(false, false, null, null); + cloneOption.setHonorRefspec(true); + cloneOption.decorateCloneCommand(gitSCM, build, git, listener, cloneCommand); + + verify(cloneCommand).refspecs(refSpecs); + } +} From 145e17e5bd893fdf9a0f32aa154c1b37575be3c3 Mon Sep 17 00:00:00 2001 From: Rishabh Budhouliya Date: Fri, 7 Feb 2020 22:58:01 +0530 Subject: [PATCH 5/5] =Change in env variable --- .../git/extensions/impl/CloneOptionHonorRefSpecTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/hudson/plugins/git/extensions/impl/CloneOptionHonorRefSpecTest.java b/src/test/java/hudson/plugins/git/extensions/impl/CloneOptionHonorRefSpecTest.java index f8a031035c..a294e94560 100644 --- a/src/test/java/hudson/plugins/git/extensions/impl/CloneOptionHonorRefSpecTest.java +++ b/src/test/java/hudson/plugins/git/extensions/impl/CloneOptionHonorRefSpecTest.java @@ -38,7 +38,7 @@ public CloneOptionHonorRefSpecTest(String useRefSpecVariable) { @Parameterized.Parameters(name = "{0}") public static Collection permuteRefSpecVariable() { List values = new ArrayList<>(); - String[] allowed = {"${BUILD_NO}","${BUILD_ID}", + String[] allowed = {"${BUILD_NUMBER}","${BUILD_ID}", "${GIT_COMMIT}"}; for (String refSpecValue : allowed) { Object[] combination = {refSpecValue};