提交 78b26342 编写于 作者: J Jesse Glick

[FIXED JENKINS-17271] Util.deleteFile should give a concrete reason for failure.

上级 606a9e1d
......@@ -58,6 +58,9 @@ Upcoming changes</a>
<li class=rfe>
Option to make the build not fail if there is nothing to archive.
(<a href="https://issues.jenkins-ci.org/browse/JENKINS-10502">issue 10502</a>)
<li class=rfe>
Better report file deletion failures.
(<a href="https://issues.jenkins-ci.org/browse/JENKINS-17271">issue 17271</a>)
<li class=bug>
Master node mode not correctly displayed in <code>/computer/(master)/configure</code>.
(<a href="https://issues.jenkins-ci.org/browse/JENKINS-17263">issue 17263</a>)
......
......@@ -33,7 +33,6 @@ import hudson.os.PosixAPI;
import hudson.util.IOException2;
import hudson.util.QuotedStringTokenizer;
import hudson.util.VariableResolver;
import hudson.util.jna.Kernel32;
import hudson.util.jna.WinIOException;
import jenkins.model.Jenkins;
import org.apache.commons.io.IOUtils;
......@@ -237,6 +236,18 @@ public class Util {
if(!f.delete() && f.exists()) {
// trouble-shooting.
try {
Class.forName("java.nio.file.Files").getMethod("delete", Class.forName("java.nio.file.Path")).invoke(null, File.class.getMethod("toPath").invoke(f));
} catch (InvocationTargetException x) {
Throwable x2 = x.getCause();
if (x2 instanceof IOException) {
// may have a specific exception message
throw (IOException) x2;
}
// else suppress
} catch (Throwable x) {
// linkage errors, etc.; suppress
}
// see http://www.nabble.com/Sometimes-can%27t-delete-files-from-hudson.scm.SubversionSCM%24CheckOutTask.invoke%28%29-tt17333292.html
// I suspect other processes putting files in this directory
File[] files = f.listFiles();
......
......@@ -37,6 +37,9 @@ import org.junit.Test;
import org.jvnet.hudson.test.Bug;
import hudson.util.StreamTaskListener;
import java.io.FileOutputStream;
import java.io.OutputStream;
import org.junit.internal.AssumptionViolatedException;
/**
* @author Kohsuke Kawaguchi
......@@ -230,6 +233,31 @@ public class UtilTest {
}
}
@Test public void deleteFile() throws Exception {
Assume.assumeTrue(Functions.isWindows());
Class<?> c;
try {
c = Class.forName("java.nio.file.FileSystemException");
} catch (ClassNotFoundException x) {
throw new AssumptionViolatedException("prior to JDK 7", x);
}
File d = Util.createTempDir();
try {
File f = new File(d, "f");
OutputStream os = new FileOutputStream(f);
try {
Util.deleteFile(f);
fail("should not have been deletable");
} catch (IOException x) {
assertEquals(c, x.getClass());
} finally {
os.close();
}
} finally {
Util.deleteRecursive(d);
}
}
@Test
public void testHtmlEscape() {
assertEquals("<br>", Util.escape("\n"));
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册