提交 d54bc061 编写于 作者: N Nicolas De Loof

Merge branch 'JENKINS-24825'

......@@ -94,6 +94,9 @@ Upcoming changes</a>
<li class=bug>
umask setting on Debian did not work.
(<a href="https://github.com/jenkinsci/jenkins/pull/1397">pull 1397</a>)
<li class=bug>
handle job move when buildDir is configured to a custom location.
(<a href="https://issues.jenkins-ci.org/browse/JENKINS-24825">issue 24825</a>)
</ul>
</div><!--=END=-->
<h3><a name=v1.581>What's new in 1.581</a> (2014/09/21)</h3>
......
......@@ -42,6 +42,7 @@ import hudson.util.AlternativeUiTextProvider;
import hudson.util.AlternativeUiTextProvider.Message;
import hudson.util.AtomicFileWriter;
import hudson.util.IOUtils;
import jenkins.model.DirectlyModifiableTopLevelItemGroup;
import jenkins.model.Jenkins;
import org.apache.tools.ant.taskdefs.Copy;
import org.apache.tools.ant.types.FileSet;
......@@ -312,6 +313,20 @@ public abstract class AbstractItem extends Actionable implements Item, HttpDelet
}
}
/**
* Notify this item it's been moved to another location, replaced by newItem (might be the same object, but not guaranteed).
* This method is executed <em>after</em> the item root directory has been moved to it's new location.
* <p>
* Derived classes can override this method to add some specific behavior on move, but have to call parent method
* so the item is actually setup within it's new parent.
*
* @see hudson.model.Items#move(AbstractItem, jenkins.model.DirectlyModifiableTopLevelItemGroup)
*/
public void movedTo(DirectlyModifiableTopLevelItemGroup destination, AbstractItem newItem, File destDir) throws IOException {
newItem.onLoad(destination, name);
}
/**
* Gets all the jobs that this {@link Item} contains as descendants.
*/
......@@ -696,4 +711,5 @@ public abstract class AbstractItem extends Actionable implements Item, HttpDelet
* Replaceable pronoun of that points to a job. Defaults to "Job"/"Project" depending on the context.
*/
public static final Message<AbstractItem> PRONOUN = new Message<AbstractItem>();
}
......@@ -381,7 +381,7 @@ public class Items {
FileUtils.moveDirectory(item.getRootDir(), destDir);
oldParent.remove(item);
I newItem = destination.add(item, name);
newItem.onLoad(destination, name);
item.movedTo(destination, newItem, destDir);
ItemListener.fireLocationChange(newItem, oldFullName);
return newItem;
}
......
......@@ -63,6 +63,7 @@ import hudson.widgets.HistoryWidget;
import hudson.widgets.HistoryWidget.Adapter;
import hudson.widgets.Widget;
import jenkins.model.BuildDiscarder;
import jenkins.model.DirectlyModifiableTopLevelItemGroup;
import jenkins.model.Jenkins;
import jenkins.model.ProjectNamingStrategy;
import jenkins.security.HexStringConfidentialKey;
......@@ -70,6 +71,7 @@ import jenkins.util.io.OnMaster;
import net.sf.json.JSONException;
import net.sf.json.JSONObject;
import org.apache.commons.io.FileUtils;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
......@@ -628,6 +630,18 @@ public abstract class Job<JobT extends Job<JobT, RunT>, RunT extends Run<JobT, R
}
}
@Override
public void movedTo(DirectlyModifiableTopLevelItemGroup destination, AbstractItem newItem, File destDir) throws IOException {
Job newJob = (Job) newItem; // Missing covariant parameters type here.
File oldBuildDir = getBuildDir();
super.movedTo(destination, newItem, destDir);
File newBuildDir = getBuildDir();
if (oldBuildDir.isDirectory() && !newBuildDir.isDirectory()) {
FileUtils.forceMkdir(destDir.getParentFile());
FileUtils.moveDirectory(oldBuildDir, newBuildDir);
}
}
@Override public void delete() throws IOException, InterruptedException {
super.delete();
Util.deleteRecursive(getBuildDir());
......
......@@ -24,10 +24,14 @@
package hudson.model;
import java.io.File;
import java.util.Arrays;
import hudson.Util;
import org.junit.Test;
import static org.junit.Assert.*;
import org.junit.Rule;
import org.jvnet.hudson.test.Issue;
import org.jvnet.hudson.test.JenkinsRule;
import org.jvnet.hudson.test.MockFolder;
......@@ -56,4 +60,17 @@ public class ItemsTest {
assertEquals(Arrays.<Item>asList(sub2a, sub2ap, sub2alpha, sub2b, sub2bp, sub2BRAVO, sub2c, sub2cp, sub2charlie), Items.getAllItems(sub2, Item.class));
}
@Issue("JENKINS-24825")
@Test public void moveItem() throws Exception {
File tmp = Util.createTempDir();
r.jenkins.setRawBuildsDir(tmp.getAbsolutePath()+"/${ITEM_FULL_NAME}");
MockFolder foo = r.createFolder("foo");
MockFolder bar = r.createFolder("bar");
FreeStyleProject test = foo.createProject(FreeStyleProject.class, "test");
test.scheduleBuild2(0).get();
Items.move(test, bar);
assertFalse(new File(tmp, "foo/test/1").exists());
assertTrue(new File(tmp, "bar/test/1").exists());
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册