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

[FIXED JENKINS-18694] Generalizing fix of JENKINS-18678 to include also rename...

[FIXED JENKINS-18694] Generalizing fix of JENKINS-18678 to include also rename of parent folders, taking advantage of JENKINS-18028 API.
上级 c21b209b
...@@ -66,6 +66,9 @@ Upcoming changes</a> ...@@ -66,6 +66,9 @@ Upcoming changes</a>
<li class=bug> <li class=bug>
<i>Apply</i> buttons did not work in Internet Explorer in compatibility mode. <i>Apply</i> buttons did not work in Internet Explorer in compatibility mode.
(<a href="https://issues.jenkins-ci.org/browse/JENKINS-19826">issue 19826</a>) (<a href="https://issues.jenkins-ci.org/browse/JENKINS-19826">issue 19826</a>)
<li class="major bug">
Builds can seem to disappear from a job in a folder if that folder is renamed.
(<a href="https://issues.jenkins-ci.org/browse/JENKINS-18694">issue 18694</a>)
<li class=bug> <li class=bug>
<code>/login</code> offers link to <code>/opensearch.xml</code> which anonymous users cannot retrieve. <code>/login</code> offers link to <code>/opensearch.xml</code> which anonymous users cannot retrieve.
(<a href="https://issues.jenkins-ci.org/browse/JENKINS-21254">issue 21254</a>) (<a href="https://issues.jenkins-ci.org/browse/JENKINS-21254">issue 21254</a>)
......
...@@ -27,15 +27,16 @@ ...@@ -27,15 +27,16 @@
*/ */
package hudson.model; package hudson.model;
import com.infradna.tool.bridge_method_injector.WithBridgeMethods;
import hudson.EnvVars;
import hudson.ExtensionPoint;
import hudson.Functions;
import antlr.ANTLRException; import antlr.ANTLRException;
import com.infradna.tool.bridge_method_injector.WithBridgeMethods;
import hudson.AbortException; import hudson.AbortException;
import hudson.CopyOnWrite; import hudson.CopyOnWrite;
import hudson.EnvVars;
import hudson.Extension;
import hudson.ExtensionPoint;
import hudson.FeedAdapter; import hudson.FeedAdapter;
import hudson.FilePath; import hudson.FilePath;
import hudson.Functions;
import hudson.Launcher; import hudson.Launcher;
import hudson.Util; import hudson.Util;
import hudson.cli.declarative.CLIMethod; import hudson.cli.declarative.CLIMethod;
...@@ -48,21 +49,23 @@ import hudson.model.Fingerprint.RangeSet; ...@@ -48,21 +49,23 @@ import hudson.model.Fingerprint.RangeSet;
import hudson.model.PermalinkProjectAction.Permalink; import hudson.model.PermalinkProjectAction.Permalink;
import hudson.model.Queue.Executable; import hudson.model.Queue.Executable;
import hudson.model.Queue.Task; import hudson.model.Queue.Task;
import hudson.model.queue.QueueTaskFuture;
import hudson.model.queue.ScheduleResult;
import hudson.model.queue.SubTask;
import hudson.model.RunMap.Constructor; import hudson.model.RunMap.Constructor;
import hudson.model.labels.LabelAtom; import hudson.model.labels.LabelAtom;
import hudson.model.labels.LabelExpression; import hudson.model.labels.LabelExpression;
import hudson.model.listeners.ItemListener; import hudson.model.listeners.ItemListener;
import hudson.model.listeners.SCMPollListener; import hudson.model.listeners.SCMPollListener;
import hudson.model.queue.CauseOfBlockage; import hudson.model.queue.CauseOfBlockage;
import hudson.model.queue.QueueTaskFuture;
import hudson.model.queue.ScheduleResult;
import hudson.model.queue.SubTask;
import hudson.model.queue.SubTaskContributor; import hudson.model.queue.SubTaskContributor;
import hudson.node_monitors.DiskSpaceMonitor; import hudson.node_monitors.DiskSpaceMonitor;
import hudson.scm.ChangeLogSet; import hudson.scm.ChangeLogSet;
import hudson.scm.ChangeLogSet.Entry; import hudson.scm.ChangeLogSet.Entry;
import hudson.scm.NullSCM; import hudson.scm.NullSCM;
import hudson.scm.PollingResult; import hudson.scm.PollingResult;
import static hudson.scm.PollingResult.*;
import hudson.scm.SCM; import hudson.scm.SCM;
import hudson.scm.SCMRevisionState; import hudson.scm.SCMRevisionState;
import hudson.scm.SCMS; import hudson.scm.SCMS;
...@@ -85,6 +88,32 @@ import hudson.util.FormValidation; ...@@ -85,6 +88,32 @@ import hudson.util.FormValidation;
import hudson.util.TimeUnit2; import hudson.util.TimeUnit2;
import hudson.widgets.BuildHistoryWidget; import hudson.widgets.BuildHistoryWidget;
import hudson.widgets.HistoryWidget; import hudson.widgets.HistoryWidget;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.Map;
import java.util.Set;
import java.util.SortedMap;
import java.util.TreeMap;
import java.util.Vector;
import java.util.concurrent.Future;
import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
import javax.servlet.ServletException;
import static javax.servlet.http.HttpServletResponse.*;
import jenkins.model.Jenkins; import jenkins.model.Jenkins;
import jenkins.model.JenkinsLocationConfiguration; import jenkins.model.JenkinsLocationConfiguration;
import jenkins.model.ModelObjectWithChildren; import jenkins.model.ModelObjectWithChildren;
...@@ -100,6 +129,7 @@ import org.acegisecurity.context.SecurityContext; ...@@ -100,6 +129,7 @@ import org.acegisecurity.context.SecurityContext;
import org.acegisecurity.context.SecurityContextHolder; import org.acegisecurity.context.SecurityContextHolder;
import org.jenkinsci.bytecode.AdaptField; import org.jenkinsci.bytecode.AdaptField;
import org.kohsuke.accmod.Restricted; import org.kohsuke.accmod.Restricted;
import org.kohsuke.accmod.restrictions.DoNotUse;
import org.kohsuke.accmod.restrictions.NoExternalUse; import org.kohsuke.accmod.restrictions.NoExternalUse;
import org.kohsuke.args4j.Argument; import org.kohsuke.args4j.Argument;
import org.kohsuke.args4j.CmdLineException; import org.kohsuke.args4j.CmdLineException;
...@@ -115,35 +145,6 @@ import org.kohsuke.stapler.StaplerResponse; ...@@ -115,35 +145,6 @@ import org.kohsuke.stapler.StaplerResponse;
import org.kohsuke.stapler.export.Exported; import org.kohsuke.stapler.export.Exported;
import org.kohsuke.stapler.interceptor.RequirePOST; import org.kohsuke.stapler.interceptor.RequirePOST;
import javax.annotation.Nonnull;
import javax.servlet.ServletException;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.Map;
import java.util.Set;
import java.util.SortedMap;
import java.util.TreeMap;
import java.util.Vector;
import java.util.concurrent.Future;
import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
import java.util.logging.Level;
import java.util.logging.Logger;
import static hudson.scm.PollingResult.*;
import javax.annotation.CheckForNull;
import static javax.servlet.http.HttpServletResponse.*;
/** /**
* Base implementation of {@link Job}s that build software. * Base implementation of {@link Job}s that build software.
* *
...@@ -1672,13 +1673,6 @@ public abstract class AbstractProject<P extends AbstractProject<P,R>,R extends A ...@@ -1672,13 +1673,6 @@ public abstract class AbstractProject<P extends AbstractProject<P,R>,R extends A
updateTransientActions(); updateTransientActions();
} }
@Override
public void renameTo(String newName) throws IOException {
super.renameTo(newName);
// Update locations inside builds cache
builds.updateBaseDir(getBuildDir());
}
protected final synchronized <T extends Describable<T>> protected final synchronized <T extends Describable<T>>
void removeFromList(Descriptor<T> item, List<T> collection) throws IOException { void removeFromList(Descriptor<T> item, List<T> collection) throws IOException {
final Iterator<T> iCollection = collection.iterator(); final Iterator<T> iCollection = collection.iterator();
...@@ -2422,4 +2416,14 @@ public abstract class AbstractProject<P extends AbstractProject<P,R>,R extends A ...@@ -2422,4 +2416,14 @@ public abstract class AbstractProject<P extends AbstractProject<P,R>,R extends A
public abstract FormValidation check(@Nonnull AbstractProject<?, ?> project, @Nonnull Label label); public abstract FormValidation check(@Nonnull AbstractProject<?, ?> project, @Nonnull Label label);
} }
@Restricted(DoNotUse.class)
@Extension public static final class ItemListenerImpl extends ItemListener {
@Override public void onLocationChanged(Item item, String oldFullName, String newFullName) {
if (item instanceof AbstractProject) {
AbstractProject p = (AbstractProject) item;
p.builds.updateBaseDir(p.getBuildDir());
}
}
}
} }
...@@ -388,6 +388,10 @@ public class AbstractProjectTest extends HudsonTestCase { ...@@ -388,6 +388,10 @@ public class AbstractProjectTest extends HudsonTestCase {
assertEquals(p, jenkins.getItemByFullName("d/edited")); assertEquals(p, jenkins.getItemByFullName("d/edited"));
p._getRuns().purgeCache(); p._getRuns().purgeCache();
assertEquals(1, p.getBuilds().size()); assertEquals(1, p.getBuilds().size());
d.renameTo("d2");
p = jenkins.getItemByFullName("d2/edited");
p._getRuns().purgeCache();
assertEquals(1, p.getBuilds().size());
} }
@Bug(17575) @Bug(17575)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册