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

[FIXED JENKINS-17137] Bogus permalinks created when using external builds directory.

上级 915d8253
......@@ -64,6 +64,9 @@ Upcoming changes</a>
<li class=bug>
Preview function for textareas using Jenkins markup did not work when CSRF protection was enabled.
(<a href="https://issues.jenkins-ci.org/browse/JENKINS-17085">issue 17085</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>
JNA-related error from Windows slave monitoring thrown repeatedly.
(<a href="https://issues.jenkins-ci.org/browse/JENKINS-15796">issue 15796</a>)
......
......@@ -494,11 +494,17 @@ public abstract class AbstractBuild<P extends AbstractProject<P,R>,R extends Abs
if (newTarget != null)
newTarget.createSymlink(new LogTaskListener(LOGGER, Level.WARNING), name);
else
new File(getProject().getBuildDir(), "../"+name).delete();
new File(getProject().getRootDir(), name).delete();
}
private void createSymlink(TaskListener listener, String name) throws InterruptedException {
Util.createSymlink(getProject().getBuildDir(),"builds/"+getId(),"../"+name,listener);
String target;
if (getProject().getBuildDir().equals(new File(getProject().getRootDir(), "builds"))) {
target = "builds/" + getId();
} else {
target = getRootDir().getAbsolutePath();
}
Util.createSymlink(getProject().getRootDir(), target, name, listener);
}
/**
......
......@@ -58,6 +58,7 @@ import java.util.concurrent.Future;
import org.apache.commons.io.FileUtils;
import java.lang.ref.WeakReference;
import java.net.HttpURLConnection;
import org.jvnet.hudson.test.MockFolder;
/**
* @author Kohsuke Kawaguchi
......@@ -329,4 +330,28 @@ public class AbstractProjectTest extends HudsonTestCase {
assertEquals(1, u.getPublishersList().size());
}
@Bug(17137)
public void testExternalBuildDirectorySymlinks() throws Exception {
// XXX when using JUnit 4 add: Assume.assumeFalse(Functions.isWindows()); // symlinks may not be available
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, "p");
FreeStyleBuild b1 = p.scheduleBuild2(0).get();
File link = new File(p.getRootDir(), "lastStable");
assertTrue(link.exists());
assertEquals(b1.getRootDir().getAbsolutePath(), Util.resolveSymlink(link));
FreeStyleBuild b2 = p.scheduleBuild2(0).get();
assertTrue(link.exists());
assertEquals(b2.getRootDir().getAbsolutePath(), Util.resolveSymlink(link));
b2.delete();
assertTrue(link.exists());
assertEquals(b1.getRootDir().getAbsolutePath(), Util.resolveSymlink(link));
b1.delete();
assertFalse(link.exists());
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册