Search in sources :

Example 31 with FilePath

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;
    }
}
Also used : FilePath(hudson.FilePath) SC_INTERNAL_SERVER_ERROR(javax.servlet.http.HttpServletResponse.SC_INTERNAL_SERVER_ERROR)

Example 32 with FilePath

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;
}
Also used : FilePath(hudson.FilePath) SCM(hudson.scm.SCM) NullSCM(hudson.scm.NullSCM)

Example 33 with FilePath

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);
}
Also used : FilePath(hudson.FilePath)

Example 34 with FilePath

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());
    }
}
Also used : FilePath(hudson.FilePath) FilePath(hudson.FilePath) InputStream(java.io.InputStream) OutputStream(java.io.OutputStream) StringTokenizer(java.util.StringTokenizer) ArrayList(java.util.ArrayList) List(java.util.List)

Example 35 with FilePath

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() {
            };
        }
    };
}
Also used : FilePath(hudson.FilePath) Launcher(hudson.Launcher) BuildWrapper(hudson.tasks.BuildWrapper)

Aggregations

FilePath (hudson.FilePath)39 IOException (java.io.IOException)17 File (java.io.File)12 URL (java.net.URL)5 EnvVars (hudson.EnvVars)4 List (java.util.List)4 AbortException (hudson.AbortException)3 Launcher (hudson.Launcher)3 PrintStream (java.io.PrintStream)3 ImmutableList (com.google.common.collect.ImmutableList)2 BuildListener (hudson.model.BuildListener)2 VirtualChannel (hudson.remoting.VirtualChannel)2 NullSCM (hudson.scm.NullSCM)2 SCM (hudson.scm.SCM)2 WorkspaceList (hudson.slaves.WorkspaceList)2 ArgumentListBuilder (hudson.util.ArgumentListBuilder)2 ArrayList (java.util.ArrayList)2 HashSet (java.util.HashSet)2 ImmutableMap (com.google.common.collect.ImmutableMap)1 WindowsSlaveInstaller (hudson.lifecycle.WindowsSlaveInstaller)1