diff --git a/core/src/main/java/hudson/FileSystemProvisioner.java b/core/src/main/java/hudson/FileSystemProvisioner.java index 364ba4ecf0..f2b773ed9a 100644 --- a/core/src/main/java/hudson/FileSystemProvisioner.java +++ b/core/src/main/java/hudson/FileSystemProvisioner.java @@ -30,7 +30,6 @@ import hudson.model.Computer; import hudson.model.Describable; import hudson.model.Job; import hudson.model.TaskListener; -import hudson.model.Node; import hudson.model.listeners.RunListener; import hudson.util.DescriptorList; import hudson.scm.SCM; @@ -140,7 +139,7 @@ public abstract class FileSystemProvisioner implements ExtensionPoint, Describab * When a project is deleted, this method is called to undo the effect of * {@link #prepareWorkspace(AbstractBuild, FilePath, TaskListener)}. */ - public abstract void discardWorkspace(AbstractProject project, TaskListener listener) throws IOException, InterruptedException; + public abstract void discardWorkspace(AbstractProject project) throws IOException, InterruptedException; // public abstract void moveWorkspace(AbstractProject project, File oldWorkspace, File newWorkspace) throws IOException; @@ -167,15 +166,6 @@ public abstract class FileSystemProvisioner implements ExtensionPoint, Describab public abstract FileSystemProvisionerDescriptor getDescriptor(); - /** - * TODO: eventually move this to {@link Node} since it needs to be configurable - * per node, but as of now kept here to avoid interfering with the production code. - */ - public static FileSystemProvisioner get(Node node) { - return DEFAULT; - } - - /** * A list of available file system provider types. */ @@ -194,11 +184,9 @@ public abstract class FileSystemProvisioner implements ExtensionPoint, Describab private Default() {} public void prepareWorkspace(AbstractBuild build, FilePath ws, TaskListener listener) throws IOException, InterruptedException { - ws.mkdirs(); } - public void discardWorkspace(AbstractProject project, TaskListener listener) throws IOException, InterruptedException { - project.getWorkspace().deleteRecursive(); + public void discardWorkspace(AbstractProject project) throws IOException, InterruptedException { } /** diff --git a/core/src/main/java/hudson/matrix/LinkedLogRotator.java b/core/src/main/java/hudson/matrix/LinkedLogRotator.java index f91c7d6668..8aa421e9cb 100644 --- a/core/src/main/java/hudson/matrix/LinkedLogRotator.java +++ b/core/src/main/java/hudson/matrix/LinkedLogRotator.java @@ -45,7 +45,7 @@ final class LinkedLogRotator extends LogRotator { } @Override - public void perform(Job _job) throws IOException { + public void perform(Job _job) throws IOException, InterruptedException { // copy it to the array because we'll be deleting builds as we go. MatrixConfiguration job = (MatrixConfiguration) _job; diff --git a/core/src/main/java/hudson/maven/MavenModule.java b/core/src/main/java/hudson/maven/MavenModule.java index 030690cd03..f88cc348f5 100644 --- a/core/src/main/java/hudson/maven/MavenModule.java +++ b/core/src/main/java/hudson/maven/MavenModule.java @@ -421,7 +421,7 @@ public final class MavenModule extends AbstractMavenProject,R extends Abs if(node instanceof Slave) listener.getLogger().println(Messages.AbstractBuild_BuildingRemotely(node.getNodeName())); + node.getFileSystemProvisioner().prepareWorkspace(AbstractBuild.this,project.getWorkspace(),listener); + if(checkout(listener)) return Result.FAILURE; diff --git a/core/src/main/java/hudson/model/AbstractItem.java b/core/src/main/java/hudson/model/AbstractItem.java index e94ab4669f..fe31ca5b8c 100644 --- a/core/src/main/java/hudson/model/AbstractItem.java +++ b/core/src/main/java/hudson/model/AbstractItem.java @@ -255,7 +255,7 @@ public abstract class AbstractItem extends Actionable implements Item, HttpDelet /** * Deletes this item. */ - public void doDoDelete( StaplerRequest req, StaplerResponse rsp ) throws IOException, ServletException { + public void doDoDelete( StaplerRequest req, StaplerResponse rsp ) throws IOException, ServletException, InterruptedException { checkPermission(DELETE); if(!"POST".equals(req.getMethod())) { rsp.setStatus(SC_BAD_REQUEST); @@ -267,13 +267,18 @@ public abstract class AbstractItem extends Actionable implements Item, HttpDelet } public void delete( StaplerRequest req, StaplerResponse rsp ) throws IOException, ServletException { - doDoDelete(req,rsp); + try { + doDoDelete(req,rsp); + } catch (InterruptedException e) { + // TODO: allow this in Stapler + throw new ServletException(e); + } } /** * Deletes this item. */ - public synchronized void delete() throws IOException { + public synchronized void delete() throws IOException, InterruptedException { performDelete(); if(this instanceof TopLevelItem) @@ -285,7 +290,7 @@ public abstract class AbstractItem extends Actionable implements Item, HttpDelet /** * Does the real job of deleting the item. */ - protected void performDelete() throws IOException { + protected void performDelete() throws IOException, InterruptedException { Util.deleteRecursive(getRootDir()); } diff --git a/core/src/main/java/hudson/model/AbstractProject.java b/core/src/main/java/hudson/model/AbstractProject.java index cf71b0b44e..29c359be24 100644 --- a/core/src/main/java/hudson/model/AbstractProject.java +++ b/core/src/main/java/hudson/model/AbstractProject.java @@ -198,12 +198,15 @@ public abstract class AbstractProject

,R extends A updateTransientActions(); } - protected void performDelete() throws IOException { + protected void performDelete() throws IOException, InterruptedException { // prevent a new build while a delete operation is in progress makeDisabled(true); FilePath ws = getWorkspace(); if(ws!=null) getScm().processWorkspaceBeforeDeletion(this, ws,getLastBuiltOn()); + + getLastBuiltOn().getFileSystemProvisioner().discardWorkspace(this); + super.performDelete(); } diff --git a/core/src/main/java/hudson/model/Job.java b/core/src/main/java/hudson/model/Job.java index 1816726ff9..8801a782af 100644 --- a/core/src/main/java/hudson/model/Job.java +++ b/core/src/main/java/hudson/model/Job.java @@ -173,7 +173,7 @@ public abstract class Job, RunT extends Run, RunT extends Run,RunT extends Run,RunT extends Run, ExtensionPoint { * * @since 1.246 */ - public boolean processWorkspaceBeforeDeletion(AbstractProject project, FilePath workspace, Node node) { + public boolean processWorkspaceBeforeDeletion(AbstractProject project, FilePath workspace, Node node) throws IOException, InterruptedException { return true; } diff --git a/core/src/main/java/hudson/tasks/LogRotator.java b/core/src/main/java/hudson/tasks/LogRotator.java index b7797a6297..d6286348ec 100644 --- a/core/src/main/java/hudson/tasks/LogRotator.java +++ b/core/src/main/java/hudson/tasks/LogRotator.java @@ -75,7 +75,7 @@ public class LogRotator implements Describable { this.numToKeep = numToKeep; } - public void perform(Job job) throws IOException { + public void perform(Job job) throws IOException, InterruptedException { // keep the last successful build regardless of the status Run lsb = job.getLastSuccessfulBuild();