Skip to content

Commit

Permalink
[FIXED JENKINS-17137] Bogus permalinks created when using external bu…
Browse files Browse the repository at this point in the history
…ilds directory.
  • Loading branch information
jglick committed Mar 9, 2013
1 parent 915d825 commit b90b202
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 2 deletions.
3 changes: 3 additions & 0 deletions changelog.html
Expand Up @@ -64,6 +64,9 @@
<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>)
Expand Down
10 changes: 8 additions & 2 deletions core/src/main/java/hudson/model/AbstractBuild.java
Expand Up @@ -494,11 +494,17 @@ private void updateSymlink(String name, AbstractBuild<?,?> newTarget) throws Int
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);
}

/**
Expand Down
25 changes: 25 additions & 0 deletions test/src/test/java/hudson/model/AbstractProjectTest.java
Expand Up @@ -58,6 +58,7 @@
import org.apache.commons.io.FileUtils;
import java.lang.ref.WeakReference;
import java.net.HttpURLConnection;
import org.jvnet.hudson.test.MockFolder;

/**
* @author Kohsuke Kawaguchi
Expand Down Expand Up @@ -329,4 +330,28 @@ public void testHandleBuildTrigger() throws Exception {

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());
}

}

0 comments on commit b90b202

Please sign in to comment.