Skip to content

Commit

Permalink
Merge branch 'JENKINS-24825'
Browse files Browse the repository at this point in the history
  • Loading branch information
ndeloof committed Sep 24, 2014
2 parents b2bb588 + 8975b0e commit d54bc06
Show file tree
Hide file tree
Showing 5 changed files with 51 additions and 1 deletion.
3 changes: 3 additions & 0 deletions changelog.html
Expand Up @@ -94,6 +94,9 @@ <h3><a name=v1.582>What's new in 1.582</a> <!--=DATE=--></h3>
<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>
Expand Down
16 changes: 16 additions & 0 deletions core/src/main/java/hudson/model/AbstractItem.java
Expand Up @@ -42,6 +42,7 @@
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;
Expand Down Expand Up @@ -312,6 +313,20 @@ protected void renameTo(String newName) throws IOException {
}
}


/**
* 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)
*/

This comment has been minimized.

Copy link
@jglick

jglick Sep 24, 2014

Member

You did forget to add the @since as I had feared. :-)

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.
*/
Expand Down Expand Up @@ -696,4 +711,5 @@ public static AbstractItem resolveForCLI(
* 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>();

}
2 changes: 1 addition & 1 deletion core/src/main/java/hudson/model/Items.java
Expand Up @@ -381,7 +381,7 @@ public static <I extends AbstractItem & TopLevelItem> I move(I item, DirectlyMod
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;
}
Expand Down
14 changes: 14 additions & 0 deletions core/src/main/java/hudson/model/Job.java
Expand Up @@ -63,13 +63,15 @@
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;
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;
Expand Down Expand Up @@ -628,6 +630,18 @@ public void renameTo(String newName) throws IOException {
}
}

@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());
Expand Down
17 changes: 17 additions & 0 deletions test/src/test/java/hudson/model/ItemsTest.java
Expand Up @@ -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;

Expand Down Expand Up @@ -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());
}

}

0 comments on commit d54bc06

Please sign in to comment.