diff --git a/changelog.html b/changelog.html
index d22f6730ed7348987617d5dd0bbfdfefda0bbafc..6c098499d8c34b5c0dd6dc6d20a094243f9f49e2 100644
--- a/changelog.html
+++ b/changelog.html
@@ -91,6 +91,9 @@ Upcoming changes
umask setting on Debian did not work.
(pull 1397)
+
+ handle job move when buildDir is configured to a custom location.
+ (issue 24825)
diff --git a/core/src/main/java/hudson/model/AbstractItem.java b/core/src/main/java/hudson/model/AbstractItem.java
index 115a01e63597ffbd3b9236f39732e71b386bf2c1..6e5ff33d754023d3796c0e8424fa8095e11c85d7 100644
--- a/core/src/main/java/hudson/model/AbstractItem.java
+++ b/core/src/main/java/hudson/model/AbstractItem.java
@@ -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;
@@ -308,6 +309,10 @@ public abstract class AbstractItem extends Actionable implements Item, HttpDelet
}
}
+ public void movedTo(DirectlyModifiableTopLevelItemGroup destination, AbstractItem newItem, File destDir) throws IOException {
+ newItem.onLoad(destination, name);
+ }
+
/**
* A pointless function to work around what appears to be a HotSpot problem. See JENKINS-5756 and bug 6933067
* on BugParade for more details.
@@ -712,4 +717,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 PRONOUN = new Message();
+
}
diff --git a/core/src/main/java/hudson/model/Items.java b/core/src/main/java/hudson/model/Items.java
index ca8b54fb77333bffb2dc6d69e5ddc914d4137bb3..0358e4471aeda42dc4f67f746638c9efffa0632f 100644
--- a/core/src/main/java/hudson/model/Items.java
+++ b/core/src/main/java/hudson/model/Items.java
@@ -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;
}
diff --git a/core/src/main/java/hudson/model/Job.java b/core/src/main/java/hudson/model/Job.java
index e7aebb77d297371ac9e0c26cb7898d20fcdb231a..b3e05c6888bf47d8ad431b61e0e1b149b4c12ee6 100644
--- a/core/src/main/java/hudson/model/Job.java
+++ b/core/src/main/java/hudson/model/Job.java
@@ -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, RunT extends Run