use of hudson.FilePath in project hudson-2.x by hudson.
the class AbstractProject method cleanWorkspace.
public boolean cleanWorkspace() throws IOException, InterruptedException {
checkPermission(BUILD);
R b = getSomeBuildWithWorkspace();
FilePath ws = b != null ? b.getWorkspace() : null;
if (ws != null && getScm().processWorkspaceBeforeDeletion(this, ws, b.getBuiltOn())) {
ws.deleteRecursive();
return true;
} else {
// If we get here, that means the SCM blocked the workspace deletion.
return false;
}
}
use of hudson.FilePath in project hudson-2.x by hudson.
the class AbstractProject method checkout.
public boolean checkout(AbstractBuild build, Launcher launcher, BuildListener listener, File changelogFile) throws IOException, InterruptedException {
SCM scm = getScm();
if (scm == null)
// no SCM
return true;
FilePath workspace = build.getWorkspace();
workspace.mkdirs();
boolean r = scm.checkout(build, launcher, workspace, listener, changelogFile);
calcPollingBaseline(build, launcher, listener);
return r;
}
use of hudson.FilePath in project hudson-2.x by hudson.
the class ToolInstaller method preferredLocation.
/**
* Convenience method to find a location to install a tool.
* @param tool the tool being installed
* @param node the computer on which to install the tool
* @return {@link ToolInstallation#getHome} if specified, else a path within the local
* Hudson work area named according to {@link ToolInstallation#getName}
* @since 1.310
*/
protected final FilePath preferredLocation(ToolInstallation tool, Node node) {
if (node == null) {
throw new IllegalArgumentException("must pass non-null node");
}
String home = Util.fixEmptyAndTrim(tool.getHome());
if (home == null) {
// XXX should this somehow uniquify paths among ToolInstallation.all()?
home = tool.getName().replaceAll("[^A-Za-z0-9_.-]+", "_");
}
FilePath root = node.getRootPath();
if (root == null) {
throw new IllegalArgumentException("Node " + node.getDisplayName() + " seems to be offline");
}
return root.child("tools").child(home);
}
use of hudson.FilePath in project hudson-2.x by hudson.
the class DirectoryBrowserSupport method serveFile.
/**
* Serves a file from the file system (Maps the URL to a directory in a file system.)
*
* @param icon
* The icon file name, like "folder-open.gif"
* @param serveDirIndex
* True to generate the directory index.
* False to serve "index.html"
* @deprecated as of 1.297
* Instead of calling this method explicitly, just return the {@link DirectoryBrowserSupport} object
* from the {@code doXYZ} method and let Stapler generate a response for you.
*/
public void serveFile(StaplerRequest req, StaplerResponse rsp, FilePath root, String icon, boolean serveDirIndex) throws IOException, ServletException, InterruptedException {
// handle form submission
String pattern = req.getParameter("pattern");
if (pattern == null)
// compatibility with Hudson<1.129
pattern = req.getParameter("path");
if (pattern != null) {
rsp.sendRedirect2(pattern);
return;
}
String path = getPath(req);
if (path.replace('\\', '/').indexOf("/../") != -1) {
// don't serve anything other than files in the artifacts dir
rsp.sendError(HttpServletResponse.SC_BAD_REQUEST);
return;
}
// split the path to the base directory portion "abc/def/ghi" which doesn't include any wildcard,
// and the GLOB portion "**/*.xml" (the rest)
StringBuilder _base = new StringBuilder();
StringBuilder _rest = new StringBuilder();
// number of ".." needed to go back to the 'base' level.
int restSize = -1;
// if we are asked to serve a zip file bundle
boolean zip = false;
// if asked to serve a plain text directory listing
boolean plain = false;
{
boolean inBase = true;
StringTokenizer pathTokens = new StringTokenizer(path, "/");
while (pathTokens.hasMoreTokens()) {
String pathElement = pathTokens.nextToken();
// Treat * and ? as wildcard unless they match a literal filename
if ((pathElement.contains("?") || pathElement.contains("*")) && inBase && !(new FilePath(root, (_base.length() > 0 ? _base + "/" : "") + pathElement).exists()))
inBase = false;
if (pathElement.equals("*zip*")) {
// the expected syntax is foo/bar/*zip*/bar.zip
// the last 'bar.zip' portion is to causes browses to set a good default file name.
// so the 'rest' portion ends here.
zip = true;
break;
}
if (pathElement.equals("*plain*")) {
plain = true;
break;
}
StringBuilder sb = inBase ? _base : _rest;
if (sb.length() > 0)
sb.append('/');
sb.append(pathElement);
if (!inBase)
restSize++;
}
}
restSize = Math.max(restSize, 0);
String base = _base.toString();
String rest = _rest.toString();
// this is the base file/directory
FilePath baseFile = new FilePath(root, base);
if (baseFile.isDirectory()) {
if (zip) {
rsp.setContentType("application/zip");
baseFile.zip(rsp.getOutputStream(), rest);
return;
}
if (plain) {
rsp.setContentType("text/plain;charset=UTF-8");
OutputStream os = rsp.getOutputStream();
try {
for (String kid : baseFile.act(new SimpleChildList())) {
os.write(kid.getBytes("UTF-8"));
os.write('\n');
}
os.flush();
} finally {
os.close();
}
return;
}
if (rest.length() == 0) {
// if the target page to be displayed is a directory and the path doesn't end with '/', redirect
StringBuffer reqUrl = req.getRequestURL();
if (reqUrl.charAt(reqUrl.length() - 1) != '/') {
rsp.sendRedirect2(reqUrl.append('/').toString());
return;
}
}
FileCallable<List<List<Path>>> glob = null;
if (rest.length() > 0) {
// the rest is Ant glob pattern
glob = new PatternScanner(rest, createBackRef(restSize));
} else if (serveDirIndex) {
// serve directory index
glob = new ChildPathBuilder();
}
if (glob != null) {
// serve glob
req.setAttribute("it", this);
List<Path> parentPaths = buildParentPath(base, restSize);
req.setAttribute("parentPath", parentPaths);
req.setAttribute("backPath", createBackRef(restSize));
req.setAttribute("topPath", createBackRef(parentPaths.size() + restSize));
req.setAttribute("files", baseFile.act(glob));
req.setAttribute("icon", icon);
req.setAttribute("path", path);
req.setAttribute("pattern", rest);
req.setAttribute("dir", baseFile);
req.getView(this, "dir.jelly").forward(req, rsp);
return;
}
// convert a directory service request to a single file service request by serving
// 'index.html'
baseFile = baseFile.child(indexFileName);
}
//serve a single file
if (!baseFile.exists()) {
rsp.sendError(HttpServletResponse.SC_NOT_FOUND);
return;
}
boolean view = rest.equals("*view*");
if (rest.equals("*fingerprint*")) {
rsp.forward(Hudson.getInstance().getFingerprint(baseFile.digest()), "/", req);
return;
}
ContentInfo ci = baseFile.act(new ContentInfo());
if (LOGGER.isLoggable(Level.FINE))
LOGGER.fine("Serving " + baseFile + " with lastModified=" + ci.lastModified + ", contentLength=" + ci.contentLength);
InputStream in = baseFile.read();
if (view) {
// for binary files, provide the file name for download
rsp.setHeader("Content-Disposition", "inline; filename=" + baseFile.getName());
// pseudo file name to let the Stapler set text/plain
rsp.serveFile(req, in, ci.lastModified, -1, ci.contentLength, "plain.txt");
} else {
rsp.serveFile(req, in, ci.lastModified, -1, ci.contentLength, baseFile.getName());
}
}
use of hudson.FilePath in project hudson-2.x by hudson.
the class FileParameterValue method createBuildWrapper.
@Override
public BuildWrapper createBuildWrapper(AbstractBuild<?, ?> build) {
return new BuildWrapper() {
@Override
public Environment setUp(AbstractBuild build, Launcher launcher, BuildListener listener) throws IOException, InterruptedException {
if (!StringUtils.isEmpty(file.getName())) {
listener.getLogger().println("Copying file to " + location);
FilePath locationFilePath = build.getWorkspace().child(location);
locationFilePath.getParent().mkdirs();
locationFilePath.copyFrom(file);
file = null;
locationFilePath.copyTo(new FilePath(getLocationUnderBuild(build)));
}
return new Environment() {
};
}
};
}
Aggregations