package jenkins.mvn;
import hudson.EnvVars;
import hudson.Extension;
import hudson.FilePath;
import hudson.Util;
import hudson.model.AbstractBuild;
import hudson.model.TaskListener;
import hudson.util.IOUtils;
import java.io.File;
import org.apache.commons.lang.StringUtils;
import org.kohsuke.stapler.DataBoundConstructor;
/**
* @author <a href="mailto:nicolas.deloof@gmail.com">Nicolas De Loof</a>
* @author Dominik Bartholdi (imod)
* @since 1.491
*/
public class FilePathGlobalSettingsProvider extends GlobalSettingsProvider {
private final String path;
@DataBoundConstructor
public FilePathGlobalSettingsProvider(String path) {
this.path = path;
}
public String getPath() {
return path;
}
@Override
public FilePath supplySettings(AbstractBuild<?, ?> build, TaskListener listener) {
if (StringUtils.isEmpty(path)) {
return null;
}
try {
EnvVars env = build.getEnvironment(listener);
String targetPath = Util.replaceMacro(this.path, build.getBuildVariableResolver());
targetPath = env.expand(targetPath);
if (IOUtils.isAbsolute(targetPath)) {
return new FilePath(new File(targetPath));
} else {
FilePath mrSettings = build.getModuleRoot().child(targetPath);
FilePath wsSettings = build.getWorkspace().child(targetPath);
try {
if (!wsSettings.exists() && mrSettings.exists()) {
wsSettings = mrSettings;
}
} catch (Exception e) {
throw new IllegalStateException("failed to find settings.xml at: " + wsSettings.getRemote());
}
return wsSettings;
}
} catch (Exception e) {
throw new IllegalStateException("failed to prepare global settings.xml");
}
}
@Extension(ordinal = 10)
public static class DescriptorImpl extends GlobalSettingsProviderDescriptor {
@Override
public String getDisplayName() {
return Messages.FilePathGlobalSettingsProvider_DisplayName();
}
}
}