提交 d98716df 编写于 作者: J Jesse Glick

[FIXED JENKINS-17138] Deleting/renaming jobs using external builds directory does not move builds.

上级 b90b2022
......@@ -67,6 +67,9 @@ Upcoming changes</a>
<li class=bug>
Permalinks created in the wrong place when using external build directories.
(<a href="https://issues.jenkins-ci.org/browse/JENKINS-17137">issue 17137</a>)
<li class=bug>
External build directories not updated by job rename/delete.
(<a href="https://issues.jenkins-ci.org/browse/JENKINS-17138">issue 17138</a>)
<li class=bug>
JNA-related error from Windows slave monitoring thrown repeatedly.
(<a href="https://issues.jenkins-ci.org/browse/JENKINS-15796">issue 15796</a>)
......
......@@ -573,7 +573,19 @@ public abstract class Job<JobT extends Job<JobT, RunT>, RunT extends Run<JobT, R
*/
@Override
public void renameTo(String newName) throws IOException {
File oldBuildDir = getBuildDir();
super.renameTo(newName);
File newBuildDir = getBuildDir();
if (oldBuildDir.isDirectory() && !newBuildDir.isDirectory()) {
if (!oldBuildDir.renameTo(newBuildDir)) {
throw new IOException("failed to rename " + oldBuildDir + " to " + newBuildDir);
}
}
}
@Override public synchronized void delete() throws IOException, InterruptedException {
super.delete();
Util.deleteRecursive(getBuildDir());
}
/**
......
......@@ -354,4 +354,24 @@ public class AbstractProjectTest extends HudsonTestCase {
assertFalse(link.exists());
}
@Bug(17138)
public void testExternalBuildDirectoryRenameDelete() throws Exception {
HtmlForm form = new WebClient().goTo("configure").getFormByName("config");
File builds = createTmpDir();
form.getInputByName("_.rawBuildsDir").setValueAttribute(builds + "/${ITEM_FULL_NAME}");
submit(form);
assertEquals(builds + "/${ITEM_FULL_NAME}", jenkins.getRawBuildsDir());
FreeStyleProject p = jenkins.createProject(MockFolder.class, "d").createProject(FreeStyleProject.class, "prj");
FreeStyleBuild b = p.scheduleBuild2(0).get();
File oldBuildDir = new File(builds, "d/prj");
assertEquals(new File(oldBuildDir, b.getId()), b.getRootDir());
assertTrue(b.getRootDir().isDirectory());
p.renameTo("proj");
File newBuildDir = new File(builds, "d/proj");
assertEquals(new File(newBuildDir, b.getId()), b.getRootDir());
assertTrue(b.getRootDir().isDirectory());
p.delete();
assertFalse(b.getRootDir().isDirectory());
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册