Skip to content

Commit

Permalink
JENKINS-47110: Retrieving Git references do not work with variable in…
Browse files Browse the repository at this point in the history
… Repository URL
  • Loading branch information
klimas7 committed Sep 26, 2017
1 parent 1fc1ea2 commit 87fdb55
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 1 deletion.
Expand Up @@ -21,12 +21,15 @@
import hudson.EnvVars;
import hudson.Extension;
import hudson.FilePath;
import hudson.Util;
import hudson.cli.CLICommand;
import hudson.model.ChoiceParameterDefinition;
import hudson.model.Job;
import hudson.model.ParameterDefinition;
import hudson.model.ParameterValue;
import hudson.model.ParametersDefinitionProperty;
import hudson.model.Run;
import hudson.model.StringParameterDefinition;
import hudson.model.TaskListener;
import hudson.model.TopLevelItem;
import hudson.plugins.git.GitException;
Expand Down Expand Up @@ -278,7 +281,7 @@ public Map<String, String> generateContents(JobWrapper jobWrapper, GitSCM git) {
synchronized (GitParameterDefinition.class) {
for (URIish remoteURL : repository.getURIs()) {
GitClient gitClient = getGitClient(jobWrapper, null, git, environment);
String gitUrl = remoteURL.toPrivateASCIIString();
String gitUrl = Util.replaceMacro(remoteURL.toPrivateASCIIString(), environment);

if (isTagType()) {
Set<String> tagSet = getTag(gitClient, gitUrl);
Expand Down Expand Up @@ -463,10 +466,39 @@ private EnvVars getEnvironment(JobWrapper jobWrapper) throws IOException, Interr
if (buildEnvironments != null) {
environment.putAll(buildEnvironments);
}

EnvVars jobDefautEnvironments = getJobDefaultEnvironment(jobWrapper);
environment.putAll(jobDefautEnvironments);

EnvVars.resolve(environment);
return environment;
}

private EnvVars getJobDefaultEnvironment(JobWrapper jobWrapper) {
EnvVars environment = new EnvVars();
ParametersDefinitionProperty property = (ParametersDefinitionProperty) jobWrapper.getJob().getProperty(ParametersDefinitionProperty.class);
if (property != null) {
for (ParameterDefinition parameterDefinition : property.getParameterDefinitions()) {
if (parameterDefinition != null && isAcceptedParameterClass(parameterDefinition)) {
checkAndAddDefaultParameterValue(parameterDefinition, environment);
}
}
}
return environment;
}

private boolean isAcceptedParameterClass(ParameterDefinition parameterDefinition) {
return parameterDefinition instanceof StringParameterDefinition
|| parameterDefinition instanceof ChoiceParameterDefinition;
}

private void checkAndAddDefaultParameterValue(ParameterDefinition parameterDefinition, EnvVars environment) {
ParameterValue defaultParameterValue = parameterDefinition.getDefaultParameterValue();
if (defaultParameterValue != null && defaultParameterValue.getValue() != null && defaultParameterValue.getValue() instanceof String) {
environment.put(parameterDefinition.getName(), (String) defaultParameterValue.getValue());
}
}

private void initWorkspace(FilePathWrapper workspace, GitClient gitClient, URIish remoteURL) throws IOException, InterruptedException {
if (isEmptyWorkspace(workspace.getFilePath())) {
gitClient.init();
Expand Down
Expand Up @@ -26,6 +26,7 @@
import hudson.model.ParameterValue;
import hudson.model.ParametersDefinitionProperty;
import hudson.model.Result;
import hudson.model.StringParameterDefinition;
import hudson.plugins.git.GitSCM;
import hudson.plugins.git.UserRemoteConfig;
import hudson.plugins.git.extensions.impl.RelativeTargetDirectory;
Expand Down Expand Up @@ -852,6 +853,30 @@ public void testMultiSCM_forSubdirectoryForRepo() throws IOException, Interrupte
assertTrue(isListBoxItem(items, "origin/master"));
}

@Test
public void testParameterDefinedRepositoryUrl() throws Exception {
project = jenkins.createFreeStyleProject("testLocalValue");
project.getBuildersList().add(new Shell("echo test"));

StringParameterDefinition stringParameterDef = new StringParameterDefinition("GIT_REPO_URL", GIT_PARAMETER_REPOSITORY_URL, "Description");
GitParameterDefinition def = new GitParameterDefinition("testName",
GitParameterDefinition.PARAMETER_TYPE_BRANCH,
null,
"testDescription",
null,
".*master.*",
"*",
SortMode.ASCENDING, SelectedValue.NONE, null, false);

ParametersDefinitionProperty jobProp = new ParametersDefinitionProperty(stringParameterDef,def);
project.addProperty(jobProp);
setupGit("${GIT_REPO_URL}");

FreeStyleBuild build = project.scheduleBuild2(0).get();
assertEquals(build.getResult(), Result.SUCCESS);
ListBoxModel items = def.getDescriptor().doFillValueItems(project, def.getName());
assertTrue(isListBoxItem(items, "origin/master"));
}

private void setupGit() throws IOException {
setupGit(GIT_PARAMETER_REPOSITORY_URL);
Expand Down

0 comments on commit 87fdb55

Please sign in to comment.