From 51e46505b9748258925af248beebee8a5f0a6b6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Zaj=C4=85czkowski?= Date: Fri, 3 Feb 2017 13:37:25 +0100 Subject: [PATCH 001/476] [JENKINS-43322] Nested views searchable by name --- .../src/main/java/hudson/model/ViewGroup.java | 21 ++++ .../java/hudson/model/ViewGroupMixIn.java | 10 +- core/src/main/java/jenkins/model/Jenkins.java | 7 +- core/src/test/java/hudson/model/ViewTest.java | 17 +++ test/src/test/java/hudson/model/ViewTest.java | 111 +++++++++++++++++- 5 files changed, 162 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/hudson/model/ViewGroup.java b/core/src/main/java/hudson/model/ViewGroup.java index 6e22242f4a..8819ba597a 100644 --- a/core/src/main/java/hudson/model/ViewGroup.java +++ b/core/src/main/java/hudson/model/ViewGroup.java @@ -29,6 +29,7 @@ import hudson.views.ViewsTabBar; import java.io.IOException; import java.util.Collection; +import java.util.LinkedHashSet; import java.util.List; /** @@ -57,6 +58,26 @@ public interface ViewGroup extends Saveable, ModelObject, AccessControlled { */ Collection getViews(); + /** + * Gets all the views in this group including nested views. + * + * @return + * can be empty but never null. + * + * @since TODO + */ + default Collection getAllViews() { + final Collection views = new LinkedHashSet<>(getViews()); + + for (View view : getViews()) { + if (view instanceof ViewGroup) { + views.addAll(((ViewGroup) view).getAllViews()); + } + } + + return views; + } + /** * Gets a view of the given name. * diff --git a/core/src/main/java/hudson/model/ViewGroupMixIn.java b/core/src/main/java/hudson/model/ViewGroupMixIn.java index dcdc5a803c..6590168fa0 100644 --- a/core/src/main/java/hudson/model/ViewGroupMixIn.java +++ b/core/src/main/java/hudson/model/ViewGroupMixIn.java @@ -92,9 +92,10 @@ public abstract class ViewGroupMixIn { } public View getView(String name) { - for (View v : views()) { - if(v.getViewName().equals(name)) + for (View v : getAllViews()) { + if (v.getViewName().equals(name)) { return v; + } } if (name != null && !name.equals(primaryView())) { // Fallback to subview of primary view if it is a ViewGroup @@ -129,6 +130,11 @@ public abstract class ViewGroupMixIn { return copy; } + //Already implemented in ViewGroup interface - can be private + private Collection getAllViews() { + return owner.getAllViews(); + } + /** * Returns the primary {@link View} that renders the top-page of Hudson. */ diff --git a/core/src/main/java/jenkins/model/Jenkins.java b/core/src/main/java/jenkins/model/Jenkins.java index 0408331bd1..ffa986db4e 100644 --- a/core/src/main/java/jenkins/model/Jenkins.java +++ b/core/src/main/java/jenkins/model/Jenkins.java @@ -1811,6 +1811,11 @@ public class Jenkins extends AbstractCIBase implements DirectlyModifiableTopLeve return viewGroupMixIn.getViews(); } + @Exported //Just to be exported - @Exported on default methods in interface is not supported + public Collection getAllViews() { + return super.getAllViews(); + } + @Override public void addView(View v) throws IOException { viewGroupMixIn.addView(v); @@ -2266,7 +2271,7 @@ public class Jenkins extends AbstractCIBase implements DirectlyModifiableTopLeve }) .add(new CollectionSearchIndex() {// for views protected View get(String key) { return getView(key); } - protected Collection all() { return viewGroupMixIn.getViews(); } + protected Collection all() { return getAllViews(); } }); return builder; } diff --git a/core/src/test/java/hudson/model/ViewTest.java b/core/src/test/java/hudson/model/ViewTest.java index adcb7deee1..7d69a17a88 100644 --- a/core/src/test/java/hudson/model/ViewTest.java +++ b/core/src/test/java/hudson/model/ViewTest.java @@ -18,6 +18,7 @@ import java.util.List; import javax.servlet.ServletException; import org.junit.Test; +import org.jvnet.hudson.test.Issue; import org.kohsuke.stapler.StaplerRequest; import org.kohsuke.stapler.StaplerResponse; import org.mockito.Mockito; @@ -105,6 +106,22 @@ public class ViewTest { assertArrayEquals(expected, rootView.getAllItems().toArray()); } + @Test + @Issue("JENKINS-43322") + public void getAllViewsRecursively() { + //given + View left2ndNestedView = Mockito.mock(View.class); + View right2ndNestedView = Mockito.mock(View.class); + CompositeView rightNestedGroupView = new CompositeView("rightNestedGroupView", left2ndNestedView, right2ndNestedView); + //and + View leftTopLevelView = Mockito.mock(View.class); + CompositeView rootView = new CompositeView("rootGroupView", leftTopLevelView, rightNestedGroupView); + //when + Collection allViews = rootView.getAllViews(); + //then + assertEquals(4, allViews.size()); + } + private TopLevelItem createJob(String jobName) { final TopLevelItem rootJob = Mockito.mock(TopLevelItem.class); Mockito.when(rootJob.getDisplayName()).thenReturn(jobName); diff --git a/test/src/test/java/hudson/model/ViewTest.java b/test/src/test/java/hudson/model/ViewTest.java index 9524ef21c6..03b9371e0b 100644 --- a/test/src/test/java/hudson/model/ViewTest.java +++ b/test/src/test/java/hudson/model/ViewTest.java @@ -25,6 +25,7 @@ package hudson.model; import com.gargoylesoftware.htmlunit.WebRequest; import com.gargoylesoftware.htmlunit.html.DomNodeUtil; +import hudson.views.ViewsTabBar; import jenkins.model.Jenkins; import org.jvnet.hudson.test.Issue; import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException; @@ -42,6 +43,8 @@ import hudson.model.Queue.Task; import hudson.model.Node.Mode; import org.jvnet.hudson.test.Email; +import org.kohsuke.stapler.StaplerRequest; +import org.kohsuke.stapler.StaplerResponse; import org.w3c.dom.Text; import static hudson.model.Messages.Hudson_ViewName; @@ -53,12 +56,18 @@ import hudson.util.HudsonIsLoading; import java.io.File; import java.io.IOException; import java.util.Arrays; +import java.util.Collection; import java.util.List; import java.util.logging.Level; import java.util.logging.LogRecord; import jenkins.model.ProjectNamingStrategy; import jenkins.security.NotReallyRoleSensitiveCallable; import static org.junit.Assert.*; +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.mock; + +import javax.servlet.ServletException; + import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; @@ -217,7 +226,7 @@ public class ViewTest { xml = new XmlFile(Jenkins.XSTREAM, new File(j.jenkins.getRootDir(), "config.xml")).asString(); assertTrue(xml, xml.contains("two")); } - + @Test public void testGetQueueItems() throws IOException, Exception{ ListView view1 = listView("view1"); @@ -555,4 +564,104 @@ public class ViewTest { assertNull(j.getInstance().getView("All")); } + @Test + @Issue("JENKINS-43322") + public void shouldFindNestedViewByName() throws Exception { + //given + String testNestedViewName = "right2ndNestedView"; + View right2ndNestedView = mockedViewWithName(testNestedViewName); + //and + View left2ndNestedView = mockedViewWithName("left2ndNestedView"); + DummyCompositeView rightNestedGroupView = new DummyCompositeView("rightNestedGroupView", left2ndNestedView, right2ndNestedView); + //and + listView("leftTopLevelView"); + j.jenkins.addView(rightNestedGroupView); + //when + View foundNestedView = j.jenkins.getView(testNestedViewName); + //then + assertEquals(right2ndNestedView, foundNestedView); + } + + private View mockedViewWithName(String viewName) { + return given(mock(View.class).getViewName()).willReturn(viewName).getMock(); + } + + //Duplication with ViewTest.CompositeView from core unit test module - unfortunately it is inaccessible from here + private static class DummyCompositeView extends View implements ViewGroup { + + private View[] views; + private TopLevelItem[] jobs; + + protected DummyCompositeView(final String name, View... views) { + super(name); + this.views = views; + } + + private DummyCompositeView withJobs(TopLevelItem... jobs) { + this.jobs = jobs; + return this; + } + + @Override + public Collection getItems() { + return Arrays.asList(this.jobs); + } + + @Override + public Collection getViews() { + return Arrays.asList(this.views); + } + + @Override + public boolean canDelete(View view) { + return false; + } + + @Override + public void deleteView(View view) throws IOException { + } + + @Override + public View getView(String name) { + return null; + } + + @Override + public View getPrimaryView() { + return null; + } + + @Override + public void onViewRenamed(View view, String oldName, String newName) { + } + + @Override + public ViewsTabBar getViewsTabBar() { + return null; + } + + @Override + public ItemGroup getItemGroup() { + return null; + } + + @Override + public List getViewActions() { + return null; + } + + @Override + public boolean contains(TopLevelItem item) { + return false; + } + + @Override + protected void submit(StaplerRequest req) throws IOException, ServletException, Descriptor.FormException { + } + + @Override + public Item doCreateItem(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException { + return null; + } + } } -- GitLab From 43ea5e36249bef814e41e72ca7a7d521be5caec9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Zaj=C4=85czkowski?= Date: Mon, 10 Apr 2017 17:34:31 +0200 Subject: [PATCH 002/476] [JENKINS-43322] Use unfiltered list in getView(name) getAllViews() returns views filtered by permissions. It is problematic for example when trying to add a new view with conflicting name. --- core/src/main/java/hudson/model/TreeView.java | 11 ++++-- .../src/main/java/hudson/model/ViewGroup.java | 2 +- .../java/hudson/model/ViewGroupMixIn.java | 20 +++++------ test/src/test/java/hudson/model/ViewTest.java | 35 ++++++++++++------- 4 files changed, 42 insertions(+), 26 deletions(-) diff --git a/core/src/main/java/hudson/model/TreeView.java b/core/src/main/java/hudson/model/TreeView.java index a998f8aa07..0b59f6a290 100644 --- a/core/src/main/java/hudson/model/TreeView.java +++ b/core/src/main/java/hudson/model/TreeView.java @@ -140,9 +140,16 @@ public class TreeView extends View implements ViewGroup { } public View getView(String name) { - for (View v : views) - if(v.getViewName().equals(name)) + for (View v : views) { + if (v.getViewName().equals(name)) return v; + if (v instanceof ViewGroup) { + View nestedView = ((ViewGroup) v).getView(name); + if (nestedView != null) { + return nestedView; + } + } + } return null; } diff --git a/core/src/main/java/hudson/model/ViewGroup.java b/core/src/main/java/hudson/model/ViewGroup.java index 8819ba597a..f9d4e57915 100644 --- a/core/src/main/java/hudson/model/ViewGroup.java +++ b/core/src/main/java/hudson/model/ViewGroup.java @@ -64,7 +64,7 @@ public interface ViewGroup extends Saveable, ModelObject, AccessControlled { * @return * can be empty but never null. * - * @since TODO + * @since 2.55 */ default Collection getAllViews() { final Collection views = new LinkedHashSet<>(getViews()); diff --git a/core/src/main/java/hudson/model/ViewGroupMixIn.java b/core/src/main/java/hudson/model/ViewGroupMixIn.java index 6590168fa0..e793da9e8f 100644 --- a/core/src/main/java/hudson/model/ViewGroupMixIn.java +++ b/core/src/main/java/hudson/model/ViewGroupMixIn.java @@ -23,11 +23,7 @@ */ package hudson.model; -import hudson.model.ItemGroupMixIn; -import hudson.model.View; -import hudson.model.ViewGroup; import java.util.Locale; -import java.util.logging.Level; import org.kohsuke.stapler.export.Exported; import java.io.IOException; @@ -92,10 +88,17 @@ public abstract class ViewGroupMixIn { } public View getView(String name) { - for (View v : getAllViews()) { + for (View v : views()) { if (v.getViewName().equals(name)) { return v; } + //getAllViews() cannot be used as it filters jobs by permission which is bad e.g. when trying to add a new job + if (v instanceof ViewGroup) { + View nestedView = ((ViewGroup) v).getView(name); + if (nestedView != null) { + return nestedView; + } + } } if (name != null && !name.equals(primaryView())) { // Fallback to subview of primary view if it is a ViewGroup @@ -121,7 +124,7 @@ public abstract class ViewGroupMixIn { @Exported public Collection getViews() { List orig = views(); - List copy = new ArrayList(orig.size()); + List copy = new ArrayList<>(orig.size()); for (View v : orig) { if (v.hasPermission(View.READ)) copy.add(v); @@ -130,11 +133,6 @@ public abstract class ViewGroupMixIn { return copy; } - //Already implemented in ViewGroup interface - can be private - private Collection getAllViews() { - return owner.getAllViews(); - } - /** * Returns the primary {@link View} that renders the top-page of Hudson. */ diff --git a/test/src/test/java/hudson/model/ViewTest.java b/test/src/test/java/hudson/model/ViewTest.java index 03b9371e0b..5b9c3cb292 100644 --- a/test/src/test/java/hudson/model/ViewTest.java +++ b/test/src/test/java/hudson/model/ViewTest.java @@ -55,13 +55,14 @@ import hudson.util.FormValidation; import hudson.util.HudsonIsLoading; import java.io.File; import java.io.IOException; -import java.util.Arrays; import java.util.Collection; import java.util.List; import java.util.logging.Level; import java.util.logging.LogRecord; import jenkins.model.ProjectNamingStrategy; import jenkins.security.NotReallyRoleSensitiveCallable; + +import static java.util.Arrays.asList; import static org.junit.Assert.*; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock; @@ -303,7 +304,7 @@ public class ViewTest { MatrixProject matrixJob = j.jenkins.createProject(MatrixProject.class, "matrix"); view1.add(matrixJob); matrixJob.setAxes(new AxisList( - new LabelAxis("label", Arrays.asList("label1")) + new LabelAxis("label", asList("label1")) )); FreeStyleProject noLabelJob = j.createFreeStyleProject("not-assigned-label"); @@ -589,50 +590,60 @@ public class ViewTest { //Duplication with ViewTest.CompositeView from core unit test module - unfortunately it is inaccessible from here private static class DummyCompositeView extends View implements ViewGroup { - private View[] views; - private TopLevelItem[] jobs; + private final List views; + private List jobs; + private String primaryView; + + private transient final ViewGroupMixIn viewGroupMixIn = new ViewGroupMixIn(this) { + protected List views() { return views; } + protected String primaryView() { return primaryView; } + protected void primaryView(String name) { primaryView = name; } + }; - protected DummyCompositeView(final String name, View... views) { + DummyCompositeView(final String name, View... views) { super(name); - this.views = views; + this.primaryView = views[0].getViewName(); + this.views = asList(views); } private DummyCompositeView withJobs(TopLevelItem... jobs) { - this.jobs = jobs; + this.jobs = asList(jobs); return this; } @Override public Collection getItems() { - return Arrays.asList(this.jobs); + return this.jobs; } @Override public Collection getViews() { - return Arrays.asList(this.views); + return viewGroupMixIn.getViews(); } @Override public boolean canDelete(View view) { - return false; + return viewGroupMixIn.canDelete(view); } @Override public void deleteView(View view) throws IOException { + viewGroupMixIn.deleteView(view); } @Override public View getView(String name) { - return null; + return viewGroupMixIn.getView(name); } @Override public View getPrimaryView() { - return null; + return viewGroupMixIn.getPrimaryView(); } @Override public void onViewRenamed(View view, String oldName, String newName) { + viewGroupMixIn.onViewRenamed(view, oldName, newName); } @Override -- GitLab From f0f079498cdae07269f5c80c146ac0c3cfc28589 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Zaj=C4=85czkowski?= Date: Fri, 14 Apr 2017 11:46:57 +0200 Subject: [PATCH 003/476] [JENKINS-43322] Top level views returned first When search by name. As suggested in the review. --- core/src/main/java/hudson/model/TreeView.java | 6 +++++- core/src/main/java/hudson/model/ViewGroup.java | 2 +- core/src/main/java/hudson/model/ViewGroupMixIn.java | 6 +++++- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/hudson/model/TreeView.java b/core/src/main/java/hudson/model/TreeView.java index 0b59f6a290..f8578b85dc 100644 --- a/core/src/main/java/hudson/model/TreeView.java +++ b/core/src/main/java/hudson/model/TreeView.java @@ -140,9 +140,13 @@ public class TreeView extends View implements ViewGroup { } public View getView(String name) { + //Top level views returned first if match for (View v : views) { - if (v.getViewName().equals(name)) + if (v.getViewName().equals(name)) { return v; + } + } + for (View v : views) { if (v instanceof ViewGroup) { View nestedView = ((ViewGroup) v).getView(name); if (nestedView != null) { diff --git a/core/src/main/java/hudson/model/ViewGroup.java b/core/src/main/java/hudson/model/ViewGroup.java index f9d4e57915..8819ba597a 100644 --- a/core/src/main/java/hudson/model/ViewGroup.java +++ b/core/src/main/java/hudson/model/ViewGroup.java @@ -64,7 +64,7 @@ public interface ViewGroup extends Saveable, ModelObject, AccessControlled { * @return * can be empty but never null. * - * @since 2.55 + * @since TODO */ default Collection getAllViews() { final Collection views = new LinkedHashSet<>(getViews()); diff --git a/core/src/main/java/hudson/model/ViewGroupMixIn.java b/core/src/main/java/hudson/model/ViewGroupMixIn.java index e793da9e8f..f1a6e25039 100644 --- a/core/src/main/java/hudson/model/ViewGroupMixIn.java +++ b/core/src/main/java/hudson/model/ViewGroupMixIn.java @@ -88,10 +88,14 @@ public abstract class ViewGroupMixIn { } public View getView(String name) { - for (View v : views()) { + //Top level views returned first if match + List views = views(); + for (View v : views) { if (v.getViewName().equals(name)) { return v; } + } + for (View v : views) { //getAllViews() cannot be used as it filters jobs by permission which is bad e.g. when trying to add a new job if (v instanceof ViewGroup) { View nestedView = ((ViewGroup) v).getView(name); -- GitLab From bfeb24f7dacb153975f782373da8ac9b7609bdd2 Mon Sep 17 00:00:00 2001 From: Oleg Nenashev Date: Thu, 16 Nov 2017 10:53:18 +0100 Subject: [PATCH 004/476] [JENKINS-47896] - Introduce SerializableOnlyOverRemoting in classes. Due to the implementation specifics, some classes in the core are serializable only over Remoting. This change just marks these classes and utilizes the convenience method in the interface for serialization/deserialization operations. --- core/src/main/java/hudson/FilePath.java | 12 ++++++------ core/src/main/java/hudson/cli/CliManagerImpl.java | 12 +++++++----- core/src/main/java/hudson/util/ProcessTree.java | 9 +++++---- .../main/java/hudson/util/StreamTaskListener.java | 4 +++- 4 files changed, 21 insertions(+), 16 deletions(-) diff --git a/core/src/main/java/hudson/FilePath.java b/core/src/main/java/hudson/FilePath.java index ad13edf5f3..c9fbc43984 100644 --- a/core/src/main/java/hudson/FilePath.java +++ b/core/src/main/java/hudson/FilePath.java @@ -118,6 +118,7 @@ import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipFile; import org.jenkinsci.remoting.RoleChecker; import org.jenkinsci.remoting.RoleSensitive; +import org.jenkinsci.remoting.SerializableOnlyOverRemoting; import org.kohsuke.accmod.Restricted; import org.kohsuke.accmod.restrictions.NoExternalUse; import org.kohsuke.stapler.Stapler; @@ -193,7 +194,7 @@ import java.util.Collections; * @author Kohsuke Kawaguchi * @see VirtualFile */ -public final class FilePath implements Serializable { +public final class FilePath implements SerializableOnlyOverRemoting { /** * Maximum http redirects we will follow. This defaults to the same number as Firefox/Chrome tolerates. */ @@ -2705,18 +2706,17 @@ public final class FilePath implements Serializable { } private void writeObject(ObjectOutputStream oos) throws IOException { - Channel target = Channel.current(); - - if(channel!=null && channel!=target) + Channel target = getChannelForSerialization(); + if(channel!=target) { throw new IllegalStateException("Can't send a remote FilePath to a different remote channel"); + } oos.defaultWriteObject(); oos.writeBoolean(channel==null); } private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException { - Channel channel = Channel.current(); - assert channel!=null; + Channel channel = getChannelForSerialization(); ois.defaultReadObject(); if(ois.readBoolean()) { diff --git a/core/src/main/java/hudson/cli/CliManagerImpl.java b/core/src/main/java/hudson/cli/CliManagerImpl.java index 750a38d210..6b8f606011 100644 --- a/core/src/main/java/hudson/cli/CliManagerImpl.java +++ b/core/src/main/java/hudson/cli/CliManagerImpl.java @@ -29,8 +29,10 @@ import hudson.remoting.Pipe; import org.acegisecurity.Authentication; import org.acegisecurity.context.SecurityContext; import org.acegisecurity.context.SecurityContextHolder; +import org.jenkinsci.remoting.SerializableOnlyOverRemoting; import java.io.InputStream; +import java.io.ObjectStreamException; import java.io.OutputStream; import java.io.PrintStream; import java.io.Serializable; @@ -47,7 +49,7 @@ import java.util.logging.Logger; * @deprecated Specific to Remoting-based protocol. */ @Deprecated -public class CliManagerImpl implements CliEntryPoint, Serializable { +public class CliManagerImpl implements CliEntryPoint, SerializableOnlyOverRemoting { private transient final Channel channel; private Authentication transportAuth; @@ -87,10 +89,10 @@ public class CliManagerImpl implements CliEntryPoint, Serializable { String subCmd = args.get(0); CLICommand cmd = CLICommand.clone(subCmd); if(cmd!=null) { - cmd.channel = Channel.current(); + cmd.channel = Channel.currentOrFail(); final CLICommand old = CLICommand.setCurrent(cmd); try { - transportAuth = Channel.current().getProperty(CLICommand.TRANSPORT_AUTHENTICATION); + transportAuth = cmd.channel.getProperty(CLICommand.TRANSPORT_AUTHENTICATION); cmd.setTransportAuth(transportAuth); return cmd.main(args.subList(1,args.size()),locale, stdin, out, err); } finally { @@ -126,8 +128,8 @@ public class CliManagerImpl implements CliEntryPoint, Serializable { return VERSION; } - private Object writeReplace() { - return Channel.current().export(CliEntryPoint.class,this); + private Object writeReplace() throws ObjectStreamException { + return getChannelForSerialization().export(CliEntryPoint.class,this); } private static final Logger LOGGER = Logger.getLogger(CliManagerImpl.class.getName()); diff --git a/core/src/main/java/hudson/util/ProcessTree.java b/core/src/main/java/hudson/util/ProcessTree.java index 95fe237fc3..398e309415 100644 --- a/core/src/main/java/hudson/util/ProcessTree.java +++ b/core/src/main/java/hudson/util/ProcessTree.java @@ -40,6 +40,7 @@ import hudson.util.ProcessTree.OSProcess; import hudson.util.ProcessTreeRemoting.IOSProcess; import hudson.util.ProcessTreeRemoting.IProcessTree; import jenkins.security.SlaveToMasterCallable; +import org.jenkinsci.remoting.SerializableOnlyOverRemoting; import org.jvnet.winp.WinProcess; import org.jvnet.winp.WinpException; @@ -84,7 +85,7 @@ import javax.annotation.Nonnull; * @author Kohsuke Kawaguchi * @since 1.315 */ -public abstract class ProcessTree implements Iterable, IProcessTree, Serializable { +public abstract class ProcessTree implements Iterable, IProcessTree, SerializableOnlyOverRemoting { /** * To be filled in the constructor of the derived type. */ @@ -1317,7 +1318,7 @@ public abstract class ProcessTree implements Iterable, IProcessTree, /** * Represents a process tree over a channel. */ - public static class Remote extends ProcessTree implements Serializable { + public static class Remote extends ProcessTree { private final IProcessTree proxy; public Remote(ProcessTree proxy, Channel ch) { @@ -1388,8 +1389,8 @@ public abstract class ProcessTree implements Iterable, IProcessTree, /** * Use {@link Remote} as the serialized form. */ - /*package*/ Object writeReplace() { - return new Remote(this,Channel.current()); + /*package*/ Object writeReplace() throws ObjectStreamException { + return new Remote(this, getChannelForSerialization()); } // public static void main(String[] args) { diff --git a/core/src/main/java/hudson/util/StreamTaskListener.java b/core/src/main/java/hudson/util/StreamTaskListener.java index 9deea8fad0..2723aad5f4 100644 --- a/core/src/main/java/hudson/util/StreamTaskListener.java +++ b/core/src/main/java/hudson/util/StreamTaskListener.java @@ -48,6 +48,8 @@ import java.nio.file.Path; import java.nio.file.StandardOpenOption; import java.util.logging.Level; import java.util.logging.Logger; + +import org.jenkinsci.remoting.SerializableOnlyOverRemoting; import org.kohsuke.stapler.framework.io.WriterOutputStream; /** @@ -58,7 +60,7 @@ import org.kohsuke.stapler.framework.io.WriterOutputStream; * * @author Kohsuke Kawaguchi */ -public class StreamTaskListener extends AbstractTaskListener implements Serializable, Closeable { +public class StreamTaskListener extends AbstractTaskListener implements SerializableOnlyOverRemoting, Closeable { private PrintStream out; private Charset charset; -- GitLab From 5ee0dca57d0f73f43d4cc70efaef2054ead4640d Mon Sep 17 00:00:00 2001 From: mike cirioli Date: Tue, 20 Feb 2018 17:33:50 -0500 Subject: [PATCH 005/476] [JENKINS-49588] add readResolve method to ensure that is always initialized properly when deserializing a fingerprint --- core/src/main/java/hudson/model/Fingerprint.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/hudson/model/Fingerprint.java b/core/src/main/java/hudson/model/Fingerprint.java index 2e0a7ce166..81e3383600 100644 --- a/core/src/main/java/hudson/model/Fingerprint.java +++ b/core/src/main/java/hudson/model/Fingerprint.java @@ -868,7 +868,7 @@ public class Fingerprint implements ModelObject, Saveable { /** * Range of builds that use this file keyed by a job full name. */ - private final Hashtable usages = new Hashtable(); + private Hashtable usages = new Hashtable(); PersistedList facets = new PersistedList(this); @@ -1031,6 +1031,14 @@ public class Fingerprint implements ModelObject, Saveable { save(); } + // JENKINS-49588 + protected Object readResolve() { + if (usages == null) { + usages = new Hashtable(); + } + return this; + } + void addWithoutSaving(@Nonnull String jobFullName, int n) { synchronized(usages) { // TODO why not synchronized (this) like some, though not all, other accesses? RangeSet r = usages.get(jobFullName); -- GitLab From 5c14b748923869831d8546bc2b05f045a2c6ac38 Mon Sep 17 00:00:00 2001 From: mike cirioli Date: Wed, 21 Feb 2018 13:13:10 -0500 Subject: [PATCH 006/476] [JENKINS-49588] Added a test for the new readResolve() method to ensure that a fingerprint file without a can still be deserialized --- core/src/test/java/hudson/model/FingerprintTest.java | 7 +++++++ .../hudson/model/fingerprintWithoutUsages.xml | 11 +++++++++++ 2 files changed, 18 insertions(+) create mode 100644 core/src/test/resources/hudson/model/fingerprintWithoutUsages.xml diff --git a/core/src/test/java/hudson/model/FingerprintTest.java b/core/src/test/java/hudson/model/FingerprintTest.java index 6f0d117847..f649ab788f 100644 --- a/core/src/test/java/hudson/model/FingerprintTest.java +++ b/core/src/test/java/hudson/model/FingerprintTest.java @@ -222,6 +222,13 @@ public class FingerprintTest { Fingerprint.load(new File(FingerprintTest.class.getResource("fingerprint.xml").toURI())).toString()); } + @Test public void loadFingerprintWithoutUsages() throws Exception { + Fingerprint fp = Fingerprint.load(new File(FingerprintTest.class.getResource("fingerprintWithoutUsages.xml").toURI())); + assertNotNull(fp); + assertEquals("test:jenkinsfile-example-1.0-SNAPSHOT.jar", fp.getFileName()); + assertNotNull(fp.getUsages()); + } + @Test public void roundTrip() throws Exception { Fingerprint f = new Fingerprint(new Fingerprint.BuildPtr("foo", 13), "stuff&more.jar", SOME_MD5); f.addWithoutSaving("some", 1); diff --git a/core/src/test/resources/hudson/model/fingerprintWithoutUsages.xml b/core/src/test/resources/hudson/model/fingerprintWithoutUsages.xml new file mode 100644 index 0000000000..de79804b60 --- /dev/null +++ b/core/src/test/resources/hudson/model/fingerprintWithoutUsages.xml @@ -0,0 +1,11 @@ + + + 2018-02-21 16:33:12.291 UTC + + maven1/test:jenkinsfile-example + 4 + + f003726dfd1d07868e3c1ab5aab0682d + test:jenkinsfile-example-1.0-SNAPSHOT.jar + + -- GitLab From 6e5c41c65bbb8064aacfb9f618b86082c2fdeddd Mon Sep 17 00:00:00 2001 From: talkdirty Date: Fri, 27 Oct 2017 14:33:41 +0200 Subject: [PATCH 007/476] [JENKINS-47530] Add null check to RunParameterDefinition#getProject() in RunParameterDefinition.getDefaultParameterValue() --- .../hudson/model/RunParameterDefinition.java | 18 ++++++++++++++---- core/src/main/java/jenkins/model/Jenkins.java | 2 +- .../model/RunParameterDefinitionTest.java | 1 + 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/core/src/main/java/hudson/model/RunParameterDefinition.java b/core/src/main/java/hudson/model/RunParameterDefinition.java index da1e7865e6..432ee0c251 100644 --- a/core/src/main/java/hudson/model/RunParameterDefinition.java +++ b/core/src/main/java/hudson/model/RunParameterDefinition.java @@ -23,6 +23,10 @@ */ package hudson.model; +import static java.util.logging.Level.WARNING; + +import java.util.logging.Level; +import java.util.logging.Logger; import jenkins.model.Jenkins; import net.sf.json.JSONObject; @@ -164,20 +168,25 @@ public class RunParameterDefinition extends SimpleParameterDefinition { } Run lastBuild = null; + Job project = getProject(); + + if (project == null) { + return null; + } // use getFilter() so we dont have to worry about null filter value. switch (getFilter()) { case COMPLETED: - lastBuild = getProject().getLastCompletedBuild(); + lastBuild = project.getLastCompletedBuild(); break; case SUCCESSFUL: - lastBuild = getProject().getLastSuccessfulBuild(); + lastBuild = project.getLastSuccessfulBuild(); break; case STABLE : - lastBuild = getProject().getLastStableBuild(); + lastBuild = project.getLastStableBuild(); break; default: - lastBuild = getProject().getLastBuild(); + lastBuild = project.getLastBuild(); break; } @@ -199,4 +208,5 @@ public class RunParameterDefinition extends SimpleParameterDefinition { return new RunParameterValue(getName(), value, getDescription()); } + private static final Logger LOGGER = Logger.getLogger(RunParameterDefinition.class.getName()); } diff --git a/core/src/main/java/jenkins/model/Jenkins.java b/core/src/main/java/jenkins/model/Jenkins.java index a9a5b1af2d..fedfca137e 100644 --- a/core/src/main/java/jenkins/model/Jenkins.java +++ b/core/src/main/java/jenkins/model/Jenkins.java @@ -2871,7 +2871,7 @@ public class Jenkins extends AbstractCIBase implements DirectlyModifiableTopLeve * or it exists but it's no an instance of the given type. * @throws AccessDeniedException as per {@link ItemGroup#getItem} */ - public @CheckForNull T getItemByFullName(String fullName, Class type) throws AccessDeniedException { + public @CheckForNull T getItemByFullName(@Nonnull String fullName, Class type) throws AccessDeniedException { StringTokenizer tokens = new StringTokenizer(fullName,"/"); ItemGroup parent = this; diff --git a/test/src/test/java/hudson/model/RunParameterDefinitionTest.java b/test/src/test/java/hudson/model/RunParameterDefinitionTest.java index 82db916dfa..f085ed7d6d 100644 --- a/test/src/test/java/hudson/model/RunParameterDefinitionTest.java +++ b/test/src/test/java/hudson/model/RunParameterDefinitionTest.java @@ -26,6 +26,7 @@ package hudson.model; import hudson.EnvVars; import static org.junit.Assert.*; + import hudson.Launcher; import hudson.model.RunParameterDefinition.RunParameterFilter; import hudson.tasks.BuildStepMonitor; -- GitLab From e7cc06e7458303913498779af2c2fa3353f4dab1 Mon Sep 17 00:00:00 2001 From: aviadatsnyk Date: Sun, 6 May 2018 16:44:17 +0300 Subject: [PATCH 008/476] handle absolute paths correctly when unzipping When checking that an unzipped file does not break out of the target directory - this handles '..' in absolute paths correctly, where the previous implementation might not. --- core/src/main/java/hudson/FilePath.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/hudson/FilePath.java b/core/src/main/java/hudson/FilePath.java index 0bcc31c32b..089d8f8ff8 100644 --- a/core/src/main/java/hudson/FilePath.java +++ b/core/src/main/java/hudson/FilePath.java @@ -598,7 +598,7 @@ public final class FilePath implements Serializable { while (entries.hasMoreElements()) { ZipEntry e = entries.nextElement(); File f = new File(dir, e.getName()); - if (!f.toPath().normalize().startsWith(dir.toPath())) { + if (!f.getCanonicalPath().startsWith(dir.getCanonicalPath())) { throw new IOException( "Zip " + zipFile.getPath() + " contains illegal file name that breaks out of the target directory: " + e.getName()); } -- GitLab From 8a91a0bd375c7c3bc731a62ae94648d5082f0b00 Mon Sep 17 00:00:00 2001 From: Josh Soref Date: Tue, 21 Aug 2018 14:41:54 -0400 Subject: [PATCH 009/476] JENKINS-53077 - don't process empty responseText The goal of this function appears to be to replace one content tree with another content tree. If the response is empty, that doesn't result in a content tree, and thus one can't use replaceChild. --- war/src/main/webapp/scripts/hudson-behavior.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/war/src/main/webapp/scripts/hudson-behavior.js b/war/src/main/webapp/scripts/hudson-behavior.js index a05dea7c90..3a1d8a9c13 100644 --- a/war/src/main/webapp/scripts/hudson-behavior.js +++ b/war/src/main/webapp/scripts/hudson-behavior.js @@ -1515,6 +1515,10 @@ function refreshPart(id,url) { window.clearInterval(intervalID); return; } + if (!rsp.responseText) { + console.log("Failed to retrieve response for ID " + id + ", perhaps Jenkins is unavailable"); + return; + } var p = hist.up(); var div = document.createElement('div'); -- GitLab From acc4eec688a0594be89f9b5ce860785ed84ac2df Mon Sep 17 00:00:00 2001 From: Daniel Beck Date: Wed, 14 Nov 2018 13:21:15 +0100 Subject: [PATCH 010/476] [JENKINS-53462] Submit form on Firefox as well --- war/src/main/webapp/scripts/yui/button/button-debug.js | 2 +- war/src/main/webapp/scripts/yui/button/button-min.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/war/src/main/webapp/scripts/yui/button/button-debug.js b/war/src/main/webapp/scripts/yui/button/button-debug.js index 63e44235d5..dbb54de651 100755 --- a/war/src/main/webapp/scripts/yui/button/button-debug.js +++ b/war/src/main/webapp/scripts/yui/button/button-debug.js @@ -2719,7 +2719,7 @@ version: 2.9.0 method as well. */ - if ((UA.ie || UA.webkit) && bSubmitForm) { + if ((UA.ie || UA.webkit || UA.gecko) && bSubmitForm) { oForm.submit(); diff --git a/war/src/main/webapp/scripts/yui/button/button-min.js b/war/src/main/webapp/scripts/yui/button/button-min.js index 17416d103b..fb4fee95e9 100644 --- a/war/src/main/webapp/scripts/yui/button/button-min.js +++ b/war/src/main/webapp/scripts/yui/button/button-min.js @@ -6,7 +6,7 @@ */ (function(){var g=YAHOO.util.Dom,m=YAHOO.util.Event,i=YAHOO.lang,l=YAHOO.env.ua,b=YAHOO.widget.Overlay,j=YAHOO.widget.Menu,d={},k=null,e=null,c=null;function f(o,n,r,p){var s,q;if(i.isString(o)&&i.isString(n)){if(l.ie&&(l.ie<9)){q='0){v.label=q}}}function a(p){var o=p.attributes,n=o.srcelement,r=n.nodeName.toUpperCase(),q=this;if(r==this.NODE_NAME){p.element=n;p.id=n.id;g.getElementsBy(function(s){switch(s.nodeName.toUpperCase()){case"BUTTON":case"A":case"INPUT":h.call(q,s,o);break}},"*",n)}else{switch(r){case"BUTTON":case"A":case"INPUT":h.call(this,n,o);break}}}YAHOO.widget.Button=function(r,o){if(!b&&YAHOO.widget.Overlay){b=YAHOO.widget.Overlay}if(!j&&YAHOO.widget.Menu){j=YAHOO.widget.Menu}var q=YAHOO.widget.Button.superclass.constructor,p,n;if(arguments.length==1&&!i.isString(r)&&!r.nodeName){if(!r.id){r.id=g.generateId();YAHOO.log('No value specified for the button\'s "id" attribute. Setting button id to "'+r.id+'".',"info",this.toString())}YAHOO.log("No source HTML element. Building the button using the set of configuration attributes.","info",this.toString());q.call(this,(this.createButtonElement(r.type)),r)}else{p={element:null,attributes:(o||{})};if(i.isString(r)){n=g.get(r);if(n){if(!p.attributes.id){p.attributes.id=r}YAHOO.log("Building the button using an existing HTML element as a source element.","info",this.toString());p.attributes.srcelement=n;a.call(this,p);if(!p.element){YAHOO.log("Source element could not be used as is. Creating a new HTML element for the button.","info",this.toString());p.element=this.createButtonElement(p.attributes.type)}q.call(this,p.element,p.attributes)}}else{if(r.nodeName){if(!p.attributes.id){if(r.id){p.attributes.id=r.id}else{p.attributes.id=g.generateId();YAHOO.log('No value specified for the button\'s "id" attribute. Setting button id to "'+p.attributes.id+'".',"info",this.toString())}}YAHOO.log("Building the button using an existing HTML element as a source element.","info",this.toString());p.attributes.srcelement=r;a.call(this,p);if(!p.element){YAHOO.log("Source element could not be used as is. Creating a new HTML element for the button.","info",this.toString());p.element=this.createButtonElement(p.attributes.type)}q.call(this,p.element,p.attributes)}}}};YAHOO.extend(YAHOO.widget.Button,YAHOO.util.Element,{_button:null,_menu:null,_hiddenFields:null,_onclickAttributeValue:null,_activationKeyPressed:false,_activationButtonPressed:false,_hasKeyEventHandlers:false,_hasMouseEventHandlers:false,_nOptionRegionX:0,CLASS_NAME_PREFIX:"yui-",NODE_NAME:"SPAN",CHECK_ACTIVATION_KEYS:[32],ACTIVATION_KEYS:[13,32],OPTION_AREA_WIDTH:20,CSS_CLASS_NAME:"button",_setType:function(n){if(n=="split"){this.on("option",this._onOption)}},_setLabel:function(o){this._button.innerHTML=o;var p,n=l.gecko;if(n&&n<1.9&&g.inDocument(this.get("element"))){p=(this.CLASS_NAME_PREFIX+this.CSS_CLASS_NAME);this.removeClass(p);i.later(0,this,this.addClass,p)}},_setTabIndex:function(n){this._button.tabIndex=n},_setTitle:function(n){if(this.get("type")!="link"){this._button.title=n}},_setDisabled:function(n){if(this.get("type")!="link"){if(n){if(this._menu){this._menu.hide()}if(this.hasFocus()){this.blur()}this._button.setAttribute("disabled","disabled");this.addStateCSSClasses("disabled");this.removeStateCSSClasses("hover");this.removeStateCSSClasses("active");this.removeStateCSSClasses("focus")}else{this._button.removeAttribute("disabled");this.removeStateCSSClasses("disabled")}}},_setHref:function(n){if(this.get("type")=="link"){this._button.href=n}},_setTarget:function(n){if(this.get("type")=="link"){this._button.setAttribute("target",n)}},_setChecked:function(n){var o=this.get("type");if(o=="checkbox"||o=="radio"){if(n){this.addStateCSSClasses("checked")}else{this.removeStateCSSClasses("checked")}}},_setMenu:function(u){var p=this.get("lazyloadmenu"),r=this.get("element"),n,w=false,x,o,q;function v(){x.render(r.parentNode);this.removeListener("appendTo",v)}function t(){x.cfg.queueProperty("container",r.parentNode);this.removeListener("appendTo",t)}function s(){var y;if(x){g.addClass(x.element,this.get("menuclassname"));g.addClass(x.element,this.CLASS_NAME_PREFIX+this.get("type")+"-button-menu");x.showEvent.subscribe(this._onMenuShow,null,this);x.hideEvent.subscribe(this._onMenuHide,null,this);x.renderEvent.subscribe(this._onMenuRender,null,this);if(j&&x instanceof j){if(p){y=this.get("container");if(y){x.cfg.queueProperty("container",y)}else{this.on("appendTo",t)}}x.cfg.queueProperty("clicktohide",false);x.keyDownEvent.subscribe(this._onMenuKeyDown,this,true);x.subscribe("click",this._onMenuClick,this,true);this.on("selectedMenuItemChange",this._onSelectedMenuItemChange);q=x.srcElement;if(q&&q.nodeName.toUpperCase()=="SELECT"){q.style.display="none";q.parentNode.removeChild(q)}}else{if(b&&x instanceof b){if(!k){k=new YAHOO.widget.OverlayManager()}k.register(x)}}this._menu=x;if(!w&&!p){if(g.inDocument(r)){x.render(r.parentNode) }else{this.on("appendTo",v)}}}}if(b){if(j){n=j.prototype.CSS_CLASS_NAME}if(u&&j&&(u instanceof j)){x=u;w=true;s.call(this)}else{if(b&&u&&(u instanceof b)){x=u;w=true;x.cfg.queueProperty("visible",false);s.call(this)}else{if(j&&i.isArray(u)){x=new j(g.generateId(),{lazyload:p,itemdata:u});this._menu=x;this.on("appendTo",s)}else{if(i.isString(u)){o=g.get(u);if(o){if(j&&g.hasClass(o,n)||o.nodeName.toUpperCase()=="SELECT"){x=new j(u,{lazyload:p});s.call(this)}else{if(b){x=new b(u,{visible:false});s.call(this)}}}}else{if(u&&u.nodeName){if(j&&g.hasClass(u,n)||u.nodeName.toUpperCase()=="SELECT"){x=new j(u,{lazyload:p});s.call(this)}else{if(b){if(!u.id){g.generateId(u)}x=new b(u,{visible:false});s.call(this)}}}}}}}}},_setOnClick:function(n){if(this._onclickAttributeValue&&(this._onclickAttributeValue!=n)){this.removeListener("click",this._onclickAttributeValue.fn);this._onclickAttributeValue=null}if(!this._onclickAttributeValue&&i.isObject(n)&&i.isFunction(n.fn)){this.on("click",n.fn,n.obj,n.scope);this._onclickAttributeValue=n}},_isActivationKey:function(n){var s=this.get("type"),o=(s=="checkbox"||s=="radio")?this.CHECK_ACTIVATION_KEYS:this.ACTIVATION_KEYS,q=o.length,r=false,p;if(q>0){p=q-1;do{if(n==o[p]){r=true;break}}while(p--)}return r},_isSplitButtonOptionKey:function(p){var o=(m.getCharCode(p)==40);var n=function(q){m.preventDefault(q);this.removeListener("keypress",n)};if(o){if(l.opera){this.on("keypress",n)}m.preventDefault(p)}return o},_addListenersToForm:function(){var t=this.getForm(),s=YAHOO.widget.Button.onFormKeyPress,r,n,q,p,o;if(t){m.on(t,"reset",this._onFormReset,null,this);m.on(t,"submit",this._onFormSubmit,null,this);n=this.get("srcelement");if(this.get("type")=="submit"||(n&&n.type=="submit")){q=m.getListeners(t,"keypress");r=false;if(q){p=q.length;if(p>0){o=p-1;do{if(q[o].fn==s){r=true;break}}while(o--)}}if(!r){m.on(t,"keypress",s)}}}},_showMenu:function(r){if(YAHOO.widget.MenuManager){YAHOO.widget.MenuManager.hideVisible()}if(k){k.hideAll()}var n=this._menu,q=this.get("menualignment"),p=this.get("focusmenu"),o;if(this._renderedMenu){n.cfg.setProperty("context",[this.get("element"),q[0],q[1]]);n.cfg.setProperty("preventcontextoverlap",true);n.cfg.setProperty("constraintoviewport",true)}else{n.cfg.queueProperty("context",[this.get("element"),q[0],q[1]]);n.cfg.queueProperty("preventcontextoverlap",true);n.cfg.queueProperty("constraintoviewport",true)}this.focus();if(j&&n&&(n instanceof j)){o=n.focus;n.focus=function(){};if(this._renderedMenu){n.cfg.setProperty("minscrollheight",this.get("menuminscrollheight"));n.cfg.setProperty("maxheight",this.get("menumaxheight"))}else{n.cfg.queueProperty("minscrollheight",this.get("menuminscrollheight"));n.cfg.queueProperty("maxheight",this.get("menumaxheight"))}n.show();n.focus=o;n.align();if(r.type=="mousedown"){m.stopPropagation(r)}if(p){n.focus()}}else{if(b&&n&&(n instanceof b)){if(!this._renderedMenu){n.render(this.get("element").parentNode)}n.show();n.align()}}},_hideMenu:function(){var n=this._menu;if(n){n.hide()}},_onMouseOver:function(o){var q=this.get("type"),n,p;if(q==="split"){n=this.get("element");p=(g.getX(n)+(n.offsetWidth-this.OPTION_AREA_WIDTH));this._nOptionRegionX=p}if(!this._hasMouseEventHandlers){if(q==="split"){this.on("mousemove",this._onMouseMove)}this.on("mouseout",this._onMouseOut);this._hasMouseEventHandlers=true}this.addStateCSSClasses("hover");if(q==="split"&&(m.getPageX(o)>p)){this.addStateCSSClasses("hoveroption")}if(this._activationButtonPressed){this.addStateCSSClasses("active")}if(this._bOptionPressed){this.addStateCSSClasses("activeoption")}if(this.isActive()||this._bOptionPressed){m.removeListener(document,"mouseup",this._onDocumentMouseUp)}},_onMouseMove:function(n){var o=this._nOptionRegionX;if(o){if(m.getPageX(n)>o){this.addStateCSSClasses("hoveroption")}else{this.removeStateCSSClasses("hoveroption")}}},_onMouseOut:function(n){var o=this.get("type");this.removeStateCSSClasses("hover");if(o!="menu"){this.removeStateCSSClasses("active")}if(this.isActive()||this._bOptionPressed){m.on(document,"mouseup",this._onDocumentMouseUp,null,this)}if(o==="split"&&(m.getPageX(n)>this._nOptionRegionX)){this.removeStateCSSClasses("hoveroption")}},_onDocumentMouseUp:function(p){this._activationButtonPressed=false;this._bOptionPressed=false;var q=this.get("type"),n,o;if(q=="menu"||q=="split"){n=m.getTarget(p);o=this._menu.element;if(n!=o&&!g.isAncestor(o,n)){this.removeStateCSSClasses((q=="menu"?"active":"activeoption"));this._hideMenu()}}m.removeListener(document,"mouseup",this._onDocumentMouseUp)},_onMouseDown:function(p){var q,o=true;function n(){this._hideMenu();this.removeListener("mouseup",n)}if((p.which||p.button)==1){if(!this.hasFocus()){i.later(0,this,this.focus)}q=this.get("type");if(q=="split"){if(m.getPageX(p)>this._nOptionRegionX){this.fireEvent("option",p);o=false}else{this.addStateCSSClasses("active");this._activationButtonPressed=true}}else{if(q=="menu"){if(this.isActive()){this._hideMenu();this._activationButtonPressed=false}else{this._showMenu(p);this._activationButtonPressed=true}}else{this.addStateCSSClasses("active");this._activationButtonPressed=true}}if(q=="split"||q=="menu"){this._hideMenuTimer=i.later(250,this,this.on,["mouseup",n])}}return o},_onMouseUp:function(p){this.inMouseDown=false;var q=this.get("type"),n=this._hideMenuTimer,o=true;if(n){n.cancel()}if(q=="checkbox"||q=="radio"){if((p.which||p.button)!=1){return}this.set("checked",!(this.get("checked")))}this._activationButtonPressed=false;if(q!="menu"){this.removeStateCSSClasses("active")}if(q=="split"&&m.getPageX(p)>this._nOptionRegionX){o=false}return o},_onFocus:function(o){var n;this.addStateCSSClasses("focus");if(this._activationKeyPressed){this.addStateCSSClasses("active")}c=this;if(!this._hasKeyEventHandlers){n=this._button;m.on(n,"blur",this._onBlur,null,this);m.on(n,"keydown",this._onKeyDown,null,this);m.on(n,"keyup",this._onKeyUp,null,this);this._hasKeyEventHandlers=true}this.fireEvent("focus",o)},_onBlur:function(n){this.removeStateCSSClasses("focus");if(this.get("type")!="menu"){this.removeStateCSSClasses("active") -}if(this._activationKeyPressed){m.on(document,"keyup",this._onDocumentKeyUp,null,this)}c=null;this.fireEvent("blur",n)},_onDocumentKeyUp:function(n){if(this._isActivationKey(m.getCharCode(n))){this._activationKeyPressed=false;m.removeListener(document,"keyup",this._onDocumentKeyUp)}},_onKeyDown:function(o){var n=this._menu;if(this.get("type")=="split"&&this._isSplitButtonOptionKey(o)){this.fireEvent("option",o)}else{if(this._isActivationKey(m.getCharCode(o))){if(this.get("type")=="menu"){this._showMenu(o)}else{this._activationKeyPressed=true;this.addStateCSSClasses("active")}}}if(n&&n.cfg.getProperty("visible")&&m.getCharCode(o)==27){n.hide();this.focus()}},_onKeyUp:function(n){var o;if(this._isActivationKey(m.getCharCode(n))){o=this.get("type");if(o=="checkbox"||o=="radio"){this.set("checked",!(this.get("checked")))}this._activationKeyPressed=false;if(this.get("type")!="menu"){this.removeStateCSSClasses("active")}}},_onClick:function(p){var r=this.get("type"),q,n,o;switch(r){case"submit":if(p.returnValue!==false){this.submitForm()}break;case"reset":q=this.getForm();if(q){q.reset()}break;case"split":if(this._nOptionRegionX>0&&(m.getPageX(p)>this._nOptionRegionX)){o=false}else{this._hideMenu();n=this.get("srcelement");if(n&&n.type=="submit"&&p.returnValue!==false){this.submitForm()}}break}return o},_onDblClick:function(o){var n=true;if(this.get("type")=="split"&&m.getPageX(o)>this._nOptionRegionX){n=false}return n},_onAppendTo:function(n){i.later(0,this,this._addListenersToForm)},_onFormReset:function(o){var p=this.get("type"),n=this._menu;if(p=="checkbox"||p=="radio"){this.resetValue("checked")}if(j&&n&&(n instanceof j)){this.resetValue("selectedMenuItem")}},_onFormSubmit:function(n){this.createHiddenFields()},_onDocumentMouseDown:function(r){var o=m.getTarget(r),q=this.get("element"),p=this._menu.element;function n(t){var v,s,u;if(!t){return true}for(v=0,s=t.length;v'+(n=="link"?"":'')+"";return o},addStateCSSClasses:function(o){var p=this.get("type"),n=this.CLASS_NAME_PREFIX;if(i.isString(o)){if(o!="activeoption"&&o!="hoveroption"){this.addClass(n+this.CSS_CLASS_NAME+("-"+o))}this.addClass(n+p+("-button-"+o))}},removeStateCSSClasses:function(o){var p=this.get("type"),n=this.CLASS_NAME_PREFIX;if(i.isString(o)){this.removeClass(n+this.CSS_CLASS_NAME+("-"+o));this.removeClass(n+p+("-button-"+o))}},createHiddenFields:function(){this.removeHiddenFields();var v=this.getForm(),z,o,s,x,y,t,u,n,r,w,p,q=false;if(v&&!this.get("disabled")){o=this.get("type");s=(o=="checkbox"||o=="radio");if((s&&this.get("checked"))||(e==this)){YAHOO.log("Creating hidden field.","info",this.toString());z=f((s?o:"hidden"),this.get("name"),this.get("value"),this.get("checked"));if(z){if(s){z.style.display="none"}v.appendChild(z)}}x=this._menu;if(j&&x&&(x instanceof j)){YAHOO.log("Creating hidden field for menu.","info",this.toString());y=this.get("selectedMenuItem");p=x.srcElement;q=(p&&p.nodeName.toUpperCase()=="SELECT");if(y){u=(y.value===null||y.value==="")?y.cfg.getProperty("text"):y.value;t=this.get("name");if(q){w=p.name}else{if(t){w=(t+"_options")}}if(u&&w){n=f("hidden",w,u);v.appendChild(n)}}else{if(q){n=v.appendChild(p)}}}if(z&&n){this._hiddenFields=[z,n]}else{if(!z&&n){this._hiddenFields=n}else{if(z&&!n){this._hiddenFields=z}}}r=this._hiddenFields}return r},removeHiddenFields:function(){var q=this._hiddenFields,o,p;function n(r){if(g.inDocument(r)){r.parentNode.removeChild(r)}}if(q){if(i.isArray(q)){o=q.length;if(o>0){p=o-1;do{n(q[p])}while(p--)}}else{n(q)}this._hiddenFields=null}},submitForm:function(){var q=this.getForm(),p=this.get("srcelement"),o=false,n;if(q){if(this.get("type")=="submit"||(p&&p.type=="submit")){e=this}if(l.ie&&(l.ie<9)){o=q.fireEvent("onsubmit")}else{n=document.createEvent("HTMLEvents");n.initEvent("submit",true,true);o=q.dispatchEvent(n)}if((l.ie||l.webkit)&&o){q.submit()}}return o},init:function(p,D){var v=D.type=="link"?"a":"button",A=D.srcelement,s=p.getElementsByTagName(v)[0],u; +}if(this._activationKeyPressed){m.on(document,"keyup",this._onDocumentKeyUp,null,this)}c=null;this.fireEvent("blur",n)},_onDocumentKeyUp:function(n){if(this._isActivationKey(m.getCharCode(n))){this._activationKeyPressed=false;m.removeListener(document,"keyup",this._onDocumentKeyUp)}},_onKeyDown:function(o){var n=this._menu;if(this.get("type")=="split"&&this._isSplitButtonOptionKey(o)){this.fireEvent("option",o)}else{if(this._isActivationKey(m.getCharCode(o))){if(this.get("type")=="menu"){this._showMenu(o)}else{this._activationKeyPressed=true;this.addStateCSSClasses("active")}}}if(n&&n.cfg.getProperty("visible")&&m.getCharCode(o)==27){n.hide();this.focus()}},_onKeyUp:function(n){var o;if(this._isActivationKey(m.getCharCode(n))){o=this.get("type");if(o=="checkbox"||o=="radio"){this.set("checked",!(this.get("checked")))}this._activationKeyPressed=false;if(this.get("type")!="menu"){this.removeStateCSSClasses("active")}}},_onClick:function(p){var r=this.get("type"),q,n,o;switch(r){case"submit":if(p.returnValue!==false){this.submitForm()}break;case"reset":q=this.getForm();if(q){q.reset()}break;case"split":if(this._nOptionRegionX>0&&(m.getPageX(p)>this._nOptionRegionX)){o=false}else{this._hideMenu();n=this.get("srcelement");if(n&&n.type=="submit"&&p.returnValue!==false){this.submitForm()}}break}return o},_onDblClick:function(o){var n=true;if(this.get("type")=="split"&&m.getPageX(o)>this._nOptionRegionX){n=false}return n},_onAppendTo:function(n){i.later(0,this,this._addListenersToForm)},_onFormReset:function(o){var p=this.get("type"),n=this._menu;if(p=="checkbox"||p=="radio"){this.resetValue("checked")}if(j&&n&&(n instanceof j)){this.resetValue("selectedMenuItem")}},_onFormSubmit:function(n){this.createHiddenFields()},_onDocumentMouseDown:function(r){var o=m.getTarget(r),q=this.get("element"),p=this._menu.element;function n(t){var v,s,u;if(!t){return true}for(v=0,s=t.length;v'+(n=="link"?"":'')+"";return o},addStateCSSClasses:function(o){var p=this.get("type"),n=this.CLASS_NAME_PREFIX;if(i.isString(o)){if(o!="activeoption"&&o!="hoveroption"){this.addClass(n+this.CSS_CLASS_NAME+("-"+o))}this.addClass(n+p+("-button-"+o))}},removeStateCSSClasses:function(o){var p=this.get("type"),n=this.CLASS_NAME_PREFIX;if(i.isString(o)){this.removeClass(n+this.CSS_CLASS_NAME+("-"+o));this.removeClass(n+p+("-button-"+o))}},createHiddenFields:function(){this.removeHiddenFields();var v=this.getForm(),z,o,s,x,y,t,u,n,r,w,p,q=false;if(v&&!this.get("disabled")){o=this.get("type");s=(o=="checkbox"||o=="radio");if((s&&this.get("checked"))||(e==this)){YAHOO.log("Creating hidden field.","info",this.toString());z=f((s?o:"hidden"),this.get("name"),this.get("value"),this.get("checked"));if(z){if(s){z.style.display="none"}v.appendChild(z)}}x=this._menu;if(j&&x&&(x instanceof j)){YAHOO.log("Creating hidden field for menu.","info",this.toString());y=this.get("selectedMenuItem");p=x.srcElement;q=(p&&p.nodeName.toUpperCase()=="SELECT");if(y){u=(y.value===null||y.value==="")?y.cfg.getProperty("text"):y.value;t=this.get("name");if(q){w=p.name}else{if(t){w=(t+"_options")}}if(u&&w){n=f("hidden",w,u);v.appendChild(n)}}else{if(q){n=v.appendChild(p)}}}if(z&&n){this._hiddenFields=[z,n]}else{if(!z&&n){this._hiddenFields=n}else{if(z&&!n){this._hiddenFields=z}}}r=this._hiddenFields}return r},removeHiddenFields:function(){var q=this._hiddenFields,o,p;function n(r){if(g.inDocument(r)){r.parentNode.removeChild(r)}}if(q){if(i.isArray(q)){o=q.length;if(o>0){p=o-1;do{n(q[p])}while(p--)}}else{n(q)}this._hiddenFields=null}},submitForm:function(){var q=this.getForm(),p=this.get("srcelement"),o=false,n;if(q){if(this.get("type")=="submit"||(p&&p.type=="submit")){e=this}if(l.ie&&(l.ie<9)){o=q.fireEvent("onsubmit")}else{n=document.createEvent("HTMLEvents");n.initEvent("submit",true,true);o=q.dispatchEvent(n)}if((l.ie||l.webkit||l.gecko)&&o){q.submit()}}return o},init:function(p,D){var v=D.type=="link"?"a":"button",A=D.srcelement,s=p.getElementsByTagName(v)[0],u; if(!s){u=p.getElementsByTagName("input")[0];if(u){s=document.createElement("button");s.setAttribute("type","button");u.parentNode.replaceChild(s,u)}}this._button=s;YAHOO.widget.Button.superclass.init.call(this,p,D);var t=this.get("id"),z=t+"-button";s.id=z;var x,q;var E=function(F){return(F.htmlFor===t)};var C=function(){q.setAttribute((l.ie?"htmlFor":"for"),z)};if(A&&this.get("type")!="link"){x=g.getElementsBy(E,"label");if(i.isArray(x)&&x.length>0){q=x[0]}}d[t]=this;var B=this.CLASS_NAME_PREFIX;this.addClass(B+this.CSS_CLASS_NAME);this.addClass(B+this.get("type")+"-button");m.on(this._button,"focus",this._onFocus,null,this);this.on("mouseover",this._onMouseOver);this.on("mousedown",this._onMouseDown);this.on("mouseup",this._onMouseUp);this.on("click",this._onClick);var r=this.get("onclick");this.set("onclick",null);this.set("onclick",r);this.on("dblclick",this._onDblClick);var o;if(q){if(this.get("replaceLabel")){this.set("label",q.innerHTML);o=q.parentNode;o.removeChild(q)}else{this.on("appendTo",C);m.on(q,"click",this._onLabelClick,null,this);this._label=q}}this.on("appendTo",this._onAppendTo);var n=this.get("container"),y=this.get("element"),w=g.inDocument(y);if(n){if(A&&A!=y){o=A.parentNode;if(o){o.removeChild(A)}}if(i.isString(n)){m.onContentReady(n,this.appendTo,n,this)}else{this.on("init",function(){i.later(0,this,this.appendTo,n)})}}else{if(!w&&A&&A!=y){o=A.parentNode;if(o){this.fireEvent("beforeAppendTo",{type:"beforeAppendTo",target:o});o.replaceChild(y,A);this.fireEvent("appendTo",{type:"appendTo",target:o})}}else{if(this.get("type")!="link"&&w&&A&&A==y){this._addListenersToForm()}}}YAHOO.log("Initialization completed.","info",this.toString());this.fireEvent("init",{type:"init",target:this})},initAttributes:function(o){var n=o||{};YAHOO.widget.Button.superclass.initAttributes.call(this,n);this.setAttributeConfig("type",{value:(n.type||"push"),validator:i.isString,writeOnce:true,method:this._setType});this.setAttributeConfig("label",{value:n.label,validator:i.isString,method:this._setLabel});this.setAttributeConfig("value",{value:n.value});this.setAttributeConfig("name",{value:n.name,validator:i.isString});this.setAttributeConfig("tabindex",{value:n.tabindex,validator:i.isNumber,method:this._setTabIndex});this.configureAttribute("title",{value:n.title,validator:i.isString,method:this._setTitle});this.setAttributeConfig("disabled",{value:(n.disabled||false),validator:i.isBoolean,method:this._setDisabled});this.setAttributeConfig("href",{value:n.href,validator:i.isString,method:this._setHref});this.setAttributeConfig("target",{value:n.target,validator:i.isString,method:this._setTarget});this.setAttributeConfig("checked",{value:(n.checked||false),validator:i.isBoolean,method:this._setChecked});this.setAttributeConfig("container",{value:n.container,writeOnce:true});this.setAttributeConfig("srcelement",{value:n.srcelement,writeOnce:true});this.setAttributeConfig("menu",{value:null,method:this._setMenu,writeOnce:true});this.setAttributeConfig("lazyloadmenu",{value:(n.lazyloadmenu===false?false:true),validator:i.isBoolean,writeOnce:true});this.setAttributeConfig("menuclassname",{value:(n.menuclassname||(this.CLASS_NAME_PREFIX+"button-menu")),validator:i.isString,method:this._setMenuClassName,writeOnce:true});this.setAttributeConfig("menuminscrollheight",{value:(n.menuminscrollheight||90),validator:i.isNumber});this.setAttributeConfig("menumaxheight",{value:(n.menumaxheight||0),validator:i.isNumber});this.setAttributeConfig("menualignment",{value:(n.menualignment||["tl","bl"]),validator:i.isArray});this.setAttributeConfig("selectedMenuItem",{value:null});this.setAttributeConfig("onclick",{value:n.onclick,method:this._setOnClick});this.setAttributeConfig("focusmenu",{value:(n.focusmenu===false?false:true),validator:i.isBoolean});this.setAttributeConfig("replaceLabel",{value:false,validator:i.isBoolean,writeOnce:true})},focus:function(){if(!this.get("disabled")){try{this._button.focus()}catch(n){}}},blur:function(){if(!this.get("disabled")){try{this._button.blur()}catch(n){}}},hasFocus:function(){return(c==this)},isActive:function(){return this.hasClass(this.CLASS_NAME_PREFIX+this.CSS_CLASS_NAME+"-active")},getMenu:function(){return this._menu},getForm:function(){var n=this._button,o;if(n){o=n.form}return o},getHiddenFields:function(){return this._hiddenFields},destroy:function(){YAHOO.log("Destroying ...","info",this.toString());var p=this.get("element"),n=this._menu,t=this._label,o,s;if(n){YAHOO.log("Destroying menu.","info",this.toString());if(k&&k.find(n)){k.remove(n)}n.destroy()}YAHOO.log("Removing DOM event listeners.","info",this.toString());m.purgeElement(p);m.purgeElement(this._button);m.removeListener(document,"mouseup",this._onDocumentMouseUp);m.removeListener(document,"keyup",this._onDocumentKeyUp);m.removeListener(document,"mousedown",this._onDocumentMouseDown);if(t){m.removeListener(t,"click",this._onLabelClick);o=t.parentNode;o.removeChild(t)}var q=this.getForm();if(q){m.removeListener(q,"reset",this._onFormReset);m.removeListener(q,"submit",this._onFormSubmit)}YAHOO.log("Removing CustomEvent listeners.","info",this.toString());this.unsubscribeAll();o=p.parentNode;if(o){o.removeChild(p)}YAHOO.log("Removing from document.","info",this.toString());delete d[this.get("id")];var r=(this.CLASS_NAME_PREFIX+this.CSS_CLASS_NAME);s=g.getElementsByClassName(r,this.NODE_NAME,q);if(i.isArray(s)&&s.length===0){m.removeListener(q,"keypress",YAHOO.widget.Button.onFormKeyPress)}YAHOO.log("Destroyed.","info",this.toString())},fireEvent:function(o,n){var p=arguments[0];if(this.DOM_EVENTS[p]&&this.get("disabled")){return false}return YAHOO.widget.Button.superclass.fireEvent.apply(this,arguments)},toString:function(){return("Button "+this.get("id"))}});YAHOO.widget.Button.onFormKeyPress=function(r){var p=m.getTarget(r),s=m.getCharCode(r),q=p.nodeName&&p.nodeName.toUpperCase(),n=p.type,t=false,v,x,o,w;function u(A){var z,y;switch(A.nodeName.toUpperCase()){case"INPUT":case"BUTTON":if(A.type=="submit"&&!A.disabled){if(!t&&!o){o=A}}break; default:z=A.id;if(z){v=d[z];if(v){t=true;if(!v.get("disabled")){y=v.get("srcelement");if(!x&&(v.get("type")=="submit"||(y&&y.type=="submit"))){x=v}}}}break}}if(s==13&&((q=="INPUT"&&(n=="text"||n=="password"||n=="checkbox"||n=="radio"||n=="file"))||q=="SELECT")){g.getElementsBy(u,"*",this);if(o){o.focus()}else{if(!o&&x){m.preventDefault(r);if(l.ie){if(l.ie<9){x.get("element").fireEvent("onclick")}else{w=document.createEvent("HTMLEvents");w.initEvent("click",true,true);x.get("element").dispatchEvent(w)}}else{w=document.createEvent("HTMLEvents");w.initEvent("click",true,true);if(l.gecko<1.9){x.fireEvent("click",w)}else{x.get("element").dispatchEvent(w)}}}}}};YAHOO.widget.Button.addHiddenFieldsToForm=function(n){var r=YAHOO.widget.Button.prototype,t=g.getElementsByClassName((r.CLASS_NAME_PREFIX+r.CSS_CLASS_NAME),"*",n),q=t.length,s,o,p;if(q>0){YAHOO.log("Form contains "+q+" YUI buttons.","info",this.toString());for(p=0;p0){f=h-1;do{this._buttons[f].set("disabled",g)}while(f--)}},_onKeyDown:function(k){var g=b.getTarget(k),i=b.getCharCode(k),h=g.parentNode.parentNode.id,j=e[h],f=-1;if(i==37||i==38){f=(j.index===0)?(this._buttons.length-1):(j.index-1)}else{if(i==39||i==40){f=(j.index===(this._buttons.length-1))?0:(j.index+1)}}if(f>-1){this.check(f);this.getButton(f).focus()}},_onAppendTo:function(h){var j=this._buttons,g=j.length,f;for(f=0;f0){this.logger.log("Found "+j.length+" child nodes with the class name "+k+" Attempting to add to button group.");this.addButtons(j)}this.logger.log('Searching for child nodes with the type of "radio" to add to the button group.');function f(l){return(l.type=="radio")}j=c.getElementsBy(f,"input",this.get("element"));if(j.length>0){this.logger.log("Found "+j.length+' child nodes with the type of "radio." Attempting to add to button group.');this.addButtons(j)}this.on("keydown",this._onKeyDown);this.on("appendTo",this._onAppendTo);var g=this.get("container");if(g){if(d.isString(g)){b.onContentReady(g,function(){this.appendTo(g)},null,this)}else{this.appendTo(g)}}this.logger.log("Initialization completed.")},initAttributes:function(g){var f=g||{};YAHOO.widget.ButtonGroup.superclass.initAttributes.call(this,f);this.setAttributeConfig("name",{value:f.name,validator:d.isString});this.setAttributeConfig("disabled",{value:(f.disabled||false),validator:d.isBoolean,method:this._setDisabled});this.setAttributeConfig("value",{value:f.value});this.setAttributeConfig("container",{value:f.container,writeOnce:true});this.setAttributeConfig("checkedButton",{value:null})},addButton:function(j){var l,k,g,f,h,i;if(j instanceof a&&j.get("type")=="radio"){l=j}else{if(!d.isString(j)&&!j.nodeName){j.type="radio";l=new a(j)}else{l=new a(j,{type:"radio"})}}if(l){f=this._buttons.length;h=l.get("name");i=this.get("name");l.index=f;this._buttons[f]=l;e[l.get("id")]=l;if(h!=i){l.set("name",i)}if(this.get("disabled")){l.set("disabled",true)}if(l.get("checked")){this.set("checkedButton",l)}k=l.get("element");g=this.get("element");if(k.parentNode!=g){g.appendChild(k)}l.on("checkedChange",this._onButtonCheckedChange,l,this);this.logger.log("Button "+l.get("id")+" added.")}return l},addButtons:function(g){var h,j,k,f;if(d.isArray(g)){h=g.length;k=[];if(h>0){for(f=0;f0){f=this._buttons.length-1;do{this._buttons[f].index=f}while(f--)}this.logger.log("Button "+j.get("id")+" removed.")}},getButton:function(f){return this._buttons[f]},getButtons:function(){return this._buttons},getCount:function(){return this._buttons.length},focus:function(h){var j,g,f;if(d.isNumber(h)){j=this._buttons[h];if(j){j.focus()}}else{g=this.getCount();for(f=0; f0){g=this._buttons.length-1;do{this._buttons[g].destroy()}while(g--)}this.logger.log("Removing DOM event handlers.");b.purgeElement(h);this.logger.log("Removing from document.");f.removeChild(h)},toString:function(){return("ButtonGroup "+this.get("id"))}})})();YAHOO.register("button",YAHOO.widget.Button,{version:"2.9.0",build:"2800"}); \ No newline at end of file -- GitLab From 86b218ebb671f0285e882d54d7453a8eb82cda50 Mon Sep 17 00:00:00 2001 From: Josh Soref Date: Thu, 29 Nov 2018 22:03:35 -0500 Subject: [PATCH 011/476] Add periods to sentences --- .../jenkins/model/Jenkins/projectRelationship-help.jelly | 4 ++-- .../model/Jenkins/projectRelationship-help_bg.properties | 8 ++++---- .../model/Jenkins/projectRelationship-help_da.properties | 4 ++-- .../model/Jenkins/projectRelationship-help_de.properties | 4 ++-- .../model/Jenkins/projectRelationship-help_es.properties | 4 ++-- .../model/Jenkins/projectRelationship-help_et.properties | 4 ++-- .../model/Jenkins/projectRelationship-help_fr.properties | 6 +++--- .../model/Jenkins/projectRelationship-help_it.properties | 4 ++-- .../model/Jenkins/projectRelationship-help_ja.properties | 8 ++++---- .../model/Jenkins/projectRelationship-help_lt.properties | 4 ++-- .../model/Jenkins/projectRelationship-help_nl.properties | 6 +++--- .../Jenkins/projectRelationship-help_pt_BR.properties | 4 ++-- .../model/Jenkins/projectRelationship-help_ru.properties | 4 ++-- .../model/Jenkins/projectRelationship-help_sr.properties | 6 +++--- .../model/Jenkins/projectRelationship-help_tr.properties | 4 ++-- .../Jenkins/projectRelationship-help_zh_TW.properties | 4 ++-- 16 files changed, 39 insertions(+), 39 deletions(-) diff --git a/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help.jelly b/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help.jelly index b94f900169..837dc55a9f 100644 --- a/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help.jelly +++ b/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help.jelly @@ -35,8 +35,8 @@ THE SOFTWARE. ${%For this feature to work, the following conditions need to be met:}

    -
  1. ${%The upstream project records the fingerprints of its build artifacts}
  2. -
  3. ${%The downstream project records the fingerprints of the upstream files it uses}
  4. +
  5. ${%The upstream project records the fingerprints of its build artifacts.}
  6. +
  7. ${%The downstream project records the fingerprints of the upstream files it uses.}

${%This allows Jenkins to correlate two projects.} diff --git a/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_bg.properties b/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_bg.properties index 60264c429d..1aecee88e4 100644 --- a/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_bg.properties +++ b/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_bg.properties @@ -33,12 +33,12 @@ body=\ \u0434\u0430\u043d\u043d\u0438 \u043e\u0442\ \u0446\u0438\u0444\u0440\u043e\u0432\u0438\u0442\u0435\ \u043e\u0442\u043f\u0435\u0447\u0430\u0442\u044a\u0446\u0438. -The\ downstream\ project\ records\ the\ fingerprints\ of\ the\ upstream\ files\ it\ uses=\ - \u041f\u043e\u0441\u043b\u0435\u0434\u0432\u0430\u0449\u0438\u044f\u0442 \u043f\u0440\u043e\u0435\u043a\u0442 \u043f\u0430\u0437\u0438 \u0446\u0438\u0444\u0440\u043e\u0432\u0438\u0442\u0435 \u043e\u0442\u043f\u0435\u0447\u0430\u0442\u044a\u0446\u0438 \u043d\u0430 \u0440\u0435\u0437\u0443\u043b\u0442\u0430\u0442\u0438\u0442\u0435 \u043e\u0442 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0438\u044f\u0442\u0430 +The\ downstream\ project\ records\ the\ fingerprints\ of\ the\ upstream\ files\ it\ uses.=\ + \u041f\u043e\u0441\u043b\u0435\u0434\u0432\u0430\u0449\u0438\u044f\u0442 \u043f\u0440\u043e\u0435\u043a\u0442 \u043f\u0430\u0437\u0438 \u0446\u0438\u0444\u0440\u043e\u0432\u0438\u0442\u0435 \u043e\u0442\u043f\u0435\u0447\u0430\u0442\u044a\u0446\u0438 \u043d\u0430 \u0440\u0435\u0437\u0443\u043b\u0442\u0430\u0442\u0438\u0442\u0435 \u043e\u0442 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0438\u044f\u0442\u0430. # What\u2019s "project relationship"? Title=\ \u0412\u0440\u044a\u0437\u043a\u0438 \u0441 \u0434\u0440\u0443\u0433\u0438\u0442\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0438 -The\ upstream\ project\ records\ the\ fingerprints\ of\ its\ build\ artifacts=\ - \u041f\u0440\u0435\u0434\u0448\u0435\u0441\u0442\u0432\u0430\u0449\u0438\u044f\u0442 \u043f\u0440\u043e\u0435\u043a\u0442 \u043f\u0430\u0437\u0438 \u0446\u0438\u0444\u0440\u043e\u0432\u0438\u0442\u0435 \u043e\u0442\u043f\u0435\u0447\u0430\u0442\u044a\u0446\u0438 \u043d\u0430 \u0440\u0435\u0437\u0443\u043b\u0442\u0430\u0442\u0438\u0442\u0435 \u043e\u0442 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0438\u044f\u0442\u0430 +The\ upstream\ project\ records\ the\ fingerprints\ of\ its\ build\ artifacts.=\ + \u041f\u0440\u0435\u0434\u0448\u0435\u0441\u0442\u0432\u0430\u0449\u0438\u044f\u0442 \u043f\u0440\u043e\u0435\u043a\u0442 \u043f\u0430\u0437\u0438 \u0446\u0438\u0444\u0440\u043e\u0432\u0438\u0442\u0435 \u043e\u0442\u043f\u0435\u0447\u0430\u0442\u044a\u0446\u0438 \u043d\u0430 \u0440\u0435\u0437\u0443\u043b\u0442\u0430\u0442\u0438\u0442\u0435 \u043e\u0442 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0438\u044f\u0442\u0430. This\ allows\ Jenkins\ to\ correlate\ two\ projects.=\ \u0422\u043e\u0432\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0432\u0430 \u043d\u0430 Jenkins \u0434\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438 \u0432\u0440\u044a\u0437\u043a\u0438\u0442\u0435 \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0430\u0442\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430. diff --git a/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_da.properties b/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_da.properties index 93e7cb4a0d..d54a3be29d 100644 --- a/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_da.properties +++ b/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_da.properties @@ -22,9 +22,9 @@ Title=Hvad er et "projektforhold"? For\ this\ feature\ to\ work,\ the\ following\ conditions\ need\ to\ be\ met\:=For at denne feature fungerer skal f\u00f8lgende v\u00e6re opfyldt: -The\ downstream\ project\ records\ the\ fingerprints\ of\ the\ upstream\ files\ it\ uses=Downstream projektet opsamler filfingeraftryk af de upstream filer det benytter +The\ downstream\ project\ records\ the\ fingerprints\ of\ the\ upstream\ files\ it\ uses.=Downstream projektet opsamler filfingeraftryk af de upstream filer det benytter. body=\ Har du projekter der er afh\u00e6ngige af hinanden kan Jenkins f\u00f8lge hvilket byg af upstreamprojektet \ der bruges af hvilket byg af downstream projektet ved at bruge filfingeraftyrk This\ allows\ Jenkins\ to\ correlate\ two\ projects.=Dette tillader Jenkins at korrelere to projekter. -The\ upstream\ project\ records\ the\ fingerprints\ of\ its\ build\ artifacts=Upstream projektet opsamler filfingeraftryk af sine byggeartifakter +The\ upstream\ project\ records\ the\ fingerprints\ of\ its\ build\ artifacts.=Upstream projektet opsamler filfingeraftryk af sine byggeartifakter. diff --git a/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_de.properties b/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_de.properties index 4bdff159fc..26330f50c2 100644 --- a/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_de.properties +++ b/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_de.properties @@ -26,6 +26,6 @@ body=\ eines vorgelagerten Projektes für welchen Build eines nachgelagerten Projektes verwendet wurde. Dies geschieht über \ gespeicherte "Fingerabdrücke", die mit Hilfe der Fingerabdruck-Funktion erzeugt wurden. For\ this\ feature\ to\ work,\ the\ following\ conditions\ need\ to\ be\ met\:=Um Projektbeziehungen nachzuverfolgen, müssen folgende Bedingungen erfüllt sein: -The\ upstream\ project\ records\ the\ fingerprints\ of\ its\ build\ artifacts=Das vorgelagerte Projekt zeichnet Fingerabdrücke seiner Build-Artefakte auf. -The\ downstream\ project\ records\ the\ fingerprints\ of\ the\ upstream\ files\ it\ uses=Das nachgelagerte Projekt zeichnet Fingerabdrücke der verwendeten Dateien aus vorgelagerten Projekten auf. +The\ upstream\ project\ records\ the\ fingerprints\ of\ its\ build\ artifacts.=Das vorgelagerte Projekt zeichnet Fingerabdrücke seiner Build-Artefakte auf. +The\ downstream\ project\ records\ the\ fingerprints\ of\ the\ upstream\ files\ it\ uses.=Das nachgelagerte Projekt zeichnet Fingerabdrücke der verwendeten Dateien aus vorgelagerten Projekten auf. This\ allows\ Jenkins\ to\ correlate\ two\ projects.=Diese Aufzeichnungen erlauben es Jenkins, zwei Projekte zueinander in Beziehung zu setzen. diff --git a/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_es.properties b/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_es.properties index 165c1ab751..fd34299623 100644 --- a/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_es.properties +++ b/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_es.properties @@ -24,6 +24,6 @@ Title= body=Cuando hay proyectos que dependen unos de otros, Jenkins puede hacer un seguimiento de qu\u00E9 proyectos padres est\u00E1n siendo utilizado por otros proyectos hijos usando un registro de firmas de los ficheros generados. Echa un vistazo a esta pagina: the fingerprint support. This\ allows\ Jenkins\ to\ correlate\ two\ projects.=Esto facilita que Jenkins pueda correlacionar los dos proyectos -The\ upstream\ project\ records\ the\ fingerprints\ of\ its\ build\ artifacts=Que el proyecto padre registre la firma de todos los ficheros que genera. +The\ upstream\ project\ records\ the\ fingerprints\ of\ its\ build\ artifacts.=Que el proyecto padre registre la firma de todos los ficheros que genera. For\ this\ feature\ to\ work,\ the\ following\ conditions\ need\ to\ be\ met\:=Para esta funcionalidad, son necesarias las siguientes condiciones: -The\ downstream\ project\ records\ the\ fingerprints\ of\ the\ upstream\ files\ it\ uses=El proyecto hijo almacena las firmas de los ficheros o artefactos que necesita y que fueron generados por otros proyectos padres. +The\ downstream\ project\ records\ the\ fingerprints\ of\ the\ upstream\ files\ it\ uses.=El proyecto hijo almacena las firmas de los ficheros o artefactos que necesita y que fueron generados por otros proyectos padres. diff --git a/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_et.properties b/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_et.properties index 99238f34ce..f16d6f0955 100644 --- a/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_et.properties +++ b/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_et.properties @@ -1,8 +1,8 @@ # This file is under the MIT License by authors For\ this\ feature\ to\ work,\ the\ following\ conditions\ need\ to\ be\ met:=Selle funktsiooni t\u00F6\u00F6tamiseks peavad olema t\u00E4idetud j\u00E4rgnevad tingimused: -The\ downstream\ project\ records\ the\ fingerprints\ of\ the\ upstream\ files\ it\ uses=Allavoolu projekt salvestab nende \u00FClesvoolu failide s\u00F5rmej\u00E4ljed mida ta kasutab -The\ upstream\ project\ records\ the\ fingerprints\ of\ its\ build\ artifacts=\u00DClesvoolu projekt salvestab oma j\u00E4rkude tulemuste s\u00F5rmej\u00E4ljed +The\ downstream\ project\ records\ the\ fingerprints\ of\ the\ upstream\ files\ it\ uses.=Allavoolu projekt salvestab nende \u00FClesvoolu failide s\u00F5rmej\u00E4ljed mida ta kasutab. +The\ upstream\ project\ records\ the\ fingerprints\ of\ its\ build\ artifacts.=\u00DClesvoolu projekt salvestab oma j\u00E4rkude tulemuste s\u00F5rmej\u00E4ljed. This\ allows\ Jenkins\ to\ correlate\ two\ projects.=See lubab Jenkinsil seostada kaks projekti. Title=Mis on "projektide seosed"? body=Kui teil on kaks projekti mis s\u00F5ltuvad \u00FCksteisest, siis suudab Jenkins j\u00E4lgida seda millist \u00FClesvoolu projekti j\u00E4rku kasutatakse mingi allavoolu projekti j\u00E4rgu jaoks, kasutades s\u00F5rmej\u00E4lje toe poolt loodud kirjeid. diff --git a/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_fr.properties b/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_fr.properties index 05a92c5a82..95eabb720b 100644 --- a/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_fr.properties +++ b/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_fr.properties @@ -27,8 +27,8 @@ body=\ les enregistrements créés par \ le support de l''empreinte numérique. For\ this\ feature\ to\ work,\ the\ following\ conditions\ need\ to\ be\ met\:=Pour que cette fonctionnalité marche, les conditions suivantes sont requises: -The\ upstream\ project\ records\ the\ fingerprints\ of\ its\ build\ artifacts=Le projet en amont enregistre les empreintes numériques de ses artefacts de build -The\ downstream\ project\ records\ the\ fingerprints\ of\ the\ upstream\ files\ it\ uses=Le projet en aval enregistre les empreintes num\u00E9riques des fichiers amont qu''il utilise -The\ downstream\ project\ records\ the\ fingerprints\ of\ the\ upstream\ jar\ files\ it\ uses=Le projet en aval enregistre les empreintes numériques des fichiers jar en amont qu''il utilise +The\ upstream\ project\ records\ the\ fingerprints\ of\ its\ build\ artifacts.=Le projet en amont enregistre les empreintes numériques de ses artefacts de build. +The\ downstream\ project\ records\ the\ fingerprints\ of\ the\ upstream\ files\ it\ uses.=Le projet en aval enregistre les empreintes num\u00E9riques des fichiers amont qu''il utilise. +The\ downstream\ project\ records\ the\ fingerprints\ of\ the\ upstream\ jar\ files\ it\ uses.=Le projet en aval enregistre les empreintes numériques des fichiers jar en amont qu''il utilise. This\ allows\ Jenkins\ to\ correlate\ two\ projects.=Cela permet à Jenkins de mettre en corrélation deux projets. diff --git a/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_it.properties b/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_it.properties index 83183391b5..c209d27940 100644 --- a/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_it.properties +++ b/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_it.properties @@ -20,9 +20,9 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -The\ downstream\ project\ records\ the\ fingerprints\ of\ the\ upstream\ files\ it\ uses=Il progetto downstream registra le impronte dei file upstream che utilizza +The\ downstream\ project\ records\ the\ fingerprints\ of\ the\ upstream\ files\ it\ uses.=Il progetto downstream registra le impronte dei file upstream che utilizza. Title=Che cos''è una "relazione fra progetti"? -The\ upstream\ project\ records\ the\ fingerprints\ of\ its\ build\ artifacts=Il progetto upstream registra le impronte dei propri artefatti di compilazione +The\ upstream\ project\ records\ the\ fingerprints\ of\ its\ build\ artifacts.=Il progetto upstream registra le impronte dei propri artefatti di compilazione. This\ allows\ Jenkins\ to\ correlate\ two\ projects.=Ciò consente a Jenkins di correlare due progetti. For\ this\ feature\ to\ work,\ the\ following\ conditions\ need\ to\ be\ met\:=Per far sì che questa funzionalità sia operativa devono essere soddisfatte le seguenti condizioni: body=\ diff --git a/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_ja.properties b/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_ja.properties index 1b333b466d..9e672b26b8 100644 --- a/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_ja.properties +++ b/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_ja.properties @@ -30,11 +30,11 @@ body=\ For\ this\ feature\ to\ work,\ the\ following\ conditions\ need\ to\ be\ met\:=\ \u3053\u306e\u6a5f\u80fd\u306e\u305f\u3081\u306b\u3001\u4e0b\u8a18\u306e\u6761\u4ef6\u3092\u6e80\u305f\u3059\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 -The\ upstream\ project\ records\ the\ fingerprints\ of\ its\ build\ artifacts=\ - \u4e0a\u6d41\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306f\u6210\u679c\u7269\u3092\u30d3\u30eb\u30c9\u3057\u305f\u6307\u7d0b\u3092\u8a18\u9332\u3057\u307e\u3059\u3002 +The\ upstream\ project\ records\ the\ fingerprints\ of\ its\ build\ artifacts.=\ + \u4e0a\u6d41\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306f\u6210\u679c\u7269\u3092\u30d3\u30eb\u30c9\u3057\u305f\u6307\u7d0b\u3092\u8a18\u9332\u3057\u307e\u3059\u3002. -The\ downstream\ project\ records\ the\ fingerprints\ of\ the\ upstream\ files\ it\ uses=\ - \u4e0b\u6d41\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306f\u4f7f\u7528\u3057\u3066\u3044\u308b\u4e0a\u6d41\u306e\u30d5\u30a1\u30a4\u30eb\u306e\u6307\u7d0b\u3092\u8a18\u9332\u3057\u307e\u3059\u3002 +The\ downstream\ project\ records\ the\ fingerprints\ of\ the\ upstream\ files\ it\ uses.=\ + \u4e0b\u6d41\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306f\u4f7f\u7528\u3057\u3066\u3044\u308b\u4e0a\u6d41\u306e\u30d5\u30a1\u30a4\u30eb\u306e\u6307\u7d0b\u3092\u8a18\u9332\u3057\u307e\u3059\u3002. This\ allows\ Jenkins\ to\ correlate\ two\ projects.=\ \u3053\u308c\u306fJenkins\u306b\u4e8c\u3064\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u76f8\u4e92\u306b\u95a2\u9023\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002 diff --git a/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_lt.properties b/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_lt.properties index 8a336276e7..1a4336fef8 100644 --- a/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_lt.properties +++ b/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_lt.properties @@ -3,7 +3,7 @@ body=\ Kai turite projektus, kurie priklauso vienas nuo kito, naudodamas \u012fra\u0161us, sukurtus \ pir\u0161t\u0173 antspaud\u0173 palaikymo Jenkinsas gali sekti, kuris ankstesnio projekto vykdymas \ naudojamas kuriame \u017eemesnio projekto vykdyme. -The\ downstream\ project\ records\ the\ fingerprints\ of\ the\ upstream\ files\ it\ uses=V\u0117lesnis projektas registruoja panaudot\u0173 ankstesniojo projekto fail\u0173 antspaudus -The\ upstream\ project\ records\ the\ fingerprints\ of\ its\ build\ artifacts=Ankstesnis projektas registruoja savo vykdymo rezultat\u0173 antspaudus +The\ downstream\ project\ records\ the\ fingerprints\ of\ the\ upstream\ files\ it\ uses.=V\u0117lesnis projektas registruoja panaudot\u0173 ankstesniojo projekto fail\u0173 antspaudus. +The\ upstream\ project\ records\ the\ fingerprints\ of\ its\ build\ artifacts.=Ankstesnis projektas registruoja savo vykdymo rezultat\u0173 antspaudus. This\ allows\ Jenkins\ to\ correlate\ two\ projects.=Tai leid\u017eia Jenkinsus koreliuoti projektus. For\ this\ feature\ to\ work,\ the\ following\ conditions\ need\ to\ be\ met\:=Kad veikt\u0173 \u0161i savyb\u0117, turi b\u016bti patenkintos \u0161ios s\u0105lygos: diff --git a/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_nl.properties b/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_nl.properties index 09800fd118..d679641c60 100644 --- a/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_nl.properties +++ b/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_nl.properties @@ -27,7 +27,7 @@ body=\ de hand van de geregistreerd elektronische vingerafdrukken van \ de door een bouwpoging opgeleverde artefacten. For\ this\ feature\ to\ work,\ the\ following\ conditions\ need\ to\ be\ met\:=De volgende voorwaarden dienen voldaan te worden om met deze functionaliteit te werken: -The\ upstream\ project\ records\ the\ fingerprints\ of\ its\ build\ artifacts=Het bovenliggende project registreert elektronische vingerafdrukken van zijn bouwartefacten. -The\ downstream\ project\ records\ the\ fingerprints\ of\ the\ upstream\ files\ it\ uses=Het onderliggend project registreert de vingerafdrukken van de bestanden van het bovenliggende project -The\ downstream\ project\ records\ the\ fingerprints\ of\ the\ upstream\ jar\ files\ it\ uses=Het onderliggende project registreert de elektronische vingerafdrukken van de gebruikte jar bestanden van bovenliggende projecten. +The\ upstream\ project\ records\ the\ fingerprints\ of\ its\ build\ artifacts.=Het bovenliggende project registreert elektronische vingerafdrukken van zijn bouwartefacten. +The\ downstream\ project\ records\ the\ fingerprints\ of\ the\ upstream\ files\ it\ uses.=Het onderliggend project registreert de vingerafdrukken van de bestanden van het bovenliggende project. +The\ downstream\ project\ records\ the\ fingerprints\ of\ the\ upstream\ jar\ files\ it\ uses.=Het onderliggende project registreert de elektronische vingerafdrukken van de gebruikte jar bestanden van bovenliggende projecten. This\ allows\ Jenkins\ to\ correlate\ two\ projects.=Dit stelt Jenkins in staat om 2 projecten met elkaar in verband te brengen. diff --git a/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_pt_BR.properties b/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_pt_BR.properties index d42583d14a..9940c38ec7 100644 --- a/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_pt_BR.properties +++ b/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_pt_BR.properties @@ -26,8 +26,8 @@ body=\ usando os registros criados pelo \ suporte de fingerprint. For\ this\ feature\ to\ work,\ the\ following\ conditions\ need\ to\ be\ met\:=Para esta caracter\u00edstica funcionar, as seguintes condi\u00e7\u00f5es s\u00e3o necess\u00e1rias -The\ upstream\ project\ records\ the\ fingerprints\ of\ its\ build\ artifacts=O projeto pai grava os fingerprints de seus artefatos de build +The\ upstream\ project\ records\ the\ fingerprints\ of\ its\ build\ artifacts.=O projeto pai grava os fingerprints de seus artefatos de build. This\ allows\ Jenkins\ to\ correlate\ two\ projects.=Isto permite que o Jenkins correlacione dois projetos. -The\ downstream\ project\ records\ the\ fingerprints\ of\ the\ upstream\ files\ it\ uses=O projeto filho grava o registro no fingerprint do projeto pai +The\ downstream\ project\ records\ the\ fingerprints\ of\ the\ upstream\ files\ it\ uses.=O projeto filho grava o registro no fingerprint do projeto pai. diff --git a/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_ru.properties b/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_ru.properties index 362972d0fa..0a75984528 100644 --- a/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_ru.properties +++ b/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_ru.properties @@ -21,8 +21,8 @@ # THE SOFTWARE. For\ this\ feature\ to\ work,\ the\ following\ conditions\ need\ to\ be\ met\:=\u0427\u0442\u043e\u0431\u044b \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u0435\u043d\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f: -The\ upstream\ project\ records\ the\ fingerprints\ of\ its\ build\ artifacts=\u0412\u043e\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u043e\u0442\u043f\u0435\u0447\u0430\u0442\u043a\u0438 (fingrprints) \u0441\u0432\u043e\u0438\u0445 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u043e\u0432. -The\ downstream\ project\ records\ the\ fingerprints\ of\ the\ upstream\ files\ it\ uses=\u041d\u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u043e\u0442\u043f\u0435\u0447\u0430\u0442\u043a\u0438 (fingrprints) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u043e\u0432 \u0432\u043e\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430. +The\ upstream\ project\ records\ the\ fingerprints\ of\ its\ build\ artifacts.=\u0412\u043e\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u043e\u0442\u043f\u0435\u0447\u0430\u0442\u043a\u0438 (fingrprints) \u0441\u0432\u043e\u0438\u0445 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u043e\u0432. +The\ downstream\ project\ records\ the\ fingerprints\ of\ the\ upstream\ files\ it\ uses.=\u041d\u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u043e\u0442\u043f\u0435\u0447\u0430\u0442\u043a\u0438 (fingrprints) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u043e\u0432 \u0432\u043e\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430. This\ allows\ Jenkins\ to\ correlate\ two\ projects.=\u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 Jenkins \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c\u0438. Title=\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 "\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432"? body=\ diff --git a/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_sr.properties b/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_sr.properties index d4ba3a84a7..5b3cc081f2 100644 --- a/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_sr.properties +++ b/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_sr.properties @@ -3,8 +3,8 @@ Title=\u0428\u0442\u0430 \u0458\u0435 "\u0432\u0435\u0437\u0430 \u043F\u0440\u043E\u0458\u0435\u043A\u0442\u0430"? body=Jenkins \u043C\u043E\u0436\u0435 \u043F\u0440\u0430\u0442\u0438\u0442\u0438 \u0438\u0437\u0433\u0440\u0430\u0434\u045A\u0443 \u043F\u0440\u043E\u0458\u0435\u043A\u0442\u0435 \u043A\u043E\u0458\u0438 \u0437\u0430\u0432\u0438\u0441\u0435 \u0458\u0435\u0434\u0430\u043D \u043E\u0434 \u0434\u0440\u0443\u0433\u043E\u0433 \u043A\u043E\u0440\u0438\u0441\u0442\u0435\u045B\u0438 \u0434\u0438\u0433\u0438\u0442\u0430\u043B\u043D\u0438 \u043E\u0442\u0438\u0441\u0430\u043A. For\ this\ feature\ to\ work,\ the\ following\ conditions\ need\ to\ be\ met\:=\u0414\u0430 \u0431\u0438 \u0442\u043E \u0440\u0430\u0434\u0438\u043B\u043E, \u0442\u0440\u0435\u0431\u0430 \u043E\u0431\u0435\u0437\u0431\u0435\u0434\u0438\u0442\u0438: -The\ upstream\ project\ records\ the\ fingerprints\ of\ its\ build\ artifacts=Upstream \u043F\u0440\u043E\u0458\u0435\u043A\u0430\u0442 \u0447\u0443\u0432\u0430 \u043E\u0442\u0438\u0441\u043A\u0435 \u0441\u0432\u043E\u0458\u0438\u0445 \u0430\u0440\u0442\u0438\u0444\u0430\u043A\u0430\u0442\u0438 \u0438\u0437\u0433\u0440\u0430\u0434\u045A\u0435. -The\ downstream\ project\ records\ the\ fingerprints\ of\ the\ upstream\ files\ it\ uses=Downstream \u043F\u0440\u043E\u0458\u0435\u043A\u0430\u0442 \u0431\u0435\u043B\u0435\u0436\u0438 \u0434\u0438\u0433\u0438\u0442\u0430\u043B\u043D\u0435 \u043E\u0442\u0438\u0441\u043A\u0435 \u0434\u0430\u0442\u043E\u0442\u0435\u043A\u0430 \u043E\u0434 \u043F\u0440\u043E\u0458\u0435\u043A\u0442\u0430 \u043E\u0434 \u043A\u043E\u0433\u0430 \u0437\u0430\u0432\u0438\u0441\u0438. +The\ upstream\ project\ records\ the\ fingerprints\ of\ its\ build\ artifacts.=Upstream \u043F\u0440\u043E\u0458\u0435\u043A\u0430\u0442 \u0447\u0443\u0432\u0430 \u043E\u0442\u0438\u0441\u043A\u0435 \u0441\u0432\u043E\u0458\u0438\u0445 \u0430\u0440\u0442\u0438\u0444\u0430\u043A\u0430\u0442\u0438 \u0438\u0437\u0433\u0440\u0430\u0434\u045A\u0435. +The\ downstream\ project\ records\ the\ fingerprints\ of\ the\ upstream\ files\ it\ uses.=Downstream \u043F\u0440\u043E\u0458\u0435\u043A\u0430\u0442 \u0431\u0435\u043B\u0435\u0436\u0438 \u0434\u0438\u0433\u0438\u0442\u0430\u043B\u043D\u0435 \u043E\u0442\u0438\u0441\u043A\u0435 \u0434\u0430\u0442\u043E\u0442\u0435\u043A\u0430 \u043E\u0434 \u043F\u0440\u043E\u0458\u0435\u043A\u0442\u0430 \u043E\u0434 \u043A\u043E\u0433\u0430 \u0437\u0430\u0432\u0438\u0441\u0438. This\ allows\ Jenkins\ to\ correlate\ two\ projects.=\u041E\u0432\u043E \u043E\u043C\u043E\u0433\u0443\u045B\u0430\u0432\u0430 Jenkins-\u0443 \u0434\u0430 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438 \u0432\u0435\u0437\u0443 \u0438\u0437\u043C\u0435\u0452\u0443 \u0434\u0432\u043E\u0458\u0435 \u043F\u0440\u043E\u0458\u0435\u043A\u0442\u0430. For\ this\ feature\ to\ work,\ the\ following\ conditions\ need\ to\ be\ met=\u0414\u0430 \u0431\u0438 \u0442\u043E \u0440\u0430\u0434\u0438\u043B\u043E, \u043C\u043E\u0440\u0430\u0442\u0435 \u043E\u0431\u0435\u0437\u0431\u0435\u0434\u0438\u0442\u0438: -The\ downstream\ project\ records\ the\ fingerprints\ of\ the\ upstream\ jar\ files\ it\ uses=Downstream \u043F\u0440\u043E\u0458\u0435\u043A\u0430\u0442 \u0431\u0435\u043B\u0435\u0436\u0438 \u0434\u0438\u0433\u0438\u0442\u0430\u043B\u043D\u0435 \u043E\u0442\u0438\u0441\u043A\u0435 jar \u0430\u0440\u0445\u0438\u0432\u0435 \u043E\u0434 \u043F\u0440\u043E\u0458\u0435\u043A\u0442\u0430 \u043E\u0434 \u043A\u043E\u0433\u0430 \u0437\u0430\u0432\u0438\u0441\u0438. +The\ downstream\ project\ records\ the\ fingerprints\ of\ the\ upstream\ jar\ files\ it\ uses.=Downstream \u043F\u0440\u043E\u0458\u0435\u043A\u0430\u0442 \u0431\u0435\u043B\u0435\u0436\u0438 \u0434\u0438\u0433\u0438\u0442\u0430\u043B\u043D\u0435 \u043E\u0442\u0438\u0441\u043A\u0435 jar \u0430\u0440\u0445\u0438\u0432\u0435 \u043E\u0434 \u043F\u0440\u043E\u0458\u0435\u043A\u0442\u0430 \u043E\u0434 \u043A\u043E\u0433\u0430 \u0437\u0430\u0432\u0438\u0441\u0438. diff --git a/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_tr.properties b/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_tr.properties index e9f0e66118..9885e1fb9c 100644 --- a/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_tr.properties +++ b/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_tr.properties @@ -26,6 +26,6 @@ body=\ ile olu\u015fturulan kay\u0131tlar\u0131 kullanarak hangi upstream projenin hangi downstream proje taraf\u0131ndan\ kullan\u0131ld\u0131\u011f\u0131n\u0131 takip edebilir. For\ this\ feature\ to\ work,\ the\ following\ conditions\ need\ to\ be\ met\:=Bu\ \u00f6zelli\u011fin\ \u00e7al\u0131\u015fabilmesi\ i\u00e7in\ devam\u0131ndaki\ \u015fartlar\u0131n\ sa\u011flanmas\u0131\ gerekir: -The\ upstream\ project\ records\ the\ fingerprints\ of\ its\ build\ artifacts=Upstream\ proje\, kendi yap\u0131land\u0131rma artefaktlar\u0131n\u0131n\ parmakizlerini\ kaydeder -The\ downstream\ project\ records\ the\ fingerprints\ of\ the\ upstream\ jar\ files\ it\ uses=Downstream\ proje,\ upstream\ projeden\ kulland\u0131\u011f\u0131\ jar\'lar\u0131n\ parmakizini\ kaydeder +The\ upstream\ project\ records\ the\ fingerprints\ of\ its\ build\ artifacts.=Upstream\ proje\, kendi yap\u0131land\u0131rma artefaktlar\u0131n\u0131n\ parmakizlerini\ kaydeder. +The\ downstream\ project\ records\ the\ fingerprints\ of\ the\ upstream\ jar\ files\ it\ uses.=Downstream\ proje,\ upstream\ projeden\ kulland\u0131\u011f\u0131\ jar\'lar\u0131n\ parmakizini\ kaydeder. This\ allows\ Jenkins\ to\ correlate\ two\ projects.=Bu,\ Jenkins\'a\ iki\ projeyi\ kar\u015f\u0131l\u0131kl\u0131\ ili\u015fkilendirme\ yetene\u011fini\ verir. diff --git a/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_zh_TW.properties b/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_zh_TW.properties index 1f690fe28c..2fcffa4ddb 100644 --- a/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_zh_TW.properties +++ b/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_zh_TW.properties @@ -27,6 +27,6 @@ body=\ \u9019\u500b\u529f\u80fd\u662f\u7d93\u7531\u6a94\u6848\u6307\u7d0b\u529f\u80fd\u6240\u7522\u751f\u7684\u8a18\u9304\u4f86\u9054\u6210\u3002 For\ this\ feature\ to\ work,\ the\ following\ conditions\ need\ to\ be\ met\:=\u7b26\u5408\u4e0b\u5217\u689d\u4ef6\u624d\u80fd\u4f7f\u7528\u9019\u500b\u529f\u80fd: -The\ upstream\ project\ records\ the\ fingerprints\ of\ its\ build\ artifacts=\u4e0a\u6e38\u5c08\u6848\u8981\u8a18\u9304\u5efa\u7f6e\u6210\u54c1\u7684\u6307\u7d0b -The\ downstream\ project\ records\ the\ fingerprints\ of\ the\ upstream\ files\ it\ uses=\u4e0b\u6e38\u5c08\u6848\u8981\u8a18\u9304\u7528\u5230\u7684\u4e0a\u6e38\u6a94\u6848\u6307\u7d0b +The\ upstream\ project\ records\ the\ fingerprints\ of\ its\ build\ artifacts.=\u4e0a\u6e38\u5c08\u6848\u8981\u8a18\u9304\u5efa\u7f6e\u6210\u54c1\u7684\u6307\u7d0b. +The\ downstream\ project\ records\ the\ fingerprints\ of\ the\ upstream\ files\ it\ uses.=\u4e0b\u6e38\u5c08\u6848\u8981\u8a18\u9304\u7528\u5230\u7684\u4e0a\u6e38\u6a94\u6848\u6307\u7d0b. This\ allows\ Jenkins\ to\ correlate\ two\ projects.=\u5982\u6b64\u4e00\u4f86 Jenkins \u5c31\u80fd\u81ea\u52d5\u95dc\u806f\u9019\u5169\u500b\u5c08\u6848\u3002 -- GitLab From 67c19e899030442cad8baa6956287c6c8ce26017 Mon Sep 17 00:00:00 2001 From: Josh Soref Date: Tue, 11 Dec 2018 15:17:14 -0500 Subject: [PATCH 012/476] Rewriting old data monitor text --- .../OldDataMonitor/manage.properties | 31 +++++++------ .../OldDataMonitor/manage_ar.properties | 4 -- .../OldDataMonitor/manage_bg.properties | 46 ------------------- .../OldDataMonitor/manage_da.properties | 22 --------- .../OldDataMonitor/manage_de.properties | 26 ----------- .../OldDataMonitor/manage_es.properties | 20 -------- .../OldDataMonitor/manage_fi.properties | 3 -- .../OldDataMonitor/manage_fr.properties | 4 -- .../OldDataMonitor/manage_it.properties | 30 ------------ .../OldDataMonitor/manage_ja.properties | 21 --------- .../OldDataMonitor/manage_nl.properties | 1 - .../OldDataMonitor/manage_pt.properties | 18 -------- .../OldDataMonitor/manage_pt_BR.properties | 29 ------------ .../OldDataMonitor/manage_sr.properties | 5 -- .../OldDataMonitor/manage_zh_TW.properties | 21 --------- 15 files changed, 16 insertions(+), 265 deletions(-) diff --git a/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage.properties b/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage.properties index 8cd60fb9e4..7198c1165b 100644 --- a/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage.properties +++ b/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage.properties @@ -22,30 +22,31 @@ blurb.1=\ When there are changes in how data is stored on disk, Jenkins uses the following strategy: \ - data is migrated to the new structure when it is loaded, but the file is not resaved in the \ - new format. This allows for downgrading Jenkins if needed. However, it can also leave data \ - on disk in the old format indefinitely. The table below lists files containing such data, \ - and the Jenkins version(s) where the data structure was changed. + data is migrated to the new structure when it is loaded, but items/records are not resaved in \ + the new format. This allows for downgrading Jenkins if necessary. However, it can also leave \ + data on disk in the old format indefinitely. The table below lists items/records containing \ + such data, and the Jenkins version(s) where the data structure was changed. blurb.2=\ Sometimes errors occur while reading data (if a plugin adds some data and that plugin is \ later disabled, if migration code is not written for structure changes, or if Jenkins is \ downgraded after it has already written data not readable by the older version). \ These errors are logged, but the unreadable data is then skipped over, allowing Jenkins to \ - startup and function properly. + start up and function properly. blurb.3=\ - The form below may be used to resave these files in the current format. Doing so means a \ - downgrade to a Jenkins release older than the selected version will not be able to read the \ - data stored in the new format. Note that simply using Jenkins to create and configure jobs \ - and run builds can save data that may not be readable by older Jenkins releases, even when \ - this form is not used. Also if any unreadable data errors are reported in the right side \ - of the table above, note that this data will be lost when the file is resaved. + The form below may be used to update these items/records to the current format. Doing so means a \ + downgrade to a Jenkins release or plugin older than the selected version will not be able to \ + read the data stored in the new format. Note that simply using Jenkins to create and \ + configure jobs and run builds can save data that may not be readable by older Jenkins or \ + plugin versions, even when this form is not used. Also if any unreadable data errors are \ + reported in the right side of the table above, note that this data will be lost when the \ + item is resaved. blurb.4=\ Eventually the code supporting these data migrations may be removed. Compatibility will be \ - retained for at least 150 releases since the structure change. Versions older than this are \ - in bold above, and it is recommended to resave these files. + retained for at least 150 Jenkins releases after the structure change. Versions older than \ + this are listed above in bold, and it is recommended you resave these items/records. blurb.5=\ (downgrade as far back as the selected version may still be possible) blurb.6=\ - It is acceptable to leave unreadable data in these files, as Jenkins will safely ignore it. \ + It is ok to leave unreadable data in these items/records, as Jenkins will simply ignore it. \ To avoid the log messages at Jenkins startup you can permanently delete the unreadable data \ - by resaving these files using the button below. + by resaving these items/records using the button below the list. diff --git a/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_ar.properties b/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_ar.properties index ef8848abae..2c63664427 100644 --- a/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_ar.properties +++ b/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_ar.properties @@ -8,8 +8,4 @@ No\ old\ data\ was\ found.=\u0644\u0645 \u064A\u062A\u0645 \u0625\u064A\u062C\u0 Type=\u0627\u0644\u0646\u0648\u0639 Unreadable\ Data=\u0628\u064A\u0627\u0646\u0627\u062A \u063A\u064A\u0631 \u0645\u0642\u0631\u0648\u0621\u0629 Version=\u0631\u0642\u0645 \u0627\u0644\u0625\u0635\u062F\u0627\u0631 -blurb.1=\u0639\u0646\u062F \u062D\u062F\u0648\u062B \u062A\u063A\u064A\u064A\u0631 \u0628\u0628\u0646\u064A\u0629 \u062A\u062E\u0632\u064A\u0646 \u0627\u0644\u0645\u0639\u0644\u0648\u0645\u0627\u062A \u0639\u0644\u0649 \u0627\u0644\u0642\u0631\u0635\u060C \u064A\u0642\u0648\u0645 \u062C\u0646\u0643\u0646\u0632 \u0628\u0627\u062A\u0628\u0627\u0639 \u0627\u0644\u0627\u0633\u062A\u0631\u0627\u062A\u064A\u062C\u064A\u0629 \u0627\u0644\u062A\u0627\u0644\u064A\u0629: \u0627\u0644\u0645\u0639\u0644\u0648\u0645\u0627\u062A \u062A\u0631\u062D\u0644 \u0625\u0644\u0649 \u0627\u0644\u0628\u0646\u064A\u0629 \u0627\u0644\u062C\u062F\u064A\u062F\u0629 \u0639\u0646\u062F \u062A\u062D\u0645\u064A\u0644\u0647\u0627\u060C \u0648\u0644\u0643\u0646 \u0627\u0644\u0645\u0644\u0641\u0627\u062A \u0644\u0646 \u064A\u0639\u0627\u062F \u062D\u0641\u0638\u0647\u0627 \u0639\u0644\u0649 \u0634\u0643\u0644 \u0627\u0644\u0628\u0646\u064A\u0629 \u0627\u0644\u062C\u062F\u064A\u062F\u0629. \u0647\u0630\u0627 \u064A\u0633\u0645\u062D \u0628\u0625\u0639\u0627\u062F\u0629 \u0644\u062C\u0646\u0643\u0646\u0632 \u0628\u0627\u0644\u0639\u0648\u062F\u0629 \u0644\u0644\u0633\u0627\u0628\u0642 \u0639\u0646\u062F \u0627\u0644\u062D\u0627\u062C\u0629. \u0648\u0644\u0643\u0646\u0647\u0627 \u062A\u0628\u0642\u064A \u0639\u0644\u0649 \u0627\u0644\u0645\u0644\u0641\u0627\u062A \u0627\u0644\u0645\u062D\u062A\u0648\u064A\u0629 \u0639\u0644\u0649 \u0628\u064A\u0627\u0646\u0627\u062A \u0628\u0627\u0644\u0628\u0646\u064A\u0629 \u0627\u0644\u0642\u062F\u064A\u0645\u0629. \u0627\u0644\u062C\u062F\u0648\u0644 \u0628\u0627\u0644\u0623\u0633\u0641\u0644 \u064A\u0633\u0631\u062F \u0627\u0644\u0645\u0644\u0641\u0627\u062A \u0627\u0644\u0645\u062D\u062A\u0648\u064A\u0629 \u0639\u0644\u0649 \u062A\u0644\u0643 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A\u060C \u0631\u0642\u0645 \u0625\u0635\u062F\u0627\u0631 \u062C\u0646\u0643\u0646\u0632 \u0627\u0644\u0630\u064A \u062D\u062F\u062B \u0641\u064A\u0647 \u0627\u0644\u062A\u063A\u064A\u064A\u0631. blurb.2=\u0623\u062D\u064A\u0627\u0646\u0627\u064B \u062A\u062D\u062F\u062B \u0623\u062E\u0637\u0627\u0621 \u0639\u0646\u062F \u0642\u0631\u0627\u0621\u0629 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A (\u0639\u0646\u062F\u0645\u0627 \u062A\u0636\u064A\u0641 \u0625\u0636\u0627\u0641\u0629 \u062C\u0646\u0643\u0646\u0632 \u0628\u064A\u0627\u0646\u0627\u062A \u0648\u0644\u0627\u062D\u0642\u0627\u064B \u064A\u062A\u0645 \u062A\u0639\u0637\u064A\u0644 \u0627\u0644\u0625\u0636\u0627\u0641\u0629\u060C \u0625\u0630\u0627 \u0644\u0645 \u064A\u062A\u0645 \u0643\u062A\u0627\u0628\u0629 \u0646\u0635 \u0645\u0635\u062F\u0631\u064A \u0644\u062A\u0631\u062D\u064A\u0644 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0644\u0644\u0628\u0646\u064A\u0629 \u0627\u0644\u062C\u062F\u064A\u062F\u0629\u060C \u0623\u0648 \u0625\u0630\u0627 \u062A\u0645 \u0627\u0633\u062A\u0631\u062C\u0627\u0639 \u062C\u0646\u0643\u0646\u0632 \u0644\u0646\u0633\u062E\u0629 \u0633\u0627\u0628\u0642\u0629 \u0628\u0639\u062F \u0623\u0646 \u062A\u0645 \u062D\u0641\u0638 \u0628\u064A\u0627\u0646\u0627\u062A \u0644\u0646 \u062A\u0633\u062A\u0637\u064A\u0639 \u0627\u0644\u0646\u0633\u062E\u0629 \u0627\u0644\u0633\u0627\u0628\u0642\u0629 \u0642\u0631\u0627\u0621\u062A\u0647\u0627). \u0647\u0630\u0647 \u0627\u0644\u0623\u062E\u0637\u0627\u0621 \u064A\u062A\u0645 \u062A\u0633\u062C\u064A\u0644\u0647\u0627\u060C ,\u0648\u064A\u062A\u0645 \u062A\u062C\u0627\u0647\u0644 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u062A\u064A \u0644\u0627\u064A\u0645\u0643\u0646 \u0642\u0631\u0627\u0621\u062A\u0647\u0627\u060C \u0645\u0645\u0627 \u064A\u0633\u0645\u062D \u0644\u062C\u0646\u0643\u0646\u0632 \u0628\u0645\u062A\u0627\u0628\u0639\u0629 \u0627\u0644\u0639\u0645\u0644 \u0628\u0634\u0643\u0644 \u062C\u064A\u062F. -blurb.3=\u0627\u0644\u0646\u0645\u0648\u0630\u062C \u0628\u0627\u0644\u0623\u0633\u0641\u0644 \u064A\u0645\u0643\u0646 \u0627\u0633\u062A\u062E\u062F\u0627\u0645\u0647 \u0644\u0625\u0639\u0627\u062F\u0629 \u062D\u0641\u0638 \u0647\u0630\u0647 \u0627\u0644\u0645\u0644\u0641\u0627\u062A \u0628\u0627\u0644\u0628\u0646\u064A\u0629 \u0627\u0644\u062C\u062F\u064A\u062F\u0629. \u0628\u0647\u0630\u0647 \u0627\u0644\u0637\u0631\u064A\u0642\u0629 \u0644\u0646 \u064A\u0633\u062A\u0637\u064A\u0639 \u062C\u0646\u0643\u0646\u0632 \u0642\u0631\u0627\u0621\u0629 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0628\u0627\u0644\u0628\u0646\u064A\u0629 \u0627\u0644\u062C\u062F\u064A\u062F\u0629 \u0641\u064A \u062D\u0627\u0644 \u0627\u0633\u062A\u0631\u062C\u0627\u0639\u0647 \u0644\u0646\u0633\u062E\u0629 \u0633\u0627\u0628\u0642\u0629. \u0627\u0646\u062A\u0628\u0647 \u0623\u0646\u0647 \u0628\u0645\u062C\u0631\u062F \u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u062C\u0646\u0643\u0646\u0632 \u0644\u0644\u0628\u0646\u0627\u0621 \u0648\u0636\u0628\u0637 \u0627\u0644\u0628\u0646\u0627\u0621 \u064A\u0645\u0643\u0646 \u0623\u0646 \u064A\u0646\u062A\u062C \u0628\u062D\u0641\u0638 \u0628\u064A\u0627\u0646\u0627\u062A \u0644\u0627\u064A\u0645\u0643\u0646 \u0642\u0631\u0627\u0621\u062A\u0647\u0627 \u0641\u064A \u0627\u0644\u0646\u0633\u062E \u0627\u0644\u0633\u0627\u0628\u0642\u0629 \u0644\u062C\u0646\u0643\u0646\u0632. \u0648\u0641\u064A \u062D\u0627\u0644 \u062D\u062F\u0648\u062B \u0623\u064A \u062E\u0637\u0623 \u0648\u0637\u0628\u0639\u0647 \u0641\u064A \u0627\u0644\u062C\u062F\u0648\u0644 \u0628\u0627\u0644\u0623\u0639\u0644\u0649 \u0633\u064A\u062A\u0645 \u0645\u0633\u062D \u0647\u0630\u0647 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0639\u0646\u062F \u0625\u0639\u0627\u062F\u0629 \u062D\u0641\u0638 \u0627\u0644\u0645\u0644\u0641. -blurb.4=\u0628\u0634\u0643\u0644 \u062F\u0648\u0631\u064A \u064A\u062A\u0645 \u0625\u0632\u0627\u0644\u0629 \u0627\u0644\u0646\u0635 \u0627\u0644\u0645\u0635\u062F\u0631\u064A \u0644\u062F\u0639\u0645 \u062A\u0631\u062D\u064A\u0644 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A. \u0627\u0644\u062A\u0648\u0627\u0641\u0642\u064A\u0629 \u062A\u0628\u0642\u0649 \u062D\u062A\u0649 150 \u0625\u0635\u062F\u0627\u0631 \u0639\u0644\u0649 \u0627\u0644\u0623\u0642\u0644 \u0645\u0646\u0630 \u062A\u063A\u064A\u064A\u0631 \u0627\u0644\u0628\u0646\u064A\u0629. \u0627\u0644\u0625\u0635\u062F\u0627\u0631\u0627\u062A \u0627\u0644\u0623\u0642\u062F\u0645 \u0645\u0645\u064A\u0632\u0629 \u0628\u0627\u0644\u062E\u0637 \u0627\u0644\u0639\u0631\u064A\u0636 \u0628\u0627\u0644\u0623\u0639\u0644\u0649\u060C \u0648\u0645\u0646 \u0627\u0644\u0645\u0633\u062A\u062D\u0633\u0646 \u062D\u0641\u0638 \u0647\u0630\u0647 \u0627\u0644\u0645\u0644\u0641\u0627\u062A. -blurb.6=\u0645\u0646 \u0627\u0644\u0645\u0642\u0628\u0648\u0644 \u062A\u0631\u0643 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u063A\u064A\u0631 \u0645\u0642\u0631\u0648\u0621\u0629 \u0641\u064A \u0647\u0630\u0647 \u0627\u0644\u0645\u0644\u0641\u0627\u062A\u060C \u062D\u064A\u062B \u064A\u062A\u062C\u0627\u0647\u0644\u0647\u0627 \u062C\u0646\u0643\u0646\u0632 \u0628\u0634\u0643\u0644 \u0622\u0645\u0646. \u0644\u062A\u062C\u0646\u0628 \u0631\u0633\u0627\u0626\u0644 \u0627\u0644\u0633\u062C\u0644 \u0639\u0646\u062F \u0628\u062F\u0621 \u062A\u0634\u063A\u064A\u0644 \u062C\u0646\u0643\u0646\u0632 \u0628\u0625\u0645\u0643\u0627\u0646\u0643 \u062D\u0630\u0641 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u063A\u064A\u0631 \u0645\u0642\u0631\u0648\u0621\u0629 \u0628\u0634\u0643\u0644 \u0646\u0647\u0627\u0626\u064A \u0639\u0646 \u0637\u0631\u064A\u0642 \u0625\u0639\u0627\u062F\u0629 \u062D\u0641\u0638 \u0627\u0644\u0645\u0644\u0641\u0627\u062A \u0628\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0627\u0644\u0632\u0631 \u0628\u0627\u0644\u0623\u0633\u0641\u0644. diff --git a/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_bg.properties b/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_bg.properties index ab631fc123..d2d172a036 100644 --- a/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_bg.properties +++ b/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_bg.properties @@ -26,58 +26,12 @@ Name=\ # Eventually the code supporting these data migrations may be removed. Compatibility will be \ # retained for at least 150 releases since the structure change. Versions older than this are \ # in bold above, and it is recommended to resave these files. -blurb.4=\ - \u0421\u043b\u0435\u0434 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e \u0432\u0440\u0435\u043c\u0435 \u043a\u043e\u0434\u044a\u0442 \u0437\u0430 \u0442\u0435\u0437\u0438 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u043d\u0430 \u0434\u0430\u043d\u043d\u0438 \u0449\u0435 \u0431\u044a\u0434\u0435 \u0438\u0437\u0442\u0440\u0438\u0442.\ - \u0421\u044a\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0442\u0430 \u0449\u0435 \u0431\u044a\u0434\u0435 \u0437\u0430\u043f\u0430\u0437\u0435\u043d\u0430 \u0437\u0430 \u043f\u043e\u043d\u0435 150 \u0438\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u043b\u0435\u0434 \u043f\u0440\u043e\u043c\u044f\u043d\u0430\u0442\u0430 \u043f\u043e\ - \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u0442\u0430. \u0412\u0435\u0440\u0441\u0438\u0438\u0442\u0435, \u043f\u043e \u0440\u0430\u043d\u043d\u0438 \u043e\u0442 \u0442\u043e\u0432\u0430, \u0441\u0430 \u0432 \u043f\u043e\u043b\u0443\u0447\u0435\u0440\u043d\u043e. \u0417\u0430 \u043f\u0440\u0435\u043f\u043e\u0440\u044a\u0447\u0432\u0430\u043d\u0435 \u0435 \u0434\u0430\ - \u0437\u0430\u043f\u0438\u0448\u0438\u0442\u0435 \u0444\u0430\u0439\u043b\u043e\u0432\u0435\u0442\u0435 \u043d\u0430\u043d\u043e\u0432\u043e. Upgrade=\ \u041e\u0431\u043d\u043e\u0432\u044f\u0432\u0430\u043d\u0435 Manage\ Old\ Data=\ \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u0441\u0442\u0430\u0440\u0438\u0442\u0435 \u0434\u0430\u043d\u043d\u0438 Discard\ Unreadable\ Data=\ \u041e\u0442\u0445\u0432\u044a\u0440\u043b\u044f\u043d\u0435 \u043d\u0430 \u0434\u0430\u043d\u043d\u0438\u0442\u0435, \u043a\u043e\u0438\u0442\u043e \u043d\u0435 \u043c\u043e\u0433\u0430\u0442 \u0434\u0430 \u0441\u0435 \u043f\u0440\u043e\u0447\u0435\u0442\u0430\u0442 -# \ -# When there are changes in how data is stored on disk, Jenkins uses the following strategy: \ -# data is migrated to the new structure when it is loaded, but the file is not resaved in the \ -# new format. This allows for downgrading Jenkins if needed. However, it can also leave data \ -# on disk in the old format indefinitely. The table below lists files containing such data, \ -# and the Jenkins version(s) where the data structure was changed. -blurb.1=\ - \u041f\u0440\u0438 \u043f\u0440\u043e\u043c\u044f\u043d\u0430 \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u0442\u0430 \u043d\u0430 \u0444\u0430\u0439\u043b\u043e\u0432\u0435\u0442\u0435 Jenkins \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430 \u0441\u043b\u0435\u0434\u043d\u0430\u0442\u0430 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f:\ - \u0434\u0430\u043d\u043d\u0438\u0442\u0435 \u0441\u0435 \u043c\u0438\u0433\u0440\u0438\u0440\u0430\u0442 \u043a\u044a\u043c \u043d\u043e\u0432\u0430\u0442\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0440\u0438 \u0437\u0430\u0440\u0435\u0436\u0434\u0430\u043d\u0435\u0442\u043e \u043d\u0430 \u0444\u0430\u0439\u043b\u0430, \u043d\u043e \u0442\u043e\u0439\ - \u043e\u0441\u0442\u0430\u0432\u0430 \u0441\u044a\u0441 \u0441\u0442\u0430\u0440\u0430\u0442\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430. \u0422\u043e\u0432\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0432\u0430 \u0432\u0440\u044a\u0449\u0430\u043d\u0435 \u043a\u044a\u043c \u043f\u0440\u0435\u0434\u0438\u0448\u043d\u0430\u0442\u0430 \u0432\u0435\u0440\u0441\u0438\u044f \u043d\u0430\ - Jenkins, \u0430\u043a\u043e \u0441\u0435 \u043d\u0430\u043b\u0430\u0433\u0430. \u0422\u043e\u0432\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0432\u0430 \u0434\u0430\u043d\u043d\u0438\u0442\u0435 \u0434\u0430 \u043e\u0441\u0442\u0430\u043d\u0430\u0442 \u0432 \u0441\u0442\u0430\u0440\u0438\u044f \u0444\u043e\u0440\u043c\u0430\u0442 \u0437\u0430\ - \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u043d\u043e \u0434\u044a\u043b\u0433\u043e \u0432\u0440\u0435\u043c\u0435. \u0422\u0430\u0431\u043b\u0438\u0446\u0430\u0442\u0430 \u043f\u043e-\u0434\u043e\u043b\u0443 \u0441\u044a\u0434\u044a\u0440\u0436\u0430 \u0444\u0430\u0439\u043b\u043e\u0432\u0435\u0442\u0435 \u0441 \u0442\u0430\u043a\u0438\u0432\u0430 \u0434\u0430\u043d\u043d\u0438,\ - \u043a\u0430\u043a\u0442\u043e \u0438 \u0432\u0435\u0440\u0441\u0438\u044f\u0442\u0430 \u043d\u0430 Jenkins, \u043f\u0440\u0438 \u043a\u043e\u044f\u0442\u043e \u0435 \u0441\u043c\u0435\u043d\u0435\u043d \u0444\u043e\u0440\u043c\u0430\u0442\u044a\u0442 \u043d\u0430 \u0434\u0430\u043d\u043d\u0438\u0442\u0435. -# \ -# (downgrade as far back as the selected version may still be possible) -blurb.5=\ - (\u0432\u0440\u044a\u0449\u0430\u043d\u0435 \u043a\u044a\u043c \u043d\u0430\u0439-\u0441\u0442\u0430\u0440\u0430\u0442\u0430 \u0432\u0435\u0440\u0441\u0438\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u0435\u043d\u0430 \u043e\u0442 \u0438\u0437\u0431\u0440\u0430\u043d\u0430\u0442\u0430) -# \ -# The form below may be used to resave these files in the current format. Doing so means a \ -# downgrade to a Jenkins release older than the selected version will not be able to read the \ -# data stored in the new format. Note that simply using Jenkins to create and configure jobs \ -# and run builds can save data that may not be readable by older Jenkins releases, even when \ -# this form is not used. Also if any unreadable data errors are reported in the right side \ -# of the table above, note that this data will be lost when the file is resaved. -blurb.3=\ - \u0424\u043e\u0440\u043c\u0443\u043b\u044f\u0440\u044a\u0442 \u043f\u043e-\u0434\u043e\u043b\u0443 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0432\u0430 \u0434\u0430 \u043f\u0440\u0435\u0437\u0430\u043f\u0438\u0448\u0435\u0442\u0435 \u0442\u0435\u0437\u0438 \u0444\u0430\u0439\u043b\u043e\u0432\u0435 \u0432 \u043d\u043e\u0432\u0438\u044f \u0444\u043e\u0440\u043c\u0430\u0442.\ - \u0410\u043a\u043e \u043d\u0430\u043f\u0440\u0430\u0432\u0438\u0442\u0435 \u0442\u043e\u0432\u0430 \u0438 \u0432\u044a\u0440\u043d\u0435\u0442\u0435 Jenkins \u043a\u044a\u043c \u0432\u0435\u0440\u0441\u0438\u044f \u043f\u0440\u0435\u0434\u0438 \u0438\u0437\u0431\u0440\u0430\u043d\u0430\u0442\u0430, \u0434\u0430\u043d\u043d\u0438\u0442\u0435 \u043d\u044f\u043c\u0430\ - \u0434\u0430 \u0441\u0435 \u043f\u0440\u043e\u0447\u0435\u0442\u0430\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u043d\u043e. \u0414\u043e\u0440\u0438 \u0431\u0435\u0437 \u0434\u0430 \u043f\u043e\u043b\u0437\u0432\u0430\u0442\u0435 \u0442\u043e\u0437\u0438 \u0444\u043e\u0440\u043c\u0443\u043b\u044f\u0440 \u0435 \u0432\u044a\u0437\u043c\u043e\u0436\u043d\u043e \u043d\u0435\u0449\u043e\ - \u043f\u043e\u0434\u043e\u0431\u043d\u043e \u0434\u0430 \u0441\u0435 \u0441\u043b\u0443\u0447\u0438 \u2014 \u0430\u043a\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u044a\u0437\u0434\u0430\u0434\u0435\u0442\u0435 \u043d\u043e\u0432\u0438 \u0437\u0430\u0434\u0430\u043d\u0438\u044f, \u043f\u0440\u043e\u043c\u0435\u043d\u0438\u0442\u0435 \u0438\u043b\u0438\ - \u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u0442\u0435 \u0432\u0435\u0447\u0435 \u0441\u044a\u0449\u0435\u0441\u0442\u0432\u0443\u0432\u0430\u0449\u0438. \u0410\u043a\u043e \u0432 \u0434\u044f\u0441\u043d\u0430\u0442\u0430 \u0441\u0442\u0440\u0430\u043d\u0430 \u043d\u0430 \u0433\u043e\u0440\u043d\u0430\u0442\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0441\u0430\ - \u0434\u043e\u043a\u043b\u0430\u0434\u0432\u0430\u043d\u0438 \u0433\u0440\u0435\u0448\u043a\u0438 \u043f\u0440\u0438 \u0447\u0435\u0442\u0435\u043d\u0435 \u043d\u0430 \u0434\u0430\u043d\u043d\u0438, \u0434\u0430\u043d\u043d\u0438\u0442\u0435 \u0449\u0435 \u0431\u044a\u0434\u0430\u0442 \u0438\u0437\u0433\u0443\u0431\u0435\u043d\u0438, \u0430\u043a\u043e\ - \u043f\u0440\u0435\u0437\u0430\u043f\u0438\u0448\u0435\u0442\u0435 \u0444\u0430\u0439\u043b\u0430. -# \ -# It is acceptable to leave unreadable data in these files, as Jenkins will safely ignore it. \ -# To avoid the log messages at Jenkins startup you can permanently delete the unreadable data \ -# by resaving these files using the button below. -blurb.6=\ - \u041d\u0435 \u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0434\u0430 \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u0435 \u0434\u0430\u043d\u043d\u0438, \u043a\u043e\u0438\u0442\u043e \u043d\u0435 \u043c\u043e\u0433\u0430\u0442 \u0434\u0430 \u0441\u0435 \u043f\u0440\u043e\u0447\u0435\u0442\u0430\u0442 \u0432 \u0442\u0435\u0437\u0438 \u0444\u0430\u0439\u043b\u043e\u0432\u0435,\ - \u0437\u0430\u0449\u043e\u0442\u043e Jenkins \u0449\u0435 \u0433\u0438 \u043f\u0440\u0435\u0441\u043a\u043e\u0447\u0438. \u0410\u043a\u043e \u043d\u0435 \u0438\u0441\u043a\u0430\u0442\u0435 \u043f\u043e\u0432\u0435\u0447\u0435 \u0434\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0432\u0430\u0442\u0435 \u0442\u0435\u0437\u0438\ - \u0441\u044a\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u0430 \u0438\u0437\u0442\u0440\u0438\u0435\u0442\u0435 \u043d\u0435\u0447\u0435\u0442\u0438\u043c\u0438\u0442\u0435 \u0434\u0430\u043d\u043d\u0438 \u043a\u0430\u0442\u043e \u043f\u0440\u0435\u0437\u0430\u043f\u0438\u0448\u0438\u0442\u0435 \u0444\u0430\u0439\u043b\u043e\u0432\u0435\u0442\u0435 \u0441\ - \u0431\u0443\u0442\u043e\u043d\u0430 \u043e\u0442\u0434\u043e\u043b\u0443. Unreadable\ Data=\ \u0414\u0430\u043d\u043d\u0438, \u043a\u043e\u0438\u0442\u043e \u043d\u0435 \u043c\u043e\u0433\u0430\u0442 \u0434\u0430 \u0441\u0435 \u043f\u0440\u043e\u0447\u0435\u0442\u0430\u0442 No\ old\ data\ was\ found.=\ diff --git a/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_da.properties b/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_da.properties index 84edc8be83..cc8e7307af 100644 --- a/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_da.properties +++ b/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_da.properties @@ -29,32 +29,10 @@ og k\u00f8re videre (omend uden adgang til ul\u00e6selig data)). Error=Fejl Type=Type Unreadable\ Data=Ul\u00e6selig data -blurb.1=\ -N\u00e5r der er \u00e6ndringer i hvordan data bliver gemt p\u00e5 disk benytter Jenkins f\u00f8lgende strategi: \ -data bliver migreret til den nye struktur under indl\u00e6sning, men filen bliver ikke gemt/overskrevet \ -i det nye format. Dette tillader nedgradering af Jenkins om n\u00f8dvendigt. Men denne strategi kan ogs\u00e5 \ -efterlade data p\u00e5 disken i det gamle format p\u00e5 ubestemt tid. Tabellen herunder lister de filer der \ -indeholder s\u00e5dan data samt Jenkins versionen hvor data-strukturen blev \u00e6ndret. Resave\ data\ files\ with\ structure\ changes\ no\ newer\ than\ Jenkins=Gem datafilerne med strukturelle \u00e6ndringer ikke nyere end Jenkins No\ old\ data\ was\ found.=Ingen gamle data blev fundet -blurb.6=\ -Det er acceptabelt at gemme ul\u00e6selig data i disse filer, da Jenkins blot ignorerer dem. \ -For at undg\u00e5 logbeskeder under opstart af Jenkins kan du permanent slette ul\u00e6selig data \ -ved at gemme disse filer med nedenst\u00e5ende knap. Discard\ Unreadable\ Data=Smid ul\u00e6selig data v\u00e6k. -blurb.4=\ -P\u00e5 et tidspunkt vil koden der underst\u00f8tter disse gamle datastrukturer blive slettet, som led i kodeoprydning. \ -Kompatibilitet vil blive bibeholdt i mindst 150 versioner. Versioner \u00e6ldre end dette er vist i fed herover, \ -og det anbefales p\u00e5 det kraftigste at gemme disse filer i det nyeste format. Version=Version Upgrade=Opdater -blurb.5=(Nedgradering s\u00e5 langt tilbage som den valgte version er (m\u00e5ske) stadig muligt) -blurb.3=\ -Form''en herunder kan benyttes til at gemme disse filer i det korrekte format. At g\u00f8re dette \ -indeb\u00e6rer at hvis du efterf\u00f8lgende nedgraderer Jenkins til en version \u00e6ldre end den valgte version \ -vil denne \u00e6ldre version af Jenkins ikke l\u00e6ngere kunne l\u00e6se data''ene i det nyere format. \ -Bem\u00e6rk dog at daglig brug af Jenkins, s\u00e5som oprettelse og konfiguration af jobs snildt kan gemme \ -data i formater der ikke vil v\u00e6re l\u00e6selige af \u00e6ldre versioner af Jenkins. Bem\u00e6rk ogs\u00e5 \ -at ul\u00e6selig data vist i h\u00f8jre side af tabellen herover vil g\u00e5 tabt n\u00e5r du gemmer filen i det nye format. Name=Navn Manage\ Old\ Data=H\u00e5ndter Gamle Data diff --git a/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_de.properties b/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_de.properties index 80bca0260a..75c3c6c776 100644 --- a/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_de.properties +++ b/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_de.properties @@ -31,14 +31,6 @@ Unreadable\ Data=Nicht lesbare Daten Discard\ Unreadable\ Data=Nicht lesbare Daten entfernen Upgrade=Aktualisieren Version=Version -blurb.1=\ - Ändert sich die Struktur von Konfigurationsdateien, geht Jenkins folgendermaßen vor: \ - Dateien werden beim Einlesen in den Speicher in das neue Datenformat migriert, aber \ - nicht automatisch auf Festplatte zurückgeschrieben. Die Konfigurationsdateien bleiben also \ - unverändert. Dies ermöglicht bei Problemen ein Jenkins-Downgrade zu einer früheren \ - Version. Auf der anderen Seite können dadurch Dateien endlos in längst veralteten \ - Formaten verbleiben. Die folgende Tabelle zeigt Dateien, die veraltete Strukturen verwenden, \ - sowie die Jenkins-Version(en), in denen die Datenstruktur verändert wurde. blurb.2=\ Beim Einlesen von Konfigurationsdateien können Fehler auftreten, z.B. wenn ein Plugin \ Daten hinzufügt und später deaktiviert wird, wenn kein Migrationscode für Strukturänderungen \ @@ -46,21 +38,3 @@ blurb.2=\ Version bereits Dateien mit einer neuen Struktur geschrieben hatte. Diese Fehler werden beim \ Hochfahren von Jenkins zwar protokolliert, die nicht-lesbaren Daten werden aber einfach \ übersprungen, damit Jenkins trotzdem starten und arbeiten kann. -blurb.3=\ - Mit der untenstehenden Funktion können Sie diese Datein im aktuellen Format neu abspeichern. \ - Damit entfällt die Möglichzeit, auf eine ältere als die ausgewählte Jenkins-Version zurückzukehren. \ - Auch wenn Sie Konfigurationen bestehender Elemente ändern, werden diese Daten im neuen \ - Format gespeichert, was ein späteres Downgrade ausschließt. Nicht-lesbare Daten, die in der \ - Tabelle rechts dargestellt sind, werden bei der Aktualisierung dauerhaft entfernt. -blurb.4=\ - Langfristig wird Migrationscode zum Lesen veralteter Datenformate auch wieder entfernt werden. \ - Die Kompatibilität wird mindestens 150 Releases nach Änderung des Datenformates gewährleistet. \ - Versionen, die noch älter sind, werden fett dargestellt. Es wird emfohlen, diese Dateien neu \ - abzuspeichern. -blurb.5=\ - (ein Downgrade bis zur ausgewählten Version könnte immer noch möglich sein) -blurb.6=\ - Nicht-lesbare Daten stellen kein Problem dar, da Jenkins sie einfach ignoriert. \ - Um jedoch lange Protokolle mit zahlreichen Warnungen während des Hochfahrens von Jenkins zu \ - vermeiden, können Sie nicht-lesbare Daten dauerhaft entfernen, indem Sie diese über die \ - untenstehende Funktion neu abspeichern lassen. \ No newline at end of file diff --git a/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_es.properties b/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_es.properties index 61d2c09641..27a05769db 100644 --- a/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_es.properties +++ b/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_es.properties @@ -20,32 +20,12 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -blurb.1=\ - Cuando se producen cambios en la forma de almacenar datos en disco, Jenkins utiliza la siguiente estrategia: \ - los datos son migrados a la nueva estructura cuando son cargados, pero el fichero de datos no se salva con \ - el nuevo formato. Esto facilita el poder degradar Jenkins a la versión antigua. La tabla de abajo muestra los \ - ficheros que contienen estos datos y la versión de Jenkins a partir de la cual la estructura ha cambiado. blurb.2=\ Algunas veces se producen errores mientras se leen datos, por ejemplo cuando un plugin añade \ datos y después se desactiva, o cuando no hay código que actualice los datos cuando cambia la \ estructura, o cuando Jenkins es degradado a una versión anterior. \ Jenkins avisa de todos estos errores y no carga los datos, lo que le permite arrancar y \ funcionar adecuadamente. -blurb.3=\ - El formulario de abajo se puede usar para decirle a Jenkins que salve los datos en el formato \ - actual, lo que implica que Jenkins no se podrá degradar a una versión anterior. Si se listaran \ - errores de datos ilegibles en la tabla, esos datos no serían guardados cuando el fichero se guarde \ - con el nuevo formato. -blurb.4=\ - El código que soporta la migración de datos podrá ser borrado eventualmente. La compatibilidad \ - será mantenida durante al menos 150 versiones desde que la estructura cambie. Las versiones \ - anteriores estan en negrilla, y se recomienda salvar nuevamente estos ficheros. -blurb.5=\ - (será posible degradar Jenkins hasta la version seleccionada). -blurb.6=\ - Es posible dejar datos ilegibles en estos ficheros porque Jenkins los ignorará. Para evitar \ - mensajes de error cuando Jenkins arranque, puedes borrar estos datos permanentemente pulsando \ - el botón de abajo. Manage\ Old\ Data=Gestión de datos antiguos Type=Tipo Name=Nombre diff --git a/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_fi.properties b/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_fi.properties index 2d1a819b3f..5c17587bf1 100644 --- a/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_fi.properties +++ b/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_fi.properties @@ -25,7 +25,4 @@ Name=Nimi No\ old\ data\ was\ found.=Vanhassa muodossa talletettua tietoa ei l\u00F6ytynyt. Type=Tyyppi Version=Versio -blurb.1=Kun levylle kirjoitettava tieto muuttuu, Jenkins tekee sen seuraavasti: tiedot siirret\u00E4\u00E4n uuteen muotoon luettaessa levylt\u00E4, mutta tietoja ei tallenneta uudessa muodossa. T\u00E4m\u00E4 tekee mahdolliseksi palata vanhaan Jenkinsin versioon jos tarve tulee. T\u00E4m\u00E4n takia tiedot my\u00F6s j\u00E4\u00E4v\u00E4t levylle vanhaan muotoon kunnes ne k\u00E4yd\u00E4\u00E4n erikseen muuttamassa. Allaoleva taulukko luettelee tiedostot, joissa on vanhaa tietoa ja miss\u00E4 Jenkinsin versiossa tietorakenne muuttui. blurb.2=Joskus tietoja luettaessa tapahtuu virheit\u00E4 (esim. jos joku laajennus on lis\u00E4nyt tietoja ja t\u00E4m\u00E4 laajennus on my\u00F6hemmin k\u00E4\u00E4nnetty pois p\u00E4\u00E4lt\u00E4 tai Jenkins on vaihdettu vanhempaan versioon sen j\u00E4lkeen kun se on kirjoittanut tietoja levylle muotoon, jota vanhempi versio ei osaa viel\u00E4 lukea. Jotta Jenkins silti k\u00E4ynnistyisi ja toimisi kunnolla, n\u00E4m\u00E4 virheet kirjoitetaan lokiiin ja sitten hyp\u00E4t\u00E4\u00E4n niiden tietojen yli, joita ei pystyt\u00E4 lukemaan. -blurb.3=Allaolevalla lomakkeella voidaan tallentaa n\u00E4m\u00E4 tiedostot nykyiseen muotoon. N\u00E4it\u00E4 tietoja ei pystyt\u00E4 lukemaan jos Jenkins vaihdetaan vanhempaan versioon. Huomaa, ett\u00E4 jo pelk\u00E4st\u00E4\u00E4n uusien t\u00F6iden luominen, olemassaolevien t\u00F6iden muokkaus tai uusien k\u00E4\u00E4nn\u00F6sten ajaminen saattaa tallettaa tietoja muodossa, jota vanhemmat Jenkinsin versiot eiv\u00E4t pysty lukemaan (vaikkei t\u00E4t\u00E4 lomaketta olisikaan k\u00E4ytetty.) Huomaa my\u00F6s, ett\u00E4 jos taulun oikeassa reunassa on kerrottu lukuvirheist\u00E4, kyseiset tiedot katoavat kun tiedosto tallennetaan. -blurb.4=Jossain vaiheessa tietoja uuteen muotoon siirt\u00E4v\u00E4 koodi poistetaan. Yhteensopivuutta yll\u00E4pidet\u00E4\u00E4n ainakin 150 versiota tietorakenteen muuttamisen j\u00E4lkeen. T\u00E4t\u00E4 vanhemmat versiot on yll\u00E4 esitetty lihavoituna ja n\u00E4iden tiedostojen tallentaminen on suositeltavaa. diff --git a/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_fr.properties b/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_fr.properties index a29bc218a9..8a48f02141 100644 --- a/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_fr.properties +++ b/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_fr.properties @@ -29,8 +29,4 @@ Type=Type Unreadable\ Data=Donn\u00E9es illisibles Upgrade=Mettre \u00E0 jour Version=Version -blurb.1=Quand il y a des changements dans la fa\u00E7on dont les donn\u00E9es sont stock\u00E9es sur le disque, Jenkins utilise la strat\u00E9gie suivante : les donn\u00E9es sont traduites dans le nouveau format lorsqu''elles sont charg\u00E9es, mais le fichier n''est pas sauvegard\u00E9 dans le nouveau format. Cela permet de r\u00E9trograder la version de Jenkins si besoin. Cependant, les donn\u00E9es peuvent \u00EAtre conserv\u00E9es dans l''ancien format ind\u00E9finiment. Le tableau ci-dessous affiche les fichiers concern\u00E9s, et la version de Jenkins \u00E0 partir de laquelle le format a chang\u00E9. blurb.2=Quelques fois, des erreurs surviennent \u00E0 lecture des donn\u00E9es (si un plugin ajoute des donn\u00E9es et qu''il est ensuite d\u00E9sactiv\u00E9, si le code de traduction des donn\u00E9es n''est pas \u00E9crit, ou si Jenkins est r\u00E9trograd\u00E9 apr\u00E8s qu''il ait \u00E9crit des donn\u00E9es non lisibles par l''ancienne version). Ces erreurs sont trac\u00E9es, mais les donn\u00E9es illisibles ne sont pas prises en compte, permettant le d\u00E9marrage et le fonctionnement normal de Jenkins. -blurb.3=Le formulaire suivant peut \u00EAtre utilis\u00E9 pour traduire ces fichiers dans le format courant. Cela implique qu''une r\u00E9trogradation de Jenkins \u00E0 une version ant\u00E9rieure ne sera pas capable de lire les donn\u00E9es dans ce nouveau format. Notez que le simple fait d''utiliser Jenkins pour de nouveaux jobs et constructions g\u00E9n\u00E9rera des fichiers qui ne seront pas lisibles par d''anciennes versions de format, m\u00EAme si ce formulaire n''est pas utilis\u00E9. De plus, si des erreurs de lecture sont affich\u00E9es dans la partie droite du tableau, notez que ces donn\u00E9es seront perdues sir le fichier est traduit. -blurb.4=Le code supportant ces traductions de donn\u00E9es peut \u00EAtre \u00E9ventuellement supprim\u00E9. La compatibilit\u00E9 sera maintenue pour au moins 150 versions apr\u00E8s le changement de format. Les version plus anciennes sont indiqu\u00E9es en gras ci-dessus, et il est recommand\u00E9 de traduire ces fichiers. -blurb.6=Il est possible de laisser les donn\u00E9es illisibles dans ces fichiers, car Jenkins les ignorera. Pour \u00E9viter les messages de traces au d\u00E9marrage de Jenkins, vous pouvez supprimer de fa\u00E7on d\u00E9ifnitivement les donn\u00E9es illisibles en traduisant les fichiers en utilisant le bouton ci-dessous. diff --git a/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_it.properties b/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_it.properties index a92c6c8caf..f472c5839e 100644 --- a/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_it.properties +++ b/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_it.properties @@ -1,11 +1,3 @@ -blurb.1=\ - Quando vi sono dei cambiamenti nel modo in cui i dati sono salvati su disco, Jenkins \ - utilizza la seguente strategia: i dati sono migrati alla loro nuova struttura quando \ - vengono caricati, ma il file non è salvato nuovamente nel nuovo formato. Ciò consente \ - di effettuare il downgrade di Jenkins se necessario. Tuttavia, ciò può anche lasciare \ - dei dati su disco nel vecchio formato indefinitamente. La tabella sottostante elenca \ - i file che contengono tali dati e le versioni di Jenkins in cui è stata modificata la \ - struttura dati. blurb.2=\ A volte si verificano errori durante la lettura dei dati (se un plugin aggiunge dei dati \ e tale plugin viene disabilitato in un secondo momento, se non è stato scritto codice per \ @@ -13,28 +5,6 @@ blurb.2=\ downgrade di Jenkins dopo che questo ha già scritto dati non leggibili dalla vecchia \ versione). Questi errori sono registrati, ma i dati non leggibili vengono saltati, \ consentendo a Jenkins di avviarsi e funzionare correttamente. -blurb.3=\ - Il modulo sottostante può essere utilizzato per salvare nuovamente questi file nel \ - formato corrente. Eseguire tale operazione comporterà che un downgrade a una versione di \ - Jenkins più vecchie della versione selezionata non sarà in grado di leggere i dati \ - memorizzati nel nuovo formato. Si noti che il semplice utilizzo di Jenkins per creare \ - e configurare processi ed eseguire build può salvare dati che potrebbero non essere \ - leggibili da versioni di Jenkins più vecchie, anche nel caso in cui non si utilizzi \ - questo modulo. Inoltre, se vi sono degli errori relativi a dati non leggibili nella \ - parte destra della tabella soprastante, si noti che tali dati andranno perduti quando il \ - file sarà salvato nuovamente. -blurb.4=\ - Prima o poi il codice per il supporto di queste migrazioni dati potrebbe essere rimosso. \ - La compatibilità sarà mantenuta per almeno 150 versioni a partire dalla modifica della \ - struttura. Le versioni più vecchie di queste sono evidenziate sopra in grassetto, e si \ - raccomanda di salvare nuovamente questi file. -blurb.5=\ - (potrebbe essere ancora possibile eseguire il downgrade fino alla versione selezionata) -blurb.6=\ - È accettabile lasciare dati non leggibili in tali file, in quanto Jenkins li ignorerà \ - in modo sicuro. Per evitare i messaggi di log all''avvio di Jenkins si possono eliminare \ - definitivamente i dati non leggibili salvando nuovamente questi file utilizzando il \ - pulsante sottostante. Manage\ Old\ Data=Gestisci dati vecchi Type=Tipo Name=Nome diff --git a/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_ja.properties b/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_ja.properties index 8b1bf4a49b..1d8dedfcce 100644 --- a/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_ja.properties +++ b/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_ja.properties @@ -20,32 +20,11 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -blurb.1=\ - \u30c7\u30fc\u30bf\u306e\u4fdd\u5b58\u5f62\u5f0f\u306b\u5909\u66f4\u304c\u3042\u308b\u5834\u5408\u3001Jenkins\u306f\u6b21\u306e\u51e6\u7406\u3092\u884c\u3044\u307e\u3059\u3002\ - \u30ed\u30fc\u30c9\u6642\u306b\u65b0\u3057\u3044\u5f62\u5f0f\u306b\u79fb\u884c\u3057\u307e\u3059\u304c\u3001\u65b0\u3057\u3044\u5f62\u5f0f\u3067\u306f\u4fdd\u5b58\u3057\u307e\u305b\u3093\u3002\ - \u3053\u308c\u306f\u3001\u5fc5\u8981\u304c\u3042\u308c\u3070Jenkins\u3092\u30c0\u30a6\u30f3\u30b0\u30ec\u30fc\u30c9\u3067\u304d\u308b\u3088\u3046\u306b\u3059\u308b\u305f\u3081\u3067\u3059\u304c\u3001\ - \u3044\u3064\u307e\u3067\u3082\u30c7\u30a3\u30b9\u30af\u4e0a\u306b\u53e4\u3044\u5f62\u5f0f\u3067\u30c7\u30fc\u30bf\u3092\u6b8b\u3057\u305f\u307e\u307e\u306b\u3057\u3066\u3057\u307e\u3044\u307e\u3059\u3002\ - \u6b21\u306e\u8868\u306b\u306f\u3001\u305d\u306e\u3088\u3046\u306a\u30c7\u30fc\u30bf\u3092\u542b\u3080\u30d5\u30a1\u30a4\u30eb\u3068\u3001\u30c7\u30fc\u30bf\u306e\u5f62\u5f0f\u304c\u5909\u66f4\u306b\u306a\u3063\u305fJenkins\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u304c\u8868\u793a\u3055\u308c\u3066\u3044\u307e\u3059\u3002 blurb.2=\ \u30c7\u30fc\u30bf\u30ed\u30fc\u30c9\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3059\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\ (\u30d7\u30e9\u30b0\u30a4\u30f3\u304c\u3042\u308b\u30c7\u30fc\u30bf\u3092\u8ffd\u52a0\u3057\u305f\u5f8c\u306b\u305d\u306e\u30d7\u30e9\u30b0\u30a4\u30f3\u304c\u7121\u52b9\u306b\u306a\u3063\u305f\u3001\u5f62\u5f0f\u5909\u66f4\u306b\u5bfe\u5fdc\u3059\u308b\u51e6\u7406\u304c\u5b9f\u88c5\u3055\u308c\u3066\u3044\u306a\u3044\u3001\ \u65e7\u30d0\u30fc\u30b8\u30e7\u30f3\u304c\u8aad\u3081\u306a\u3044\u30c7\u30fc\u30bf\u3092\u3059\u3067\u306b\u66f8\u304d\u8fbc\u3093\u3060\u5f8c\u306bJenkins\u3092\u30c0\u30a6\u30f3\u30b0\u30ec\u30fc\u30c9\u3057\u305f\u306a\u3069)\u3002\ Jenkins\u304c\u8d77\u52d5\u3057\u6b63\u5e38\u306b\u52d5\u4f5c\u3059\u308b\u3088\u3046\u306b\u3001\u3053\u308c\u3089\u306e\u30a8\u30e9\u30fc\u3092\u30ed\u30b0\u306b\u51fa\u529b\u3057\u3001\u8aad\u3081\u306a\u3044\u30c7\u30fc\u30bf\u3092\u30b9\u30ad\u30c3\u30d7\u3057\u307e\u3059\u3002 -blurb.3=\ - \u6b21\u306e\u30d5\u30a9\u30fc\u30e0\u3092\u5229\u7528\u3057\u3066\u3053\u308c\u3089\u306e\u53e4\u3044\u30d5\u30a1\u30a4\u30eb\u3092\u73fe\u5728\u306e\u5f62\u5f0f\u3067\u518d\u4fdd\u5b58\u3057\u307e\u3059\u3002\ - \u518d\u4fdd\u5b58\u3059\u308b\u3068\u3001\u9078\u629e\u3057\u305f\u30d0\u30fc\u30b8\u30e7\u30f3\u3088\u308a\u53e4\u3044\u3001\u65b0\u3057\u3044\u5f62\u5f0f\u3067\u4fdd\u5b58\u3055\u308c\u305f\u30c7\u30fc\u30bf\u3092\u8aad\u3081\u306a\u3044Jenkins\u306b\u30c0\u30a6\u30f3\u30b0\u30ec\u30fc\u30c9\u3059\u308b\u3053\u3068\u306b\u306a\u308a\u307e\u3059\u3002 - \u3053\u306e\u30d5\u30a9\u30fc\u30e0\u3092\u4f7f\u7528\u3057\u306a\u304f\u3066\u3082\u3001Jenkins\u3092\u4f7f\u7528\u3057\u3066\u30b8\u30e7\u30d6\u306e\u4f5c\u6210\u3001\u8a2d\u5b9a\u304a\u3088\u3073\u5b9f\u884c\u3092\u884c\u3048\u3070\u3001 \ - \u53e4\u3044Jenkins\u3067\u306f\u8aad\u3081\u306a\u3044\u30c7\u30fc\u30bf\u3092\u4fdd\u5b58\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u308b\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u307e\u305f\u3001\u8aad\u3081\u306a\u3044\u30c7\u30fc\u30bf\u304c\u8868\u793a\u3055\u308c\u3066\u3082\u3001\ - \u30d5\u30a1\u30a4\u30eb\u3092\u518d\u4fdd\u5b58\u3059\u308b\u3068\u524a\u9664\u3055\u308c\u308b\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -blurb.4=\ - \u30c7\u30fc\u30bf\u79fb\u884c\u3092\u30b5\u30dd\u30fc\u30c8\u3059\u308b\u30b3\u30fc\u30c9\u306f\u3001\u3044\u3064\u304b\u524a\u9664\u3055\u308c\u307e\u3059\u3002\ - \u5f62\u5f0f\u306e\u5909\u66f4\u304c\u3042\u3063\u305f\u30ea\u30ea\u30fc\u30b9\u304b\u3089\u5c11\u306a\u304f\u3068\u3082150\u30ea\u30ea\u30fc\u30b9\u306b\u3064\u3044\u3066\u306f\u3001\u4e92\u63db\u6027\u306f\u4fdd\u8a3c\u3055\u308c\u307e\u3059\u3002\ - \u305d\u308c\u3088\u308a\u3082\u53e4\u3044\u30d0\u30fc\u30b8\u30e7\u30f3\u306f\u30dc\u30fc\u30eb\u30c9\u3067\u8868\u793a\u3055\u308c\u307e\u3059\u3002\u305d\u308c\u3089\u306e\u30d5\u30a1\u30a4\u30eb\u306f\u518d\u4fdd\u5b58\u3059\u308b\u3088\u3046\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -blurb.5=\ - (\u9078\u629e\u3055\u308c\u305f\u30d0\u30fc\u30b8\u30e7\u30f3\u304c\u53ef\u80fd\u306a\u9650\u308a\u30c0\u30a6\u30f3\u30b0\u30ec\u30fc\u30c9\u3057\u307e\u3059) -blurb.6=\ - Jenkins\u306f\u8aad\u3081\u306a\u3044\u30c7\u30fc\u30bf\u3092\u7121\u8996\u3059\u308b\u306e\u3067\u3001\u305d\u306e\u307e\u307e\u306b\u3057\u3066\u304a\u304f\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002\ - Jenkins\u8d77\u52d5\u6642\u306b\u30ed\u30b0\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u51fa\u529b\u3057\u306a\u3044\u3088\u3046\u306b\u3001\u30dc\u30bf\u30f3\u3092\u62bc\u4e0b\u3057\u3066\u8aad\u3081\u306a\u3044\u30c7\u30fc\u30bf\u3092\u4e8b\u524d\u306b\u524a\u9664\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002 Manage\ Old\ Data=\u65e7\u30c7\u30fc\u30bf\u306e\u7ba1\u7406 Type=\u578b Name=\u540d\u524d diff --git a/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_nl.properties b/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_nl.properties index 76231c51b7..64c15c5c6d 100644 --- a/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_nl.properties +++ b/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_nl.properties @@ -4,5 +4,4 @@ Manage\ Old\ Data=Oude gegevens beheren Name=Naam No\ old\ data\ was\ found.=Er werden geen oude gegevens gevonden. Version=Versie -blurb.1=Bij veranderingen in de opslagwijze van gegevens op schijf gebruikt Jenkins de volgende aanpak: gegevens worden bij het laden naar de nieuwe structuur gemigreerd, maar het bestand wordt niet opnieuw in de nieuwe structuur opgeslagen. Op deze manier blijft ''downgraden'' van Jenkins mogelijk. Ook is het mogelijk gegevens onbeperkt lang in de oude structuur op te slaan. In de onderstaande tabel staan deze gegevens samen met de Jenkins-versie(s) waarvan de gegevensstructuur is gewijzigd. blurb.2=Soms ontstaan fouten bij het lezen van gegevens (als een plugin gegevens toevoegd waarna deze plugin uitgeschakeld wordt, als migragiecode niet geschreven is voor structuurwijzigingen of als Jenkins gedowngrade is nadat er gegevens zijn opgeslgen die onleesbaar zijn voor de oudere versie). Deze fouten worden gelogd, maar de onleesbare gegevens worden overgeslagen zodat Jenkins toch op kan starten en juist kan functioneren. diff --git a/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_pt.properties b/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_pt.properties index 9228d86864..7f3656053f 100644 --- a/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_pt.properties +++ b/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_pt.properties @@ -21,15 +21,9 @@ # THE SOFTWARE. Type=Tipo -blurb.6=\u00c9 aceit\u00e1vel deixar esses dados ileg\u00edveis nesses arquivos,o Jenkins vai ignor\u00e1-los. \ -Para evitar essas mensagens no log de startup do Jenkins, voc\u00ea pode remover esses dados regravando os arquivos usando o bot\u00e3o abaixo. Discard\ Unreadable\ Data=Descartar dados ileg\u00edveis -blurb.4=Eventualmente o c\u00f3digo que suporta essas migra\u00e7\u00f5es de dados pode ser removido. A compatibilidade ser\u00e1 \ -mantida por pelo menos 150 releases antes de uma mudan\u00e7a de estrutura. As vers\u00f5es mais antigas que essa \ -em negrito abaixo, \u00e9 recomendado que regrave esses arquivos. Version=Vers\u00e3o Upgrade=Upgrade -blurb.5=(downgrade assim que for poss\u00edvel com a vers\u00e3o selecionada) Resave\ data\ files\ with\ structure\ changes\ no\ newer\ than\ Jenkins=Regravar os arquivos de dados com a mudan\u00e7a de estrutura sem ser mais nova que o Jenkins blurb.2=Algumas vezes ocorre erro ao ler os dados (se o plugin adiciona algum dado que depois \u00e9 \ desativado, se o c\u00f3digo de migra\u00e7\u00e3o n\u00e3o estiver escrito com as mudan\u00e7as de estrutura, ou se o Jenkins sofreu \ @@ -38,19 +32,7 @@ Esses erros s\u00e3o logados,mas o dado ileg\u00edvel ser\u00e1 ignorado, permit funcionar corretamente. Error=Erro Unreadable\ Data=Dado ileg\u00edvel -blurb.1=Quando existirem mudan\u00e7as em como o dado \u00e9 armazenado no disco, o Jenkins usa a seguinte estrat\u00e9gia: \ -o dado \u00e9 migrado para a nova estrutura quando for carregado, mas o arquivo n\u00e3o \u00e9 regravado no novo formato. \ -Isso permite um downgrade do Jenkins se necess\u00e1rio, entretando pode tamb\u00e9m deixar dados no disco em formato \ -antigo por tempo indeterminado. A tabela abaixo lista os arquivos que cont\u00e9m esses dados, \ -as vers\u00f5es do Jenkins e quando a estrutura de dados foi alterada. - No\ old\ data\ was\ found.=Nenhum dado antigo foi encontrado. -blurb.3=O formul\u00e1rio abaixo pode ser usado para regravar os arquivos no formato atual. Fazer isso significa \ -fazer um downgrade para uma vers\u00e3o do Jenkins mais antiga do que a selecionada,ele n\u00e3o conseguir\u00e1 ler os dados \ -no novo formato. Note que simplesmemnte usando o Jenkins para criar e configurar jobs \ -e rodar builds pode gravar dados que n\u00e3o ser\u00e3o lidos por vers\u00f5es antigas do Jenkins, mesmo quando \ -esse formul\u00e1rio n\u00e3o for usado. Se algum dado ileg\u00edvel der erro no lado direito da tabela \ -abaixo, esse dado ser\u00e1 perdido quando o arquivo for regravado. Name=Nome Manage\ Old\ Data=Gerenciar dado antigo diff --git a/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_pt_BR.properties b/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_pt_BR.properties index 284fc1b089..c88f15197a 100644 --- a/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_pt_BR.properties +++ b/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_pt_BR.properties @@ -20,19 +20,6 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -# \ -# When there are changes in how data is stored on disk, Jenkins uses the following strategy: \ -# data is migrated to the new structure when it is loaded, but the file is not resaved in the \ -# new format. This allows for downgrading Jenkins if needed. However, it can also leave data \ -# on disk in the old format indefinitely. The table below lists files containing such data, \ -# and the Jenkins version(s) where the data structure was changed. -blurb.1=Quando existem mudan\u00E7as em como os dados s\u00E3o armazenados no disco, o Jenkins usa a seguinte estrat\u00E9gia: os dados s\u00E3o migrados para a nova estrutura quando o Jenkins \u00E9 carregado, mas o arquivo n\u00E3o \u00E9 salvo novamente no novo formato. Isto permite o downgrade do Jenkins se necess\u00E1rio. Entretanto, ele tamb\u00E9m pode ser deixado no disco no formato antigo. A tabela abaixo lista os arquivos contendo tais dados, e a(s) vers\u00E3o(\u00F5es) do Jenkins onde a estrutura de dados foi alterada. -# \ -# Sometimes errors occur while reading data (if a plugin adds some data and that plugin is \ -# later disabled, if migration code is not written for structure changes, or if Jenkins is \ -# downgraded after it has already written data not readable by the older version). \ -# These errors are logged, but the unreadable data is then skipped over, allowing Jenkins to \ -# startup and function properly. blurb.2=Algumas vezes ocorrem erros enquanto lendo dados (se um plugin adiciona algum dado e este plugin \u00E9 desativado posteriormente, se o c\u00F3digo de migra\u00E7\u00E3o n\u00E3o suporta mudan\u00E7as de estrutura, ou se for feito um downgrade do Jenkins ap\u00F3s ele j\u00E1 ter escrito dados n\u00E3o suportados por vers\u00F5es anteriores). Estes erros s\u00E3o registrados no log, mas os dados ileg\u00EDveis ignorados, permitindo que o Jenkins seja iniciado e funcione apropriadamente. # \ # The form below may be used to resave these files in the current format. Doing so means a \ @@ -41,22 +28,6 @@ blurb.2=Algumas vezes ocorrem erros enquanto lendo dados (se um plugin adiciona # and run builds can save data that may not be readable by older Jenkins releases, even when \ # this form is not used. Also if any unreadable data errors are reported in the right side \ # of the table above, note that this data will be lost when the file is resaved. -blurb.3=O formul\u00E1rio abaixo pode ser usado para salvar novamente estes arquivos no formato atual. Fazer isso significa que um downgrade para uma vers\u00E3o do Jenkins mais antiga do que a selecionada n\u00E3o ser\u00E1 capaz de ler os dados armazenados no novo formato. Note que simplesmente usando o Jenkins para criar e configurar jobs e executar builds pode salvar dados que n\u00E3o podem ser lidos por vers\u00F5es anteriores do Jenkins,mesmo quando este formul\u00E1rio n\u00E3o \u00E9 usado. Tamb\u00E9m se qualquer erro de dado ileg\u00EDvel for reportado no lado direito da tabela acima, estes dados ser\u00E3o perdidos quando o arquivo for salvo novamente. -# \ -# Eventually the code supporting these data migrations may be removed. Compatibility will be \ -# retained for at least 150 releases since the structure change. Versions older than this are \ -# in bold above, and it is recommended to resave these files. -blurb.4=Eventualmente o c\u00F3digo que suporta a migra\u00E7\u00E3o de dados pode ser removido. A compatibilidade ser\u00E1 mantida ao menos por 150 vers\u00F5es desde a mudan\u00E7a na estrutura. Vers\u00F5es mais antigas que esta ent\u00E3o em negrito, e \u00E9 recomendado salvar novamente estes arquivos. -# \ -# (downgrade as far back as the selected version may still be possible) -blurb.5=\ - (\u00c9 poss\u00edvel fazer o downgrade do Jenkins at\u00e9 a vers\u00e3o selecionada) -# \ -# It is acceptable to leave unreadable data in these files, as Jenkins will safely ignore it. \ -# To avoid the log messages at Jenkins startup you can permanently delete the unreadable data \ -# by resaving these files using the button below. -blurb.6=\u00C9 aceit\u00E1vel deixar dados ileg\u00EDveis nestes arquivos, porque o Jenkins ir\u00E1 ignor\u00E1-los. Para evitar mensagens de erro na inicializa\u00E7\u00E3o do Jenkins voc\u00EA pode excluir permanentemente os dados ileg\u00EDveis usando o bot\u00E3o abaixo. - Type=Tipo Discard\ Unreadable\ Data=Descartar dados ileg\u00EDveis Version=Vers\u00E3o diff --git a/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_sr.properties b/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_sr.properties index 501dad149a..a4d662d56a 100644 --- a/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_sr.properties +++ b/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_sr.properties @@ -1,18 +1,13 @@ # This file is under the MIT License by authors Manage\ Old\ Data=\u0423\u0440\u0435\u0434\u0438 \u0441\u0442\u0430\u0440\u0435 \u043F\u043E\u0434\u0430\u0442\u043A\u0435 -blurb.1=\u041A\u0430\u0434\u0430 \u0438\u043C\u0430 \u043F\u0440\u043E\u043C\u0435\u043D\u0435 \u0443 \u0442\u043E\u043C\u0435 \u043A\u0430\u043A\u043E \u0441y \u043F\u043E\u0434\u0430\u0446\u0438 \u0443\u0447\u0443\u0432\u0430\u043D\u0438 \u043D\u0430 \u0434\u0438\u0441\u043A\u0443, Jenkins \u043A\u043E\u0440\u0438\u0441\u0442\u0438 \u0441\u043B\u0435\u0434\u0435\u045B\u0443 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0458\u0443: \u043F\u043E\u0434\u0430\u0446\u0438 \u0441\u0443 \u043F\u0440\u0435\u043D\u0435\u0442\u0438 \u0443 \u043D\u043E\u0432\u0443 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0437 \u043A\u0430\u0434\u0430 \u0458\u0435 \u0443\u0447\u0438\u0442\u0430\u043D, \u0430\u043B\u0438 \u0434\u0430\u0442\u043E\u0442\u0435\u043A\u0430 \u043D\u0438\u0458\u0435 \u0441\u0430\u0447\u0443\u0432\u0430\u043D\u0430 \u0443 \u043D\u043E\u0432\u043E\u043C \u0444\u043E\u0440\u043C\u0430\u0442\u0443. \u0422\u043E \u0432\u0430\u043C \u043E\u043C\u043E\u0433\u0443\u045B\u0430\u0432\u0430 \u0434\u0430 \u0441\u0435 \u0432\u0440\u0430\u0442\u0438 \u0432\u0435\u0440\u0437\u0438\u0458\u0430 Jenkins \u0430\u043A\u043E \u0431\u0443\u0434\u0435 \u043F\u043E\u0442\u0440\u0435\u0431\u043D\u043E. \u041C\u0435\u0452\u0443\u0442\u0438\u043C, \u043E\u043D \u0442\u0430\u043A\u043E\u0452\u0435 \u043C\u043E\u0436\u0435 \u043F\u0438\u0441\u0430\u0442\u0438 \u043D\u043E\u0432\u0435 \u043F\u043E\u0434\u0430\u0442\u043A\u0435 \u043D\u0430 \u0434\u0438\u0441\u043A\u0443 \u0443 \u0441\u0442\u0430\u0440\u043E\u043C \u0444\u043E\u0440\u043C\u0430\u0442\u0443 \u043D\u0430 \u043D\u0435\u043E\u0434\u0440\u0435\u0452\u0435\u043D\u043E \u0432\u0440\u0435\u043C\u0435. \u0423 \u0442\u0430\u0431\u0435\u043B\u0438 \u0438\u0441\u043F\u043E\u0434 \u0458\u0435 \u0441\u043F\u0438\u0441\u0430\u043A \u0434\u0430\u0442\u043E\u0442\u0435\u043A\u0430 \u043A\u043E\u0458\u0438 \u0441\u0430\u0434\u0440\u0436\u0435 \u0442\u0430\u043A\u0432\u0435 \u043F\u043E\u0434\u0430\u0442\u043A\u0435, \u0438 \u0432\u0435\u0440\u0437\u0438\u0458\u0430 Jenkins, \u0433\u0434\u0435 \u0458\u0435 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0430 \u043F\u0440\u043E\u043C\u0435\u045A\u0435\u043D\u0430. blurb.2=\u041F\u043E\u043D\u0435\u043A\u0430\u0434 \u0441\u0435 \u043F\u043E\u0458\u0430\u0432\u0435 \u0433\u0440\u0435\u0448\u043A\u0435 \u043F\u0440\u0438\u043B\u0438\u043A\u043E\u043C \u0447\u0438\u0442\u0430\u045A\u0430 \u043F\u043E\u0434\u0430\u0442\u0430\u043A\u0430 (\u0430\u043A\u043E \u043D\u043F\u0440 \u043C\u043E\u0434\u0443\u043B\u0430 \u0431\u0443\u0434\u0435 \u043A\u0430\u0441\u043D\u0438\u0458\u0435 \u0438\u0441\u043A\u0459\u0443\u0447\u0435\u043D\u0430, \u043C\u0438\u0433\u0440\u0430\u0446\u0438\u043E\u043D\u0438 \u043A\u043E\u0434\u0435\u043A\u0441 \u043D\u0430\u043F\u0438\u0441\u0430\u043D \u043D\u0435 \u043F\u0440\u0435\u043F\u043E\u0437\u043D\u0430 \u043F\u0440\u043E\u043C\u0435\u043D\u0435 \u0443 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0438, \u0438\u043B\u0438 \u0430\u043A\u043E \u0458\u0435 Jenkins \u0432\u0440\u0430\u045B\u0435\u043D \u043F\u0440\u0435\u0442\u0445\u043E\u0434\u043D\u043E\u0458 \u0432\u0435\u0440\u0437\u0438\u0458\u0438 \u043D\u0430\u043A\u043E\u043D \u0448\u0442\u043E \u0431\u0438 \u043D\u0435\u043A\u0438 \u043F\u043E\u0434\u0430\u0446\u0438 \u043D\u0435\u0431\u0438 \u043C\u043E\u0433\u043B\u0438 \u0431\u0438\u0442\u0438 \u0443\u0447\u0438\u0442\u0430\u043D\u0438). \u041E\u0432\u0435 \u0433\u0440\u0435\u0448\u043A\u0435 \u0441\u0443 \u0441\u0430\u0447\u0443\u0432\u0430\u043D\u0435, \u0430\u043B\u0438 \u043D\u0435\u043E\u0447\u0438\u0442\u0459\u0438\u0432\u0438 \u043F\u043E\u0434\u0430\u0446\u0438 \u0441\u0435 \u043F\u0440\u0435\u0434\u0441\u043A\u0430\u0447\u0443. Type=\u0422\u0438\u043F Name=\u0418\u043C\u0435 Version=\u0412\u0435\u0440\u0437\u0438\u0458\u0430 -blurb.3=\u041F\u0440\u0430\u0442\u0435\u045B\u0438 \u0444\u043E\u0440\u043C\u0443\u043B\u0430\u0440 \u043C\u043E\u0436\u0435 \u0441\u0435 \u043A\u043E\u0440\u0438\u0441\u0442\u0438\u0442\u0438 \u0437\u0430 \u043F\u043E\u043D\u043E\u0432\u043E \u0441\u0430\u0447\u0443\u0432\u0430\u045A\u0435 \u0434\u0430\u0442\u043E\u0442\u0435\u043A\u0430 \u0443 \u0442\u0440\u0435\u043D\u0443\u0442\u043D\u043E\u043C \u0444\u043E\u0440\u043C\u0430\u0442\u0443, \u043A\u043E\u0458\u0438 \u043D\u0435\u043C\u043E\u0436\u0435 \u0431\u0438\u0442\u0438 \u0443\u0447\u0438\u0442\u0430\u043D \u0441\u0442\u0430\u0440\u0438\u0458\u0438\u043C \u0432\u0435\u0440\u0437\u0438\u0458\u0430\u043C\u0430 Jenkins. \u041D\u043E\u0440\u043C\u0430\u043B\u043D\u0430 \u0443\u043F\u043E\u0442\u0440\u0435\u0431\u0430 \u0442\u0430\u043A\u043E\u0452\u0435 \u043C\u043E\u0436\u0435 \u043F\u0440\u043E\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u043F\u043E\u0434\u0430\u0442\u043A\u0435 \u043A\u043E\u0458\u0435 \u043D\u0435\u043C\u043E\u0433\u0443 \u0431\u0438\u0442\u0438 \u0443\u0447\u0438\u0442\u0430\u043D\u0438 \u0441\u0442\u0430\u0440\u0438\u0458\u0438\u043C \u0432\u0435\u0440\u0437\u0438\u0458\u0430\u043C\u0430 Jenkins. \u0421\u0432\u0438 \u043D\u0435\u0443\u0441\u043F\u0435\u0448\u043D\u043E \u043F\u0440\u0435\u0431\u0430\u0447\u0435\u043D\u0438 \u043F\u043E\u0434\u0430\u0446\u0438 \u045B\u0435 \u0431\u0438\u0442\u0438 \u0438\u0437\u0431\u0440\u0438\u0441\u0430\u043D\u0438 \u043D\u0430\u043A\u043E\u043D \u0441\u0430\u0447\u0443\u0432\u0430\u045A\u0430. -blurb.4=\ \u041E\u0432\u0430 \u0441\u043F\u043E\u0441\u043E\u0431\u043D\u043E\u0441\u0442 \u043C\u043E\u0436\u0435 \u0435\u0432\u0435\u043D\u0442\u0443\u0430\u043B\u043D\u043E \u0431\u0438\u0442\u0438 \u0443\u043A\u043B\u045A\u0435\u043D\u0430, \u043C\u0435\u0452\u0443\u0442\u0438\u043C \u043A\u043E\u043C\u043F\u0430\u0442\u0438\u0431\u0438\u043B\u043D\u043E\u0441\u0442 \u045B\u0435 \u0431\u0438\u0442\u0438 \u043E\u0434\u0440\u0436\u0430\u043D \u0434\u043E \u043D\u0430\u0458\u043C\u0430\u045A\u0435 150 \u0438\u0437\u0434\u0430\u045A\u0430 \u043F\u043E\u0441\u043B\u0435 \u0438\u043A\u0430\u043A\u0432\u0438\u0445 \u043F\u0440\u043E\u043C\u0435\u043D\u0430. \u0421\u0442\u0430\u0440\u0438\u0458\u0435 \u0432\u0435\u0440\u0437\u0438\u0458\u0435 \u0441\u0443 \u043E\u0437\u043D\u0430\u0447\u0435\u043D\u0438 \u043C\u0430\u0441\u043D\u0438\u043C \u0441\u043B\u043E\u0432\u0438\u043C\u0430. \u041F\u0440\u0435\u043F\u043E\u0440\u0443\u0447\u0443\u0458\u0435 \u0441\u0435 \u0441\u0430\u0447\u0443\u0432\u0430\u045A\u0435 \u043E\u0432\u0438\u0445 \u0434\u0430\u0442\u043E\u0442\u0435\u043A\u0430. Resave\ data\ files\ with\ structure\ changes\ no\ newer\ than\ Jenkins=\u041F\u043E\u043D\u043E\u0432\u043E \u0441\u0430\u0447\u0443\u0432\u0430\u0458 \u0434\u0430\u0442\u043E\u0442\u0435\u043A\u0435 \u0441\u0430 \u043F\u0440\u043E\u043C\u0435\u043D\u0430\u043C\u0430 \u043A\u043E\u0458\u0435 \u043D\u0438\u0441\u0443 \u043D\u043E\u0432\u0438\u0458\u0430 \u043E\u0434 Jenkins -blurb.5=(\u0432\u0440\u0430\u045B\u0430\u045A\u0435 \u043D\u0430 \u043E\u0434\u0430\u0431\u0440\u0430\u043D\u0443 \u0432\u0435\u0440\u0437\u0438\u0458\u0443 \u045B\u0435 \u0431\u0438\u0442\u0438 \u043C\u043E\u0433\u0443\u045B\u0435) Upgrade=\u0410\u0436\u0443\u0440\u0438\u0440\u0430\u0458 No\ old\ data\ was\ found.=\u0417\u0430\u0441\u0442\u0430\u0440\u0435\u043B\u0438 \u043F\u043E\u0434\u0430\u0446\u0438 \u043D\u0438\u0441\u0443 \u043F\u0440\u043E\u043D\u0430\u0452\u0435\u043D\u0438. Unreadable\ Data=\u041D\u0435\u043E\u0447\u0438\u0442\u0459\u0438\u0432\u0438 \u043F\u043E\u0434\u0430\u0446\u0438 -blurb.6=\u041C\u043E\u0436\u0435 \u0441\u0435 \u043E\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u043D\u0435\u0432\u0430\u0436\u0435\u045B\u0435 \u043F\u043E\u0434\u0430\u0442\u043A\u0435 \u0443 \u043E\u0432\u0438\u043C \u0434\u0430\u0442\u043E\u0442\u0435\u043A\u0430\u043C\u0430, \u0437\u0430\u0448\u0442\u043E Jenkins \u0438\u0445 \u043D\u0435 \u0437\u0430\u0431\u0435\u043B\u0435\u0436\u0438. \u041F\u043E\u043D\u043E\u0432\u043E \u0441\u0430\u0447\u0443\u0432\u0430\u0458\u0442\u0435 \u043F\u043E\u0434\u0430\u0442\u043A\u0435 \u0434\u0430 \u0431\u0438\u0441\u0442\u0435 \u0438\u0437\u0431\u0435\u0433\u043B\u0438 \u0436\u0443\u0440\u043D\u0430\u043B \u043F\u043E\u0440\u0443\u043A\u0435 \u043D\u0430\u043A\u043E\u043D \u043F\u043E\u043A\u0440\u0435\u0442\u0430\u045A\u0430. Error=\u0413\u0440\u0435\u0448\u043A\u0430 Discard\ Unreadable\ Data=\u041E\u0434\u0431\u0430\u0446\u0438 \u043D\u0435\u0447\u0438\u0459\u0438\u0432\u0435 \u043F\u043E\u0434\u0430\u0442\u043A\u0435 diff --git a/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_zh_TW.properties b/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_zh_TW.properties index 709b731a3f..f6ad024f78 100644 --- a/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_zh_TW.properties +++ b/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_zh_TW.properties @@ -21,32 +21,11 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -blurb.1=\ - \u5132\u5b58\u8cc7\u6599\u7684\u65b9\u5f0f\u6539\u8b8a\u6642\uff0cJenkins \u4f7f\u7528\u4ee5\u4e0b\u7b56\u7565\u8655\u7406: \ - \u8cc7\u6599\u8f09\u5165\u6642\u6703\u88ab\u8f49\u79fb\u6210\u65b0\u7684\u7d50\u69cb\uff0c\u4f46\u4e0d\u6703\u4ee5\u65b0\u683c\u5f0f\u91cd\u65b0\u5132\u5b58\uff0c\u5fc5\u8981\u6642\u624d\u80fd\u5012\u56de\u820a\u7248 Jenkins\u3002\ - \u7136\u800c\uff0c\u8cc7\u6599\u5c31\u6709\u53ef\u80fd\u88ab\u6c38\u9060\u4ee5\u820a\u683c\u5f0f\u5132\u5b58\u5728\u78c1\u789f\u4e0a\u3002\ - \u4e0b\u8868\u5217\u51fa\u7684\u5c31\u662f\u9019\u985e\u8cc7\u6599\uff0c\u4ee5\u53ca Jenknins \u8cc7\u6599\u7d50\u69cb\u8b8a\u66f4\u7684\u7248\u672c\u3002 blurb.2=\ \u8b80\u53d6\u8cc7\u6599\u6642\u4e5f\u6709\u53ef\u80fd\u767c\u751f\u932f\u8aa4 \ (\u4f8b\u5982: \u67d0\u500b\u5916\u639b\u7a0b\u5f0f\u65b0\u589e\u8cc7\u6599\u9032\u4f86\uff0c\u4f46\u662f\u8a72\u5916\u639b\u7a0b\u5f0f\u5f8c\u4f86\u88ab\u95dc\u9589\u4e86; \ \u7d50\u69cb\u8b8a\u66f4\u6642\u6c92\u6709\u5beb\u597d\u5c0d\u61c9\u7684\u8f49\u79fb\u7a0b\u5f0f; \u6216 Jenkins \u88ab\u964d\u7248\u524d\u5df2\u7d93\u5beb\u5165\u4e86\u820a\u7248\u7121\u6cd5\u8b80\u53d6\u7684\u8cc7\u6599)\u3002\ \u9019\u4e9b\u932f\u8aa4\u90fd\u6703\u88ab\u8a18\u9304\u4e0b\u4f86\uff0c\u4f46\u662f\u8cc7\u6599\u6703\u76f4\u63a5\u88ab\u7565\u904e\uff0c\u8b93 Jenkins \u53ef\u4ee5\u7e7c\u7e8c\u555f\u52d5\u4e26\u9806\u5229\u904b\u4f5c\u3002 -blurb.3=\ - \u4e0b\u5217\u8868\u55ae\u53ef\u4ee5\u8b93\u60a8\u5c07\u6a94\u6848\u4ee5\u73fe\u884c\u683c\u5f0f\u91cd\u65b0\u5132\u5b58\u3002\ - \u4f46\u662f\u91cd\u65b0\u5132\u5b58\u5f8c\u6bd4\u6307\u5b9a\u7248\u672c\u9084\u8981\u820a\u7684 Jenkins \u5c07\u5c31\u6c92\u8fa6\u6cd5\u8b80\u9019\u4e9b\u8cc7\u6599\u4e86\u3002\ - \u6709\u4e00\u9ede\u8981\u6ce8\u610f\uff0c\u5c31\u7b97\u60a8\u90fd\u6c92\u7528\u5230\u9019\u4efd\u8868\u55ae\uff0c\u55ae\u7d14\u7684\u900f\u904e Jenkins \u5efa\u7acb\u6216\u662f\u8a2d\u5b9a\u5de5\u4f5c\u53ca\u57f7\u884c\u5efa\u7f6e\u4f5c\u696d\uff0c\ - \u4e5f\u90fd\u6709\u53ef\u80fd\u5132\u5b58\u5230\u820a\u7248 Jenkins \u7121\u6cd5\u8b80\u53d6\u7684\u8cc7\u6599\u3002\ - \u6b64\u5916\uff0c\u5728\u91cd\u65b0\u5132\u5b58\u6642\uff0c\u4e0a\u8868\u53f3\u5074\u5217\u51fa\u7684\u76f8\u95dc\u932f\u8aa4\u8cc7\u6599\u90fd\u6703\u907a\u5931\u3002 -blurb.4=\ - \u8cc7\u6599\u8f49\u79fb\u7684\u8655\u7406\u529f\u80fd\u65e5\u5f8c\u53ef\u80fd\u6703\u88ab\u79fb\u9664\uff0c\u4f46\u662f\u8cc7\u6599\u7d50\u69cb\u6539\u8b8a\u7684 150 \u7248\u4e4b\u5167\u6211\u5011\u6703\u76e1\u91cf\u78ba\u4fdd\u76f8\u5bb9\u6027\u3002\ - \u8d85\u904e\u9019\u500b\u7248\u672c\u7684\u8cc7\u6599\u6703\u4ee5\u7c97\u9ad4\u986f\u793a\uff0c\u5efa\u8b70\u60a8\u91cd\u65b0\u5132\u5b58\u9019\u4e9b\u6a94\u6848\u3002 -blurb.5=\ - (\u964d\u5230\u9078\u53d6\u7248\u672c\u5f8c\u7684\u7248\u672c\u61c9\u8a72\u4e0d\u6703\u6709\u4ec0\u9ebc\u554f\u984c) -blurb.6=\ - \u4fdd\u7559\u9019\u4e9b\u7121\u6cd5\u8b80\u53d6\u7684\u8cc7\u6599\u4e26\u4e0d\u6703\u6709\u4ec0\u9ebc\u5927\u7919\uff0cJenkins \u6703\u5b89\u5168\u7684\u5ffd\u7565\u5b83\u5011\u3002\ - \u4e0d\u904e\u70ba\u4e86\u907f\u514d\u6bcf\u6b21 Jenkins \u555f\u52d5\u6642\u90fd\u6703\u5217\u51fa\u76f8\u95dc\u7684\u8a0a\u606f\uff0c\u60a8\u53ef\u4ee5\u4f7f\u7528\u4e0b\u65b9\u7684\u6309\u9215\u91cd\u65b0\u5132\u5b58\u6a94\u6848\uff0c\ - \u6c38\u4e45\u522a\u9664\u90a3\u4e9b\u7121\u6cd5\u8b80\u53d6\u7684\u8cc7\u6599\u3002 - Manage\ Old\ Data=\u7ba1\u7406\u820a\u7248\u8cc7\u6599 Type=\u985e\u578b Name=\u540d\u7a31 -- GitLab From 064daa7f6f15d7dc80b145435085fd99d8d33386 Mon Sep 17 00:00:00 2001 From: Josh Soref Date: Tue, 11 Dec 2018 16:03:51 -0500 Subject: [PATCH 013/476] Scope upgrade text to upgrade case blurb.3 and blurb.4 are specifically talking about a table "below", but without this change, the table is actually above. With this change, the blurbs only appear when they are applicable. --- .../resources/hudson/diagnosis/OldDataMonitor/manage.jelly | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage.jelly b/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage.jelly index 56587c3092..e6eecb28f2 100644 --- a/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage.jelly +++ b/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage.jelly @@ -59,11 +59,12 @@ THE SOFTWARE. -

${%blurb.3}

-

${%blurb.4}

+

${%Old Data Format}

+

${%blurb.3}

+

${%blurb.4}

${%Resave data files with structure changes no newer than Jenkins} - - + + diff --git a/core/src/main/resources/hudson/model/StringParameterDefinition/config.jelly b/core/src/main/resources/hudson/model/StringParameterDefinition/config.jelly index 3b855c9288..f94d6472e0 100644 --- a/core/src/main/resources/hudson/model/StringParameterDefinition/config.jelly +++ b/core/src/main/resources/hudson/model/StringParameterDefinition/config.jelly @@ -35,7 +35,7 @@ THE SOFTWARE. - - + + diff --git a/war/src/main/webapp/help/parameter/trim.html b/core/src/main/resources/hudson/model/StringParameterDefinition/help-trim.html similarity index 100% rename from war/src/main/webapp/help/parameter/trim.html rename to core/src/main/resources/hudson/model/StringParameterDefinition/help-trim.html diff --git a/core/src/main/resources/hudson/model/View/configure.jelly b/core/src/main/resources/hudson/model/View/configure.jelly index ac3f9f91c5..5d1193b409 100644 --- a/core/src/main/resources/hudson/model/View/configure.jelly +++ b/core/src/main/resources/hudson/model/View/configure.jelly @@ -41,11 +41,11 @@ THE SOFTWARE. - - + + - - + + @@ -62,4 +62,4 @@ THE SOFTWARE. - \ No newline at end of file + diff --git a/core/src/main/resources/hudson/search/UserSearchProperty/config.jelly b/core/src/main/resources/hudson/search/UserSearchProperty/config.jelly index 65ba929dc5..7d596e09be 100644 --- a/core/src/main/resources/hudson/search/UserSearchProperty/config.jelly +++ b/core/src/main/resources/hudson/search/UserSearchProperty/config.jelly @@ -27,4 +27,4 @@ THE SOFTWARE. - \ No newline at end of file + diff --git a/core/src/main/resources/hudson/security/FullControlOnceLoggedInAuthorizationStrategy/config.jelly b/core/src/main/resources/hudson/security/FullControlOnceLoggedInAuthorizationStrategy/config.jelly index 0e627effbc..b78129798b 100644 --- a/core/src/main/resources/hudson/security/FullControlOnceLoggedInAuthorizationStrategy/config.jelly +++ b/core/src/main/resources/hudson/security/FullControlOnceLoggedInAuthorizationStrategy/config.jelly @@ -2,6 +2,6 @@ - + diff --git a/core/src/main/resources/hudson/security/GlobalSecurityConfiguration/index.groovy b/core/src/main/resources/hudson/security/GlobalSecurityConfiguration/index.groovy index d6da3df886..816fa3aa64 100644 --- a/core/src/main/resources/hudson/security/GlobalSecurityConfiguration/index.groovy +++ b/core/src/main/resources/hudson/security/GlobalSecurityConfiguration/index.groovy @@ -26,8 +26,8 @@ l.layout(norefresh:true, permission:app.ADMINISTER, title:my.displayName, csscla set("descriptor", my.descriptor); f.optionalBlock( field:"useSecurity", title:_("Enable security"), checked:app.useSecurity) { - f.entry (title:_("Disable remember me"), field: "disableRememberMe") { - f.checkbox() + f.entry() { + f.checkbox(title:_("Disable remember me"), field: "disableRememberMe") } f.entry(title:_("Access Control")) { diff --git a/core/src/main/resources/hudson/security/HudsonPrivateSecurityRealm/config.jelly b/core/src/main/resources/hudson/security/HudsonPrivateSecurityRealm/config.jelly index 05c9901b91..9757152168 100644 --- a/core/src/main/resources/hudson/security/HudsonPrivateSecurityRealm/config.jelly +++ b/core/src/main/resources/hudson/security/HudsonPrivateSecurityRealm/config.jelly @@ -26,7 +26,7 @@ THE SOFTWARE. - + diff --git a/core/src/main/resources/hudson/security/csrf/DefaultCrumbIssuer/config.jelly b/core/src/main/resources/hudson/security/csrf/DefaultCrumbIssuer/config.jelly index 573cc325c2..2eb45530d3 100644 --- a/core/src/main/resources/hudson/security/csrf/DefaultCrumbIssuer/config.jelly +++ b/core/src/main/resources/hudson/security/csrf/DefaultCrumbIssuer/config.jelly @@ -1,6 +1,6 @@ - + diff --git a/core/src/main/resources/hudson/slaves/SimpleScheduledRetentionStrategy/config.jelly b/core/src/main/resources/hudson/slaves/SimpleScheduledRetentionStrategy/config.jelly index 3ef03e52aa..ee477016e3 100644 --- a/core/src/main/resources/hudson/slaves/SimpleScheduledRetentionStrategy/config.jelly +++ b/core/src/main/resources/hudson/slaves/SimpleScheduledRetentionStrategy/config.jelly @@ -35,7 +35,7 @@ THE SOFTWARE. name="retentionStrategy.upTimeMins" value="${instance.upTimeMins}" checkMessage="${%Scheduled Uptime is mandatory and must be a number.}"/> - - + + diff --git a/core/src/main/resources/hudson/tasks/ArtifactArchiver/config.jelly b/core/src/main/resources/hudson/tasks/ArtifactArchiver/config.jelly index abb03fe4b9..dc2b541944 100644 --- a/core/src/main/resources/hudson/tasks/ArtifactArchiver/config.jelly +++ b/core/src/main/resources/hudson/tasks/ArtifactArchiver/config.jelly @@ -31,20 +31,20 @@ THE SOFTWARE. - - + + - - + + - + - - + + - - + + - \ No newline at end of file + diff --git a/core/src/main/resources/hudson/tasks/Maven/config.jelly b/core/src/main/resources/hudson/tasks/Maven/config.jelly index e2c26ad4e7..7653f18a03 100644 --- a/core/src/main/resources/hudson/tasks/Maven/config.jelly +++ b/core/src/main/resources/hudson/tasks/Maven/config.jelly @@ -47,11 +47,11 @@ THE SOFTWARE. - - + + - - + + diff --git a/core/src/main/resources/hudson/triggers/SCMTrigger/config.jelly b/core/src/main/resources/hudson/triggers/SCMTrigger/config.jelly index 5eeba93429..583269474b 100644 --- a/core/src/main/resources/hudson/triggers/SCMTrigger/config.jelly +++ b/core/src/main/resources/hudson/triggers/SCMTrigger/config.jelly @@ -27,8 +27,8 @@ THE SOFTWARE. - - + + diff --git a/core/src/main/resources/jenkins/model/DownloadSettings/config.groovy b/core/src/main/resources/jenkins/model/DownloadSettings/config.groovy index f766281945..e84d34ade1 100644 --- a/core/src/main/resources/jenkins/model/DownloadSettings/config.groovy +++ b/core/src/main/resources/jenkins/model/DownloadSettings/config.groovy @@ -3,7 +3,7 @@ package jenkins.security.DownloadSettings def f = namespace(lib.FormTagLib) f.section(title:_("Plugin Manager")) { - f.entry(field: "useBrowser") { - f.checkbox(title: _("Use browser for metadata download")) - } + f.entry() { + f.checkbox(field: "useBrowser", title: _("Use browser for metadata download")) + } } diff --git a/core/src/main/resources/jenkins/model/ProjectNamingStrategy/PatternProjectNamingStrategy/config.groovy b/core/src/main/resources/jenkins/model/ProjectNamingStrategy/PatternProjectNamingStrategy/config.groovy index 3bfaa168b2..fa0162a419 100644 --- a/core/src/main/resources/jenkins/model/ProjectNamingStrategy/PatternProjectNamingStrategy/config.groovy +++ b/core/src/main/resources/jenkins/model/ProjectNamingStrategy/PatternProjectNamingStrategy/config.groovy @@ -11,7 +11,6 @@ f.entry(title:_("description"), field:"description") { f.textbox() } -f.entry(title:_("forceExistingJobs"), field:"forceExistingJobs") { - f.checkbox(name:"forceExistingJobs") +f.entry() { + f.checkbox(title:_("forceExistingJobs"), field:"forceExistingJobs") } - diff --git a/core/src/main/resources/jenkins/security/apitoken/ApiTokenPropertyConfiguration/config.jelly b/core/src/main/resources/jenkins/security/apitoken/ApiTokenPropertyConfiguration/config.jelly index 1bff873855..9cdd15a83f 100644 --- a/core/src/main/resources/jenkins/security/apitoken/ApiTokenPropertyConfiguration/config.jelly +++ b/core/src/main/resources/jenkins/security/apitoken/ApiTokenPropertyConfiguration/config.jelly @@ -27,13 +27,13 @@ THE SOFTWARE. - + - + - + diff --git a/core/src/main/resources/jenkins/slaves/RemotingWorkDirSettings/config.jelly b/core/src/main/resources/jenkins/slaves/RemotingWorkDirSettings/config.jelly index 3c8fc13315..fa5f745ac1 100644 --- a/core/src/main/resources/jenkins/slaves/RemotingWorkDirSettings/config.jelly +++ b/core/src/main/resources/jenkins/slaves/RemotingWorkDirSettings/config.jelly @@ -24,8 +24,8 @@ THE SOFTWARE. - - + + @@ -33,7 +33,7 @@ THE SOFTWARE. - - + + diff --git a/test/src/test/java/hudson/model/ParametersTest.java b/test/src/test/java/hudson/model/ParametersTest.java index 9fcbd68aea..643ea32a9b 100644 --- a/test/src/test/java/hudson/model/ParametersTest.java +++ b/test/src/test/java/hudson/model/ParametersTest.java @@ -73,7 +73,7 @@ public class ParametersTest { System.out.println(o); HtmlCheckBoxInput booleanParameterInput = (HtmlCheckBoxInput) o; assertEquals(true, booleanParameterInput.isChecked()); - assertEquals("boolean", ((HtmlElement) DomNodeUtil.selectSingleNode(element, "td[@class='setting-name']")).getTextContent()); + assertEquals("boolean", ((HtmlElement) DomNodeUtil.selectSingleNode(element, "td[@class='setting-main']")).getTextContent()); element = DomNodeUtil.selectSingleNode(form, ".//tr[td/div/input/@value='choice']"); assertNotNull(element); -- GitLab From e4c928ceb939a228fe240e11b679f36b62da94e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20J=C4=85der?= Date: Sat, 25 May 2019 17:30:09 +0200 Subject: [PATCH 343/476] Switch translations for 2 labels in iconSize_pl.properties Initial translation mixed small (S) and medium (M) translations --- core/src/main/resources/lib/hudson/iconSize_pl.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/src/main/resources/lib/hudson/iconSize_pl.properties b/core/src/main/resources/lib/hudson/iconSize_pl.properties index 81752a2f10..55098a9a41 100644 --- a/core/src/main/resources/lib/hudson/iconSize_pl.properties +++ b/core/src/main/resources/lib/hudson/iconSize_pl.properties @@ -21,6 +21,6 @@ # THE SOFTWARE. Icon=Ikona -M=Ma\u0142a -S=\u015Arednia +S=Ma\u0142a +M=\u015Arednia L=Du\u017Ca -- GitLab From 43810e01f74139d73073c957120d36ddc525cd19 Mon Sep 17 00:00:00 2001 From: "R. Tyler Croy" Date: Sat, 25 May 2019 15:24:39 -0700 Subject: [PATCH 344/476] Use the sponsor button to link to our donation page --- .github/FUNDING.yml | 1 + 1 file changed, 1 insertion(+) create mode 100644 .github/FUNDING.yml diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000000..a7842e0f66 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1 @@ +custom: https://jenkins.io/donate/ -- GitLab From f3cb12ebe1bddb5357034d568ca6f026a2969b9b Mon Sep 17 00:00:00 2001 From: Josh Soref Date: Sat, 25 May 2019 22:35:34 -0400 Subject: [PATCH 345/476] [JENKINS-55787] remove accidentally resurrected localization file --- .../BooleanParameterDefinition/help-boolean-default_zh_CN.html | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 core/src/main/resources/hudson/model/BooleanParameterDefinition/help-boolean-default_zh_CN.html diff --git a/core/src/main/resources/hudson/model/BooleanParameterDefinition/help-boolean-default_zh_CN.html b/core/src/main/resources/hudson/model/BooleanParameterDefinition/help-boolean-default_zh_CN.html deleted file mode 100644 index e013875b37..0000000000 --- a/core/src/main/resources/hudson/model/BooleanParameterDefinition/help-boolean-default_zh_CN.html +++ /dev/null @@ -1,3 +0,0 @@ -
- 定义当å‰å‚数的默认值。 -
\ No newline at end of file -- GitLab From 6e81b50f5345d90823449a6daa6192d62f7b94b6 Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Sun, 26 May 2019 13:39:53 -0700 Subject: [PATCH 346/476] [maven-release-plugin] prepare release jenkins-2.179 --- cli/pom.xml | 2 +- core/pom.xml | 2 +- pom.xml | 4 ++-- test-jdk8/pom.xml | 2 +- test-pom/pom.xml | 2 +- test/pom.xml | 2 +- war/pom.xml | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/cli/pom.xml b/cli/pom.xml index b4e780844f..a749861db7 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -5,7 +5,7 @@ org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.179 cli diff --git a/core/pom.xml b/core/pom.xml index 19e6db082a..f8d2b8c361 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -29,7 +29,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.179 jenkins-core diff --git a/pom.xml b/pom.xml index f27a476356..0e5c8595ca 100644 --- a/pom.xml +++ b/pom.xml @@ -34,7 +34,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.179 pom Jenkins main module @@ -60,7 +60,7 @@ THE SOFTWARE. scm:git:git://github.com/jenkinsci/jenkins.git scm:git:ssh://git@github.com/jenkinsci/jenkins.git https://github.com/jenkinsci/jenkins - ${scmTag} + jenkins-2.179 diff --git a/test-jdk8/pom.xml b/test-jdk8/pom.xml index 70c4870837..154496c73b 100644 --- a/test-jdk8/pom.xml +++ b/test-jdk8/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-test-parent - ${revision}${changelist} + 2.179 ../test-pom diff --git a/test-pom/pom.xml b/test-pom/pom.xml index 36b18e666f..c02c939e4f 100644 --- a/test-pom/pom.xml +++ b/test-pom/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.179 jenkins-test-parent diff --git a/test/pom.xml b/test/pom.xml index 4c5abecc6f..47e70f0a3e 100644 --- a/test/pom.xml +++ b/test/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-test-parent - ${revision}${changelist} + 2.179 ../test-pom diff --git a/war/pom.xml b/war/pom.xml index 5bcfd78481..52f4313d4c 100644 --- a/war/pom.xml +++ b/war/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.179 jenkins-war -- GitLab From 25076933c7d58656db5abeb807aa83591e9bb144 Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Sun, 26 May 2019 13:41:00 -0700 Subject: [PATCH 347/476] [maven-release-plugin] prepare for next development iteration --- cli/pom.xml | 2 +- core/pom.xml | 2 +- pom.xml | 6 +++--- test-jdk8/pom.xml | 2 +- test-pom/pom.xml | 2 +- test/pom.xml | 2 +- war/pom.xml | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/cli/pom.xml b/cli/pom.xml index a749861db7..b4e780844f 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -5,7 +5,7 @@ org.jenkins-ci.main jenkins-parent - 2.179 + ${revision}${changelist} cli diff --git a/core/pom.xml b/core/pom.xml index f8d2b8c361..19e6db082a 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -29,7 +29,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.179 + ${revision}${changelist} jenkins-core diff --git a/pom.xml b/pom.xml index 0e5c8595ca..a7cd82138e 100644 --- a/pom.xml +++ b/pom.xml @@ -34,7 +34,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.179 + ${revision}${changelist} pom Jenkins main module @@ -60,7 +60,7 @@ THE SOFTWARE. scm:git:git://github.com/jenkinsci/jenkins.git scm:git:ssh://git@github.com/jenkinsci/jenkins.git https://github.com/jenkinsci/jenkins - jenkins-2.179 + ${scmTag} @@ -76,7 +76,7 @@ THE SOFTWARE. - 2.179 + 2.180 -SNAPSHOT - 3.30 + 3.29 3.4 -- GitLab From c54a3172d334b00281425a4daef6f2379e11b521 Mon Sep 17 00:00:00 2001 From: based2 Date: Wed, 29 May 2019 23:32:30 +0200 Subject: [PATCH 349/476] update maven-war-plugin from 3.0.0 to 3.2.3 https://maven.apache.org/plugins/maven-war-plugin/ --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a7cd82138e..b2b04b4eab 100644 --- a/pom.xml +++ b/pom.xml @@ -104,7 +104,7 @@ THE SOFTWARE. https://jenkins.io/changelog - 3.0.0 + 3.2.3 3.30 -- GitLab From 4a8558c392787fbda6b8ae750f33c01cd555e562 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20Gond=C5=BEa?= Date: Tue, 28 May 2019 18:17:11 +0200 Subject: [PATCH 350/476] [JENKINS-57713] Revert "Merge pull request #4005 from jeffret-b/remoting/3.30" This reverts commit 2a11ba6f261ce0b3f860bb28cb34520fe8c6e563, reversing changes made to 3eec7fdeb06bdb227e1fbf9172ecdfd31229667f. (cherry picked from commit a9c9412913d0487790f018f10368b0db97b79541) --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 84cce28921..3c84908ef6 100644 --- a/pom.xml +++ b/pom.xml @@ -107,7 +107,7 @@ THE SOFTWARE. 3.0.0 - 3.30 + 3.29 3.4 -- GitLab From 7d5e400341ca8f3069365766bfe60a59502eb264 Mon Sep 17 00:00:00 2001 From: Devin Nusbaum Date: Fri, 31 May 2019 16:53:47 -0400 Subject: [PATCH 351/476] [JENKINS-57805] Guard against exceptions thrown by implementations of Queue.Task.getAffinityKey --- core/src/main/java/hudson/model/LoadBalancer.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/hudson/model/LoadBalancer.java b/core/src/main/java/hudson/model/LoadBalancer.java index fca13b938c..d2016c3b7e 100644 --- a/core/src/main/java/hudson/model/LoadBalancer.java +++ b/core/src/main/java/hudson/model/LoadBalancer.java @@ -112,7 +112,14 @@ public abstract class LoadBalancer implements ExtensionPoint { private boolean assignGreedily(Mapping m, Task task, List> hashes, int i) { if (i==hashes.size()) return true; // fully assigned - String key = task.getAffinityKey() + (i>0 ? String.valueOf(i) : ""); + String key; + try { + key = task.getAffinityKey(); + } catch (RuntimeException e) { + // Default implementation of Queue.Task.getAffinityKey, we assume it doesn't fail. + key = task.getFullDisplayName(); + } + key += i > 0 ? String.valueOf(i) : ""; for (ExecutorChunk ec : hashes.get(i).list(key)) { // let's attempt this assignment -- GitLab From 3c6e2c040ae24c382772c6075562bb7e3a682172 Mon Sep 17 00:00:00 2001 From: Mustafa Ulu Date: Sun, 2 Jun 2019 01:05:28 +0300 Subject: [PATCH 352/476] Fix login link localization in loginLink_tr.properties MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The change in previous commit is wrong. I don't know what "Jc" means. Login means "GiriÅŸ yap" in Turkish. --- .../hudson/security/SecurityRealm/loginLink_tr.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/resources/hudson/security/SecurityRealm/loginLink_tr.properties b/core/src/main/resources/hudson/security/SecurityRealm/loginLink_tr.properties index 96ecbca073..010b855121 100644 --- a/core/src/main/resources/hudson/security/SecurityRealm/loginLink_tr.properties +++ b/core/src/main/resources/hudson/security/SecurityRealm/loginLink_tr.properties @@ -20,4 +20,4 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -login=Jc +login=giri\u015f yap -- GitLab From 9012e0ab054593d6dc68034d58b32049c13d633f Mon Sep 17 00:00:00 2001 From: Devin Nusbaum Date: Mon, 3 Jun 2019 11:26:16 -0400 Subject: [PATCH 353/476] [JENKINS-57805] Add regression test --- .../src/test/java/hudson/model/QueueTest.java | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/test/src/test/java/hudson/model/QueueTest.java b/test/src/test/java/hudson/model/QueueTest.java index 63d6a1deb1..b3e4af019e 100644 --- a/test/src/test/java/hudson/model/QueueTest.java +++ b/test/src/test/java/hudson/model/QueueTest.java @@ -33,6 +33,7 @@ import com.gargoylesoftware.htmlunit.html.HtmlForm; import com.gargoylesoftware.htmlunit.html.HtmlFormUtil; import com.gargoylesoftware.htmlunit.html.HtmlPage; import com.gargoylesoftware.htmlunit.xml.XmlPage; +import hudson.ExtensionList; import hudson.Functions; import hudson.Launcher; import hudson.XmlFile; @@ -1135,4 +1136,55 @@ public class QueueTest { assertTrue(currentOne.getFuture().isCancelled()); } } + + @Test + @Issue("JENKINS-57805") + public void brokenAffinityKey() throws Exception { + BrokenAffinityKeyProject brokenProject = r.createProject(BrokenAffinityKeyProject.class, "broken-project"); + // Before the JENKINS-57805 fix, the test times out because the `NullPointerException` repeatedly thrown from + // `BrokenAffinityKeyProject.getAffinityKey()` prevents `Queue.maintain()` from completing. + r.buildAndAssertSuccess(brokenProject); + } + + public static class BrokenAffinityKeyProject extends Project implements TopLevelItem { + public BrokenAffinityKeyProject(ItemGroup parent, String name) { + super(parent, name); + } + @Override + public String getAffinityKey() { + throw new NullPointerException("oops!"); + } + @Override + protected Class getBuildClass() { + return BrokenAffinityKeyBuild.class; + } + @Override + public TopLevelItemDescriptor getDescriptor() { + return ExtensionList.lookupSingleton(DescriptorImpl.class); + } + @TestExtension("brokenAffinityKey") + public static class DescriptorImpl extends AbstractProjectDescriptor { + @Override + public TopLevelItem newInstance(ItemGroup parent, String name) { + return new BrokenAffinityKeyProject(parent, name); + } + @Override + public String getDisplayName() { + return "Broken Affinity Key Project"; + } + } + } + + public static class BrokenAffinityKeyBuild extends Build { + public BrokenAffinityKeyBuild(BrokenAffinityKeyProject project) throws IOException { + super(project); + } + public BrokenAffinityKeyBuild(BrokenAffinityKeyProject project, File buildDir) throws IOException { + super(project, buildDir); + } + @Override + public void run() { + execute(new BuildExecution()); + } + } } -- GitLab From 3b860c4affb06ace83c8f50e136121b905060a80 Mon Sep 17 00:00:00 2001 From: Devin Nusbaum Date: Wed, 5 Jun 2019 16:56:37 -0400 Subject: [PATCH 354/476] [JENKINS-57805] Log exceptions thrown from getAffinityKey at FINE level --- core/src/main/java/hudson/model/LoadBalancer.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/core/src/main/java/hudson/model/LoadBalancer.java b/core/src/main/java/hudson/model/LoadBalancer.java index d2016c3b7e..37446a181e 100644 --- a/core/src/main/java/hudson/model/LoadBalancer.java +++ b/core/src/main/java/hudson/model/LoadBalancer.java @@ -36,6 +36,8 @@ import hudson.util.ConsistentHash.Hash; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.logging.Level; +import java.util.logging.Logger; /** * Strategy that decides which {@link Task} gets run on which {@link Executor}. @@ -116,6 +118,7 @@ public abstract class LoadBalancer implements ExtensionPoint { try { key = task.getAffinityKey(); } catch (RuntimeException e) { + LOGGER.log(Level.FINE, null, e); // Default implementation of Queue.Task.getAffinityKey, we assume it doesn't fail. key = task.getFullDisplayName(); } @@ -174,4 +177,6 @@ public abstract class LoadBalancer implements ExtensionPoint { }; } + private static final Logger LOGGER = Logger.getLogger(LoadBalancer.class.getName()); + } -- GitLab From 51e2cdc4ee85c5ce83eb43c82b131bf6d0b0236b Mon Sep 17 00:00:00 2001 From: Joseph Petersen Date: Fri, 7 Jun 2019 11:54:55 +0200 Subject: [PATCH 355/476] [JENKINS-57121] - make list view JCasC compliant (#3994) * make list view JCasC complianant * setRecurse @DataBoundSetter * Set and synchronized jobNames * description databound setter for view --- core/src/main/java/hudson/model/ListView.java | 26 ++++++++++++++++--- core/src/main/java/hudson/model/View.java | 8 +++++- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/hudson/model/ListView.java b/core/src/main/java/hudson/model/ListView.java index e9ea468a01..e0879dc5f2 100644 --- a/core/src/main/java/hudson/model/ListView.java +++ b/core/src/main/java/hudson/model/ListView.java @@ -124,6 +124,11 @@ public class ListView extends View implements DirectlyModifiableView { this.columns.replaceBy(columns); } + @DataBoundSetter + public void setJobFilters(List jobFilters) throws IOException { + this.jobFilters.replaceBy(jobFilters); + } + private Object readResolve() { if(includeRegex!=null) { try { @@ -171,6 +176,9 @@ public class ListView extends View implements DirectlyModifiableView { return columns; } + public Set getJobNames() { + return Collections.unmodifiableSet(jobNames); + } /** * Returns a read-only view of all {@link Job}s in this view. @@ -320,14 +328,15 @@ public class ListView extends View implements DirectlyModifiableView { public String getIncludeRegex() { return includeRegex; } - + public boolean isRecurse() { return recurse; } - + /** * @since 1.568 */ + @DataBoundSetter public void setRecurse(boolean recurse) { this.recurse = recurse; } @@ -462,7 +471,7 @@ public class ListView extends View implements DirectlyModifiableView { columns = new DescribableList<>(this); } columns.rebuildHetero(req, json, ListViewColumn.all(), "columns"); - + if (jobFilters == null) { jobFilters = new DescribableList<>(this); } @@ -473,6 +482,7 @@ public class ListView extends View implements DirectlyModifiableView { } /** @since 1.526 */ + @DataBoundSetter public void setIncludeRegex(String includeRegex) { this.includeRegex = Util.nullify(includeRegex); if (this.includeRegex == null) @@ -481,6 +491,16 @@ public class ListView extends View implements DirectlyModifiableView { this.includePattern = Pattern.compile(includeRegex); } + @DataBoundSetter + public synchronized void setJobNames(Set jobNames) { + this.jobNames = new TreeSet<>(jobNames); + } + + @DataBoundSetter + public void setStatusFilter(Boolean statusFilter) { + this.statusFilter = statusFilter; + } + @Extension @Symbol("list") public static class DescriptorImpl extends ViewDescriptor { @Override diff --git a/core/src/main/java/hudson/model/View.java b/core/src/main/java/hudson/model/View.java index 2a23e5149e..6b27e876a8 100644 --- a/core/src/main/java/hudson/model/View.java +++ b/core/src/main/java/hudson/model/View.java @@ -76,6 +76,7 @@ import org.apache.tools.ant.filters.StringInputStream; import org.jenkins.ui.icon.Icon; import org.jenkins.ui.icon.IconSet; import org.kohsuke.accmod.restrictions.DoNotUse; +import org.kohsuke.stapler.DataBoundSetter; import org.kohsuke.stapler.HttpResponse; import org.kohsuke.stapler.HttpResponses; import org.kohsuke.stapler.Stapler; @@ -292,7 +293,12 @@ public abstract class View extends AbstractModelObject implements AccessControll public String getDescription() { return description; } - + + @DataBoundSetter + public void setDescription(String description) { + this.description = description; + } + /** * Gets the view properties configured for this view. * @since 1.406 -- GitLab From d71f28bd34e0dce73604b9d5161e05b979a448ca Mon Sep 17 00:00:00 2001 From: bill007110 Date: Sun, 9 Jun 2019 22:15:00 +0800 Subject: [PATCH 356/476] change Init CopyFromField function and let the ok button in newJob page be changed when user input words to CopyFromField --- war/src/main/js/add-item.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/war/src/main/js/add-item.js b/war/src/main/js/add-item.js index 592b07a3d7..b82a94c610 100644 --- a/war/src/main/js/add-item.js +++ b/war/src/main/js/add-item.js @@ -260,7 +260,7 @@ $.when(getItems()).done(function(data) { }); // Init CopyFromField - $('input[name="from"]', '#createItem').blur(function() { + $('input[name="from"]', '#createItem').on("blur input", function() { if (getCopyFromValue() === '') { $('#createItem').find('input[type="radio"][value="copy"]').removeAttr('checked'); } else { -- GitLab From dae01c123cadc9c9b8063c40b3b6b61b1fdf53c4 Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Sun, 9 Jun 2019 16:45:36 -0700 Subject: [PATCH 357/476] [maven-release-plugin] prepare release jenkins-2.180 --- cli/pom.xml | 2 +- core/pom.xml | 2 +- pom.xml | 4 ++-- test-jdk8/pom.xml | 2 +- test-pom/pom.xml | 2 +- test/pom.xml | 2 +- war/pom.xml | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/cli/pom.xml b/cli/pom.xml index b4e780844f..b9c7515ccb 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -5,7 +5,7 @@ org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.180 cli diff --git a/core/pom.xml b/core/pom.xml index 19e6db082a..16dc74f277 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -29,7 +29,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.180 jenkins-core diff --git a/pom.xml b/pom.xml index 6cecd3cc55..613018d9b5 100644 --- a/pom.xml +++ b/pom.xml @@ -34,7 +34,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.180 pom Jenkins main module @@ -60,7 +60,7 @@ THE SOFTWARE. scm:git:git://github.com/jenkinsci/jenkins.git scm:git:ssh://git@github.com/jenkinsci/jenkins.git https://github.com/jenkinsci/jenkins - ${scmTag} + jenkins-2.180 diff --git a/test-jdk8/pom.xml b/test-jdk8/pom.xml index 70c4870837..990499cd2a 100644 --- a/test-jdk8/pom.xml +++ b/test-jdk8/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-test-parent - ${revision}${changelist} + 2.180 ../test-pom diff --git a/test-pom/pom.xml b/test-pom/pom.xml index 36b18e666f..2fb4faefd4 100644 --- a/test-pom/pom.xml +++ b/test-pom/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.180 jenkins-test-parent diff --git a/test/pom.xml b/test/pom.xml index 4c5abecc6f..36db53a689 100644 --- a/test/pom.xml +++ b/test/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-test-parent - ${revision}${changelist} + 2.180 ../test-pom diff --git a/war/pom.xml b/war/pom.xml index 5bcfd78481..331f9dcd0f 100644 --- a/war/pom.xml +++ b/war/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.180 jenkins-war -- GitLab From 3ba5ca46c3b8e3df79b0550ff17e652006beef05 Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Sun, 9 Jun 2019 16:45:51 -0700 Subject: [PATCH 358/476] [maven-release-plugin] prepare for next development iteration --- cli/pom.xml | 2 +- core/pom.xml | 2 +- pom.xml | 6 +++--- test-jdk8/pom.xml | 2 +- test-pom/pom.xml | 2 +- test/pom.xml | 2 +- war/pom.xml | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/cli/pom.xml b/cli/pom.xml index b9c7515ccb..b4e780844f 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -5,7 +5,7 @@ org.jenkins-ci.main jenkins-parent - 2.180 + ${revision}${changelist} cli diff --git a/core/pom.xml b/core/pom.xml index 16dc74f277..19e6db082a 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -29,7 +29,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.180 + ${revision}${changelist} jenkins-core diff --git a/pom.xml b/pom.xml index 613018d9b5..017ebfab47 100644 --- a/pom.xml +++ b/pom.xml @@ -34,7 +34,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.180 + ${revision}${changelist} pom Jenkins main module @@ -60,7 +60,7 @@ THE SOFTWARE. scm:git:git://github.com/jenkinsci/jenkins.git scm:git:ssh://git@github.com/jenkinsci/jenkins.git https://github.com/jenkinsci/jenkins - jenkins-2.180 + ${scmTag} @@ -76,7 +76,7 @@ THE SOFTWARE. - 2.180 + 2.181 -SNAPSHOT args4j args4j - 2.0.31 + 2.33 org.jenkins-ci -- GitLab From 2fbd132bc9a7772e69dc3bfe34ae2c7256a780e3 Mon Sep 17 00:00:00 2001 From: Jesse Glick Date: Wed, 12 Jun 2019 17:09:51 -0400 Subject: [PATCH 363/476] [JENKINS-57993] Avoid printing stack traces for some common agent conditions. --- core/src/main/java/hudson/TcpSlaveAgentListener.java | 8 ++++++-- .../java/jenkins/slaves/DefaultJnlpSlaveReceiver.java | 5 ++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/hudson/TcpSlaveAgentListener.java b/core/src/main/java/hudson/TcpSlaveAgentListener.java index 1c68ca8728..659cf2da1c 100644 --- a/core/src/main/java/hudson/TcpSlaveAgentListener.java +++ b/core/src/main/java/hudson/TcpSlaveAgentListener.java @@ -43,13 +43,13 @@ import hudson.slaves.OfflineCause; import java.io.DataOutputStream; import java.io.InputStream; import java.io.OutputStream; -import java.io.UnsupportedEncodingException; import java.net.SocketAddress; import java.util.Arrays; import jenkins.AgentProtocol; import java.io.BufferedWriter; import java.io.DataInputStream; +import java.io.EOFException; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.PrintWriter; @@ -286,7 +286,11 @@ public final class TcpSlaveAgentListener extends Thread { // try to clean up the socket } } catch (IOException e) { - LOGGER.log(Level.WARNING,"Connection #"+id+" failed",e); + if (e instanceof EOFException) { + LOGGER.log(Level.INFO, "Connection #{0} failed: {1}", new Object[] {id, e}); + } else { + LOGGER.log(Level.WARNING, "Connection #" + id + " failed", e); + } try { s.close(); } catch (IOException ex) { diff --git a/core/src/main/java/jenkins/slaves/DefaultJnlpSlaveReceiver.java b/core/src/main/java/jenkins/slaves/DefaultJnlpSlaveReceiver.java index 1a53839c50..ce74648e13 100644 --- a/core/src/main/java/jenkins/slaves/DefaultJnlpSlaveReceiver.java +++ b/core/src/main/java/jenkins/slaves/DefaultJnlpSlaveReceiver.java @@ -24,6 +24,7 @@ import jenkins.util.SystemProperties; import org.jenkinsci.remoting.engine.JnlpConnectionState; import java.io.IOException; +import java.nio.channels.ClosedChannelException; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; @@ -181,7 +182,9 @@ public class DefaultJnlpSlaveReceiver extends JnlpAgentReceiver { public void channelClosed(@NonNull JnlpConnectionState event) { final String nodeName = event.getProperty(JnlpConnectionState.CLIENT_NAME_KEY); IOException cause = event.getCloseCause(); - if (cause != null) { + if (cause instanceof ClosedChannelException) { + LOGGER.log(Level.INFO, "{0} for {1} terminated: {2}", new Object[] {Thread.currentThread().getName(), nodeName, cause}); + } else if (cause != null) { LOGGER.log(Level.WARNING, Thread.currentThread().getName() + " for " + nodeName + " terminated", cause); } -- GitLab From 4f8404e92956e7c42c6dac342b8d13d1349f9986 Mon Sep 17 00:00:00 2001 From: Josh Soref Date: Thu, 13 Jun 2019 02:33:46 -0400 Subject: [PATCH 364/476] [JENKINS-57992] clarify that the system user is a jenkins concept --- .../security/QueueItemAuthenticatorMonitor/message.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/resources/jenkins/security/QueueItemAuthenticatorMonitor/message.properties b/core/src/main/resources/jenkins/security/QueueItemAuthenticatorMonitor/message.properties index 97559c0d81..03f106244b 100644 --- a/core/src/main/resources/jenkins/security/QueueItemAuthenticatorMonitor/message.properties +++ b/core/src/main/resources/jenkins/security/QueueItemAuthenticatorMonitor/message.properties @@ -1,4 +1,4 @@ -blurb = Builds in Jenkins run as the virtual SYSTEM user with full permissions by default. \ +blurb = Builds in Jenkins run as the virtual Jenkins SYSTEM user with full Jenkins permissions by default. \ This can be a problem if some users have restricted or no access to some jobs, but can configure others. \ If that is the case, it is recommended to install a plugin implementing build authentication, and to override this default. -- GitLab From b4aa9d7dbe005a04292b9fa9f40cf7bf13ea6d45 Mon Sep 17 00:00:00 2001 From: Jesse Glick Date: Thu, 13 Jun 2019 10:43:03 -0400 Subject: [PATCH 365/476] Errors from node monitors should be sent to agent logs rather than the system log. --- .../AbstractAsyncNodeMonitorDescriptor.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/hudson/node_monitors/AbstractAsyncNodeMonitorDescriptor.java b/core/src/main/java/hudson/node_monitors/AbstractAsyncNodeMonitorDescriptor.java index ed68e6198e..5ef4eff637 100644 --- a/core/src/main/java/hudson/node_monitors/AbstractAsyncNodeMonitorDescriptor.java +++ b/core/src/main/java/hudson/node_monitors/AbstractAsyncNodeMonitorDescriptor.java @@ -1,8 +1,10 @@ package hudson.node_monitors; +import hudson.Functions; import hudson.model.Computer; import hudson.remoting.Callable; import hudson.remoting.VirtualChannel; +import hudson.slaves.SlaveComputer; import jenkins.model.Jenkins; import javax.annotation.CheckForNull; @@ -93,7 +95,7 @@ public abstract class AbstractAsyncNodeMonitorDescriptor extends AbstractNode futures.put(c,ch.callAsync(cc)); } } catch (RuntimeException | IOException e) { - LOGGER.log(WARNING, "Failed to monitor "+c.getDisplayName()+" for "+getDisplayName(), e); + error(c, e); } } @@ -111,7 +113,7 @@ public abstract class AbstractAsyncNodeMonitorDescriptor extends AbstractNode try { data.put(c,f.get(Math.max(0,end-System.currentTimeMillis()), MILLISECONDS)); } catch (RuntimeException | TimeoutException | ExecutionException x) { - LOGGER.log(WARNING, "Failed to monitor " + c.getDisplayName() + " for " + getDisplayName(), x); + error(c, x); } } else { skipped.add(c); @@ -121,6 +123,14 @@ public abstract class AbstractAsyncNodeMonitorDescriptor extends AbstractNode return new Result<>(data, skipped); } + private void error(Computer c, Throwable x) { + if (c instanceof SlaveComputer) { + Functions.printStackTrace(x, ((SlaveComputer) c).getListener().error("Failed to monitor for " + getDisplayName())); + } else { + LOGGER.log(WARNING, "Failed to monitor " + c.getDisplayName() + " for " + getDisplayName(), x); + } + } + private static final Logger LOGGER = Logger.getLogger(AbstractAsyncNodeMonitorDescriptor.class.getName()); /** -- GitLab From b18b2e686db5a790d2e5b62313c9e0983d076883 Mon Sep 17 00:00:00 2001 From: Devin Nusbaum Date: Thu, 13 Jun 2019 16:27:38 -0400 Subject: [PATCH 366/476] [JENKINS-57725] - Wrap Proc.executor in ClassLoaderSanityThreadFactory (#4035) --- core/src/main/java/hudson/Proc.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/hudson/Proc.java b/core/src/main/java/hudson/Proc.java index e7e4841403..6acb1ceeba 100644 --- a/core/src/main/java/hudson/Proc.java +++ b/core/src/main/java/hudson/Proc.java @@ -26,6 +26,7 @@ package hudson; import hudson.Launcher.ProcStarter; import hudson.model.TaskListener; import hudson.remoting.Channel; +import hudson.util.ClassLoaderSanityThreadFactory; import hudson.util.DaemonThreadFactory; import hudson.util.ExceptionCatchingThreadFactory; import hudson.util.NamingThreadFactory; @@ -138,7 +139,7 @@ public abstract class Proc { @CheckForNull public abstract OutputStream getStdin(); - private static final ExecutorService executor = Executors.newCachedThreadPool(new ExceptionCatchingThreadFactory(new NamingThreadFactory(new DaemonThreadFactory(), "Proc.executor"))); + private static final ExecutorService executor = Executors.newCachedThreadPool(new ExceptionCatchingThreadFactory(new NamingThreadFactory(new ClassLoaderSanityThreadFactory(new DaemonThreadFactory()), "Proc.executor"))); /** * Like {@link #join} but can be given a maximum time to wait. -- GitLab From ffa9abf6e3104c6f1701432013aca7776203adef Mon Sep 17 00:00:00 2001 From: mawinter69 Date: Fri, 14 Jun 2019 10:18:02 +0200 Subject: [PATCH 367/476] [JENKINS-57515] update JNA library from 4.5.2 to 5.3.1 (#4060) * [JENKINS-57515] update jna library to 5.3.1 This solves problems with loading native libraries of jna on AIX platform when using openJDK or other JDKs that assume .so is the extension for shared libraries * Pointer.SIZE -> Native.POINTER_SIZE * remove unnecessary import * adjust to changed api --- core/pom.xml | 2 +- core/src/main/java/hudson/util/ProcessTree.java | 3 +-- core/src/main/java/hudson/util/jna/Kernel32Utils.java | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/core/pom.xml b/core/pom.xml index 19e6db082a..ceeb5f473c 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -534,7 +534,7 @@ THE SOFTWARE. net.java.dev.jna jna - 4.5.2 + 5.3.1 org.kohsuke diff --git a/core/src/main/java/hudson/util/ProcessTree.java b/core/src/main/java/hudson/util/ProcessTree.java index 4e2a4b3c14..e8e48915c6 100644 --- a/core/src/main/java/hudson/util/ProcessTree.java +++ b/core/src/main/java/hudson/util/ProcessTree.java @@ -26,7 +26,6 @@ package hudson.util; import com.sun.jna.Memory; import com.sun.jna.Native; import com.sun.jna.NativeLong; -import com.sun.jna.Pointer; import com.sun.jna.LastErrorException; import com.sun.jna.ptr.IntByReference; import hudson.EnvVars; @@ -1442,7 +1441,7 @@ public abstract class ProcessTree implements Iterable, IProcessTree, * Read the remainder of psinfo_t differently depending on whether the * Java process is 32-bit or 64-bit. */ - if (Pointer.SIZE == 8) { + if (Native.POINTER_SIZE == 8) { psinfo.seek(236); // offset of pr_argc argc = adjust(psinfo.readInt()); argp = adjustL(psinfo.readLong()); diff --git a/core/src/main/java/hudson/util/jna/Kernel32Utils.java b/core/src/main/java/hudson/util/jna/Kernel32Utils.java index 300c186a4c..b88c4c7f35 100644 --- a/core/src/main/java/hudson/util/jna/Kernel32Utils.java +++ b/core/src/main/java/hudson/util/jna/Kernel32Utils.java @@ -115,7 +115,7 @@ public class Kernel32Utils { public static File getTempDir() { Memory buf = new Memory(1024); if (Kernel32.INSTANCE.GetTempPathW(512,buf)!=0) {// the first arg is number of wchar - return new File(buf.getString(0, true)); + return new File(buf.getWideString(0)); } else { return null; } -- GitLab From c9ad878e311e4c4085176f018ffd66f0d9a05c77 Mon Sep 17 00:00:00 2001 From: Josh Soref Date: Fri, 14 Jun 2019 04:19:22 -0400 Subject: [PATCH 368/476] Cleanup groovy (#4033) * IntelliJ/Groovy: deprecation This is pretty useless as getSecurityKey is also deprecated * IntelliJ/Groovy: deprecation Resolve ApiTokenFilter is deprecated * IntelliJ/Groovy: Semicolons are Optional * This import is required by a bean/hudson.util.spring.BeanBuilder --- core/move-l10n.groovy | 26 +++++++++---------- core/src/main/resources/dsld/IntelliJ.gdsl | 10 +++---- .../hudson/PluginManager/sidepanel.groovy | 2 +- .../hudson/ProxyConfiguration/config.groovy | 2 +- .../EnvVarsHtml/index.groovy | 2 +- .../SuccessButRequiresRestart/status.groovy | 2 +- .../model/UsageStatistics/global.groovy | 2 +- .../resources/hudson/model/View/main.groovy | 18 ++++++------- .../GlobalSecurityConfiguration/index.groovy | 16 ++++++------ .../hudson/tasks/Shell/config.groovy | 2 +- .../hudson/tasks/Shell/global.groovy | 2 +- .../config.groovy | 8 +++--- .../log.groovy | 2 +- .../config.groovy | 4 +-- .../UserInterruption/summary.groovy | 2 +- .../model/CauseOfInterruption/summary.groovy | 2 +- .../buildEnv.groovy | 2 +- .../config.groovy | 2 +- .../config.groovy | 2 +- .../mvn/GlobalMavenConfig/config.groovy | 2 +- .../config.groovy | 2 +- .../QueueItemAuthenticator/config.groovy | 2 +- .../config.groovy | 2 +- .../RekeySecretAdminMonitor/message.groovy | 2 +- .../config.groovy | 2 +- .../systemInfo.groovy | 4 +-- .../widgets/BuildQueueWidget/index.groovy | 2 +- .../resources/lib/form/serverTcpPort.groovy | 2 +- licenseCompleter.groovy | 4 +-- .../bugs/Jenkins19124Test/Foo/config.groovy | 2 +- .../AbstractPasswordBasedSecurityRealm.groovy | 2 +- .../WEB-INF/security/SecurityFilters.groovy | 12 +++------ 32 files changed, 72 insertions(+), 76 deletions(-) diff --git a/core/move-l10n.groovy b/core/move-l10n.groovy index c52e66ae53..8d00234882 100644 --- a/core/move-l10n.groovy +++ b/core/move-l10n.groovy @@ -1,30 +1,30 @@ // Usage: groovy move-l10n.groovy hudson/model/OldClass/old-view jenkins/model/NewClass/new-view 'Some\ Translatable\ Text' // (The new view may be given as '-' to simply delete the key.) -def oldview = args[0]; -def newview = args[1]; -def key = args[2]; +def oldview = args[0] +def newview = args[1] +def key = args[2] -def scriptDir = new File(getClass().protectionDomain.codeSource.location.path).parent; -def resDir = new File(scriptDir, 'src/main/resources'); +def scriptDir = new File(getClass().protectionDomain.codeSource.location.path).parent +def resDir = new File(scriptDir, 'src/main/resources') -def basename = new File(resDir, oldview).name; +def basename = new File(resDir, oldview).name for (p in new File(resDir, oldview).parentFile.listFiles()) { - def n = p.name; + def n = p.name if (n == "${basename}.properties" || n.startsWith("${basename}_") && n.endsWith(".properties")) { - def lines = p.readLines('ISO-8859-1'); + def lines = p.readLines('ISO-8859-1') // TODO does not handle multiline values correctly - def matches = lines.findAll({it.startsWith("${key}=")}); + def matches = lines.findAll({it.startsWith("${key}=")}) if (!matches.isEmpty()) { - lines.removeAll(matches); + lines.removeAll(matches) p.withWriter('ISO-8859-1') {out -> lines.each {line -> out.writeLine(line)} } if (newview == '-') { - println("deleting ${matches.size()} matches from ${n}"); + println("deleting ${matches.size()} matches from ${n}") } else { - def nue = new File(resDir, newview + n.substring(basename.length())); - println("moving ${matches.size()} matches from ${n} to ${nue.name}"); + def nue = new File(resDir, newview + n.substring(basename.length())) + println("moving ${matches.size()} matches from ${n} to ${nue.name}") // TODO if the original lacked a trailing newline, this will corrupt previously final key nue.withWriterAppend('ISO-8859-1') {out -> matches.each {line -> out.writeLine(line)} diff --git a/core/src/main/resources/dsld/IntelliJ.gdsl b/core/src/main/resources/dsld/IntelliJ.gdsl index c957fd02f7..6babd92f23 100644 --- a/core/src/main/resources/dsld/IntelliJ.gdsl +++ b/core/src/main/resources/dsld/IntelliJ.gdsl @@ -1,7 +1,7 @@ package dsld -import com.intellij.openapi.module.*; -import com.intellij.openapi.roots.*; +import com.intellij.openapi.module.* +import com.intellij.openapi.roots.* def ctx = context(scope:scriptScope()) // TODO: make this more restrictive @@ -38,9 +38,9 @@ contributor(ctx) { // normally, built-in delegateTo function would do, except in this case // we'd like to avoid binding getMy. for ( String t : ["org.kohsuke.stapler.jelly.groovy.JellyBuilder","org.kohsuke.stapler.jelly.groovy.StaplerClosureScript"]) { - def c = findClass(t); - c.allMethods.findAll { !it.isConstructor() && it.name!="getMy" }.each { add it; } - c.allFields.each { add it; } + def c = findClass(t) + c.allMethods.findAll { !it.isConstructor() && it.name!="getMy" }.each { add it } + c.allFields.each { add it } } } diff --git a/core/src/main/resources/hudson/PluginManager/sidepanel.groovy b/core/src/main/resources/hudson/PluginManager/sidepanel.groovy index d129bd53c7..375fda352d 100644 --- a/core/src/main/resources/hudson/PluginManager/sidepanel.groovy +++ b/core/src/main/resources/hudson/PluginManager/sidepanel.groovy @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ -package hudson.PluginManager; +package hudson.PluginManager l=namespace(lib.LayoutTagLib) l.header() diff --git a/core/src/main/resources/hudson/ProxyConfiguration/config.groovy b/core/src/main/resources/hudson/ProxyConfiguration/config.groovy index 28ab923a47..8ecce1ee51 100644 --- a/core/src/main/resources/hudson/ProxyConfiguration/config.groovy +++ b/core/src/main/resources/hudson/ProxyConfiguration/config.groovy @@ -1,4 +1,4 @@ -package hudson.ProxyConfiguration; +package hudson.ProxyConfiguration def f=namespace(lib.FormTagLib) diff --git a/core/src/main/resources/hudson/model/EnvironmentContributor/EnvVarsHtml/index.groovy b/core/src/main/resources/hudson/model/EnvironmentContributor/EnvVarsHtml/index.groovy index 517fe30c58..76a5d72b74 100644 --- a/core/src/main/resources/hudson/model/EnvironmentContributor/EnvVarsHtml/index.groovy +++ b/core/src/main/resources/hudson/model/EnvironmentContributor/EnvVarsHtml/index.groovy @@ -1,4 +1,4 @@ -package hudson.model.EnvironmentContributor.EnvVarsHtml; +package hudson.model.EnvironmentContributor.EnvVarsHtml import hudson.model.EnvironmentContributor import hudson.scm.SCM diff --git a/core/src/main/resources/hudson/model/UpdateCenter/DownloadJob/SuccessButRequiresRestart/status.groovy b/core/src/main/resources/hudson/model/UpdateCenter/DownloadJob/SuccessButRequiresRestart/status.groovy index 0b9a57e2df..1787decb7a 100644 --- a/core/src/main/resources/hudson/model/UpdateCenter/DownloadJob/SuccessButRequiresRestart/status.groovy +++ b/core/src/main/resources/hudson/model/UpdateCenter/DownloadJob/SuccessButRequiresRestart/status.groovy @@ -25,5 +25,5 @@ def l = namespace(lib.LayoutTagLib) l.icon(class: 'icon-yellow icon-md') -text(" "); +text(" ") text(my.message) diff --git a/core/src/main/resources/hudson/model/UsageStatistics/global.groovy b/core/src/main/resources/hudson/model/UsageStatistics/global.groovy index 34785a89f3..458880889e 100644 --- a/core/src/main/resources/hudson/model/UsageStatistics/global.groovy +++ b/core/src/main/resources/hudson/model/UsageStatistics/global.groovy @@ -1,4 +1,4 @@ -package hudson.model.UsageStatistics; +package hudson.model.UsageStatistics def f=namespace(lib.FormTagLib) diff --git a/core/src/main/resources/hudson/model/View/main.groovy b/core/src/main/resources/hudson/model/View/main.groovy index 52a25f3a60..d01d2c7341 100644 --- a/core/src/main/resources/hudson/model/View/main.groovy +++ b/core/src/main/resources/hudson/model/View/main.groovy @@ -1,4 +1,4 @@ -package hudson.model.View; +package hudson.model.View t=namespace(lib.JenkinsTagLib) st=namespace("jelly:stapler") @@ -7,19 +7,19 @@ if (items == null) { p(_('broken')) } else if (items.isEmpty()) { if (app.items.size() != 0) { - set("views",my.owner.views); - set("currentView",my); - include(my.owner.viewsTabBar, "viewTabs"); + set("views",my.owner.views) + set("currentView",my) + include(my.owner.viewsTabBar, "viewTabs") } - include(my,"noJob.jelly"); + include(my,"noJob.jelly") } else { t.projectView(jobs: items, showViewTabs: true, columnExtensions: my.columns, indenter: my.indenter, itemGroup: my.owner.itemGroup) { - set("views",my.owner.views); - set("currentView",my); + set("views",my.owner.views) + set("currentView",my) if (my.owner.class == hudson.model.MyViewsProperty.class) { - include(my.owner?.myViewsTabBar, "myViewTabs"); + include(my.owner?.myViewsTabBar, "myViewTabs") } else { - include(my.owner.viewsTabBar,"viewTabs"); + include(my.owner.viewsTabBar,"viewTabs") } } } \ No newline at end of file diff --git a/core/src/main/resources/hudson/security/GlobalSecurityConfiguration/index.groovy b/core/src/main/resources/hudson/security/GlobalSecurityConfiguration/index.groovy index 816fa3aa64..8a28265d1a 100644 --- a/core/src/main/resources/hudson/security/GlobalSecurityConfiguration/index.groovy +++ b/core/src/main/resources/hudson/security/GlobalSecurityConfiguration/index.groovy @@ -22,8 +22,8 @@ l.layout(norefresh:true, permission:app.ADMINISTER, title:my.displayName, csscla p() div(class:"behavior-loading", _("LOADING")) f.form(method:"post",name:"config",action:"configure") { - set("instance",my); - set("descriptor", my.descriptor); + set("instance",my) + set("descriptor", my.descriptor) f.optionalBlock( field:"useSecurity", title:_("Enable security"), checked:app.useSecurity) { f.entry() { @@ -58,7 +58,7 @@ l.layout(norefresh:true, permission:app.ADMINISTER, title:my.displayName, csscla } f.advanced(title: _("Agent protocols"), align:"left") { f.entry(title: _("Agent protocols")) { - def agentProtocols = my.agentProtocols; + def agentProtocols = my.agentProtocols table(width:"100%") { for (AgentProtocol p : AgentProtocol.all()) { if (p.name != null && !p.required) { @@ -66,19 +66,19 @@ l.layout(norefresh:true, permission:app.ADMINISTER, title:my.displayName, csscla f.checkbox(name: "agentProtocol", title: p.displayName, checked: agentProtocols.contains(p.name), - json: p.name); + json: p.name) } tr() { - td(colspan:"2"); + td(colspan:"2") td(class:"setting-description"){ - st.include(from:p, page: "description", optional:true); + st.include(from:p, page: "description", optional:true) if (p.deprecated) { br() text(b(_("Deprecated. "))) - st.include(from:p, page: "deprecationCause", optional:true); + st.include(from:p, page: "deprecationCause", optional:true) } } - td(); + td() } } } diff --git a/core/src/main/resources/hudson/tasks/Shell/config.groovy b/core/src/main/resources/hudson/tasks/Shell/config.groovy index 58c4880bf2..811ca08d1d 100644 --- a/core/src/main/resources/hudson/tasks/Shell/config.groovy +++ b/core/src/main/resources/hudson/tasks/Shell/config.groovy @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ -package hudson.tasks.Shell; +package hudson.tasks.Shell f=namespace(lib.FormTagLib) f.entry(title:_("Command"),description:_("description",rootURL)) { diff --git a/core/src/main/resources/hudson/tasks/Shell/global.groovy b/core/src/main/resources/hudson/tasks/Shell/global.groovy index 048b45365b..5b3c3c7596 100644 --- a/core/src/main/resources/hudson/tasks/Shell/global.groovy +++ b/core/src/main/resources/hudson/tasks/Shell/global.groovy @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ -package hudson.tasks.Shell; +package hudson.tasks.Shell f=namespace(lib.FormTagLib) f.section(title:_("Shell")) { diff --git a/core/src/main/resources/jenkins/management/AdministrativeMonitorsConfiguration/config.groovy b/core/src/main/resources/jenkins/management/AdministrativeMonitorsConfiguration/config.groovy index 45d24deae4..18416259db 100644 --- a/core/src/main/resources/jenkins/management/AdministrativeMonitorsConfiguration/config.groovy +++ b/core/src/main/resources/jenkins/management/AdministrativeMonitorsConfiguration/config.groovy @@ -39,14 +39,14 @@ f.section(title: _("Administrative monitors configuration")) { f.checkbox(name: "administrativeMonitor", title: am.displayName, checked: am.enabled, - json: am.id); + json: am.id) } tr() { - td(colspan: "2"); + td(colspan: "2") td(class: "setting-description") { - st.include(from: am, page: "description", optional: true); + st.include(from: am, page: "description", optional: true) } - td(); + td() } } } diff --git a/core/src/main/resources/jenkins/management/AsynchronousAdministrativeMonitor/log.groovy b/core/src/main/resources/jenkins/management/AsynchronousAdministrativeMonitor/log.groovy index df094f6168..b9c4b5a929 100644 --- a/core/src/main/resources/jenkins/management/AsynchronousAdministrativeMonitor/log.groovy +++ b/core/src/main/resources/jenkins/management/AsynchronousAdministrativeMonitor/log.groovy @@ -21,7 +21,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -package jenkins.management.AsynchronousAdministrativeMonitor; +package jenkins.management.AsynchronousAdministrativeMonitor def l = namespace(lib.LayoutTagLib) def t = namespace(lib.JenkinsTagLib) diff --git a/core/src/main/resources/jenkins/model/ArtifactManagerConfiguration/config.groovy b/core/src/main/resources/jenkins/model/ArtifactManagerConfiguration/config.groovy index da3ab8a04a..40800f131d 100644 --- a/core/src/main/resources/jenkins/model/ArtifactManagerConfiguration/config.groovy +++ b/core/src/main/resources/jenkins/model/ArtifactManagerConfiguration/config.groovy @@ -22,9 +22,9 @@ * THE SOFTWARE. */ -package jenkins.model.ArtifactManagerConfiguration; +package jenkins.model.ArtifactManagerConfiguration -f = namespace(lib.FormTagLib); +f = namespace(lib.FormTagLib) if (!jenkins.model.ArtifactManagerFactoryDescriptor.all().isEmpty()) { f.section(title: _("Artifact Management for Builds")) { diff --git a/core/src/main/resources/jenkins/model/CauseOfInterruption/UserInterruption/summary.groovy b/core/src/main/resources/jenkins/model/CauseOfInterruption/UserInterruption/summary.groovy index b75b2386f9..c86b87b087 100644 --- a/core/src/main/resources/jenkins/model/CauseOfInterruption/UserInterruption/summary.groovy +++ b/core/src/main/resources/jenkins/model/CauseOfInterruption/UserInterruption/summary.groovy @@ -1,4 +1,4 @@ -package jenkins.model.CauseOfInterruption.UserInterruption; +package jenkins.model.CauseOfInterruption.UserInterruption // by default we just print the short description. def user = my.userOrNull diff --git a/core/src/main/resources/jenkins/model/CauseOfInterruption/summary.groovy b/core/src/main/resources/jenkins/model/CauseOfInterruption/summary.groovy index d74d3f9cb3..f1686c1744 100644 --- a/core/src/main/resources/jenkins/model/CauseOfInterruption/summary.groovy +++ b/core/src/main/resources/jenkins/model/CauseOfInterruption/summary.groovy @@ -1,4 +1,4 @@ -package jenkins.model.CauseOfInterruption; +package jenkins.model.CauseOfInterruption // by default we just print the short description. text(my.shortDescription) \ No newline at end of file diff --git a/core/src/main/resources/jenkins/model/CoreEnvironmentContributor/buildEnv.groovy b/core/src/main/resources/jenkins/model/CoreEnvironmentContributor/buildEnv.groovy index 31cdf2c1ff..015f433e9d 100644 --- a/core/src/main/resources/jenkins/model/CoreEnvironmentContributor/buildEnv.groovy +++ b/core/src/main/resources/jenkins/model/CoreEnvironmentContributor/buildEnv.groovy @@ -1,4 +1,4 @@ -package jenkins.model.CoreEnvironmentContributor; +package jenkins.model.CoreEnvironmentContributor def l = namespace(lib.JenkinsTagLib) diff --git a/core/src/main/resources/jenkins/model/GlobalNodePropertiesConfiguration/config.groovy b/core/src/main/resources/jenkins/model/GlobalNodePropertiesConfiguration/config.groovy index eef4b12d59..dadebf67b8 100644 --- a/core/src/main/resources/jenkins/model/GlobalNodePropertiesConfiguration/config.groovy +++ b/core/src/main/resources/jenkins/model/GlobalNodePropertiesConfiguration/config.groovy @@ -5,4 +5,4 @@ import hudson.Functions def f=namespace(lib.FormTagLib) f.descriptorList(title:_("Global properties"), name:"globalNodeProperties", - instances: app.globalNodeProperties, descriptors: Functions.getGlobalNodePropertyDescriptors()); + instances: app.globalNodeProperties, descriptors: Functions.getGlobalNodePropertyDescriptors()) diff --git a/core/src/main/resources/jenkins/model/ProjectNamingStrategy/PatternProjectNamingStrategy/config.groovy b/core/src/main/resources/jenkins/model/ProjectNamingStrategy/PatternProjectNamingStrategy/config.groovy index fa0162a419..c88efd99b2 100644 --- a/core/src/main/resources/jenkins/model/ProjectNamingStrategy/PatternProjectNamingStrategy/config.groovy +++ b/core/src/main/resources/jenkins/model/ProjectNamingStrategy/PatternProjectNamingStrategy/config.groovy @@ -1,4 +1,4 @@ -package jenkins.model.ProjectNamingStrategy.PatternProjectNamingStrategy; +package jenkins.model.ProjectNamingStrategy.PatternProjectNamingStrategy def f=namespace(lib.FormTagLib) diff --git a/core/src/main/resources/jenkins/mvn/GlobalMavenConfig/config.groovy b/core/src/main/resources/jenkins/mvn/GlobalMavenConfig/config.groovy index 79e427df0f..ca998385e0 100644 --- a/core/src/main/resources/jenkins/mvn/GlobalMavenConfig/config.groovy +++ b/core/src/main/resources/jenkins/mvn/GlobalMavenConfig/config.groovy @@ -1,4 +1,4 @@ -package jenkins.mvn.GlobalMavenConfig; +package jenkins.mvn.GlobalMavenConfig def f = namespace(lib.FormTagLib) diff --git a/core/src/main/resources/jenkins/security/LastGrantedAuthoritiesProperty/config.groovy b/core/src/main/resources/jenkins/security/LastGrantedAuthoritiesProperty/config.groovy index c86755ba16..84f4650fbc 100644 --- a/core/src/main/resources/jenkins/security/LastGrantedAuthoritiesProperty/config.groovy +++ b/core/src/main/resources/jenkins/security/LastGrantedAuthoritiesProperty/config.groovy @@ -1,3 +1,3 @@ -package jenkins.security.LastGrantedAuthoritiesProperty; +package jenkins.security.LastGrantedAuthoritiesProperty // nothing to configure here \ No newline at end of file diff --git a/core/src/main/resources/jenkins/security/QueueItemAuthenticator/config.groovy b/core/src/main/resources/jenkins/security/QueueItemAuthenticator/config.groovy index 7c91e5fbe5..b3d512c019 100644 --- a/core/src/main/resources/jenkins/security/QueueItemAuthenticator/config.groovy +++ b/core/src/main/resources/jenkins/security/QueueItemAuthenticator/config.groovy @@ -1,2 +1,2 @@ -package jenkins.security.QueueItemAuthenticator; +package jenkins.security.QueueItemAuthenticator // the default is empty configuration \ No newline at end of file diff --git a/core/src/main/resources/jenkins/security/QueueItemAuthenticatorConfiguration/config.groovy b/core/src/main/resources/jenkins/security/QueueItemAuthenticatorConfiguration/config.groovy index 7bc4cb882b..10ca05b04d 100644 --- a/core/src/main/resources/jenkins/security/QueueItemAuthenticatorConfiguration/config.groovy +++ b/core/src/main/resources/jenkins/security/QueueItemAuthenticatorConfiguration/config.groovy @@ -23,7 +23,7 @@ */ package jenkins.security.QueueItemAuthenticatorConfiguration -import jenkins.security.QueueItemAuthenticatorDescriptor; +import jenkins.security.QueueItemAuthenticatorDescriptor f=namespace(lib.FormTagLib) diff --git a/core/src/main/resources/jenkins/security/RekeySecretAdminMonitor/message.groovy b/core/src/main/resources/jenkins/security/RekeySecretAdminMonitor/message.groovy index 16c02de8df..a0d22cca11 100644 --- a/core/src/main/resources/jenkins/security/RekeySecretAdminMonitor/message.groovy +++ b/core/src/main/resources/jenkins/security/RekeySecretAdminMonitor/message.groovy @@ -21,7 +21,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -package jenkins.security.RekeySecretAdminMonitor; +package jenkins.security.RekeySecretAdminMonitor def f = namespace(lib.FormTagLib) diff --git a/core/src/main/resources/jenkins/security/UpdateSiteWarningsConfiguration/config.groovy b/core/src/main/resources/jenkins/security/UpdateSiteWarningsConfiguration/config.groovy index ac82bf1891..17253a8864 100644 --- a/core/src/main/resources/jenkins/security/UpdateSiteWarningsConfiguration/config.groovy +++ b/core/src/main/resources/jenkins/security/UpdateSiteWarningsConfiguration/config.groovy @@ -34,7 +34,7 @@ def printEntry(warning, title, checked) { f.checkbox(name: warning.id, title: title, checked: checked, - class: 'hideWarnings'); + class: 'hideWarnings') div(class: "setting-description") { a(warning.url, href: warning.url) } diff --git a/core/src/main/resources/jenkins/slaves/systemInfo/ClassLoaderStatisticsSlaveInfo/systemInfo.groovy b/core/src/main/resources/jenkins/slaves/systemInfo/ClassLoaderStatisticsSlaveInfo/systemInfo.groovy index 170e792f8e..4bfd7eb751 100644 --- a/core/src/main/resources/jenkins/slaves/systemInfo/ClassLoaderStatisticsSlaveInfo/systemInfo.groovy +++ b/core/src/main/resources/jenkins/slaves/systemInfo/ClassLoaderStatisticsSlaveInfo/systemInfo.groovy @@ -3,7 +3,7 @@ import hudson.slaves.SlaveComputer def fmt = new java.text.DecimalFormat("0.0") def right = 'text-align: right' if (my instanceof SlaveComputer) { - SlaveComputer c = my; + SlaveComputer c = my table(class: 'bigtable') { tr { @@ -16,7 +16,7 @@ if (my instanceof SlaveComputer) { td(style: right) {text(fmt.format(c.classLoadingTime / 1000000000))} td(style: right) { text(c.classLoadingCount) - def classLoadingPrefetchCacheCount = c.classLoadingPrefetchCacheCount; + def classLoadingPrefetchCacheCount = c.classLoadingPrefetchCacheCount if (classLoadingPrefetchCacheCount != -1) { text(_(' (prefetch cache: ')) text(classLoadingPrefetchCacheCount) diff --git a/core/src/main/resources/jenkins/widgets/BuildQueueWidget/index.groovy b/core/src/main/resources/jenkins/widgets/BuildQueueWidget/index.groovy index ae013561c7..e6da2169ce 100644 --- a/core/src/main/resources/jenkins/widgets/BuildQueueWidget/index.groovy +++ b/core/src/main/resources/jenkins/widgets/BuildQueueWidget/index.groovy @@ -1,4 +1,4 @@ -package jenkins.widgets.BuildQueueWidget; +package jenkins.widgets.BuildQueueWidget def t = namespace(lib.JenkinsTagLib.class) diff --git a/core/src/main/resources/lib/form/serverTcpPort.groovy b/core/src/main/resources/lib/form/serverTcpPort.groovy index fef53827ec..81c70ff3ee 100644 --- a/core/src/main/resources/lib/form/serverTcpPort.groovy +++ b/core/src/main/resources/lib/form/serverTcpPort.groovy @@ -10,7 +10,7 @@ package lib.form */ -int port = instance?instance[field]:0; +int port = instance?instance[field]:0 def f=namespace(lib.FormTagLib) diff --git a/licenseCompleter.groovy b/licenseCompleter.groovy index 9c6d8eca8e..fb6ecdc308 100644 --- a/licenseCompleter.groovy +++ b/licenseCompleter.groovy @@ -60,7 +60,7 @@ complete { match("relaxngDatatype:relaxngDatatype") { // see http://sourceforge.net/projects/relaxng/ - rewriteLicense([],bsdLicense); + rewriteLicense([],bsdLicense) } match(["org.kohsuke.jinterop:j-interop","org.kohsuke.jinterop:j-interopdeps"]) { @@ -83,7 +83,7 @@ complete { match("*:sezpoz") { // GPL-phobia people react to "GPL" strongly, so accept sezpoz under CDDL - rewriteLicense([license("CDDL or GPL 2 with Classpath Exception",null)],cddl); + rewriteLicense([license("CDDL or GPL 2 with Classpath Exception",null)],cddl) } match("net.jcip:jcip-annotations") { diff --git a/test/src/test/resources/jenkins/bugs/Jenkins19124Test/Foo/config.groovy b/test/src/test/resources/jenkins/bugs/Jenkins19124Test/Foo/config.groovy index 0a4c960609..8154b6f372 100644 --- a/test/src/test/resources/jenkins/bugs/Jenkins19124Test/Foo/config.groovy +++ b/test/src/test/resources/jenkins/bugs/Jenkins19124Test/Foo/config.groovy @@ -1,4 +1,4 @@ -package jenkins.bugs.Jenkins19124Test.Foo; +package jenkins.bugs.Jenkins19124Test.Foo def f = namespace(lib.FormTagLib) diff --git a/war/src/main/webapp/WEB-INF/security/AbstractPasswordBasedSecurityRealm.groovy b/war/src/main/webapp/WEB-INF/security/AbstractPasswordBasedSecurityRealm.groovy index c0aa3ce6b2..4aaf71b196 100644 --- a/war/src/main/webapp/WEB-INF/security/AbstractPasswordBasedSecurityRealm.groovy +++ b/war/src/main/webapp/WEB-INF/security/AbstractPasswordBasedSecurityRealm.groovy @@ -37,7 +37,7 @@ authenticationManager(ProviderManager) { // these providers apply everywhere bean(RememberMeAuthenticationProvider) { - key = Jenkins.getInstance().getSecretKey(); + key = Jenkins.get().getSecretKey() }, // this doesn't mean we allow anonymous access. // we just authenticate anonymous users as such, diff --git a/war/src/main/webapp/WEB-INF/security/SecurityFilters.groovy b/war/src/main/webapp/WEB-INF/security/SecurityFilters.groovy index 7640b8e874..db0ad2f30f 100644 --- a/war/src/main/webapp/WEB-INF/security/SecurityFilters.groovy +++ b/war/src/main/webapp/WEB-INF/security/SecurityFilters.groovy @@ -33,15 +33,11 @@ import hudson.security.ChainedServletFilter import hudson.security.UnwrapSecurityExceptionFilter import hudson.security.HudsonAuthenticationEntryPoint import jenkins.security.BasicHeaderProcessor -import org.acegisecurity.providers.anonymous.AnonymousProcessingFilter import jenkins.security.ExceptionTranslationFilter -import org.acegisecurity.ui.basicauth.BasicProcessingFilter +import org.acegisecurity.providers.anonymous.AnonymousProcessingFilter import org.acegisecurity.ui.basicauth.BasicProcessingFilterEntryPoint import org.acegisecurity.ui.rememberme.RememberMeProcessingFilter import hudson.security.HttpSessionContextIntegrationFilter2 -import hudson.security.SecurityRealm -import hudson.security.NoopFilter -import jenkins.security.ApiTokenFilter // providers that apply to both patterns def commonProviders() { @@ -53,7 +49,7 @@ def commonProviders() { bean(ExceptionTranslationFilter) { accessDeniedHandler = new AccessDeniedHandlerImpl() authenticationEntryPoint = bean(HudsonAuthenticationEntryPoint) { - loginFormUrl = '/'+securityRealm.getLoginUrl()+"?from={0}"; + loginFormUrl = '/'+securityRealm.getLoginUrl()+"?from={0}" } }, bean(UnwrapSecurityExceptionFilter) @@ -69,7 +65,7 @@ filter(ChainedServletFilter) { // I suspect this is related to JENKINS-12585, in that // it ends up setting Set-Cookie for image responses. // Instead, we use layout.jelly to create sessions. - allowSessionCreation = false; + allowSessionCreation = false }, // if any "Authorization: Basic xxx:yyy" is sent this is the filter that processes it bean(BasicHeaderProcessor) { @@ -104,4 +100,4 @@ legacy(ChainedServletFilter) { // when using container-authentication we can't hit /login directly. // we first have to hit protected /loginEntry, then let the container // trap that into /login. -} \ No newline at end of file +} -- GitLab From 671ff304f4a002f2484a06300422830e1268955d Mon Sep 17 00:00:00 2001 From: Josh Soref Date: Fri, 14 Jun 2019 04:20:48 -0400 Subject: [PATCH 369/476] mark up variables (#4064) * mark up variables * mark up variables --- .../main/resources/hudson/PluginWrapper/uninstall.properties | 2 +- .../webapp/help/system-config/globalEnvironmentVariables.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/core/src/main/resources/hudson/PluginWrapper/uninstall.properties b/core/src/main/resources/hudson/PluginWrapper/uninstall.properties index 5a4f8fbcd6..a665b16401 100644 --- a/core/src/main/resources/hudson/PluginWrapper/uninstall.properties +++ b/core/src/main/resources/hudson/PluginWrapper/uninstall.properties @@ -1,3 +1,3 @@ -msg=You are about to uninstall the {0} plugin. This will remove the plugin binary from your $JENKINS_HOME, \ +msg=You are about to uninstall the {0} plugin. This will remove the plugin binary from your $JENKINS_HOME, \ but it will leave the configuration files of the plugin untouched. title=Uninstalling {0} plugin diff --git a/war/src/main/webapp/help/system-config/globalEnvironmentVariables.html b/war/src/main/webapp/help/system-config/globalEnvironmentVariables.html index ffc9343bf9..eb3ffccd58 100644 --- a/war/src/main/webapp/help/system-config/globalEnvironmentVariables.html +++ b/war/src/main/webapp/help/system-config/globalEnvironmentVariables.html @@ -1,4 +1,4 @@
These key-value pairs apply for every build on every node. They can be used in Jenkins' - configuration (as $key or ${key}) and will be added to the environment for processes launched from the build. + configuration (as $key or ${key}) and will be added to the environment for processes launched from the build.
-- GitLab From 0f73231f775e06105103fa9d0f23e20d7b122ac1 Mon Sep 17 00:00:00 2001 From: Jesse Glick Date: Sat, 15 Jun 2019 05:21:21 -0400 Subject: [PATCH 370/476] [JENKINS-33843] Permit disabling optional dependencies (#4001) * Implied dependencies on detached plugins were not being marked optional despite being listed in optionalDependencies, confusing the calculation of optionalDependents in resolveDependentPlugins. * Javadoc improvements based on code exploration. * [JENKINS-33843] Do not consider optional dependencies for purposes of disabling plugins. * PluginManagerInstalledGUITest updated to reflect new behavior. --- .../main/java/hudson/LocalPluginManager.java | 6 -- core/src/main/java/hudson/PluginManager.java | 9 +- core/src/main/java/hudson/PluginWrapper.java | 57 ++++++++++- .../jenkins/plugins/DetachedPluginsUtil.java | 2 +- .../hudson/PluginManager/installed.jelly | 10 +- .../hudson/PluginManagerInstalledGUITest.java | 97 ++++++++++++------- 6 files changed, 127 insertions(+), 54 deletions(-) diff --git a/core/src/main/java/hudson/LocalPluginManager.java b/core/src/main/java/hudson/LocalPluginManager.java index bde452ca7a..b001e1f348 100644 --- a/core/src/main/java/hudson/LocalPluginManager.java +++ b/core/src/main/java/hudson/LocalPluginManager.java @@ -66,12 +66,6 @@ public class LocalPluginManager extends PluginManager { this(null, rootDir); } - /** - * If the war file has any "/WEB-INF/plugins/*.jpi", extract them into the plugin directory. - * - * @return - * File names of the bundled plugins. Like {"ssh-slaves.jpi","subversion.jpi"} - */ @Override protected Collection loadBundledPlugins() { // this is used in tests, when we want to override the default bundled plugins with .jpl (or .hpl) versions diff --git a/core/src/main/java/hudson/PluginManager.java b/core/src/main/java/hudson/PluginManager.java index ec4bd4b503..1b73d6679c 100644 --- a/core/src/main/java/hudson/PluginManager.java +++ b/core/src/main/java/hudson/PluginManager.java @@ -1019,15 +1019,18 @@ public abstract class PluginManager extends AbstractModelObject implements OnMas * If the war file has any "/WEB-INF/plugins/[*.jpi | *.hpi]", extract them into the plugin directory. * * @return - * File names of the bundled plugins. Like {"ssh-slaves.hpi","subversion.jpi"} + * File names of the bundled plugins. Normally empty (not to be confused with {@link #loadDetachedPlugins}) but OEM WARs may have some. * @throws Exception * Any exception will be reported and halt the startup. */ protected abstract Collection loadBundledPlugins() throws Exception; /** - * Copies the bundled plugin from the given URL to the destination of the given file name (like 'abc.jpi'), - * with a reasonable up-to-date check. A convenience method to be used by the {@link #loadBundledPlugins()}. + * Copies the plugin from the given URL to the given destination. + * Despite the name, this is used also from {@link #loadDetachedPlugins}. + * Includes a reasonable up-to-date check. + * A convenience method to be used by {@link #loadBundledPlugins()}. + * @param fileName like {@code abc.jpi} */ protected void copyBundledPlugin(URL src, String fileName) throws IOException { LOGGER.log(FINE, "Copying {0}", src); diff --git a/core/src/main/java/hudson/PluginWrapper.java b/core/src/main/java/hudson/PluginWrapper.java index be78e2d192..715c04db26 100644 --- a/core/src/main/java/hudson/PluginWrapper.java +++ b/core/src/main/java/hudson/PluginWrapper.java @@ -255,6 +255,7 @@ public class PluginWrapper implements Comparable, ModelObject { /** * Get the list of components that depend on this plugin. + * Note that the list will include elements of {@link #getOptionalDependents}. * @return The list of components that depend on this plugin. */ public @Nonnull Set getDependents() { @@ -273,6 +274,16 @@ public class PluginWrapper implements Comparable, ModelObject { return getDependents(); } + /** + * Like {@link #getDependents} but excluding optional dependencies. + * @since TODO + */ + public @Nonnull Set getMandatoryDependents() { + Set s = new HashSet<>(dependents); + s.removeAll(optionalDependents); + return s; + } + /** * @return The list of components that depend optionally on this plugin. */ @@ -290,6 +301,7 @@ public class PluginWrapper implements Comparable, ModelObject { /** * Does this plugin have anything that depends on it. + * Note that optional dependents are included. * @return {@code true} if something (Jenkins core, or another plugin) depends on this * plugin, otherwise {@code false}. */ @@ -297,6 +309,17 @@ public class PluginWrapper implements Comparable, ModelObject { return (isBundled || !dependents.isEmpty()); } + /** + * Like {@link #hasDependents} but excluding optional dependencies. + * @since TODO + */ + public boolean hasMandatoryDependents() { + if (isBundled) { + return true; + } + return dependents.stream().anyMatch(d -> !optionalDependents.contains(d)); + } + /** * @deprecated Please use {@link hasDependents}. */ @@ -324,10 +347,19 @@ public class PluginWrapper implements Comparable, ModelObject { /** * Does this plugin depend on any other plugins. + * Note that this include optional dependencies. * @return {@code true} if this plugin depends on other plugins, otherwise {@code false}. */ public boolean hasDependencies() { - return (dependencies != null && !dependencies.isEmpty()); + return !dependencies.isEmpty(); + } + + /** + * Like {@link #hasDependencies} but omitting optional dependencies. + * @since TODO + */ + public boolean hasMandatoryDependencies() { + return dependencies.stream().anyMatch(d -> !d.optional); } @ExportedBean @@ -394,6 +426,9 @@ public class PluginWrapper implements Comparable, ModelObject { this.active = !disableFile.exists(); this.dependencies = dependencies; this.optionalDependencies = optionalDependencies; + for (Dependency d : optionalDependencies) { + assert d.optional : d + " included among optionalDependencies of " + shortName + " but was not marked optional"; + } this.archive = archive; } @@ -438,11 +473,24 @@ public class PluginWrapper implements Comparable, ModelObject { return getBaseName(fileName); } + /** + * Gets all dependencies of this plugin on other plugins. + * Note that the list will usually include the members of {@link #getOptionalDependencies} + * (missing optional dependencies will however be omitted). + */ @Exported public List getDependencies() { return dependencies; } + /** + * Like {@link #getDependencies} but omits optional dependencies. + * @since TODO + */ + public List getMandatoryDependencies() { + return dependencies.stream().filter(d -> !d.optional).collect(Collectors.toList()); + } + public List getOptionalDependencies() { return optionalDependencies; } @@ -753,7 +801,12 @@ public class PluginWrapper implements Comparable, ModelObject { public void setHasCycleDependency(boolean hasCycle){ hasCycleDependency = hasCycle; } - + + /** + * Is this plugin bundled in the WAR? + * Normally false as noted in {@link PluginManager#loadBundledPlugins}: + * this does not apply to “detached†plugins. + */ @Exported public boolean isBundled() { return isBundled; diff --git a/core/src/main/java/jenkins/plugins/DetachedPluginsUtil.java b/core/src/main/java/jenkins/plugins/DetachedPluginsUtil.java index 010959c27d..a1c631e6d3 100644 --- a/core/src/main/java/jenkins/plugins/DetachedPluginsUtil.java +++ b/core/src/main/java/jenkins/plugins/DetachedPluginsUtil.java @@ -93,7 +93,7 @@ public class DetachedPluginsUtil { } // some earlier versions of maven-hpi-plugin apparently puts "null" as a literal in Hudson-Version. watch out for them. if (jenkinsVersion == null || jenkinsVersion.equals("null") || new VersionNumber(jenkinsVersion).compareTo(detached.splitWhen) <= 0) { - out.add(new PluginWrapper.Dependency(detached.shortName + ':' + detached.requiredVersion)); + out.add(new PluginWrapper.Dependency(detached.shortName + ':' + detached.requiredVersion + ";resolution:=optional")); LOGGER.log(Level.FINE, "adding implicit dependency {0} → {1} because of {2}", new Object[]{pluginName, detached.shortName, jenkinsVersion}); } diff --git a/core/src/main/resources/hudson/PluginManager/installed.jelly b/core/src/main/resources/hudson/PluginManager/installed.jelly index 12dccd3dee..aaf533b5c6 100644 --- a/core/src/main/resources/hudson/PluginManager/installed.jelly +++ b/core/src/main/resources/hudson/PluginManager/installed.jelly @@ -67,7 +67,7 @@ THE SOFTWARE. ${%Uninstall} - + ${%Uninstallation pending}

- +
- +
- +
- +
diff --git a/test/src/test/java/hudson/PluginManagerInstalledGUITest.java b/test/src/test/java/hudson/PluginManagerInstalledGUITest.java index f654e06874..9ddc0356cb 100644 --- a/test/src/test/java/hudson/PluginManagerInstalledGUITest.java +++ b/test/src/test/java/hudson/PluginManagerInstalledGUITest.java @@ -32,6 +32,7 @@ import com.gargoylesoftware.htmlunit.html.HtmlTableRow; import org.junit.Assert; import org.junit.Rule; import org.junit.Test; +import org.jvnet.hudson.test.Issue; import org.jvnet.hudson.test.JenkinsRule; import org.jvnet.hudson.test.TestPluginManager; import org.xml.sax.SAXException; @@ -60,8 +61,10 @@ public class PluginManagerInstalledGUITest { try { return super.loadBundledPlugins(); } finally { - copyBundledPlugin(PluginManagerInstalledGUITest.class.getResource("/WEB-INF/detached-plugins/cvs.hpi"), "cvs.jpi"); // cannot use installDetachedPlugin at this point - copyBundledPlugin(PluginManagerInstalledGUITest.class.getResource("/plugins/tasks.jpi"), "tasks.jpi"); + copyBundledPlugin(PluginManagerInstalledGUITest.class.getResource("/WEB-INF/detached-plugins/matrix-auth.hpi"), "matrix-auth.jpi"); // cannot use installDetachedPlugin at this point + copyBundledPlugin(PluginManagerInstalledGUITest.class.getResource("/plugins/dependee-0.0.2.hpi"), "dependee.jpi"); + copyBundledPlugin(PluginManagerInstalledGUITest.class.getResource("/plugins/depender-0.0.2.hpi"), "depender.jpi"); + copyBundledPlugin(PluginManagerInstalledGUITest.class.getResource("/plugins/mandatory-depender-0.0.2.hpi"), "mandatory-depender.jpi"); } } }; @@ -71,52 +74,72 @@ public class PluginManagerInstalledGUITest { } } }; - + + @Issue("JENKINS-33843") @Test public void test_enable_disable_uninstall() throws IOException, SAXException { InstalledPlugins installedPlugins = new InstalledPlugins(); - InstalledPlugin tasksPlugin = installedPlugins.get("tasks"); - InstalledPlugin cvsPlugin = installedPlugins.get("cvs"); + InstalledPlugin matrixAuthPlugin = installedPlugins.get("matrix-auth"); + InstalledPlugin dependeePlugin = installedPlugins.get("dependee"); + InstalledPlugin dependerPlugin = installedPlugins.get("depender"); + InstalledPlugin mandatoryDependerPlugin = installedPlugins.get("mandatory-depender"); - tasksPlugin.assertHasNoDependents(); - cvsPlugin.assertHasDependents(); + // As a detached plugin, it is an optional dependency of others built against a newer baseline. + matrixAuthPlugin.assertHasNoDependents(); + // Has a mandatory dependency: + dependeePlugin.assertHasDependents(); + // Leaf plugins: + dependerPlugin.assertHasNoDependents(); + mandatoryDependerPlugin.assertHasNoDependents(); - // Tasks plugin should be enabled and it should be possible to disable it + // This plugin should be enabled and it should be possible to disable it // because no other plugins depend on it. - tasksPlugin.assertEnabled(); - tasksPlugin.assertEnabledStateChangeable(); - tasksPlugin.assertUninstallable(); + mandatoryDependerPlugin.assertEnabled(); + mandatoryDependerPlugin.assertEnabledStateChangeable(); + mandatoryDependerPlugin.assertUninstallable(); - // CVS plugin should be enabled, but it should not be possible to disable or uninstall it - // because the tasks plugin depends on it. - cvsPlugin.assertEnabled(); - cvsPlugin.assertEnabledStateNotChangeable(); - cvsPlugin.assertNotUninstallable(); + // This plugin should be enabled, but it should not be possible to disable or uninstall it + // because another plugin depends on it. + dependeePlugin.assertEnabled(); + dependeePlugin.assertEnabledStateNotChangeable(); + dependeePlugin.assertNotUninstallable(); - // Disable the tasks plugin - tasksPlugin.clickEnabledWidget(); + // Disable one plugin + mandatoryDependerPlugin.clickEnabledWidget(); - // Now the tasks plugin should be disabled, but it should be possible to re-enable it + // Now that plugin should be disabled, but it should be possible to re-enable it // and it should still be uninstallable. - tasksPlugin.assertNotEnabled(); // this is different to earlier - tasksPlugin.assertEnabledStateChangeable(); - tasksPlugin.assertUninstallable(); + mandatoryDependerPlugin.assertNotEnabled(); // this is different to earlier + mandatoryDependerPlugin.assertEnabledStateChangeable(); + mandatoryDependerPlugin.assertUninstallable(); - // The CVS plugin should still be enabled, but it should now be possible to disable it because - // the tasks plugin is no longer enabled. Should still not be possible to uninstall it. - cvsPlugin.assertEnabled(); - cvsPlugin.assertEnabledStateChangeable(); // this is different to earlier - cvsPlugin.assertNotUninstallable(); + // The dependee plugin should still be enabled, but it should now be possible to disable it because + // the mandatory depender plugin is no longer enabled. Should still not be possible to uninstall it. + // Note that the depender plugin does not block its disablement. + dependeePlugin.assertEnabled(); + dependeePlugin.assertEnabledStateChangeable(); // this is different to earlier + dependeePlugin.assertNotUninstallable(); + dependerPlugin.assertEnabled(); - // Disable the cvs plugin - cvsPlugin.clickEnabledWidget(); + // Disable the dependee plugin + dependeePlugin.clickEnabledWidget(); - // Now it should NOT be possible to change the enable state of the tasks plugin because one - // of the plugins it depends on (the CVS plugin) is not enabled. - tasksPlugin.assertNotEnabled(); - tasksPlugin.assertEnabledStateNotChangeable(); // this is different to earlier - tasksPlugin.assertUninstallable(); + // Now it should NOT be possible to change the enable state of the depender plugin because one + // of the plugins it depends on is not enabled. + mandatoryDependerPlugin.assertNotEnabled(); + mandatoryDependerPlugin.assertEnabledStateNotChangeable(); // this is different to earlier + mandatoryDependerPlugin.assertUninstallable(); + dependerPlugin.assertEnabled(); + + // You can disable a detached plugin if there is no explicit dependency on it. + matrixAuthPlugin.assertEnabled(); + matrixAuthPlugin.assertEnabledStateChangeable(); + matrixAuthPlugin.assertUninstallable(); + matrixAuthPlugin.clickEnabledWidget(); + matrixAuthPlugin.assertNotEnabled(); + matrixAuthPlugin.assertEnabledStateChangeable(); + matrixAuthPlugin.assertUninstallable(); } private class InstalledPlugins { @@ -146,7 +169,7 @@ public class PluginManagerInstalledGUITest { return plugin; } } - Assert.fail("Now pluginManager/installed row for plugin " + pluginId); + Assert.fail("No pluginManager/installed row for plugin " + pluginId); return null; } @@ -219,11 +242,11 @@ public class PluginManagerInstalledGUITest { } public void assertHasDependents() { - Assert.assertTrue(hasDependents()); + Assert.assertTrue("Plugin '" + getId() + "' is expected to have dependents.", hasDependents()); } public void assertHasNoDependents() { - Assert.assertFalse(hasDependents()); + Assert.assertFalse("Plugin '" + getId() + "' is expected to have no dependents.", hasDependents()); } private boolean hasClassName(String className) { -- GitLab From 9731522f2767785e41fe5f4b2bab9d855c7ba97c Mon Sep 17 00:00:00 2001 From: Jesse Glick Date: Sat, 15 Jun 2019 14:05:13 -0400 Subject: [PATCH 371/476] [INFRA-2028] The timestamps step is no longer necessary. (#4068) --- Jenkinsfile | 2 -- 1 file changed, 2 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index f6b139aaec..436efd0ed3 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -26,7 +26,6 @@ for(j = 0; j < jdks.size(); j++) { def jdk = jdks[j] builds["${buildType}-jdk${jdk}"] = { node(buildType.toLowerCase()) { - timestamps { // First stage is actually checking out the source. Since we're using Multibranch // currently, we can use "checkout scm". stage('Checkout') { @@ -73,7 +72,6 @@ for(j = 0; j < jdks.size(); j++) { } } } - } } } }} -- GitLab From 2dbb5e54f97b91de74d958d15a2a0b5272cd6c5f Mon Sep 17 00:00:00 2001 From: Basil Crow Date: Sun, 16 Jun 2019 01:29:21 -0700 Subject: [PATCH 372/476] Switch to SpotBugs (#4062) * Switch to SpotBugs * Suppress erroneous NP_PARAMETER_MUST_BE_NONNULL_BUT_MARKED_AS_NULLABLE warnings * Try replacing Nullable with CheckForNull, per Oleg's suggestion. * Tidy up SpotBugs annotation reference in POM * Update core/src/main/java/jenkins/security/apitoken/LegacyApiTokenAdministrativeMonitor.java Co-Authored-By: Jeff Thompson <37345299+jeffret-b@users.noreply.github.com> * Update core/src/main/java/jenkins/security/apitoken/LegacyApiTokenAdministrativeMonitor.java Co-Authored-By: Jeff Thompson <37345299+jeffret-b@users.noreply.github.com> * Update core/src/main/java/jenkins/security/apitoken/LegacyApiTokenAdministrativeMonitor.java Co-Authored-By: Jeff Thompson <37345299+jeffret-b@users.noreply.github.com> * Revert "Try replacing Nullable with CheckForNull, per Oleg's suggestion." This reverts commit 39ae38e21494524cea17d9a088b366f47c4b33c0. --- cli/pom.xml | 10 +++------- core/pom.xml | 18 +++++++----------- .../LegacyApiTokenAdministrativeMonitor.java | 6 +++--- .../jenkins/triggers/ReverseBuildTrigger.java | 4 ++++ pom.xml | 6 +++--- test-pom/pom.xml | 10 ++++++++++ 6 files changed, 30 insertions(+), 24 deletions(-) diff --git a/cli/pom.xml b/cli/pom.xml index b4e780844f..5cb529ccec 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -83,9 +83,9 @@ build214-jenkins-1
- com.google.code.findbugs - annotations - provided + com.github.spotbugs + spotbugs-annotations + true commons-lang @@ -155,10 +155,6 @@ - - org.codehaus.mojo - findbugs-maven-plugin - diff --git a/core/pom.xml b/core/pom.xml index ceeb5f473c..368b47db5b 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -594,9 +594,9 @@ THE SOFTWARE. - com.google.code.findbugs - annotations - provided + com.github.spotbugs + spotbugs-annotations + true @@ -806,10 +806,6 @@ THE SOFTWARE. - - org.codehaus.mojo - findbugs-maven-plugin - @@ -872,11 +868,11 @@ THE SOFTWARE. - - - findbugs + + + spotbugs - + true diff --git a/core/src/main/java/jenkins/security/apitoken/LegacyApiTokenAdministrativeMonitor.java b/core/src/main/java/jenkins/security/apitoken/LegacyApiTokenAdministrativeMonitor.java index d2463aa404..dd64894006 100644 --- a/core/src/main/java/jenkins/security/apitoken/LegacyApiTokenAdministrativeMonitor.java +++ b/core/src/main/java/jenkins/security/apitoken/LegacyApiTokenAdministrativeMonitor.java @@ -96,7 +96,7 @@ public class LegacyApiTokenAdministrativeMonitor extends AdministrativeMonitor { // used by Jelly view @Restricted(NoExternalUse.class) - public @Nullable ApiTokenProperty.TokenInfoAndStats getLegacyStatsOf(@Nonnull User user, @Nullable ApiTokenStore.HashedToken legacyToken) { + public @Nullable ApiTokenProperty.TokenInfoAndStats getLegacyStatsOf(@Nonnull User user, ApiTokenStore.HashedToken legacyToken) { ApiTokenProperty apiTokenProperty = user.getProperty(ApiTokenProperty.class); if (legacyToken != null) { ApiTokenStats.SingleTokenStats legacyStats = apiTokenProperty.getTokenStats().findTokenStatsById(legacyToken.getUuid()); @@ -112,7 +112,7 @@ public class LegacyApiTokenAdministrativeMonitor extends AdministrativeMonitor { */ // used by Jelly view @Restricted(NoExternalUse.class) - public boolean hasFreshToken(@Nonnull User user, @Nullable ApiTokenProperty.TokenInfoAndStats legacyStats) { + public boolean hasFreshToken(@Nonnull User user, ApiTokenProperty.TokenInfoAndStats legacyStats) { if (legacyStats == null) { return false; } @@ -136,7 +136,7 @@ public class LegacyApiTokenAdministrativeMonitor extends AdministrativeMonitor { */ // used by Jelly view @Restricted(NoExternalUse.class) - public boolean hasMoreRecentlyUsedToken(@Nonnull User user, @Nullable ApiTokenProperty.TokenInfoAndStats legacyStats) { + public boolean hasMoreRecentlyUsedToken(@Nonnull User user, ApiTokenProperty.TokenInfoAndStats legacyStats) { if (legacyStats == null) { return false; } diff --git a/core/src/main/java/jenkins/triggers/ReverseBuildTrigger.java b/core/src/main/java/jenkins/triggers/ReverseBuildTrigger.java index 434a10c09d..2ad02dccf5 100644 --- a/core/src/main/java/jenkins/triggers/ReverseBuildTrigger.java +++ b/core/src/main/java/jenkins/triggers/ReverseBuildTrigger.java @@ -289,6 +289,10 @@ public final class ReverseBuildTrigger extends Trigger implements Dependenc } for (final ReverseBuildTrigger trigger : triggers) { if (trigger.shouldTrigger(r, listener)) { + // Make SpotBugs happy. + if (trigger.job == null) { + continue; + } if (!trigger.job.isBuildable()) { listener.getLogger().println(hudson.tasks.Messages.BuildTrigger_Disabled(ModelHyperlinkNote.encodeTo(trigger.job))); continue; diff --git a/pom.xml b/pom.xml index b7e66b93c9..72d50a2470 100644 --- a/pom.xml +++ b/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci jenkins - 1.51 + 1.52 @@ -630,8 +630,8 @@ THE SOFTWARE. - org.codehaus.mojo - findbugs-maven-plugin + com.github.spotbugs + spotbugs-maven-plugin High diff --git a/test-pom/pom.xml b/test-pom/pom.xml index 36b18e666f..3e9e75fb1f 100644 --- a/test-pom/pom.xml +++ b/test-pom/pom.xml @@ -43,6 +43,16 @@ THE SOFTWARE.
+ + + + com.google.code.findbugs + annotations + 3.0.1 + provided + + + ${project.groupId} -- GitLab From 098e6d3832f6eadfbf39d8c1cc1d1d2bff1eab2d Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Sun, 16 Jun 2019 22:11:37 -0700 Subject: [PATCH 373/476] [maven-release-plugin] prepare release jenkins-2.181 --- cli/pom.xml | 2 +- core/pom.xml | 2 +- pom.xml | 4 ++-- test-jdk8/pom.xml | 2 +- test-pom/pom.xml | 2 +- test/pom.xml | 2 +- war/pom.xml | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/cli/pom.xml b/cli/pom.xml index 5cb529ccec..5f1fc7f29f 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -5,7 +5,7 @@ org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.181 cli diff --git a/core/pom.xml b/core/pom.xml index 368b47db5b..a4f959c508 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -29,7 +29,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.181 jenkins-core diff --git a/pom.xml b/pom.xml index 72d50a2470..b96827068f 100644 --- a/pom.xml +++ b/pom.xml @@ -34,7 +34,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.181 pom Jenkins main module @@ -60,7 +60,7 @@ THE SOFTWARE. scm:git:git://github.com/jenkinsci/jenkins.git scm:git:ssh://git@github.com/jenkinsci/jenkins.git https://github.com/jenkinsci/jenkins - ${scmTag} + jenkins-2.181 diff --git a/test-jdk8/pom.xml b/test-jdk8/pom.xml index 70c4870837..6fbfb3d984 100644 --- a/test-jdk8/pom.xml +++ b/test-jdk8/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-test-parent - ${revision}${changelist} + 2.181 ../test-pom diff --git a/test-pom/pom.xml b/test-pom/pom.xml index 3e9e75fb1f..8e8b560273 100644 --- a/test-pom/pom.xml +++ b/test-pom/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.181 jenkins-test-parent diff --git a/test/pom.xml b/test/pom.xml index 4c5abecc6f..e15204bf0b 100644 --- a/test/pom.xml +++ b/test/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-test-parent - ${revision}${changelist} + 2.181 ../test-pom diff --git a/war/pom.xml b/war/pom.xml index 5bcfd78481..de31f87668 100644 --- a/war/pom.xml +++ b/war/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.181 jenkins-war -- GitLab From bc40ab3ae57178d477fe919b12ed761080df7d6b Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Sun, 16 Jun 2019 22:12:00 -0700 Subject: [PATCH 374/476] [maven-release-plugin] prepare for next development iteration --- cli/pom.xml | 2 +- core/pom.xml | 2 +- pom.xml | 6 +++--- test-jdk8/pom.xml | 2 +- test-pom/pom.xml | 2 +- test/pom.xml | 2 +- war/pom.xml | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/cli/pom.xml b/cli/pom.xml index 5f1fc7f29f..5cb529ccec 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -5,7 +5,7 @@ org.jenkins-ci.main jenkins-parent - 2.181 + ${revision}${changelist} cli diff --git a/core/pom.xml b/core/pom.xml index a4f959c508..368b47db5b 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -29,7 +29,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.181 + ${revision}${changelist} jenkins-core diff --git a/pom.xml b/pom.xml index b96827068f..650c4a5ec6 100644 --- a/pom.xml +++ b/pom.xml @@ -34,7 +34,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.181 + ${revision}${changelist} pom Jenkins main module @@ -60,7 +60,7 @@ THE SOFTWARE. scm:git:git://github.com/jenkinsci/jenkins.git scm:git:ssh://git@github.com/jenkinsci/jenkins.git https://github.com/jenkinsci/jenkins - jenkins-2.181 + ${scmTag} @@ -76,7 +76,7 @@ THE SOFTWARE. - 2.181 + 2.182 -SNAPSHOT - 3.29 + 3.33 3.4 -- GitLab From f23b93a6d5e9e0435532bd06a1061d640fdbcdf0 Mon Sep 17 00:00:00 2001 From: mawinter69 Date: Sat, 22 Jun 2019 22:45:03 +0200 Subject: [PATCH 380/476] [JENKINS-57855] read-only flag of folders on windows (#4059) * [JENKINS-57855] read-only flag of folders on windows On windows the current way of removing the read only flag is not working for folders. Using the Files api this can be solved. * code formatting --- .../java/jenkins/util/io/PathRemover.java | 26 ++++++++++++++----- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/core/src/main/java/jenkins/util/io/PathRemover.java b/core/src/main/java/jenkins/util/io/PathRemover.java index ece2e04bbf..8fd8688b16 100644 --- a/core/src/main/java/jenkins/util/io/PathRemover.java +++ b/core/src/main/java/jenkins/util/io/PathRemover.java @@ -24,18 +24,13 @@ package jenkins.util.io; -import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; -import hudson.Functions; -import hudson.Util; -import org.kohsuke.accmod.Restricted; -import org.kohsuke.accmod.restrictions.NoExternalUse; - -import javax.annotation.Nonnull; import java.io.IOException; import java.nio.file.DirectoryStream; import java.nio.file.Files; +import java.nio.file.LinkOption; import java.nio.file.NoSuchFileException; import java.nio.file.Path; +import java.nio.file.attribute.DosFileAttributeView; import java.nio.file.attribute.PosixFileAttributes; import java.nio.file.attribute.PosixFilePermission; import java.util.ArrayList; @@ -45,6 +40,15 @@ import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; +import javax.annotation.Nonnull; + +import org.kohsuke.accmod.Restricted; +import org.kohsuke.accmod.restrictions.NoExternalUse; + +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; +import hudson.Functions; +import hudson.Util; + @Restricted(NoExternalUse.class) public class PathRemover { @@ -285,6 +289,14 @@ public class PathRemover { } catch (UnsupportedOperationException ignored) { // PosixFileAttributes not supported, fall back to old IO. } + } else { + /* + * If on Windows a folder has a read only attribute set, the file.setWritable(true) doesn't work (JENKINS-57855) + */ + DosFileAttributeView dos = Files.getFileAttributeView(path, DosFileAttributeView.class, LinkOption.NOFOLLOW_LINKS); + if (dos != null) { + dos.setReadOnly(false); + } } /* -- GitLab From a5e29cb5cf8a525937fb421fca38dfed4c481a41 Mon Sep 17 00:00:00 2001 From: Mustafa Ulu Date: Sat, 22 Jun 2019 20:45:43 +0000 Subject: [PATCH 381/476] [JENKINS-57922] - Ability to specify target directory for translation-tool.pl (#4083) * [JENKINS-57922] - Ability to specify output directory for translation-tool.pl * Prevent printing everything on same line if values are empty --- translation-tool.pl | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/translation-tool.pl b/translation-tool.pl index c062415cc4..53612a9d5f 100755 --- a/translation-tool.pl +++ b/translation-tool.pl @@ -42,9 +42,11 @@ # to Jenkins instead of the old name. use strict; +use File::Basename; use File::Find; +use File::Path; -my ($lang, $editor, $dir, $toiso, $toascii, $add, $remove, $reuse, $counter) = (undef, undef, "./", undef, undef, undef, undef, undef, undef); +my ($lang, $editor, $dir, $toiso, $toascii, $add, $remove, $reuse, $counter, $target) = (undef, undef, "./", undef, undef, undef, undef, undef, undef, "./"); my ($tfiles, $tkeys, $tmissing, $tunused, $tempty, $tsame, $tnojenkins, $countervalue) = (0, 0, 0, 0, 0, 0, 0, 1); ## read arguments foreach (@ARGV) { @@ -64,6 +66,8 @@ foreach (@ARGV) { $reuse = $1; } elsif (/^--counter$/ || /^--counter=true$/) { $counter = 1; + } elsif (/^--target=(.*)$/) { + $target = $1; } else { $dir=$_; } @@ -122,6 +126,7 @@ sub processFile { # efile -> english file my $file = shift; my ($ofile, $efile) = ($file, $file); + $ofile =~ s/$dir/$target/; $ofile =~ s/(\.jelly)|(\.properties)/_$lang.properties/; $efile =~ s/(\.jelly)/.properties/; @@ -199,6 +204,8 @@ sub processFile { if ($counter) { # add unique value for each added translation print F "---TranslateMe ".$countervalue."--- ".($ekeys{$_} ? $ekeys{$_} : $_)."\n"; + } else { + print F "\n"; } } $countervalue++; @@ -367,6 +374,7 @@ sub isUtf8 { # Note: the license is read from the head of this file my $license; sub printLicense { + my $file = shift; if (!$license && open(F, $0)) { $license = ""; my $on = 0; @@ -378,7 +386,11 @@ sub printLicense { close(F); } if ($license && $license ne "") { - open(F, ">" . shift) || die $!; + my $dirname = dirname($file); + unless (-d $dirname) { + mkpath($dirname); + } + open(F, ">" . $file) || die $!; print F "$license\n"; close(F); } @@ -412,6 +424,7 @@ Usage: $0 --lang=xx [options] [dir] order to utilize them when the same key appears --counter=true -> to each translated key, unique value is added to easily identify match missing translation with value in source code (default false) + --target=folder -> target folder for writing files Examples: - Look for Spanish files with incomplete keys in the 'main' folder, -- GitLab From b39c8203f732b28dc80391caf35d541337c713f5 Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Sun, 23 Jun 2019 20:15:57 -0700 Subject: [PATCH 382/476] [maven-release-plugin] prepare release jenkins-2.182 --- cli/pom.xml | 2 +- core/pom.xml | 2 +- pom.xml | 4 ++-- test-jdk8/pom.xml | 2 +- test-pom/pom.xml | 2 +- test/pom.xml | 2 +- war/pom.xml | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/cli/pom.xml b/cli/pom.xml index 5cb529ccec..32594ff868 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -5,7 +5,7 @@ org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.182 cli diff --git a/core/pom.xml b/core/pom.xml index 368b47db5b..efb7c9ef0e 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -29,7 +29,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.182 jenkins-core diff --git a/pom.xml b/pom.xml index fe63242b6f..7f9614a759 100644 --- a/pom.xml +++ b/pom.xml @@ -34,7 +34,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.182 pom Jenkins main module @@ -60,7 +60,7 @@ THE SOFTWARE. scm:git:git://github.com/jenkinsci/jenkins.git scm:git:ssh://git@github.com/jenkinsci/jenkins.git https://github.com/jenkinsci/jenkins - ${scmTag} + jenkins-2.182 diff --git a/test-jdk8/pom.xml b/test-jdk8/pom.xml index 70c4870837..b831704a44 100644 --- a/test-jdk8/pom.xml +++ b/test-jdk8/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-test-parent - ${revision}${changelist} + 2.182 ../test-pom diff --git a/test-pom/pom.xml b/test-pom/pom.xml index 3e9e75fb1f..ee3aeb5e73 100644 --- a/test-pom/pom.xml +++ b/test-pom/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.182 jenkins-test-parent diff --git a/test/pom.xml b/test/pom.xml index 4c5abecc6f..cbd69588a2 100644 --- a/test/pom.xml +++ b/test/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-test-parent - ${revision}${changelist} + 2.182 ../test-pom diff --git a/war/pom.xml b/war/pom.xml index 5bcfd78481..7bafb0da6d 100644 --- a/war/pom.xml +++ b/war/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.182 jenkins-war -- GitLab From 57a3268afb749c84196ce5fa3cfd51b08cda1328 Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Sun, 23 Jun 2019 20:16:11 -0700 Subject: [PATCH 383/476] [maven-release-plugin] prepare for next development iteration --- cli/pom.xml | 2 +- core/pom.xml | 2 +- pom.xml | 6 +++--- test-jdk8/pom.xml | 2 +- test-pom/pom.xml | 2 +- test/pom.xml | 2 +- war/pom.xml | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/cli/pom.xml b/cli/pom.xml index 32594ff868..5cb529ccec 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -5,7 +5,7 @@ org.jenkins-ci.main jenkins-parent - 2.182 + ${revision}${changelist} cli diff --git a/core/pom.xml b/core/pom.xml index efb7c9ef0e..368b47db5b 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -29,7 +29,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.182 + ${revision}${changelist} jenkins-core diff --git a/pom.xml b/pom.xml index 7f9614a759..372bd7c493 100644 --- a/pom.xml +++ b/pom.xml @@ -34,7 +34,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.182 + ${revision}${changelist} pom Jenkins main module @@ -60,7 +60,7 @@ THE SOFTWARE. scm:git:git://github.com/jenkinsci/jenkins.git scm:git:ssh://git@github.com/jenkinsci/jenkins.git https://github.com/jenkinsci/jenkins - jenkins-2.182 + ${scmTag} @@ -76,7 +76,7 @@ THE SOFTWARE. - 2.182 + 2.183 -SNAPSHOT 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Μbq>lA1g+G`gvO)_BT{w-6NN1qo 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 delta 97652 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 diff --git a/test/src/test/resources/jenkins/install/LoadDetachedPluginsTest/upgradeFromJenkins2WithOlderDependency/jenkins.install.InstallUtil.lastExecVersion b/test/src/test/resources/jenkins/install/LoadDetachedPluginsTest/upgradeFromJenkins2WithOlderDependency/jenkins.install.InstallUtil.lastExecVersion new file mode 100644 index 0000000000..415b19fc36 --- /dev/null +++ b/test/src/test/resources/jenkins/install/LoadDetachedPluginsTest/upgradeFromJenkins2WithOlderDependency/jenkins.install.InstallUtil.lastExecVersion @@ -0,0 +1 @@ +2.0 \ No newline at end of file diff --git a/test/src/test/resources/jenkins/install/LoadDetachedPluginsTest/upgradeFromJenkins2WithOlderDependency.zip b/test/src/test/resources/jenkins/install/LoadDetachedPluginsTest/upgradeFromJenkins2WithOlderDependency/plugins/script-security.jpi similarity index 77% rename from test/src/test/resources/jenkins/install/LoadDetachedPluginsTest/upgradeFromJenkins2WithOlderDependency.zip rename to test/src/test/resources/jenkins/install/LoadDetachedPluginsTest/upgradeFromJenkins2WithOlderDependency/plugins/script-security.jpi index b85561cf0dd5f0bed6182727cd246cc1404263bb..5a8e624bca63c4acbb8d04f802101b901e04c3e9 100644 GIT binary patch delta 38306 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 org.jenkins-ci.plugins script-security - 1.18.1 + 1.56 hpi -- GitLab From 4f76cac36ebe1823c80e6f5ad978176a2844fb70 Mon Sep 17 00:00:00 2001 From: Oleg Nenashev Date: Fri, 17 May 2019 18:55:00 +0200 Subject: [PATCH 391/476] Merge pull request #4029 from oleg-nenashev/winp/1.28-2 [JENKINS-57477] - Update to WinP 1.28 to fix process termination logic on Windows (cherry picked from commit 4a168c6cb29a42f20047385adfc528c4e3d0390c) --- core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/pom.xml b/core/pom.xml index 276901c0e7..e3443ad2fd 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -514,7 +514,7 @@ THE SOFTWARE. org.jvnet.winp winp - 1.27 + 1.28 org.jenkins-ci -- GitLab From f5099f96253ecab6798b16508f5dd3649bd55f7f Mon Sep 17 00:00:00 2001 From: Oleg Nenashev Date: Sat, 15 Jun 2019 11:10:56 +0200 Subject: [PATCH 392/476] Merge pull request #4066 from jglick/quiet-JENKINS-57993 [JENKINS-57993] Avoid printing stack traces for some common agent conditions (cherry picked from commit dcc395b814dbf61ad244dffe6b43cf9005d2c3a0) --- .../main/java/hudson/TcpSlaveAgentListener.java | 8 ++++++-- .../AbstractAsyncNodeMonitorDescriptor.java | 14 ++++++++++++-- .../jenkins/slaves/DefaultJnlpSlaveReceiver.java | 5 ++++- 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/core/src/main/java/hudson/TcpSlaveAgentListener.java b/core/src/main/java/hudson/TcpSlaveAgentListener.java index 1c68ca8728..659cf2da1c 100644 --- a/core/src/main/java/hudson/TcpSlaveAgentListener.java +++ b/core/src/main/java/hudson/TcpSlaveAgentListener.java @@ -43,13 +43,13 @@ import hudson.slaves.OfflineCause; import java.io.DataOutputStream; import java.io.InputStream; import java.io.OutputStream; -import java.io.UnsupportedEncodingException; import java.net.SocketAddress; import java.util.Arrays; import jenkins.AgentProtocol; import java.io.BufferedWriter; import java.io.DataInputStream; +import java.io.EOFException; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.PrintWriter; @@ -286,7 +286,11 @@ public final class TcpSlaveAgentListener extends Thread { // try to clean up the socket } } catch (IOException e) { - LOGGER.log(Level.WARNING,"Connection #"+id+" failed",e); + if (e instanceof EOFException) { + LOGGER.log(Level.INFO, "Connection #{0} failed: {1}", new Object[] {id, e}); + } else { + LOGGER.log(Level.WARNING, "Connection #" + id + " failed", e); + } try { s.close(); } catch (IOException ex) { diff --git a/core/src/main/java/hudson/node_monitors/AbstractAsyncNodeMonitorDescriptor.java b/core/src/main/java/hudson/node_monitors/AbstractAsyncNodeMonitorDescriptor.java index ed68e6198e..5ef4eff637 100644 --- a/core/src/main/java/hudson/node_monitors/AbstractAsyncNodeMonitorDescriptor.java +++ b/core/src/main/java/hudson/node_monitors/AbstractAsyncNodeMonitorDescriptor.java @@ -1,8 +1,10 @@ package hudson.node_monitors; +import hudson.Functions; import hudson.model.Computer; import hudson.remoting.Callable; import hudson.remoting.VirtualChannel; +import hudson.slaves.SlaveComputer; import jenkins.model.Jenkins; import javax.annotation.CheckForNull; @@ -93,7 +95,7 @@ public abstract class AbstractAsyncNodeMonitorDescriptor extends AbstractNode futures.put(c,ch.callAsync(cc)); } } catch (RuntimeException | IOException e) { - LOGGER.log(WARNING, "Failed to monitor "+c.getDisplayName()+" for "+getDisplayName(), e); + error(c, e); } } @@ -111,7 +113,7 @@ public abstract class AbstractAsyncNodeMonitorDescriptor extends AbstractNode try { data.put(c,f.get(Math.max(0,end-System.currentTimeMillis()), MILLISECONDS)); } catch (RuntimeException | TimeoutException | ExecutionException x) { - LOGGER.log(WARNING, "Failed to monitor " + c.getDisplayName() + " for " + getDisplayName(), x); + error(c, x); } } else { skipped.add(c); @@ -121,6 +123,14 @@ public abstract class AbstractAsyncNodeMonitorDescriptor extends AbstractNode return new Result<>(data, skipped); } + private void error(Computer c, Throwable x) { + if (c instanceof SlaveComputer) { + Functions.printStackTrace(x, ((SlaveComputer) c).getListener().error("Failed to monitor for " + getDisplayName())); + } else { + LOGGER.log(WARNING, "Failed to monitor " + c.getDisplayName() + " for " + getDisplayName(), x); + } + } + private static final Logger LOGGER = Logger.getLogger(AbstractAsyncNodeMonitorDescriptor.class.getName()); /** diff --git a/core/src/main/java/jenkins/slaves/DefaultJnlpSlaveReceiver.java b/core/src/main/java/jenkins/slaves/DefaultJnlpSlaveReceiver.java index 1a53839c50..ce74648e13 100644 --- a/core/src/main/java/jenkins/slaves/DefaultJnlpSlaveReceiver.java +++ b/core/src/main/java/jenkins/slaves/DefaultJnlpSlaveReceiver.java @@ -24,6 +24,7 @@ import jenkins.util.SystemProperties; import org.jenkinsci.remoting.engine.JnlpConnectionState; import java.io.IOException; +import java.nio.channels.ClosedChannelException; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; @@ -181,7 +182,9 @@ public class DefaultJnlpSlaveReceiver extends JnlpAgentReceiver { public void channelClosed(@NonNull JnlpConnectionState event) { final String nodeName = event.getProperty(JnlpConnectionState.CLIENT_NAME_KEY); IOException cause = event.getCloseCause(); - if (cause != null) { + if (cause instanceof ClosedChannelException) { + LOGGER.log(Level.INFO, "{0} for {1} terminated: {2}", new Object[] {Thread.currentThread().getName(), nodeName, cause}); + } else if (cause != null) { LOGGER.log(Level.WARNING, Thread.currentThread().getName() + " for " + nodeName + " terminated", cause); } -- GitLab From 7852ca443225fdf7d975c559ec93a5c0edf27d5e Mon Sep 17 00:00:00 2001 From: Devin Nusbaum Date: Thu, 13 Jun 2019 16:27:38 -0400 Subject: [PATCH 393/476] [JENKINS-57725] - Wrap Proc.executor in ClassLoaderSanityThreadFactory (#4035) (cherry picked from commit b18b2e686db5a790d2e5b62313c9e0983d076883) --- core/src/main/java/hudson/Proc.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/hudson/Proc.java b/core/src/main/java/hudson/Proc.java index b218017522..4c12db4f31 100644 --- a/core/src/main/java/hudson/Proc.java +++ b/core/src/main/java/hudson/Proc.java @@ -26,6 +26,7 @@ package hudson; import hudson.Launcher.ProcStarter; import hudson.model.TaskListener; import hudson.remoting.Channel; +import hudson.util.ClassLoaderSanityThreadFactory; import hudson.util.DaemonThreadFactory; import hudson.util.ExceptionCatchingThreadFactory; import hudson.util.NamingThreadFactory; @@ -138,7 +139,7 @@ public abstract class Proc { @CheckForNull public abstract OutputStream getStdin(); - private static final ExecutorService executor = Executors.newCachedThreadPool(new ExceptionCatchingThreadFactory(new NamingThreadFactory(new DaemonThreadFactory(), "Proc.executor"))); + private static final ExecutorService executor = Executors.newCachedThreadPool(new ExceptionCatchingThreadFactory(new NamingThreadFactory(new ClassLoaderSanityThreadFactory(new DaemonThreadFactory()), "Proc.executor"))); /** * Like {@link #join} but can be given a maximum time to wait. -- GitLab From a604ddc73903365df7c37a75e58d34b9873a4e40 Mon Sep 17 00:00:00 2001 From: mawinter69 Date: Fri, 14 Jun 2019 10:18:02 +0200 Subject: [PATCH 394/476] [JENKINS-57515] update JNA library from 4.5.2 to 5.3.1 (#4060) * [JENKINS-57515] update jna library to 5.3.1 This solves problems with loading native libraries of jna on AIX platform when using openJDK or other JDKs that assume .so is the extension for shared libraries * Pointer.SIZE -> Native.POINTER_SIZE * remove unnecessary import * adjust to changed api (cherry picked from commit ffa9abf6e3104c6f1701432013aca7776203adef) --- core/pom.xml | 2 +- core/src/main/java/hudson/util/ProcessTree.java | 3 +-- core/src/main/java/hudson/util/jna/Kernel32Utils.java | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/core/pom.xml b/core/pom.xml index e3443ad2fd..be1384e126 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -534,7 +534,7 @@ THE SOFTWARE. net.java.dev.jna jna - 4.5.2 + 5.3.1 org.kohsuke diff --git a/core/src/main/java/hudson/util/ProcessTree.java b/core/src/main/java/hudson/util/ProcessTree.java index 4e2a4b3c14..e8e48915c6 100644 --- a/core/src/main/java/hudson/util/ProcessTree.java +++ b/core/src/main/java/hudson/util/ProcessTree.java @@ -26,7 +26,6 @@ package hudson.util; import com.sun.jna.Memory; import com.sun.jna.Native; import com.sun.jna.NativeLong; -import com.sun.jna.Pointer; import com.sun.jna.LastErrorException; import com.sun.jna.ptr.IntByReference; import hudson.EnvVars; @@ -1442,7 +1441,7 @@ public abstract class ProcessTree implements Iterable, IProcessTree, * Read the remainder of psinfo_t differently depending on whether the * Java process is 32-bit or 64-bit. */ - if (Pointer.SIZE == 8) { + if (Native.POINTER_SIZE == 8) { psinfo.seek(236); // offset of pr_argc argc = adjust(psinfo.readInt()); argp = adjustL(psinfo.readLong()); diff --git a/core/src/main/java/hudson/util/jna/Kernel32Utils.java b/core/src/main/java/hudson/util/jna/Kernel32Utils.java index 300c186a4c..b88c4c7f35 100644 --- a/core/src/main/java/hudson/util/jna/Kernel32Utils.java +++ b/core/src/main/java/hudson/util/jna/Kernel32Utils.java @@ -115,7 +115,7 @@ public class Kernel32Utils { public static File getTempDir() { Memory buf = new Memory(1024); if (Kernel32.INSTANCE.GetTempPathW(512,buf)!=0) {// the first arg is number of wchar - return new File(buf.getString(0, true)); + return new File(buf.getWideString(0)); } else { return null; } -- GitLab From ce9ac38e8574eb93a28ee69cea673fc5ba2c6747 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20Gond=C5=BEa?= Date: Mon, 1 Jul 2019 14:46:42 +0200 Subject: [PATCH 395/476] CI rebuild -- GitLab From 386dafd7bea21e280c89106b938c5cb6e31337f1 Mon Sep 17 00:00:00 2001 From: Matt Sicker Date: Mon, 1 Jul 2019 16:25:44 -0500 Subject: [PATCH 396/476] [JENKINS-56243] Ensure user seed saved to session This fixes the remember me service to link the user seed to a corresponding HTTP session. By doing so, this should significantly reduce the number of calls to loadUserDetails(). Signed-off-by: Matt Sicker --- .../TokenBasedRememberMeServices2.java | 8 +++++++ .../TokenBasedRememberMeServices2Test.java | 21 +++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/core/src/main/java/hudson/security/TokenBasedRememberMeServices2.java b/core/src/main/java/hudson/security/TokenBasedRememberMeServices2.java index bcea7405d3..4823a219d0 100644 --- a/core/src/main/java/hudson/security/TokenBasedRememberMeServices2.java +++ b/core/src/main/java/hudson/security/TokenBasedRememberMeServices2.java @@ -269,6 +269,14 @@ public class TokenBasedRememberMeServices2 extends TokenBasedRememberMeServices userDetails.getAuthorities()); auth.setDetails(authenticationDetailsSource.buildDetails(request)); + // Ensure this session is linked to the user's seed + if (!UserSeedProperty.DISABLE_USER_SEED) { + User user = User.get(auth); + UserSeedProperty userSeed = user.getProperty(UserSeedProperty.class); + String sessionSeed = userSeed.getSeed(); + request.getSession().setAttribute(UserSeedProperty.USER_SESSION_SEED, sessionSeed); + } + return auth; } diff --git a/test/src/test/java/hudson/security/TokenBasedRememberMeServices2Test.java b/test/src/test/java/hudson/security/TokenBasedRememberMeServices2Test.java index e98eb4354a..57e46bacca 100644 --- a/test/src/test/java/hudson/security/TokenBasedRememberMeServices2Test.java +++ b/test/src/test/java/hudson/security/TokenBasedRememberMeServices2Test.java @@ -8,6 +8,7 @@ import java.util.Arrays; import static java.util.logging.Level.FINEST; import java.util.stream.Collectors; +import hudson.model.User; import jenkins.model.Jenkins; import jenkins.security.seed.UserSeedProperty; @@ -29,6 +30,7 @@ import org.jvnet.hudson.test.For; import org.jvnet.hudson.test.Issue; import org.jvnet.hudson.test.JenkinsRule; import org.jvnet.hudson.test.LoggerRule; +import org.kohsuke.stapler.Stapler; import org.springframework.dao.DataAccessException; import java.util.concurrent.TimeUnit; @@ -289,6 +291,25 @@ public class TokenBasedRememberMeServices2Test { } } + @Test + @Issue("JENKINS-56243") + public void rememberMeToken_shouldSetUserSeedInSession() throws Exception { + j.jenkins.setDisableRememberMe(false); + j.jenkins.setSecurityRealm(j.createDummySecurityRealm()); + User alice = User.getOrCreateByIdOrFullName("alice"); + + // first, start a session with a remember me token + Cookie cookie = getRememberMeCookie(j.createWebClient().login("alice", "alice", true)); + // next, start a new session with that token + JenkinsRule.WebClient wc = j.createWebClient(); + wc.getCookieManager().addCookie(cookie); + // trigger remember me + String sessionSeed = wc.executeOnServer(() -> Stapler.getCurrentRequest().getSession(false).getAttribute(UserSeedProperty.USER_SESSION_SEED).toString()); + String userSeed = alice.getProperty(UserSeedProperty.class).getSeed(); + + assertEquals(userSeed, sessionSeed); + } + private Cookie createRememberMeCookie(TokenBasedRememberMeServices2 tokenService, long deltaDuration, hudson.model.User user) throws Exception { long tokenValiditySeconds = tokenService.getTokenValiditySeconds(); long expiryTime = System.currentTimeMillis() + TimeUnit.SECONDS.toMillis(tokenValiditySeconds); -- GitLab From 92d6063c40c35128a629eb2a803c331f347712a1 Mon Sep 17 00:00:00 2001 From: Matt Sicker Date: Tue, 2 Jul 2019 10:59:16 -0500 Subject: [PATCH 397/476] [JENKINS-56243] Improve tests This validates that the performance regression itself - redundant calls to loadUserByUsername() - is also fixed besides simply the implementation details of the user seed and session. Signed-off-by: Matt Sicker --- .../TokenBasedRememberMeServices2Test.java | 32 +++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/test/src/test/java/hudson/security/TokenBasedRememberMeServices2Test.java b/test/src/test/java/hudson/security/TokenBasedRememberMeServices2Test.java index 57e46bacca..8b711c899d 100644 --- a/test/src/test/java/hudson/security/TokenBasedRememberMeServices2Test.java +++ b/test/src/test/java/hudson/security/TokenBasedRememberMeServices2Test.java @@ -32,7 +32,9 @@ import org.jvnet.hudson.test.JenkinsRule; import org.jvnet.hudson.test.LoggerRule; import org.kohsuke.stapler.Stapler; import org.springframework.dao.DataAccessException; +import test.security.realm.InMemorySecurityRealm; +import javax.annotation.concurrent.GuardedBy; import java.util.concurrent.TimeUnit; import static org.hamcrest.Matchers.is; @@ -293,10 +295,13 @@ public class TokenBasedRememberMeServices2Test { @Test @Issue("JENKINS-56243") - public void rememberMeToken_shouldSetUserSeedInSession() throws Exception { + public void rememberMeToken_shouldLoadUserDetailsOnlyOnce() throws Exception { j.jenkins.setDisableRememberMe(false); - j.jenkins.setSecurityRealm(j.createDummySecurityRealm()); + LoadUserCountingSecurityRealm realm = new LoadUserCountingSecurityRealm(); + realm.createAccount("alice"); + j.jenkins.setSecurityRealm(realm); User alice = User.getOrCreateByIdOrFullName("alice"); + realm.verifyInvocations(1); // first, start a session with a remember me token Cookie cookie = getRememberMeCookie(j.createWebClient().login("alice", "alice", true)); @@ -305,9 +310,32 @@ public class TokenBasedRememberMeServices2Test { wc.getCookieManager().addCookie(cookie); // trigger remember me String sessionSeed = wc.executeOnServer(() -> Stapler.getCurrentRequest().getSession(false).getAttribute(UserSeedProperty.USER_SESSION_SEED).toString()); + realm.verifyInvocations(1); String userSeed = alice.getProperty(UserSeedProperty.class).getSeed(); assertEquals(userSeed, sessionSeed); + + // finally, ensure that loadUserByUsername is not being called anymore + wc.goTo(""); + assertUserConnected(wc, "alice"); + realm.verifyInvocations(0); + } + + private static class LoadUserCountingSecurityRealm extends InMemorySecurityRealm { + // if this class wasn't serialized into config.xml, this could be replaced by @Spy from Mockito + @GuardedBy("this") + private int counter = 0; + + @Override + public synchronized UserDetails loadUserByUsername(String username) throws UsernameNotFoundException, DataAccessException { + ++counter; + return super.loadUserByUsername(username); + } + + synchronized void verifyInvocations(int count) { + assertEquals(count, counter); + counter = 0; + } } private Cookie createRememberMeCookie(TokenBasedRememberMeServices2 tokenService, long deltaDuration, hudson.model.User user) throws Exception { -- GitLab From 279d8109eddb7a494428baf25af9756c2e33576b Mon Sep 17 00:00:00 2001 From: Matt Sicker Date: Tue, 2 Jul 2019 12:20:41 -0600 Subject: [PATCH 398/476] [SECURITY-534] --- core/pom.xml | 4 +- core/src/main/java/hudson/Functions.java | 1 + .../hudson/widgets/RenderOnDemandClosure.java | 1 + core/src/main/java/jenkins/model/Jenkins.java | 8 +- .../stapler/StaplerDispatchValidator.java | 354 ++++++++++++++++++ .../StaplerFilteredActionListener.java | 13 +- core/src/main/resources/hudson/atom.jelly | 4 +- .../hudson/model/Computer/_scriptText.jelly | 7 +- .../resources/hudson/model/View/cc.xml.jelly | 7 +- core/src/main/resources/hudson/rss20.jelly | 6 +- .../HudsonPrivateSecurityRealm/signup.jelly | 8 +- .../SlaveComputer/slave-agent.jnlp.jelly | 4 +- .../jenkins/model/Jenkins/_scriptText.jelly | 7 +- .../jenkins/model/Jenkins/login.jelly | 5 +- .../model/Jenkins/opensearch.xml.jelly | 8 +- .../stapler/default-views-whitelist.txt | 34 ++ core/src/main/resources/lib/layout/ajax.jelly | 9 +- core/src/main/resources/lib/layout/html.jelly | 5 +- .../main/resources/lib/layout/layout.jelly | 5 +- core/src/main/resources/lib/layout/view.jelly | 40 ++ .../security/stapler/Security867Test.java | 2 + .../stapler/StaplerDispatchValidatorTest.java | 179 +++++++++ .../resources/hudson/HtmlEscapeTest/foo.jelly | 31 +- .../BasicPluginManagerOverride/newview.jelly | 7 +- .../Annotated/explicitFrag.jelly | 27 ++ .../Annotated/explicitRoot.jelly | 29 ++ .../Annotated/frag.jelly | 27 ++ .../Annotated/index.jelly | 28 ++ .../Annotated/root.jelly | 29 ++ .../Extended/whitelistedRoot.jelly | 29 ++ .../Groovy/compress.groovy | 34 ++ .../Groovy/error.groovy | 27 ++ .../Groovy/frag.groovy | 28 ++ .../Groovy/include.groovy | 27 ++ .../Groovy/index.groovy | 29 ++ .../Groovy/redirect.groovy | 27 ++ .../Groovy/root.groovy | 32 ++ .../Jelly/compress.jelly | 31 ++ .../Jelly/error.jelly | 27 ++ .../Jelly/frag.jelly | 27 ++ .../Jelly/include.jelly | 27 ++ .../Jelly/index.jelly | 28 ++ .../Jelly/redirect.jelly | 27 ++ .../Jelly/root.jelly | 29 ++ .../Whitelist/frag.jelly | 27 ++ .../Whitelist/root.jelly | 29 ++ .../whitelist.txt | 2 + .../RenderOnDemandTest/externalScript.jelly | 4 +- 48 files changed, 1312 insertions(+), 68 deletions(-) create mode 100644 core/src/main/java/jenkins/security/stapler/StaplerDispatchValidator.java create mode 100644 core/src/main/resources/jenkins/security/stapler/default-views-whitelist.txt create mode 100644 core/src/main/resources/lib/layout/view.jelly create mode 100644 test/src/test/java/jenkins/security/stapler/StaplerDispatchValidatorTest.java create mode 100644 test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Annotated/explicitFrag.jelly create mode 100644 test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Annotated/explicitRoot.jelly create mode 100644 test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Annotated/frag.jelly create mode 100644 test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Annotated/index.jelly create mode 100644 test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Annotated/root.jelly create mode 100644 test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Extended/whitelistedRoot.jelly create mode 100644 test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Groovy/compress.groovy create mode 100644 test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Groovy/error.groovy create mode 100644 test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Groovy/frag.groovy create mode 100644 test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Groovy/include.groovy create mode 100644 test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Groovy/index.groovy create mode 100644 test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Groovy/redirect.groovy create mode 100644 test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Groovy/root.groovy create mode 100644 test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Jelly/compress.jelly create mode 100644 test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Jelly/error.jelly create mode 100644 test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Jelly/frag.jelly create mode 100644 test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Jelly/include.jelly create mode 100644 test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Jelly/index.jelly create mode 100644 test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Jelly/redirect.jelly create mode 100644 test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Jelly/root.jelly create mode 100644 test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Whitelist/frag.jelly create mode 100644 test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Whitelist/root.jelly create mode 100644 test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/whitelist.txt diff --git a/core/pom.xml b/core/pom.xml index 009dcd4dc2..457910ec5a 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -39,7 +39,7 @@ THE SOFTWARE. true - 1.256 + 1.256.1 2.5.6.SEC03 2.4.11 @@ -180,7 +180,7 @@ THE SOFTWARE. io.jenkins.stapler jenkins-stapler-support - 1.0 + 1.1 org.hamcrest diff --git a/core/src/main/java/hudson/Functions.java b/core/src/main/java/hudson/Functions.java index 9a0b27ce90..dfcdbf2d21 100644 --- a/core/src/main/java/hudson/Functions.java +++ b/core/src/main/java/hudson/Functions.java @@ -240,6 +240,7 @@ public class Functions { public static void initPageVariables(JellyContext context) { StaplerRequest currentRequest = Stapler.getCurrentRequest(); + currentRequest.getWebApp().getDispatchValidator().allowDispatch(currentRequest, Stapler.getCurrentResponse()); String rootURL = currentRequest.getContextPath(); Functions h = new Functions(); diff --git a/core/src/main/java/hudson/widgets/RenderOnDemandClosure.java b/core/src/main/java/hudson/widgets/RenderOnDemandClosure.java index 05c3611a86..399d19419a 100644 --- a/core/src/main/java/hudson/widgets/RenderOnDemandClosure.java +++ b/core/src/main/java/hudson/widgets/RenderOnDemandClosure.java @@ -95,6 +95,7 @@ public class RenderOnDemandClosure { public HttpResponse render() { return new HttpResponse() { public void generateResponse(StaplerRequest req, StaplerResponse rsp, Object node) throws IOException, ServletException { + req.getWebApp().getDispatchValidator().allowDispatch(req, rsp); try { new DefaultScriptInvoker() { @Override diff --git a/core/src/main/java/jenkins/model/Jenkins.java b/core/src/main/java/jenkins/model/Jenkins.java index ca27861493..b6a6460a20 100644 --- a/core/src/main/java/jenkins/model/Jenkins.java +++ b/core/src/main/java/jenkins/model/Jenkins.java @@ -39,6 +39,7 @@ import hudson.Launcher.LocalLauncher; import jenkins.AgentProtocol; import jenkins.diagnostics.URICheckEncodingMonitor; import jenkins.security.stapler.DoActionFilter; +import jenkins.security.stapler.StaplerDispatchValidator; import jenkins.security.stapler.StaplerFilteredActionListener; import jenkins.security.stapler.StaplerDispatchable; import jenkins.security.RedactSecretJsonInErrorMessageSanitizer; @@ -913,6 +914,9 @@ public class Jenkins extends AbstractCIBase implements DirectlyModifiableTopLeve webApp.setFilteredDoActionTriggerListener(actionListener); webApp.setFilteredFieldTriggerListener(actionListener); + webApp.setDispatchValidator(new StaplerDispatchValidator()); + webApp.setFilteredDispatchTriggerListener(actionListener); + adjuncts = new AdjunctManager(servletContext, pluginManager.uberClassLoader,"adjuncts/"+SESSION_HASH, TimeUnit.DAYS.toMillis(365)); ClassFilterImpl.register(); @@ -4416,9 +4420,9 @@ public class Jenkins extends AbstractCIBase implements DirectlyModifiableTopLeve @RequirePOST public void doEval(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException { checkPermission(RUN_SCRIPTS); - + req.getWebApp().getDispatchValidator().allowDispatch(req, rsp); try { - MetaClass mc = WebApp.getCurrent().getMetaClass(getClass()); + MetaClass mc = req.getWebApp().getMetaClass(getClass()); Script script = mc.classLoader.loadTearOff(JellyClassLoaderTearOff.class).createContext().compileScript(new InputSource(req.getReader())); new JellyRequestDispatcher(this,script).forward(req,rsp); } catch (JellyException e) { diff --git a/core/src/main/java/jenkins/security/stapler/StaplerDispatchValidator.java b/core/src/main/java/jenkins/security/stapler/StaplerDispatchValidator.java new file mode 100644 index 0000000000..0d601e1ee6 --- /dev/null +++ b/core/src/main/java/jenkins/security/stapler/StaplerDispatchValidator.java @@ -0,0 +1,354 @@ +/* + * The MIT License + * + * Copyright (c) 2019 CloudBees, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package jenkins.security.stapler; + +import com.google.common.annotations.VisibleForTesting; +import jenkins.model.Jenkins; +import jenkins.util.SystemProperties; +import org.apache.commons.io.IOUtils; +import org.kohsuke.accmod.Restricted; +import org.kohsuke.accmod.restrictions.NoExternalUse; +import org.kohsuke.stapler.CancelRequestHandlingException; +import org.kohsuke.stapler.DispatchValidator; +import org.kohsuke.stapler.StaplerRequest; +import org.kohsuke.stapler.StaplerResponse; +import org.kohsuke.stapler.WebApp; + +import javax.annotation.CheckForNull; +import javax.annotation.Nonnull; +import javax.servlet.ServletContext; +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.locks.ReadWriteLock; +import java.util.concurrent.locks.ReentrantReadWriteLock; +import java.util.function.Function; +import java.util.function.Supplier; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * Validates views dispatched by Stapler. This validation consists of two phases: + *

+ *

Validation can be disabled by setting the system property + * {@code jenkins.security.stapler.StaplerDispatchValidator.disabled=true} or setting {@link #DISABLED} to + * {@code true} in the script console.

+ * + * @since TODO + */ +@Restricted(NoExternalUse.class) +public class StaplerDispatchValidator implements DispatchValidator { + + private static final Logger LOGGER = Logger.getLogger(StaplerDispatchValidator.class.getName()); + private static final String ATTRIBUTE_NAME = StaplerDispatchValidator.class.getName() + ".status"; + private static final String ESCAPE_HATCH = StaplerDispatchValidator.class.getName() + ".disabled"; + /** + * Escape hatch to disable dispatch validation. + */ + public static /* script-console editable */ boolean DISABLED = SystemProperties.getBoolean(ESCAPE_HATCH); + + private static @CheckForNull Boolean setStatus(@Nonnull StaplerRequest req, @CheckForNull Boolean status) { + if (status == null) { + return null; + } + LOGGER.fine(() -> "Request dispatch set status to " + status + " for URL " + req.getPathInfo()); + req.setAttribute(ATTRIBUTE_NAME, status); + return status; + } + + private static @CheckForNull Boolean computeStatusIfNull(@Nonnull StaplerRequest req, @Nonnull Supplier statusIfNull) { + Object requestStatus = req.getAttribute(ATTRIBUTE_NAME); + return requestStatus instanceof Boolean ? (Boolean) requestStatus : setStatus(req, statusIfNull.get()); + } + + private final ValidatorCache cache; + + public StaplerDispatchValidator() { + cache = new ValidatorCache(); + cache.load(); + } + + @Override + public @CheckForNull Boolean isDispatchAllowed(@Nonnull StaplerRequest req, @Nonnull StaplerResponse rsp) { + if (DISABLED) { + return true; + } + Boolean status = computeStatusIfNull(req, () -> { + if (rsp.getContentType() != null) { + return true; + } + if (rsp.getStatus() >= 300) { + return true; + } + return null; + }); + LOGGER.finer(() -> req.getRequestURI() + " -> " + status); + return status; + } + + @Override + public @CheckForNull Boolean isDispatchAllowed(@Nonnull StaplerRequest req, @Nonnull StaplerResponse rsp, @Nonnull String viewName, @CheckForNull Object node) { + if (DISABLED) { + return true; + } + Boolean status = computeStatusIfNull(req, () -> { + if (viewName.equals("index")) { + return true; + } + if (node == null) { + return null; + } + return cache.find(node.getClass()).isViewValid(viewName); + }); + LOGGER.finer(() -> "<" + req.getRequestURI() + ", " + viewName + ", " + node + "> -> " + status); + return status; + } + + @Override + public void allowDispatch(@Nonnull StaplerRequest req, @Nonnull StaplerResponse rsp) { + if (DISABLED) { + return; + } + setStatus(req, true); + } + + @Override + public void requireDispatchAllowed(@Nonnull StaplerRequest req, @Nonnull StaplerResponse rsp) throws CancelRequestHandlingException { + if (DISABLED) { + return; + } + Boolean status = isDispatchAllowed(req, rsp); + if (status == null || !status) { + LOGGER.fine(() -> "Cancelling dispatch for " + req.getRequestURI()); + throw new CancelRequestHandlingException(); + } + } + + @VisibleForTesting + static StaplerDispatchValidator getInstance(@Nonnull ServletContext context) { + return (StaplerDispatchValidator) WebApp.get(context).getDispatchValidator(); + } + + @VisibleForTesting + void loadWhitelist(@Nonnull InputStream in) throws IOException { + cache.loadWhitelist(IOUtils.readLines(in)); + } + + private static class ValidatorCache { + private final Map validators = new HashMap<>(); + private final ReadWriteLock lock = new ReentrantReadWriteLock(); + + // provided as alternative to ConcurrentHashMap.computeIfAbsent which doesn't allow for recursion in the supplier + // see https://stackoverflow.com/q/28840047 + private @Nonnull Validator computeIfAbsent(@Nonnull String className, @Nonnull Function constructor) { + lock.readLock().lock(); + try { + if (validators.containsKey(className)) { + // cached value + return validators.get(className); + } + } finally { + lock.readLock().unlock(); + } + lock.writeLock().lock(); + try { + if (validators.containsKey(className)) { + // cached between readLock.unlock and writeLock.lock + return validators.get(className); + } + Validator value = constructor.apply(className); + validators.put(className, value); + return value; + } finally { + lock.writeLock().unlock(); + } + } + + private @Nonnull Validator find(@Nonnull Class clazz) { + return computeIfAbsent(clazz.getName(), name -> create(clazz)); + } + + private @Nonnull Validator find(@Nonnull String className) { + return computeIfAbsent(className, this::create); + } + + private @Nonnull Collection findParents(@Nonnull Class clazz) { + List parents = new ArrayList<>(); + Class superclass = clazz.getSuperclass(); + if (superclass != null) { + parents.add(find(superclass)); + } + for (Class iface : clazz.getInterfaces()) { + parents.add(find(iface)); + } + return parents; + } + + private @Nonnull Validator create(@Nonnull Class clazz) { + Set allowed = new HashSet<>(); + StaplerViews views = clazz.getDeclaredAnnotation(StaplerViews.class); + if (views != null) { + allowed.addAll(Arrays.asList(views.value())); + } + Set denied = new HashSet<>(); + StaplerFragments fragments = clazz.getDeclaredAnnotation(StaplerFragments.class); + if (fragments != null) { + denied.addAll(Arrays.asList(fragments.value())); + } + return new Validator(() -> findParents(clazz), allowed, denied); + } + + private @Nonnull Validator create(@Nonnull String className) { + ClassLoader loader = Jenkins.get().pluginManager.uberClassLoader; + return new Validator(() -> { + try { + return findParents(loader.loadClass(className)); + } catch (ClassNotFoundException e) { + LOGGER.log(Level.WARNING, e, () -> "Could not load class " + className + " to validate views"); + return Collections.emptySet(); + } + }); + } + + private void load() { + try { + try (InputStream is = Validator.class.getResourceAsStream("default-views-whitelist.txt")) { + loadWhitelist(IOUtils.readLines(is, StandardCharsets.UTF_8)); + } + } catch (IOException e) { + LOGGER.log(Level.WARNING, "Could not load default views whitelist", e); + } + String whitelist = SystemProperties.getString(StaplerDispatchValidator.class.getName() + ".whitelist"); + Path configFile = whitelist != null ? Paths.get(whitelist) : Jenkins.get().getRootDir().toPath().resolve("stapler-views-whitelist.txt"); + if (Files.exists(configFile)) { + try { + loadWhitelist(Files.readAllLines(configFile)); + } catch (IOException e) { + LOGGER.log(Level.WARNING, e, () -> "Could not load user defined whitelist from " + configFile); + } + } + } + + private void loadWhitelist(@Nonnull List whitelistLines) { + for (String line : whitelistLines) { + if (line.matches("#.*|\\s*")) { + // commented line + continue; + } + String[] parts = line.split("\\s+"); + if (parts.length < 2) { + // invalid input format + LOGGER.warning(() -> "Cannot update validator with malformed line: " + line); + continue; + } + Validator validator = find(parts[0]); + for (int i = 1; i < parts.length; i++) { + String view = parts[i]; + if (view.startsWith("!")) { + validator.denyView(view.substring(1)); + } else { + validator.allowView(view); + } + } + } + } + + private class Validator { + // lazy load parents to avoid trying to load potentially unavailable classes + private final Supplier> parentsSupplier; + private volatile Collection parents; + private final Set allowed = ConcurrentHashMap.newKeySet(); + private final Set denied = ConcurrentHashMap.newKeySet(); + + private Validator(@Nonnull Supplier> parentsSupplier) { + this.parentsSupplier = parentsSupplier; + } + + private Validator(@Nonnull Supplier> parentsSupplier, @Nonnull Collection allowed, @Nonnull Collection denied) { + this(parentsSupplier); + this.allowed.addAll(allowed); + this.denied.addAll(denied); + } + + private @Nonnull Collection getParents() { + if (parents == null) { + synchronized (this) { + if (parents == null) { + parents = parentsSupplier.get(); + } + } + } + return parents; + } + + private @CheckForNull Boolean isViewValid(@Nonnull String viewName) { + if (allowed.contains(viewName)) { + return Boolean.TRUE; + } + if (denied.contains(viewName)) { + return Boolean.FALSE; + } + for (Validator parent : getParents()) { + Boolean result = parent.isViewValid(viewName); + if (result != null) { + return result; + } + } + return null; + } + + private void allowView(@Nonnull String viewName) { + allowed.add(viewName); + } + + private void denyView(@Nonnull String viewName) { + denied.add(viewName); + } + } + } +} diff --git a/core/src/main/java/jenkins/security/stapler/StaplerFilteredActionListener.java b/core/src/main/java/jenkins/security/stapler/StaplerFilteredActionListener.java index bdc329775f..2a16d90561 100644 --- a/core/src/main/java/jenkins/security/stapler/StaplerFilteredActionListener.java +++ b/core/src/main/java/jenkins/security/stapler/StaplerFilteredActionListener.java @@ -28,6 +28,7 @@ import org.kohsuke.accmod.restrictions.NoExternalUse; import org.kohsuke.stapler.Function; import org.kohsuke.stapler.StaplerRequest; import org.kohsuke.stapler.StaplerResponse; +import org.kohsuke.stapler.event.FilteredDispatchTriggerListener; import org.kohsuke.stapler.event.FilteredDoActionTriggerListener; import org.kohsuke.stapler.event.FilteredFieldTriggerListener; import org.kohsuke.stapler.event.FilteredGetterTriggerListener; @@ -37,10 +38,10 @@ import java.util.logging.Level; import java.util.logging.Logger; /** - * Log a warning message when a "getter" or "doAction" function that was filtered out by SECURITY-400 new rules + * Log a warning message when a "getter" or "doAction" function or fragment view that was filtered out by SECURITY-400 new rules */ @Restricted(NoExternalUse.class) -public class StaplerFilteredActionListener implements FilteredDoActionTriggerListener, FilteredGetterTriggerListener, FilteredFieldTriggerListener { +public class StaplerFilteredActionListener implements FilteredDoActionTriggerListener, FilteredGetterTriggerListener, FilteredFieldTriggerListener, FilteredDispatchTriggerListener { private static final Logger LOGGER = Logger.getLogger(StaplerFilteredActionListener.class.getName()); private static final String LOG_MESSAGE = "New Stapler routing rules result in the URL \"{0}\" no longer being allowed. " + @@ -73,4 +74,12 @@ public class StaplerFilteredActionListener implements FilteredDoActionTriggerLis }); return false; } + + @Override + public boolean onDispatchTrigger(StaplerRequest req, StaplerResponse rsp, Object node, String viewName) { + LOGGER.warning(() -> "New Stapler dispatch rules result in the URL \"" + req.getPathInfo() + "\" no longer being allowed. " + + "If you consider it safe to use, add the following to the whitelist: \"" + node.getClass().getName() + " " + viewName + "\". "+ + "Learn more: https://jenkins.io/redirect/stapler-facet-restrictions"); + return false; + } } diff --git a/core/src/main/resources/hudson/atom.jelly b/core/src/main/resources/hudson/atom.jelly index de99ef25bc..6a7200641f 100644 --- a/core/src/main/resources/hudson/atom.jelly +++ b/core/src/main/resources/hudson/atom.jelly @@ -23,9 +23,7 @@ THE SOFTWARE. --> -<?xml version="1.0" encoding="UTF-8"?> - - +<?xml version="1.0" encoding="UTF-8"?> diff --git a/core/src/main/resources/hudson/model/Computer/_scriptText.jelly b/core/src/main/resources/hudson/model/Computer/_scriptText.jelly index 0867147550..f87b23b69d 100644 --- a/core/src/main/resources/hudson/model/Computer/_scriptText.jelly +++ b/core/src/main/resources/hudson/model/Computer/_scriptText.jelly @@ -26,5 +26,8 @@ THE SOFTWARE. Called from doScriptText() to display the execution result. --> - - + + + + + diff --git a/core/src/main/resources/hudson/model/View/cc.xml.jelly b/core/src/main/resources/hudson/model/View/cc.xml.jelly index b83ec111d1..1b48f2af19 100644 --- a/core/src/main/resources/hudson/model/View/cc.xml.jelly +++ b/core/src/main/resources/hudson/model/View/cc.xml.jelly @@ -27,10 +27,8 @@ THE SOFTWARE. See http://confluence.public.thoughtworks.org/display/CI/Multiple+Project+Summary+Reporting+Standard --> - - - - + + @@ -45,4 +43,5 @@ THE SOFTWARE. + \ No newline at end of file diff --git a/core/src/main/resources/hudson/rss20.jelly b/core/src/main/resources/hudson/rss20.jelly index 64a7c9f387..9919b177fc 100644 --- a/core/src/main/resources/hudson/rss20.jelly +++ b/core/src/main/resources/hudson/rss20.jelly @@ -23,11 +23,9 @@ THE SOFTWARE. --> -<?xml version="1.0" encoding="UTF-8"?> - - +<?xml version="1.0" encoding="UTF-8"?> - + ${title} diff --git a/core/src/main/resources/hudson/security/HudsonPrivateSecurityRealm/signup.jelly b/core/src/main/resources/hudson/security/HudsonPrivateSecurityRealm/signup.jelly index f588306700..5adbb0a145 100644 --- a/core/src/main/resources/hudson/security/HudsonPrivateSecurityRealm/signup.jelly +++ b/core/src/main/resources/hudson/security/HudsonPrivateSecurityRealm/signup.jelly @@ -27,19 +27,14 @@ THE SOFTWARE. --> - + - - - - - ${h.initPageVariables(context)} @@ -297,4 +292,5 @@ THE SOFTWARE. + diff --git a/core/src/main/resources/hudson/slaves/SlaveComputer/slave-agent.jnlp.jelly b/core/src/main/resources/hudson/slaves/SlaveComputer/slave-agent.jnlp.jelly index f515203c0e..e07b789741 100644 --- a/core/src/main/resources/hudson/slaves/SlaveComputer/slave-agent.jnlp.jelly +++ b/core/src/main/resources/hudson/slaves/SlaveComputer/slave-agent.jnlp.jelly @@ -24,8 +24,7 @@ THE SOFTWARE. - - + - - + + + + + diff --git a/core/src/main/resources/jenkins/model/Jenkins/login.jelly b/core/src/main/resources/jenkins/model/Jenkins/login.jelly index 3276493af8..3289c2c44c 100644 --- a/core/src/main/resources/jenkins/model/Jenkins/login.jelly +++ b/core/src/main/resources/jenkins/model/Jenkins/login.jelly @@ -24,10 +24,10 @@ THE SOFTWARE. + - ${h.advertiseHeaders(response)} @@ -35,8 +35,6 @@ THE SOFTWARE.
- - - - + + + Jenkins Jenkins at ${rootURL} @@ -38,4 +37,5 @@ THE SOFTWARE. + \ No newline at end of file diff --git a/core/src/main/resources/jenkins/security/stapler/default-views-whitelist.txt b/core/src/main/resources/jenkins/security/stapler/default-views-whitelist.txt new file mode 100644 index 0000000000..2f46c52312 --- /dev/null +++ b/core/src/main/resources/jenkins/security/stapler/default-views-whitelist.txt @@ -0,0 +1,34 @@ +# This file contains the built-in whitelist of allows views for Stapler dispatch filtering. +# This is provided as part of SECURITY-534 for backward compatibility. + +# Format: fully qualified class name of model class, a space, and then a space-separated list of view names to allow or deny (prefix with !) +# * class names can be repeated +# * subclasses of classes listed here are also whitelisted with the same view names +# Example: +# io.jenkins.plugins.example.ModelClass viewA viewB !viewC + +# https://plugins.jenkins.io/gerrit-trigger +com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.actions.manual.ManualTriggerAction help-Search + +# https://plugins.jenkins.io/depgraph-view +# This works experimentally even without this entry, but probably only because of buffer size, so be safe +hudson.plugins.depgraph_view.AbstractDependencyGraphAction jsplumb + +# https://plugins.jenkins.io/multi-slave-config-plugin +com.sonyericsson.hudson.plugins.multislaveconfigplugin.NodeManageLink slavefilter + +# https://plugins.jenkins.io/coverity +jenkins.plugins.coverity.CheckConfig$DescriptorImpl checkConfig +jenkins.plugins.coverity.CIMStream$DescriptorImpl defectFilters + +# https://plugins.jenkins.io/sounds +net.hurstfrost.hudson.sounds.SoundsAgentAction jsonpdemo + +# https://plugins.jenkins.io/scm2job +com.unitedinternet.jenkins.plugins.scm2job.SCM2Job showResultsPlain + +# https://plugins.jenkins.io/serenity +com.ikokoon.serenity.hudson.SerenityProjectAction nocoverage + +# https://plugins.jenkins.io/pipeline-config-history +org.jenkinsci.plugins.pipelineConfigHistory.view.PipelineConfigHistoryProjectAction configSingleFile diff --git a/core/src/main/resources/lib/layout/ajax.jelly b/core/src/main/resources/lib/layout/ajax.jelly index 9d9ef3b2d5..49b25db7db 100644 --- a/core/src/main/resources/lib/layout/ajax.jelly +++ b/core/src/main/resources/lib/layout/ajax.jelly @@ -50,13 +50,10 @@ THE SOFTWARE. - - - - ${h.initPageVariables(context)} - - + + + \ No newline at end of file diff --git a/core/src/main/resources/lib/layout/html.jelly b/core/src/main/resources/lib/layout/html.jelly index f364ff17f9..9a957defe8 100644 --- a/core/src/main/resources/lib/layout/html.jelly +++ b/core/src/main/resources/lib/layout/html.jelly @@ -56,13 +56,11 @@ THE SOFTWARE. (The permission will be checked against the "it" object.) + - - -${h.initPageVariables(context)} -${h.initPageVariables(context)} + + + + Declares a view as dispatchable. Views that do not use this tag or another tag that invokes this are + considered fragment views and are not dispatchable. + + HTTP Content-Type header value to use for this view. + + + + + + + ${h.initPageVariables(context)} + + diff --git a/test/src/test/java/jenkins/security/stapler/Security867Test.java b/test/src/test/java/jenkins/security/stapler/Security867Test.java index 8527cac809..bae57b906a 100644 --- a/test/src/test/java/jenkins/security/stapler/Security867Test.java +++ b/test/src/test/java/jenkins/security/stapler/Security867Test.java @@ -120,6 +120,7 @@ public class Security867Test { } @TestExtension + @StaplerViews("public") public static class RootAction1 implements RootAction { // not displayed in its own public.jelly public String getMyConfig() { @@ -143,6 +144,7 @@ public class Security867Test { } @TestExtension + @StaplerViews("showConfig") public static class RootAction3 implements RootAction { // displayed in its showConfig.jelly public String getMyConfig() { diff --git a/test/src/test/java/jenkins/security/stapler/StaplerDispatchValidatorTest.java b/test/src/test/java/jenkins/security/stapler/StaplerDispatchValidatorTest.java new file mode 100644 index 0000000000..0a8a5b98d8 --- /dev/null +++ b/test/src/test/java/jenkins/security/stapler/StaplerDispatchValidatorTest.java @@ -0,0 +1,179 @@ +/* + * The MIT License + * + * Copyright (c) 2019 CloudBees, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package jenkins.security.stapler; + +import com.gargoylesoftware.htmlunit.html.HtmlPage; +import hudson.model.UnprotectedRootAction; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.jvnet.hudson.test.For; +import org.jvnet.hudson.test.Issue; +import org.jvnet.hudson.test.JenkinsRule; +import org.jvnet.hudson.test.TestExtension; + +import javax.annotation.CheckForNull; +import java.io.InputStream; +import java.net.HttpURLConnection; +import java.util.Locale; + +import static org.junit.Assert.assertEquals; + +@Issue("SECURITY-534") +public class StaplerDispatchValidatorTest { + + @Rule public JenkinsRule j = new JenkinsRule(); + + @Before + public void setUp() throws Exception { + StaplerDispatchValidator validator = StaplerDispatchValidator.getInstance(j.jenkins.servletContext); + try (InputStream whitelist = getClass().getResourceAsStream("StaplerDispatchValidatorTest/whitelist.txt")) { + validator.loadWhitelist(whitelist); + } + } + + @Test + @For(StaplerViews.class) + public void canViewStaplerViews() throws Exception { + String[] urls = {"annotated/explicitRoot", "extended/explicitRoot", "extended/whitelistedRoot"}; + for (String url : urls) { + HtmlPage root = j.createWebClient().goTo(url); + assertEquals("Fragment", root.getElementById("frag").asText()); + assertEquals("Explicit Fragment", root.getElementById("explicit-frag").asText()); + } + } + + @Test + @For(StaplerFragments.class) + public void cannotViewStaplerFragments() throws Exception { + String[] urls = {"annotated/explicitFrag", "extended/explicitFrag"}; + for (String url : urls) { + j.createWebClient().assertFails(url, HttpURLConnection.HTTP_NOT_FOUND); + } + } + + @Test + public void canViewRoot() throws Exception { + String[] urls = {"annotated/root", "groovy/root", "jelly/root", "whitelist/root"}; + for (String url : urls) { + HtmlPage root = j.createWebClient().goTo(url); + assertEquals("Fragment", root.getElementById("frag").asText()); + } + } + + @Test + public void canViewIndex() throws Exception { + String[] urls = {"annotated", "groovy", "jelly"}; + for (String url : urls) { + HtmlPage root = j.createWebClient().goTo(url); + assertEquals("Fragment", root.getElementById("frag").asText()); + } + } + + @Test + public void canViewPagesThatIncludeViews() throws Exception { + String[] urls = {"groovy/include", "jelly/include"}; + for (String url : urls) { + HtmlPage root = j.createWebClient().goTo(url); + assertEquals("Fragment", root.getElementById("frag").asText()); + } + } + + @Test + public void canViewPagesThatRedirectToViews() throws Exception { + String[] urls = {"groovy/redirect", "jelly/redirect"}; + for (String url : urls) { + HtmlPage root = j.createWebClient().goTo(url); + assertEquals("Fragment", root.getElementById("frag").asText()); + } + } + + @Test + public void canViewCompressedViews() throws Exception { + String[] urls = {"groovy/compress", "jelly/compress"}; + for (String url : urls) { + HtmlPage root = j.createWebClient().goTo(url); + assertEquals("Fragment", root.getElementById("frag").asText()); + } + } + + @Test + public void cannotViewFragment() throws Exception { + String[] urls = {"annotated/frag", "groovy/frag", "jelly/frag", "whitelist/frag"}; + for (String url : urls) { + j.createWebClient().assertFails(url, HttpURLConnection.HTTP_NOT_FOUND); + } + } + + @Test + public void canSetStatusCodeBeforeValidation() throws Exception { + String[] urls = {"groovy/error", "jelly/error"}; + for (String url : urls) { + j.createWebClient().assertFails(url, 400); + } + } + + private static class Base implements UnprotectedRootAction { + @CheckForNull + @Override + public String getIconFileName() { + return null; + } + + @CheckForNull + @Override + public String getDisplayName() { + return getClass().getSimpleName() + " Test Data"; + } + + @CheckForNull + @Override + public String getUrlName() { + return getClass().getSimpleName().toLowerCase(Locale.ENGLISH); + } + } + + @TestExtension + public static class Jelly extends Base { + } + + @TestExtension + public static class Groovy extends Base { + } + + @TestExtension + @StaplerViews("explicitRoot") + @StaplerFragments("explicitFrag") + public static class Annotated extends Base { + } + + @TestExtension + public static class Whitelist extends Base { + } + + @TestExtension + public static class Extended extends Annotated { + } +} diff --git a/test/src/test/resources/hudson/HtmlEscapeTest/foo.jelly b/test/src/test/resources/hudson/HtmlEscapeTest/foo.jelly index 5e486ce521..d30ba6266e 100644 --- a/test/src/test/resources/hudson/HtmlEscapeTest/foo.jelly +++ b/test/src/test/resources/hudson/HtmlEscapeTest/foo.jelly @@ -1,17 +1,18 @@ - - - - -
- ${%msg} -
-
- ${%msg2(it.str)} -
-
- ${it.str} -
- - + + + + +
+ ${%msg} +
+
+ ${%msg2(it.str)} +
+
+ ${it.str} +
+ + +
\ No newline at end of file diff --git a/test/src/test/resources/hudson/core/PluginManagerOverrideTest/BasicPluginManagerOverride/newview.jelly b/test/src/test/resources/hudson/core/PluginManagerOverrideTest/BasicPluginManagerOverride/newview.jelly index e8c7438fe7..63ee6462fe 100644 --- a/test/src/test/resources/hudson/core/PluginManagerOverrideTest/BasicPluginManagerOverride/newview.jelly +++ b/test/src/test/resources/hudson/core/PluginManagerOverrideTest/BasicPluginManagerOverride/newview.jelly @@ -1,6 +1,7 @@ - - -
LoremIpsum
+ + +
LoremIpsum
+
\ No newline at end of file diff --git a/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Annotated/explicitFrag.jelly b/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Annotated/explicitFrag.jelly new file mode 100644 index 0000000000..9487ba2ce1 --- /dev/null +++ b/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Annotated/explicitFrag.jelly @@ -0,0 +1,27 @@ + + + +

Explicit Fragment

+
diff --git a/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Annotated/explicitRoot.jelly b/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Annotated/explicitRoot.jelly new file mode 100644 index 0000000000..e44b4ec011 --- /dev/null +++ b/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Annotated/explicitRoot.jelly @@ -0,0 +1,29 @@ + + + + + + + diff --git a/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Annotated/frag.jelly b/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Annotated/frag.jelly new file mode 100644 index 0000000000..9f11a15424 --- /dev/null +++ b/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Annotated/frag.jelly @@ -0,0 +1,27 @@ + + + +

Fragment

+
diff --git a/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Annotated/index.jelly b/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Annotated/index.jelly new file mode 100644 index 0000000000..da8815b2ac --- /dev/null +++ b/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Annotated/index.jelly @@ -0,0 +1,28 @@ + + + + +

Fragment

+
diff --git a/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Annotated/root.jelly b/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Annotated/root.jelly new file mode 100644 index 0000000000..d49c04f4de --- /dev/null +++ b/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Annotated/root.jelly @@ -0,0 +1,29 @@ + + + + + + + diff --git a/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Extended/whitelistedRoot.jelly b/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Extended/whitelistedRoot.jelly new file mode 100644 index 0000000000..e44b4ec011 --- /dev/null +++ b/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Extended/whitelistedRoot.jelly @@ -0,0 +1,29 @@ + + + + + + + diff --git a/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Groovy/compress.groovy b/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Groovy/compress.groovy new file mode 100644 index 0000000000..2c342e42bf --- /dev/null +++ b/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Groovy/compress.groovy @@ -0,0 +1,34 @@ +/* + * The MIT License + * + * Copyright (c) 2019 CloudBees, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package jenkins.security.stapler.StaplerDispatchValidatorTest.Groovy + +def st = namespace('jelly:stapler') +def l = namespace('/lib/layout') +st.compress { + l.view { + st.contentType(value: 'text/html') + st.include(page: 'frag') + } +} diff --git a/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Groovy/error.groovy b/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Groovy/error.groovy new file mode 100644 index 0000000000..5e058918ea --- /dev/null +++ b/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Groovy/error.groovy @@ -0,0 +1,27 @@ +/* + * The MIT License + * + * Copyright (c) 2019 CloudBees, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package jenkins.security.stapler.StaplerDispatchValidatorTest.Groovy + +namespace('jelly:stapler').statusCode(value: 400) diff --git a/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Groovy/frag.groovy b/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Groovy/frag.groovy new file mode 100644 index 0000000000..53d5c1e079 --- /dev/null +++ b/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Groovy/frag.groovy @@ -0,0 +1,28 @@ +/* + * The MIT License + * + * Copyright (c) 2019 CloudBees, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package jenkins.security.stapler.StaplerDispatchValidatorTest.Groovy +p(id: 'frag') { + text('Fragment') +} diff --git a/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Groovy/include.groovy b/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Groovy/include.groovy new file mode 100644 index 0000000000..fb26c7575c --- /dev/null +++ b/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Groovy/include.groovy @@ -0,0 +1,27 @@ +/* + * The MIT License + * + * Copyright (c) 2019 CloudBees, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package jenkins.security.stapler.StaplerDispatchValidatorTest.Groovy + +namespace('jelly:stapler').include(page: 'root') diff --git a/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Groovy/index.groovy b/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Groovy/index.groovy new file mode 100644 index 0000000000..bce2c0119b --- /dev/null +++ b/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Groovy/index.groovy @@ -0,0 +1,29 @@ +/* + * The MIT License + * + * Copyright (c) 2019 CloudBees, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package jenkins.security.stapler.StaplerDispatchValidatorTest.Groovy +namespace('jelly:stapler').contentType(value: 'text/html') +p(id: 'frag') { + text('Fragment') +} diff --git a/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Groovy/redirect.groovy b/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Groovy/redirect.groovy new file mode 100644 index 0000000000..6b2d10deb8 --- /dev/null +++ b/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Groovy/redirect.groovy @@ -0,0 +1,27 @@ +/* + * The MIT License + * + * Copyright (c) 2019 CloudBees, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package jenkins.security.stapler.StaplerDispatchValidatorTest.Groovy + +namespace('jelly:stapler').redirect(url: 'root') diff --git a/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Groovy/root.groovy b/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Groovy/root.groovy new file mode 100644 index 0000000000..45e0624b7c --- /dev/null +++ b/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Groovy/root.groovy @@ -0,0 +1,32 @@ +/* + * The MIT License + * + * Copyright (c) 2019 CloudBees, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package jenkins.security.stapler.StaplerDispatchValidatorTest.Groovy + +def st = namespace('jelly:stapler') +def l = namespace('/lib/layout') +l.view { + st.contentType(value: 'text/html') + st.include(page: 'frag') +} diff --git a/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Jelly/compress.jelly b/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Jelly/compress.jelly new file mode 100644 index 0000000000..8ef1c236f5 --- /dev/null +++ b/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Jelly/compress.jelly @@ -0,0 +1,31 @@ + + + + + + + + + diff --git a/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Jelly/error.jelly b/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Jelly/error.jelly new file mode 100644 index 0000000000..556ff95ec3 --- /dev/null +++ b/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Jelly/error.jelly @@ -0,0 +1,27 @@ + + + + + diff --git a/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Jelly/frag.jelly b/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Jelly/frag.jelly new file mode 100644 index 0000000000..9f11a15424 --- /dev/null +++ b/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Jelly/frag.jelly @@ -0,0 +1,27 @@ + + + +

Fragment

+
diff --git a/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Jelly/include.jelly b/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Jelly/include.jelly new file mode 100644 index 0000000000..9f1a5b1b34 --- /dev/null +++ b/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Jelly/include.jelly @@ -0,0 +1,27 @@ + + + + + diff --git a/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Jelly/index.jelly b/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Jelly/index.jelly new file mode 100644 index 0000000000..da8815b2ac --- /dev/null +++ b/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Jelly/index.jelly @@ -0,0 +1,28 @@ + + + + +

Fragment

+
diff --git a/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Jelly/redirect.jelly b/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Jelly/redirect.jelly new file mode 100644 index 0000000000..a248e92891 --- /dev/null +++ b/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Jelly/redirect.jelly @@ -0,0 +1,27 @@ + + + + + diff --git a/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Jelly/root.jelly b/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Jelly/root.jelly new file mode 100644 index 0000000000..7a8982e417 --- /dev/null +++ b/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Jelly/root.jelly @@ -0,0 +1,29 @@ + + + + + + + diff --git a/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Whitelist/frag.jelly b/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Whitelist/frag.jelly new file mode 100644 index 0000000000..9f11a15424 --- /dev/null +++ b/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Whitelist/frag.jelly @@ -0,0 +1,27 @@ + + + +

Fragment

+
diff --git a/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Whitelist/root.jelly b/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Whitelist/root.jelly new file mode 100644 index 0000000000..e8d9ea4106 --- /dev/null +++ b/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/Whitelist/root.jelly @@ -0,0 +1,29 @@ + + + + + + + \ No newline at end of file diff --git a/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/whitelist.txt b/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/whitelist.txt new file mode 100644 index 0000000000..3a3853e603 --- /dev/null +++ b/test/src/test/resources/jenkins/security/stapler/StaplerDispatchValidatorTest/whitelist.txt @@ -0,0 +1,2 @@ +jenkins.security.stapler.StaplerDispatchValidatorTest$Whitelist root !frag +jenkins.security.stapler.StaplerDispatchValidatorTest$Extended whitelistedRoot diff --git a/test/src/test/resources/lib/layout/RenderOnDemandTest/externalScript.jelly b/test/src/test/resources/lib/layout/RenderOnDemandTest/externalScript.jelly index 4d0df4b8b0..fc8fa5b493 100644 --- a/test/src/test/resources/lib/layout/RenderOnDemandTest/externalScript.jelly +++ b/test/src/test/resources/lib/layout/RenderOnDemandTest/externalScript.jelly @@ -1,4 +1,4 @@ - + y = "yyy"; - +
-- GitLab From 18fc7c0b466553cbd4f790db3270964305bee7f9 Mon Sep 17 00:00:00 2001 From: Jeff Thompson Date: Tue, 2 Jul 2019 12:47:11 -0600 Subject: [PATCH 399/476] [SECURITY-1424] --- .../java/hudson/model/FileParameterValue.java | 4 +- .../hudson/model/FileParameterValueTest.java | 117 +++++++++++++++++- 2 files changed, 118 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/hudson/model/FileParameterValue.java b/core/src/main/java/hudson/model/FileParameterValue.java index f911927285..33336cd6b2 100644 --- a/core/src/main/java/hudson/model/FileParameterValue.java +++ b/core/src/main/java/hudson/model/FileParameterValue.java @@ -37,6 +37,7 @@ import java.io.UnsupportedEncodingException; import java.nio.file.Files; import java.nio.file.InvalidPathException; import java.nio.file.Path; +import java.util.regex.Pattern; import javax.servlet.ServletException; import org.apache.commons.fileupload.FileItem; @@ -65,6 +66,7 @@ import org.kohsuke.stapler.StaplerResponse; */ public class FileParameterValue extends ParameterValue { private static final String FOLDER_NAME = "fileParameters"; + private static final Pattern PROHIBITED_DOUBLE_DOT = Pattern.compile(".*[\\\\/]\\.\\.[\\\\/].*"); /** * Escape hatch for SECURITY-1074, fileParameter used to escape their expected folder. @@ -162,7 +164,7 @@ public class FileParameterValue extends ParameterValue { if (ws == null) { throw new IllegalStateException("The workspace should be created when setUp method is called"); } - if (!ALLOW_FOLDER_TRAVERSAL_OUTSIDE_WORKSPACE && !ws.isDescendant(location)) { + if (!ALLOW_FOLDER_TRAVERSAL_OUTSIDE_WORKSPACE && (PROHIBITED_DOUBLE_DOT.matcher(location).matches() || !ws.isDescendant(location))) { listener.error("Rejecting file path escaping base directory with relative path: " + location); // force the build to fail return null; diff --git a/test/src/test/java/hudson/model/FileParameterValueTest.java b/test/src/test/java/hudson/model/FileParameterValueTest.java index 911f88431b..0e8c7f65ec 100644 --- a/test/src/test/java/hudson/model/FileParameterValueTest.java +++ b/test/src/test/java/hudson/model/FileParameterValueTest.java @@ -94,7 +94,64 @@ public class FileParameterValueTest { // overlong utf-8 encoding checkUrlNot200AndNotContains(wc, build.getUrl() + "parameters/parameter/%c0%2e%c0%2e%c0%af%c0%2e%c0%2e%c0%af%c0%2e%c0%2e%c0%af%c0%2e%c0%2e%c0%af%c0%2e%c0%2e%c0%afroot-level.txt/uploaded-file.txt", uploadedContent); } - + + @Test + @Issue("SECURITY-1424") + public void fileParameter_cannotCreateFile_outsideOfBuildFolder_SEC1424() throws Exception { + // you can test the behavior before the correction by setting FileParameterValue.ALLOW_FOLDER_TRAVERSAL_OUTSIDE_WORKSPACE to true + + FilePath root = j.jenkins.getRootPath(); + + FreeStyleProject p = j.createFreeStyleProject(); + p.addProperty(new ParametersDefinitionProperty(Collections.singletonList( + new FileParameterDefinition("dir/../../../pwned", null) + ))); + + assertThat(root.child("pwned").exists(), equalTo(false)); + + String uploadedContent = "test-content"; + File uploadedFile = tmp.newFile(); + FileUtils.write(uploadedFile, uploadedContent); + + FreeStyleBuild build = p.scheduleBuild2(0, new Cause.UserIdCause(), new ParametersAction( + new FileParameterValue("dir/../../../pwned", uploadedFile, "uploaded-file.txt") + )).get(); + + assertThat(build.getResult(), equalTo(Result.FAILURE)); + assertThat(root.child("pwned").exists(), equalTo(false)); + + // ensure also the file is not reachable by request + JenkinsRule.WebClient wc = j.createWebClient(); + wc.getOptions().setThrowExceptionOnFailingStatusCode(false); + } + + @Test + public void fileParameter_cannotCreateFile_outsideOfBuildFolder_LeadingDoubleDot() throws Exception { + FilePath root = j.jenkins.getRootPath(); + + FreeStyleProject p = j.createFreeStyleProject(); + p.addProperty(new ParametersDefinitionProperty(Collections.singletonList( + new FileParameterDefinition("../pwned", null) + ))); + + assertThat(root.child("pwned").exists(), equalTo(false)); + + String uploadedContent = "test-content"; + File uploadedFile = tmp.newFile(); + FileUtils.write(uploadedFile, uploadedContent); + + FreeStyleBuild build = p.scheduleBuild2(0, new Cause.UserIdCause(), new ParametersAction( + new FileParameterValue("../pwned", uploadedFile, "uploaded-file.txt") + )).get(); + + assertThat(build.getResult(), equalTo(Result.FAILURE)); + assertThat(root.child("pwned").exists(), equalTo(false)); + + // ensure also the file is not reachable by request + JenkinsRule.WebClient wc = j.createWebClient(); + wc.getOptions().setThrowExceptionOnFailingStatusCode(false); + } + private void checkUrlNot200AndNotContains(JenkinsRule.WebClient wc, String url, String contentNotPresent) throws Exception { Page pageForEncoded = wc.goTo(url, null); assertThat(pageForEncoded.getWebResponse().getStatusCode(), not(equalTo(200))); @@ -104,7 +161,7 @@ public class FileParameterValueTest { @Test @Issue("SECURITY-1074") public void fileParameter_cannotCreateFile_outsideOfBuildFolder_backslashEdition() throws Exception { - Assume.assumeTrue("Backslash are only dangerous on Windows", Functions.isWindows()); + Assume.assumeTrue("Backslashes are only dangerous on Windows", Functions.isWindows()); // you can test the behavior before the correction by setting FileParameterValue.ALLOW_FOLDER_TRAVERSAL_OUTSIDE_WORKSPACE to true @@ -267,4 +324,60 @@ public class FileParameterValueTest { String workspaceParentContent = workspaceParentPage.getWebResponse().getContentAsString(); assertThat(workspaceParentContent, containsString("child2.txt")); } + + @Test + public void fileParameter_canStillUse_doubleDotsInFileName() throws Exception { + FreeStyleProject p = j.createFreeStyleProject(); + p.addProperty(new ParametersDefinitionProperty(Arrays.asList( + new FileParameterDefinition("weird..name.txt", null) + ))); + + File uploadedFile = tmp.newFile(); + FileUtils.write(uploadedFile, "test1"); + + FreeStyleBuild build = j.assertBuildStatusSuccess(p.scheduleBuild2(0, new Cause.UserIdCause(), new ParametersAction( + new FileParameterValue("weird..name.txt", uploadedFile, "uploaded-file.txt") + ))); + + // files are correctly saved in the build "fileParameters" folder + File directChild = new File(build.getRootDir(), "fileParameters/weird..name.txt"); + assertTrue(directChild.exists()); + + // both are correctly copied inside the workspace + assertTrue(build.getWorkspace().child("weird..name.txt").exists()); + + // and reachable using request + JenkinsRule.WebClient wc = j.createWebClient(); + HtmlPage workspacePage = wc.goTo(p.getUrl() + "ws"); + String workspaceContent = workspacePage.getWebResponse().getContentAsString(); + assertThat(workspaceContent, containsString("weird..name.txt")); + } + + @Test + public void fileParameter_canStillUse_TildeInFileName() throws Exception { + FreeStyleProject p = j.createFreeStyleProject(); + p.addProperty(new ParametersDefinitionProperty(Arrays.asList( + new FileParameterDefinition("~name", null) + ))); + + File uploadedFile = tmp.newFile(); + FileUtils.write(uploadedFile, "test1"); + + FreeStyleBuild build = j.assertBuildStatusSuccess(p.scheduleBuild2(0, new Cause.UserIdCause(), new ParametersAction( + new FileParameterValue("~name", uploadedFile, "uploaded-file.txt") + ))); + + // files are correctly saved in the build "fileParameters" folder + File directChild = new File(build.getRootDir(), "fileParameters/~name"); + assertTrue(directChild.exists()); + + // both are correctly copied inside the workspace + assertTrue(build.getWorkspace().child("~name").exists()); + + // and reachable using request + JenkinsRule.WebClient wc = j.createWebClient(); + HtmlPage workspacePage = wc.goTo(p.getUrl() + "ws"); + String workspaceContent = workspacePage.getWebResponse().getContentAsString(); + assertThat(workspaceContent, containsString("~name")); + } } -- GitLab From 772152315aa0a9ba27b812a4ba0f3f9b64af78d9 Mon Sep 17 00:00:00 2001 From: Daniel Beck Date: Tue, 2 Jul 2019 12:58:18 -0600 Subject: [PATCH 400/476] [SECURITY-626] Co-Authored-By: Wadeck Follonier --- .../security/csrf/DefaultCrumbIssuer.java | 24 ++++- .../csrf/DefaultCrumbIssuerSEC626Test.java | 89 +++++++++++++++++++ 2 files changed, 110 insertions(+), 3 deletions(-) create mode 100644 test/src/test/java/hudson/security/csrf/DefaultCrumbIssuerSEC626Test.java diff --git a/core/src/main/java/hudson/security/csrf/DefaultCrumbIssuer.java b/core/src/main/java/hudson/security/csrf/DefaultCrumbIssuer.java index 7f833c17f3..64c6e04ec2 100644 --- a/core/src/main/java/hudson/security/csrf/DefaultCrumbIssuer.java +++ b/core/src/main/java/hudson/security/csrf/DefaultCrumbIssuer.java @@ -17,14 +17,19 @@ import hudson.Util; import jenkins.model.Jenkins; import hudson.model.ModelObject; +import javax.annotation.Nonnull; import javax.servlet.ServletRequest; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; + import jenkins.security.HexStringConfidentialKey; import net.sf.json.JSONObject; import org.acegisecurity.Authentication; import org.jenkinsci.Symbol; +import org.kohsuke.accmod.Restricted; +import org.kohsuke.accmod.restrictions.NoExternalUse; import org.kohsuke.stapler.DataBoundConstructor; import org.kohsuke.stapler.StaplerRequest; @@ -38,6 +43,9 @@ public class DefaultCrumbIssuer extends CrumbIssuer { private transient MessageDigest md; private boolean excludeClientIPFromCrumb; + @Restricted(NoExternalUse.class) + public static /* non-final: Groovy Console */ boolean EXCLUDE_SESSION_ID = SystemProperties.getBoolean(DefaultCrumbIssuer.class.getName() + ".EXCLUDE_SESSION_ID"); + @DataBoundConstructor public DefaultCrumbIssuer(boolean excludeClientIPFromCrumb) { try { @@ -75,13 +83,15 @@ public class DefaultCrumbIssuer extends CrumbIssuer { HttpServletRequest req = (HttpServletRequest) request; StringBuilder buffer = new StringBuilder(); Authentication a = Jenkins.getAuthentication(); - if (a != null) { - buffer.append(a.getName()); - } + buffer.append(a.getName()); buffer.append(';'); if (!isExcludeClientIPFromCrumb()) { buffer.append(getClientIP(req)); } + if (!EXCLUDE_SESSION_ID) { + buffer.append(';'); + buffer.append(getSessionId(req)); + } md.update(buffer.toString().getBytes()); return Util.toHexString(md.digest(salt.getBytes())); @@ -90,6 +100,14 @@ public class DefaultCrumbIssuer extends CrumbIssuer { return null; } + private String getSessionId(@Nonnull HttpServletRequest request) { + HttpSession session = request.getSession(false); + if (session == null) { + return "NO_SESSION"; + } + return session.getId(); + } + /** * {@inheritDoc} */ diff --git a/test/src/test/java/hudson/security/csrf/DefaultCrumbIssuerSEC626Test.java b/test/src/test/java/hudson/security/csrf/DefaultCrumbIssuerSEC626Test.java new file mode 100644 index 0000000000..3abd3ccb18 --- /dev/null +++ b/test/src/test/java/hudson/security/csrf/DefaultCrumbIssuerSEC626Test.java @@ -0,0 +1,89 @@ +/** + * Copyright (c) 2008-2010 Yahoo! Inc. + * All rights reserved. + * The copyrights to the contents of this file are licensed under the MIT License (http://www.opensource.org/licenses/mit-license.php) + */ + +package hudson.security.csrf; + +import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException; +import com.gargoylesoftware.htmlunit.html.DomElement; +import com.gargoylesoftware.htmlunit.html.HtmlPage; +import hudson.model.User; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.jvnet.hudson.test.Issue; +import org.jvnet.hudson.test.JenkinsRule; +import org.jvnet.hudson.test.JenkinsRule.WebClient; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +/** + * + * @author dty + */ +//TODO merge back to DefaultCrumbIssuerTest +public class DefaultCrumbIssuerSEC626Test { + + @Rule public JenkinsRule r = new JenkinsRule(); + + @Before public void setIssuer() { + r.jenkins.setCrumbIssuer(new DefaultCrumbIssuer(false)); + } + + @Test + @Issue("SECURITY-626") + public void crumbOnlyValidForOneSession() throws Exception { + r.jenkins.setSecurityRealm(r.createDummySecurityRealm()); + DefaultCrumbIssuer issuer = new DefaultCrumbIssuer(false); + r.jenkins.setCrumbIssuer(issuer); + + User.getById("foo", true); + + DefaultCrumbIssuer.EXCLUDE_SESSION_ID = true; + compareDifferentSessions_tokenAreEqual(true); + + DefaultCrumbIssuer.EXCLUDE_SESSION_ID = false; + compareDifferentSessions_tokenAreEqual(false); + } + + private void compareDifferentSessions_tokenAreEqual(boolean areEqual) throws Exception { + WebClient wc = r.createWebClient(); + wc.login("foo"); + + HtmlPage p = wc.goTo("configure"); + String crumb1 = p.getElementByName("Jenkins-Crumb").getAttribute("value"); + r.submit(p.getFormByName("config")); + + wc.goTo("logout"); + wc.login("foo"); + + p = wc.goTo("configure"); + String crumb2 = p.getElementByName("Jenkins-Crumb").getAttribute("value"); + r.submit(p.getFormByName("config")); + + assertEquals(crumb1.equals(crumb2), areEqual); + + if (areEqual) { + r.submit(p.getFormByName("config")); + } else { + replaceAllCrumbInPageBy(p, crumb1); + try { + // submit the form with previous session crumb + r.submit(p.getFormByName("config")); + fail(); + } catch (FailingHttpStatusCodeException e) { + assertTrue(e.getMessage().contains("No valid crumb")); + } + } + } + + private void replaceAllCrumbInPageBy(HtmlPage page, String newCrumb) { + for (DomElement el : page.getElementsByName("Jenkins-Crumb")) { + el.setAttribute("value", newCrumb); + } + } +} -- GitLab From f0363a5739e31b26fad84631c7f1412e224bcbfb Mon Sep 17 00:00:00 2001 From: ThomasPerkins1123 Date: Wed, 3 Jul 2019 15:32:57 +0100 Subject: [PATCH 401/476] Add unit tests for hudson.cli.HexDump (#4058) * Add unit tests for hudson.cli.HexDump These tests were written using Diffblue Cover. * Changed byte arrays to work for windows --- cli/src/test/java/hudson/cli/HexDumpTest.java | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 cli/src/test/java/hudson/cli/HexDumpTest.java diff --git a/cli/src/test/java/hudson/cli/HexDumpTest.java b/cli/src/test/java/hudson/cli/HexDumpTest.java new file mode 100644 index 0000000000..9cd1c78995 --- /dev/null +++ b/cli/src/test/java/hudson/cli/HexDumpTest.java @@ -0,0 +1,37 @@ +package hudson.cli; + +import org.junit.Assert; +import org.junit.Test; + +public class HexDumpTest { + + @Test + public void testToHex1() { + Assert.assertEquals("'fooBar'", + HexDump.toHex(new byte[] {'f', 'o', 'o', 'B', 'a', 'r'})); + Assert.assertEquals("0xc3", + HexDump.toHex(new byte[] {(byte)'Ã'})); + Assert.assertEquals("0xac '100'", + HexDump.toHex(new byte[] {(byte)'€', '1', '0', '0'})); + Assert.assertEquals("'1' 0xf7 '2'", + HexDump.toHex(new byte[] {'1', (byte)'÷', '2'})); + Assert.assertEquals("'foo' 0x0a\n'Bar'", + HexDump.toHex(new byte[] {'f', 'o', 'o', '\n', 'B', 'a', 'r'})); + } + + @Test + public void testToHex2() { + Assert.assertEquals("'ooBa'", + HexDump.toHex(new byte[] {'f', 'o', 'o', 'B', 'a', 'r'}, 1, 4)); + Assert.assertEquals("0xc3", + HexDump.toHex(new byte[] {(byte)'Ã'}, 0, 1)); + Assert.assertEquals("0xac '10'", + HexDump.toHex(new byte[] {(byte)'€', '1', '0', '0'}, 0, 3)); + Assert.assertEquals("0xf7 '2'", + HexDump.toHex(new byte[] {'1', (byte)'÷', '2'}, 1, 2)); + Assert.assertEquals("'Bar'", + HexDump.toHex(new byte[] {'f', 'o', 'o', '\n', 'B', 'a', 'r'}, 4, 3)); + Assert.assertEquals("", + HexDump.toHex(new byte[] {'f', 'o', 'o', 'B', 'a', 'r'}, 0, 0)); + } +} -- GitLab From 1684de425edbb5df49c84d37aa59708d517845f1 Mon Sep 17 00:00:00 2001 From: Tim Jacomb Date: Wed, 3 Jul 2019 14:58:18 -0400 Subject: [PATCH 402/476] Add fine logging for removing cookies --- core/src/main/java/hudson/security/SecurityRealm.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/src/main/java/hudson/security/SecurityRealm.java b/core/src/main/java/hudson/security/SecurityRealm.java index aa2e5395bd..9839de2ef6 100644 --- a/core/src/main/java/hudson/security/SecurityRealm.java +++ b/core/src/main/java/hudson/security/SecurityRealm.java @@ -68,6 +68,7 @@ import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.List; import java.util.Map; +import java.util.logging.Level; import java.util.logging.Logger; /** @@ -326,6 +327,7 @@ public abstract class SecurityRealm extends AbstractDescribableImpl Date: Fri, 5 Jul 2019 15:27:55 +0200 Subject: [PATCH 403/476] [JENKINS-57223] - Java11 ClassNotFoundExceptions Telemetry (#4003) * Proof of concept catching exceptions for java 11 removed classes * Add ClassLoader to a lot of places. Backup * Commenting out wip stuff, change packages, count hits findClass * Improvements, sending and tests * Removing the catcher from chain to make funcional tests work * Removing ignored places and a bit of cleaning * Cleaning unused code after removing the catcher from the chain * Remove imports cleaning to avoid extra changes * Cleaning and explaining comments * Explaining comments * fix javadoc * [JENKINS-57223] Address feedback from Matt Sicker. Improve in concurrency * [JENKINS-57223] Search on cause and suppressed exceptions and fix on name reported * [JENKINS-57223] Add cycles control on exceptions and refactor reporting method * [JENKINS-57223] Add trim to class name comparison * [JENKINS-57223] Address Oleg's feedback and some improvements * Avoid sending CNFE when ignored later in code * Disable when running on Java 8 and a test * Avoid sending empty events * [JENKINS-57223] Polish assertion after printing all missing classes in logs * [JENKINS-57223] Avoid extra if and add curly braces * [JENKINS-57223] Better comment about time window check --- core/src/main/java/hudson/PluginManager.java | 5 +- .../impl/InstallUncaughtExceptionHandler.java | 22 +- core/src/main/java/jenkins/model/Jenkins.java | 27 +- .../impl/java11/CatcherClassLoader.java | 51 +++ .../impl/java11/MissingClassEvent.java | 93 +++++ .../impl/java11/MissingClassEvents.java | 107 +++++ .../impl/java11/MissingClassTelemetry.java | 370 ++++++++++++++++++ .../java/jenkins/util/AntClassLoader.java | 50 ++- .../telemetry/MissingClassTelemetryTest.java | 150 +++++++ .../MissingClassTelemetryFasterTest.java | 356 +++++++++++++++++ 10 files changed, 1201 insertions(+), 30 deletions(-) create mode 100644 core/src/main/java/jenkins/telemetry/impl/java11/CatcherClassLoader.java create mode 100644 core/src/main/java/jenkins/telemetry/impl/java11/MissingClassEvent.java create mode 100644 core/src/main/java/jenkins/telemetry/impl/java11/MissingClassEvents.java create mode 100644 core/src/main/java/jenkins/telemetry/impl/java11/MissingClassTelemetry.java create mode 100644 test/src/test/java/jenkins/telemetry/MissingClassTelemetryTest.java create mode 100644 test/src/test/java/jenkins/telemetry/impl/java11/MissingClassTelemetryFasterTest.java diff --git a/core/src/main/java/hudson/PluginManager.java b/core/src/main/java/hudson/PluginManager.java index 465a743d9f..856eca5dd3 100644 --- a/core/src/main/java/hudson/PluginManager.java +++ b/core/src/main/java/hudson/PluginManager.java @@ -64,6 +64,7 @@ import jenkins.install.InstallUtil; import jenkins.model.Jenkins; import jenkins.plugins.DetachedPluginsUtil; import jenkins.security.CustomClassFilter; +import jenkins.telemetry.impl.java11.MissingClassTelemetry; import jenkins.util.SystemProperties; import jenkins.util.io.OnMaster; import jenkins.util.xml.RestrictiveEntityResolver; @@ -2065,7 +2066,9 @@ public abstract class PluginManager extends AbstractModelObject implements OnMas loaded.put(name, null); } // not found in any of the classloader. delegate. - throw new ClassNotFoundException(name); + ClassNotFoundException cnfe = new ClassNotFoundException(name); + MissingClassTelemetry.reportException(name, cnfe); + throw cnfe; } @Override diff --git a/core/src/main/java/hudson/init/impl/InstallUncaughtExceptionHandler.java b/core/src/main/java/hudson/init/impl/InstallUncaughtExceptionHandler.java index 454af18cb3..a8b73db22e 100644 --- a/core/src/main/java/hudson/init/impl/InstallUncaughtExceptionHandler.java +++ b/core/src/main/java/hudson/init/impl/InstallUncaughtExceptionHandler.java @@ -1,18 +1,18 @@ package hudson.init.impl; import hudson.init.Initializer; -import java.io.EOFException; import jenkins.model.Jenkins; +import jenkins.telemetry.impl.java11.MissingClassTelemetry; +import org.kohsuke.stapler.Stapler; import org.kohsuke.stapler.WebApp; import org.kohsuke.stapler.compression.CompressionFilter; import javax.servlet.ServletException; +import java.io.EOFException; import java.io.IOException; import java.util.logging.Level; import java.util.logging.Logger; -import org.kohsuke.stapler.Stapler; - /** * Deals with exceptions that get thrown all the way up to the Stapler rendering layer. */ @@ -29,6 +29,10 @@ public class InstallUncaughtExceptionHandler { } req.setAttribute("javax.servlet.error.exception",e); try { + // If we have an exception, let's see if it's related with missing classes on Java 11. We reach + // here with a ClassNotFoundException in an action, for example. Setting the report here is the only + // way to catch the missing classes when the plugin uses Thread.currentThread().getContextClassLoader().loadClass + MissingClassTelemetry.reportExceptionInside(e); WebApp.get(j.servletContext).getSomeStapler().invoke(req, rsp, j, "/oops"); } catch (ServletException | IOException x) { if (!Stapler.isSocketException(x)) { @@ -42,10 +46,10 @@ public class InstallUncaughtExceptionHandler { } catch (SecurityException ex) { LOGGER.log(Level.SEVERE, - "Failed to set the default UncaughtExceptionHandler. " + + "Failed to set the default UncaughtExceptionHandler. " + "If any threads die due to unhandled coding errors then there will be no logging of this information. " + - "The lack of this diagnostic information will make it harder to track down issues which will reduce the supportability of Jenkins. " + - "It is highly recommended that you consult the documentation that comes with you servlet container on how to allow the " + + "The lack of this diagnostic information will make it harder to track down issues which will reduce the supportability of Jenkins. " + + "It is highly recommended that you consult the documentation that comes with you servlet container on how to allow the " + "`setDefaultUncaughtExceptionHandler` permission and enable it.", ex); } } @@ -70,10 +74,14 @@ public class InstallUncaughtExceptionHandler { "A thread (" + t.getName() + '/' + t.getId() + ") died unexpectedly due to an uncaught exception, this may leave your Jenkins in a bad way and is usually indicative of a bug in the code.", ex); + + // If we have an exception, let's see if it's related with missing classes on Java 11. We reach + // here with a ClassNotFoundException in an action, for example. Setting the report here is the only + // way to catch the missing classes when the plugin uses Thread.currentThread().getContextClassLoader().loadClass + MissingClassTelemetry.reportExceptionInside(ex); } } private InstallUncaughtExceptionHandler() {} - } diff --git a/core/src/main/java/jenkins/model/Jenkins.java b/core/src/main/java/jenkins/model/Jenkins.java index 26691232fc..86f58fe0c2 100644 --- a/core/src/main/java/jenkins/model/Jenkins.java +++ b/core/src/main/java/jenkins/model/Jenkins.java @@ -43,6 +43,8 @@ import jenkins.security.stapler.StaplerFilteredActionListener; import jenkins.security.stapler.StaplerDispatchable; import jenkins.security.RedactSecretJsonInErrorMessageSanitizer; import jenkins.security.stapler.TypedFilter; +import jenkins.telemetry.impl.java11.CatcherClassLoader; +import jenkins.telemetry.impl.java11.MissingClassTelemetry; import jenkins.util.SystemProperties; import hudson.cli.declarative.CLIMethod; import hudson.cli.declarative.CLIResolver; @@ -870,6 +872,12 @@ public class Jenkins extends AbstractCIBase implements DirectlyModifiableTopLeve } // doing this early allows InitStrategy to set environment upfront + //Telemetry: add interceptor classloader + //These lines allow the catcher to be present on Thread.currentThread().getContextClassLoader() in every plugin which + //allow us to detect failures in every plugin loading classes by this way. + if (MissingClassTelemetry.enabled() && !(Thread.currentThread().getContextClassLoader() instanceof CatcherClassLoader)) { + Thread.currentThread().setContextClassLoader(new CatcherClassLoader(Thread.currentThread().getContextClassLoader())); + } final InitStrategy is = InitStrategy.get(Thread.currentThread().getContextClassLoader()); Trigger.timer = new java.util.Timer("Jenkins cron thread"); @@ -910,8 +918,20 @@ public class Jenkins extends AbstractCIBase implements DirectlyModifiableTopLeve pluginManager = PluginManager.createDefault(this); this.pluginManager = pluginManager; WebApp webApp = WebApp.get(servletContext); + + //Telemetry: add interceptor classloader + //These lines allows the catcher to be present on Thread.currentThread().getContextClassLoader() in every plugin which + //allow us to detect failures in every plugin loading classes by this way. // JSON binding needs to be able to see all the classes from all the plugins - webApp.setClassLoader(pluginManager.uberClassLoader); + + ClassLoader classLoaderToAssign; + if (MissingClassTelemetry.enabled() && !(pluginManager.uberClassLoader instanceof CatcherClassLoader)) { + classLoaderToAssign = new CatcherClassLoader(pluginManager.uberClassLoader); + } else { + classLoaderToAssign = pluginManager.uberClassLoader; + } + webApp.setClassLoader(classLoaderToAssign); + webApp.setJsonInErrorMessageSanitizer(RedactSecretJsonInErrorMessageSanitizer.INSTANCE); TypedFilter typedFilter = new TypedFilter(); @@ -924,7 +944,10 @@ public class Jenkins extends AbstractCIBase implements DirectlyModifiableTopLeve webApp.setFilteredDoActionTriggerListener(actionListener); webApp.setFilteredFieldTriggerListener(actionListener); - adjuncts = new AdjunctManager(servletContext, pluginManager.uberClassLoader,"adjuncts/"+SESSION_HASH, TimeUnit.DAYS.toMillis(365)); + //Telemetry: add interceptor classloader + //These lines allows the catcher to be present on Thread.currentThread().getContextClassLoader() in every plugin which + //allow us to detect failures in every plugin loading classes at this way. + adjuncts = new AdjunctManager(servletContext, classLoaderToAssign, "adjuncts/" + SESSION_HASH, TimeUnit.DAYS.toMillis(365)); ClassFilterImpl.register(); diff --git a/core/src/main/java/jenkins/telemetry/impl/java11/CatcherClassLoader.java b/core/src/main/java/jenkins/telemetry/impl/java11/CatcherClassLoader.java new file mode 100644 index 0000000000..8a1c962f79 --- /dev/null +++ b/core/src/main/java/jenkins/telemetry/impl/java11/CatcherClassLoader.java @@ -0,0 +1,51 @@ +/* + * The MIT License + * + * Copyright (c) 2019 CloudBees, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package jenkins.telemetry.impl.java11; + +import org.kohsuke.accmod.Restricted; +import org.kohsuke.accmod.restrictions.NoExternalUse; + +@Restricted(NoExternalUse.class) +public class CatcherClassLoader extends ClassLoader { + + public CatcherClassLoader(ClassLoader parent) { + super(parent); + } + + + /** + * Usually, the {@link ClassLoader} calls its parent and finally this method. So if we are here, it's the last + * element of the chain. It doesn't happen in {@link jenkins.util.AntClassLoader} so it has an special management + * on {@link hudson.ClassicPluginStrategy} + * + * + */ + @Override + protected Class findClass(String name) throws ClassNotFoundException { + ClassNotFoundException e = new ClassNotFoundException(name); + MissingClassTelemetry.reportException(name, e); + throw e; + } +} diff --git a/core/src/main/java/jenkins/telemetry/impl/java11/MissingClassEvent.java b/core/src/main/java/jenkins/telemetry/impl/java11/MissingClassEvent.java new file mode 100644 index 0000000000..76b88747c4 --- /dev/null +++ b/core/src/main/java/jenkins/telemetry/impl/java11/MissingClassEvent.java @@ -0,0 +1,93 @@ +/* + * The MIT License + * + * Copyright (c) 2019 CloudBees, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package jenkins.telemetry.impl.java11; + +import javax.annotation.Nonnull; +import java.io.PrintWriter; +import java.io.Serializable; +import java.io.StringWriter; + +/** + * Store an event regarding missing classes. We can already catch ClassNotFoundException and NoClassDefFoundError + */ +class MissingClassEvent { + private String time; + private long occurrences; + private String stackTrace; + private String className; + + String getStackTrace() { + return stackTrace; + } + + void setStackTrace(String stackTrace) { + this.stackTrace = stackTrace; + } + + String getClassName() { + return className; + } + + void setClassName(String className) { + this.className = className; + } + + MissingClassEvent(@Nonnull String name, @Nonnull Throwable t) { + this.className = name; + + StringWriter stackTrace = new StringWriter(); + t.printStackTrace(new PrintWriter(stackTrace)); + this.stackTrace = stackTrace.toString(); + + this.time = MissingClassTelemetry.clientDateString(); + this.occurrences = 1; + } + + String getTime() { + return time; + } + + long getOccurrences() { + return occurrences; + } + + void setOccurrences(long occurrences) { + this.occurrences = occurrences; + } + + void setTime(String time) { + this.time = time; + } + + @Override + public String toString() { + return "MissingClassEvent{" + + "time='" + time + '\'' + + ", occurrences=" + occurrences + + ", stackTrace='" + stackTrace + '\'' + + ", className='" + className + '\'' + + '}'; + } +} diff --git a/core/src/main/java/jenkins/telemetry/impl/java11/MissingClassEvents.java b/core/src/main/java/jenkins/telemetry/impl/java11/MissingClassEvents.java new file mode 100644 index 0000000000..563f655c72 --- /dev/null +++ b/core/src/main/java/jenkins/telemetry/impl/java11/MissingClassEvents.java @@ -0,0 +1,107 @@ +/* + * The MIT License + * + * Copyright (c) 2019 CloudBees, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package jenkins.telemetry.impl.java11; + +import com.google.common.annotations.VisibleForTesting; + +import javax.annotation.Nonnull; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicLong; + +public class MissingClassEvents { + + /** + * Only 100 exceptions a day (period of telemetry) + */ + @VisibleForTesting + /* package */ static /* final */ int MAX_EVENTS_PER_SEND = 100; + + /** + * List of events, one per stack trace. + */ + private ConcurrentHashMap, MissingClassEvent> events = new ConcurrentHashMap<>(MAX_EVENTS_PER_SEND); + + /** + * Add a new exception to the store. If the same exception already exists, it increases the occurrences. If we + * already get the maximum number of exceptions, it doesn't add any value. + * @param name name of the class not found + * @param t the exception to store + * @return the occurrences stored for this throwable. 1 the fist time it's stored. > 1 for successive stores of the + * same stack trace. 0 if we already stored MAX_EVENTS_PER_SEND (100) events for a single send. + */ + public long put(String name, @Nonnull Throwable t) { + // A final object to pass it to the function + final AtomicLong occurrences = new AtomicLong(); + + // We need the key (the stack trace) to be a list and unmodifiable + List key = Collections.unmodifiableList(Arrays.asList(t.getStackTrace())); + events.compute(key, (stackTraceElements, missingClassEvent) -> { + + if (missingClassEvent == null) { + // It's a new element, the size will increase + if (events.size() < MAX_EVENTS_PER_SEND) { + // Create the new value + MissingClassEvent newEvent = new MissingClassEvent(name, t); + occurrences.set(1); + return newEvent; + } else { + return null; + } + + } else { + // We update the occurrences and the last time it happened + occurrences.set(missingClassEvent.getOccurrences()); + missingClassEvent.setOccurrences(occurrences.incrementAndGet()); + missingClassEvent.setTime(MissingClassTelemetry.clientDateString()); + return missingClassEvent; + } + }); + + return occurrences.get(); + } + + /** + * Reinitialize the events happened and return the number of events stored since last execution of this method. + * Used to send via telemetry the events and restart the events store. + * @return the number of events stored since previous call to this method. + */ + + @VisibleForTesting + /* package */ synchronized @Nonnull ConcurrentHashMap, MissingClassEvent> getEventsAndClean() { + ConcurrentHashMap, MissingClassEvent> currentEvents = events; + events = new ConcurrentHashMap<>(MAX_EVENTS_PER_SEND); + return currentEvents; + } + + @Override + public String toString() { + return "MissingClassEvents{" + + "events=" + events + + '}'; + } +} diff --git a/core/src/main/java/jenkins/telemetry/impl/java11/MissingClassTelemetry.java b/core/src/main/java/jenkins/telemetry/impl/java11/MissingClassTelemetry.java new file mode 100644 index 0000000000..5eeaece2fd --- /dev/null +++ b/core/src/main/java/jenkins/telemetry/impl/java11/MissingClassTelemetry.java @@ -0,0 +1,370 @@ +/* + * The MIT License + * + * Copyright (c) 2019 CloudBees, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package jenkins.telemetry.impl.java11; + +import com.google.common.annotations.VisibleForTesting; +import hudson.Extension; +import io.jenkins.lib.versionnumber.JavaSpecificationVersion; +import jenkins.model.Jenkins; +import jenkins.telemetry.Telemetry; +import jenkins.util.java.JavaUtils; +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; +import org.kohsuke.accmod.Restricted; +import org.kohsuke.accmod.restrictions.NoExternalUse; + +import javax.annotation.CheckForNull; +import javax.annotation.Nonnull; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.util.Arrays; +import java.util.Collections; +import java.util.Date; +import java.util.HashSet; +import java.util.IdentityHashMap; +import java.util.List; +import java.util.Set; +import java.util.TimeZone; +import java.util.concurrent.ConcurrentHashMap; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * Telemetry class to gather information about missing classes when running on java 11. This class sends classes not + * found and in packages related with Java changes from Java 8 to Java 11. See {@link #MOVED_PACKAGES}. + **/ + +@Extension +@Restricted(NoExternalUse.class) +public class MissingClassTelemetry extends Telemetry { + private static final Logger LOGGER = Logger.getLogger(MissingClassTelemetry.class.getName()); + + // Store 100 events today + private static MissingClassEvents events = new MissingClassEvents(); + + // When we begin to gather these data + private final static LocalDate START = LocalDate.of(2019, 4, 1); + // Gather for 2 years (who knows how long people will need to migrate to Java 11) + private final static LocalDate END = START.plusMonths(24); + + // The types of exceptions which can be reported + private static final Set reportableExceptions = + new HashSet(Arrays.asList(ClassNotFoundException.class, NoClassDefFoundError.class)); + + @VisibleForTesting + /* package */ static final String CIRCULAR_REFERENCE = "Circular reference found on the exception we are analysing to report via telemetry"; + + /** + * Packages removed from java8 up to java11 + * https://blog.codefx.org/java/java-11-migration-guide/ + */ + private final static String[] MOVED_PACKAGES = new String[] {"javax.activation", "javax.annotation", "javax.jws", + "javax.rmi", "javax.transaction", "javax.xml.bind", "javax.xml.soap", "javax.xml.ws", "org.omg", + "javax.activity", "com.sun", "sun"}; + + /** + * Places where a ClassNotFoundException is going to be thrown but it's ignored later in the code, so we + * don't have to send this exception, even though it might be related with java classes of moved packages + */ + private static String[][] IGNORED_PLACES = { + {"hudson.util.XStream2$AssociatedConverterImpl", "findConverter"}, + {"org.jenkinsci.plugins.workflow.cps.global.GrapeHack", "hack"}, + {"org.codehaus.groovy.runtime.callsite.CallSiteArray", "createCallStaticSite"}, + {"groovy.lang.MetaClassImpl", "addProperties"}, + // We set the reportException call directly in this method when it's appropriated + {"hudson.PluginManager.UberClassLoader", "findClass"}, + {"hudson.ExtensionFinder$GuiceFinder$FaultTolerantScope$1", "get"}, + {"hudson.ExtensionFinder$GuiceFinder$SezpozModule", "resolve"}, + {"java.beans.Introspector", "findCustomizerClass"}, + {"com.sun.beans.finder.InstanceFinder", "instantiate"}, + {"com.sun.beans.finder.ClassFinder", "findClass"}, + {"java.util.ResourceBundle$Control", "newBundle"}, + //hundreds when a job is created + {"org.codehaus.groovy.control.ClassNodeResolver", "tryAsLoaderClassOrScript"}, + {"org.kohsuke.stapler.RequestImpl$TypePair", "convertJSON"} + }; + + @Nonnull + @Override + public String getDisplayName() { + return "Missing classes related with Java updates"; + } + + @Nonnull + @Override + public LocalDate getStart() { + return START; + } + + @Nonnull + @Override + public LocalDate getEnd() { + return END; + } + + /** + * To allow asserting this info in tests. + * @return the events gathered. + */ + @VisibleForTesting + /* package */ static MissingClassEvents getEvents() { + return events; + } + + /** + * This telemetry is only enabled when running on Java versions newer than Java 8. + * @return true if running on a newer Java version than Java 8 + */ + public static boolean enabled() { + return JavaUtils.getCurrentJavaRuntimeVersionNumber().isNewerThan(JavaSpecificationVersion.JAVA_8); + } + + @CheckForNull + @Override + public JSONObject createContent() { + // If we are on the time window of this telemetry (checked by the Telemetry class) but we are not running on + // Java > 1.8 (checked here), we don't send anything + if (!enabled()) { + return null; + } + + // To avoid sending empty events + JSONArray events = formatEventsAndInitialize(); + if (events.size() == 0) { + return null; + } + + JSONObject info = new JSONObject(); + info.put("core", Jenkins.getVersion() != null ? Jenkins.getVersion().toString() : "UNKNOWN"); + info.put("clientDate", clientDateString()); + info.put("classMissingEvents", events); + + return JSONObject.fromObject(info); + } + + /** + * Returns the events gathered as a Map ready to use in a Json object to send via telemetry and clean the map to + * gather another window of events. + * @return the map of missed classes events gathered along this window of telemetry + */ + @Nonnull + private JSONArray formatEventsAndInitialize() { + // Save the current events and clean for next (not this one) telemetry send + ConcurrentHashMap, MissingClassEvent> toReport = MissingClassTelemetry.events.getEventsAndClean(); + if (LOGGER.isLoggable(Level.FINE)) { + LOGGER.fine("Cleaned events for missing classes"); + } + + return formatEvents(toReport); + } + + /** + * Format the events gathered in a map used to create the json object to send via telemetry. The events are named by + * the class not found. But a class could be repeated if it was thrown from several places. The interesting + * pieces of information we want to gather are the places where the {@link ClassNotFoundException} or the + * {@link NoClassDefFoundError} errors happens, rather than the class itself. + * @param events events collected in this telemetry window. + * @return the events formatted in a map. + */ + @Nonnull + private JSONArray formatEvents(@Nonnull ConcurrentHashMap, MissingClassEvent> events) { + JSONArray jsonEvents = new JSONArray(); + + events.forEach((stackTrace, event) -> { + JSONObject eventObject = new JSONObject(); + eventObject.put("className", event.getClassName()); + eventObject.put("class", event.getClassName()); + eventObject.put("time", event.getTime()); + eventObject.put("occurrences", Long.toString(event.getOccurrences())); + eventObject.put("stacktrace", event.getStackTrace()); + + jsonEvents.add(eventObject); + }); + + return jsonEvents; + } + + /** + * The current time in the same way as other telemetry implementations. + * @return the UTC time formatted with the pattern yyyy-MM-dd'T'HH:mm'Z' + */ + @Nonnull + static String clientDateString() { + TimeZone tz = TimeZone.getTimeZone("UTC"); + DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'"); + df.setTimeZone(tz); // strip timezone + return df.format(new Date()); + } + + /** + * Store the exception if it's from a split package of Java. This method report this exception directly, it doesn't + * look into the causes or suppressed exceptions of the exception specified. This method tends to be used in the + * ClassLoader directly. Outside the class loaders is best to use {@link #reportExceptionInside(Throwable)} + * @param name the name of the class + * @param e the throwable to report if needed + */ + public static void reportException(@Nonnull String name, @Nonnull Throwable e) { + if (enabled()) { + //ClassDefFoundError uses / instead of . + name = name.replace('/', '.').trim(); + + // We call the methods in this order because if the missing class is not java related, we don't loop over the + // stack trace to look if it's not thrown from an ignored place avoiding an impact on performance. + if (isFromMovedPackage(name) && !calledFromIgnoredPlace(e)) { + events.put(name, e); + if (LOGGER.isLoggable(Level.WARNING)) + LOGGER.log(Level.WARNING, "Added a missed class for missing class telemetry. Class: " + name, e); + } + } + } + + /** + * Determine if the exception specified was thrown from an ignored place + * @param throwable The exception thrown + * @return true if in the stack trace there is an ignored method / class. + */ + private static boolean calledFromIgnoredPlace(@Nonnull Throwable throwable) { + for(String[] ignoredPlace : IGNORED_PLACES) { + if (calledFrom(throwable, ignoredPlace[0], ignoredPlace[1])) { + return true; + } + } + return false; + } + + /** + * Check if the throwable was thrown by the class and the method specified. + * @param throwable stack trace to look at + * @param clazz class to look for in the stack trace + * @param method method where the throwable was thrown in the clazz + * @return true if the method of the clazz has thrown the throwable + */ + private static boolean calledFrom (@Nonnull Throwable throwable, @Nonnull String clazz, @Nonnull String method){ + StackTraceElement[] trace = throwable.getStackTrace(); + for (StackTraceElement el : trace) { + //If the exception has the class and method searched, it's called from there + if (clazz.equals(el.getClassName()) && el.getMethodName().equals(method)) { + return true; + } + } + return false; + } + + /** + * Store the exception extracting the class name from the message of the throwable specified. This method report + * this exception directly, it doesn't look into the causes or suppressed exceptions of the exception specified. + * This method tends to be used in the ClassLoader directly. Outside the class loaders is best to use + * {@link #reportExceptionInside(Throwable)} + * @param e the exception to report if needed + */ + private static void reportException(@Nonnull Throwable e) { + if (enabled()) { + String name = e.getMessage(); + + if (name == null || name.trim().isEmpty()) { + LOGGER.log(Level.INFO, "No class name could be extracted from the throwable to determine if it's reportable", e); + } else { + reportException(name, e); + } + } + } + + private static boolean isFromMovedPackage(@Nonnull String clazz) { + for (String movedPackage : MOVED_PACKAGES) { + if (clazz.startsWith(movedPackage)) { + return true; + } + } + return false; + } + + /** + * Report the class not found if this exception or any of its causes or suppressed exceptions is related to missed + * classes. + * @param e the exception to look into + */ + public static void reportExceptionInside(@Nonnull Throwable e) { + if (enabled()) { + // Use a Set with equity based on == instead of equal to find cycles + Set exceptionsReviewed = Collections.newSetFromMap(new IdentityHashMap<>()); + reportExceptionInside(e, exceptionsReviewed); + } + } + + /** + * Find the exception to report among the exception passed and its causes and suppressed exceptions. It does a + * recursion and uses a Set to avoid circular references. + * @param e the exception + * @param exceptionsReviewed the set of already reviewed exceptions + * @return true if a exception was reported + */ + private static boolean reportExceptionInside(@Nonnull Throwable e, @Nonnull Set exceptionsReviewed) { + if (exceptionsReviewed.contains(e)) { + LOGGER.log(Level.WARNING, CIRCULAR_REFERENCE, e); + // Don't go deeper, we already did + return false; + } + + // Add this exception to the list of already reviewed exceptions before going deeper in its causes or suppressed + // exceptions + exceptionsReviewed.add(e); + + // It this exception is the one searched + if (isMissedClassRelatedException(e)) { + MissingClassTelemetry.reportException(e); + return true; + } + + // We search in its cause exception + if (e.getCause() != null) { + if (reportExceptionInside(e.getCause(), exceptionsReviewed)) { + return true; + } + } + + // We search in its suppressed exceptions + for (Throwable suppressed: e.getSuppressed()) { + if (suppressed != null) { + if (reportExceptionInside(suppressed, exceptionsReviewed)) { + return true; + } + } + } + + // If this exception or its ancestors are not related with missed classes + return false; + } + + /** + * Check if the exception specified is related with a missed class, that is, defined in the + * {@link #reportableExceptions} method. + * @param e the exception to look into + * @return true if the class is related with missed classes. + */ + private static boolean isMissedClassRelatedException(Throwable e) { + return reportableExceptions.contains(e.getClass()); + } +} diff --git a/core/src/main/java/jenkins/util/AntClassLoader.java b/core/src/main/java/jenkins/util/AntClassLoader.java index 3362c2f543..854e3d0099 100644 --- a/core/src/main/java/jenkins/util/AntClassLoader.java +++ b/core/src/main/java/jenkins/util/AntClassLoader.java @@ -17,7 +17,7 @@ */ package jenkins.util; -import java.nio.file.Files; +import jenkins.telemetry.impl.java11.MissingClassTelemetry; import org.apache.tools.ant.BuildEvent; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Project; @@ -40,6 +40,7 @@ import java.io.InputStream; import java.lang.reflect.Constructor; import java.net.MalformedURLException; import java.net.URL; +import java.nio.file.Files; import java.security.CodeSource; import java.security.ProtectionDomain; import java.security.cert.Certificate; @@ -1070,27 +1071,36 @@ public class AntClassLoader extends ClassLoader implements SubBuildListener { if (theClass != null) { return theClass; } - if (isParentFirst(classname)) { - try { - theClass = findBaseClass(classname); - log("Class " + classname + " loaded from parent loader " + "(parentFirst)", - Project.MSG_DEBUG); - } catch (ClassNotFoundException cnfe) { - theClass = findClass(classname); - log("Class " + classname + " loaded from ant loader " + "(parentFirst)", - Project.MSG_DEBUG); - } - } else { - try { - theClass = findClass(classname); - log("Class " + classname + " loaded from ant loader", Project.MSG_DEBUG); - } catch (ClassNotFoundException cnfe) { - if (ignoreBase) { - throw cnfe; + + //Surround the former logic with a try-catch to report missing class exceptions via Java11 telemetry + try { + if (isParentFirst(classname)) { + try { + theClass = findBaseClass(classname); + log("Class " + classname + " loaded from parent loader " + "(parentFirst)", + Project.MSG_DEBUG); + } catch (ClassNotFoundException cnfe) { + theClass = findClass(classname); + log("Class " + classname + " loaded from ant loader " + "(parentFirst)", + Project.MSG_DEBUG); + } + } else { + try { + theClass = findClass(classname); + log("Class " + classname + " loaded from ant loader", Project.MSG_DEBUG); + } catch (ClassNotFoundException cnfe) { + if (ignoreBase) { + throw cnfe; + } + theClass = findBaseClass(classname); + log("Class " + classname + " loaded from parent loader", Project.MSG_DEBUG); } - theClass = findBaseClass(classname); - log("Class " + classname + " loaded from parent loader", Project.MSG_DEBUG); } + } catch (ClassNotFoundException cnfe) { + //To catch CNFE thrown from this.getClass().getClassLoader().loadClass(classToLoad); from a plugin step or + //a plugin page + MissingClassTelemetry.reportException(classname, cnfe); + throw cnfe; } if (resolve) { resolveClass(theClass); diff --git a/test/src/test/java/jenkins/telemetry/MissingClassTelemetryTest.java b/test/src/test/java/jenkins/telemetry/MissingClassTelemetryTest.java new file mode 100644 index 0000000000..a2574c2059 --- /dev/null +++ b/test/src/test/java/jenkins/telemetry/MissingClassTelemetryTest.java @@ -0,0 +1,150 @@ +/* + * The MIT License + * + * Copyright (c) 2019 CloudBees, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package jenkins.telemetry; + +import hudson.ExtensionList; +import hudson.model.UnprotectedRootAction; +import hudson.security.csrf.CrumbExclusion; +import jenkins.telemetry.impl.java11.CatcherClassLoader; +import jenkins.telemetry.impl.java11.MissingClassTelemetry; +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; +import org.apache.commons.io.IOUtils; +import org.junit.Assume; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.jvnet.hudson.test.JenkinsRule; +import org.jvnet.hudson.test.TestExtension; +import org.kohsuke.stapler.StaplerRequest; +import org.kohsuke.stapler.StaplerResponse; + +import javax.annotation.CheckForNull; +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.StringWriter; +import java.nio.charset.StandardCharsets; + +import static org.junit.Assert.assertEquals; + +/** + * This test needs to be here to be able to modify the {@link Telemetry#ENDPOINT} as it's package protected. + */ +public class MissingClassTelemetryTest { + private static final String TELEMETRY_ENDPOINT = "uplink"; + private CatcherClassLoader cl; + + @Rule + public JenkinsRule j = new JenkinsRule(); + + private static JSONObject received = null; + + @Before + public void prepare() throws Exception { + received = null; + cl = new CatcherClassLoader(this.getClass().getClassLoader()); + Telemetry.ENDPOINT = j.getURL().toString() + TELEMETRY_ENDPOINT + "/events"; + j.jenkins.setNoUsageStatistics(false); // tests usually don't submit this, but we need this + } + + /** + * Test if the telemetry sent works and the received data is the expected for a specific case (5 occurrences of the + * same stack trace). + * @throws InterruptedException if the thread is interrupted while sleeping + */ + @Test + public void telemetrySentWorks() throws InterruptedException { + Assume.assumeTrue("The telemetry should be enabled", MissingClassTelemetry.enabled()); + + // Generate 5 events + for(int i = 0; i < 5; i++) { + try { + cl.loadClass("sun.java.MyNonExistentClass"); + } catch (ClassNotFoundException ignored) { + } + } + + // Run the telemetry sent + ExtensionList.lookupSingleton(Telemetry.TelemetryReporter.class).doRun(); + do { + + Thread.sleep(250); + } while (received == null); // this might end up being flaky due to 1 to many active telemetry trials + + + // The telemetry stuff sent is the class expected, the number of events is 1, the class not found is the + // expected and the number of occurrences is the expected + assertEquals(MissingClassTelemetry.class.getName(), received.getString("type")); + JSONArray events = received.getJSONObject("payload").getJSONArray("classMissingEvents"); + assertEquals(1, events.size()); + assertEquals("sun.java.MyNonExistentClass", ((JSONObject) events.get(0)).get("className")); + assertEquals(5, Integer.parseInt( (String) ((JSONObject) events.get(0)).get("occurrences"))); + } + + /** + * Avoid crumb checking (CSRF) + */ + @TestExtension + public static class NoCrumb extends CrumbExclusion { + @Override + public boolean process(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException { + String pathInfo = request.getPathInfo(); + if (pathInfo != null && pathInfo.startsWith("/uplink")) { + chain.doFilter(request, response); + return true; + } + return false; + } + } + + @TestExtension + public static class TelemetryReceiver implements UnprotectedRootAction { + public void doEvents(StaplerRequest request, StaplerResponse response) throws IOException { + StringWriter sw = new StringWriter(); + IOUtils.copy(request.getInputStream(), sw, StandardCharsets.UTF_8); + received = JSONObject.fromObject(sw.toString()); + } + + @CheckForNull + @Override + public String getIconFileName() { + return null; + } + + @CheckForNull + @Override + public String getDisplayName() { + return null; + } + + @CheckForNull + @Override + public String getUrlName() { + return TELEMETRY_ENDPOINT; + } + } +} diff --git a/test/src/test/java/jenkins/telemetry/impl/java11/MissingClassTelemetryFasterTest.java b/test/src/test/java/jenkins/telemetry/impl/java11/MissingClassTelemetryFasterTest.java new file mode 100644 index 0000000000..2e5f152121 --- /dev/null +++ b/test/src/test/java/jenkins/telemetry/impl/java11/MissingClassTelemetryFasterTest.java @@ -0,0 +1,356 @@ +/* + * The MIT License + * + * Copyright (c) 2019 CloudBees, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package jenkins.telemetry.impl.java11; + +import org.junit.Assume; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.jvnet.hudson.test.LoggerRule; + +import java.util.List; +import java.util.concurrent.ConcurrentHashMap; +import java.util.logging.Logger; + +import static org.hamcrest.Matchers.not; +import static org.hamcrest.core.StringContains.containsString; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThat; + +/** + * Tests without a running Jenkins for Java11 Telemetry of ClassNotFoundException. + */ +public class MissingClassTelemetryFasterTest { + private CatcherClassLoader cl; + + @Rule + public LoggerRule logging = new LoggerRule(); + + @Before + public void cleanEvents() { + cl = new CatcherClassLoader(this.getClass().getClassLoader()); + } + + @Test + public void maxNumberEvents() { + Assume.assumeTrue("The telemetry should be enabled", MissingClassTelemetry.enabled()); + + // Backup to restore at the end of the test + int maxEventsBefore = MissingClassEvents.MAX_EVENTS_PER_SEND; + + try { + MissingClassEvents.MAX_EVENTS_PER_SEND = 1; + + try { + cl.loadClass("sun.java.MyNonExistentClass"); + } catch (ClassNotFoundException ignored) { + } + + try { + cl.loadClass("sun.java.MyNonExistentJavaClass"); + } catch (ClassNotFoundException ignored) { + } + + + ConcurrentHashMap, MissingClassEvent> eventsGathered = MissingClassTelemetry.getEvents().getEventsAndClean(); + + // Only one class miss gathered with two occurrences + assertEquals(1, eventsGathered.size()); + } finally { + MissingClassEvents.MAX_EVENTS_PER_SEND = maxEventsBefore; + } + } + + /** + * The same class failed to be loaded in different places ends up in two records of telemetry with one occurrence + * each. + */ + @Test + public void differentEventsAlthoughSameClass() { + Assume.assumeTrue("The telemetry should be enabled", MissingClassTelemetry.enabled()); + + try { + cl.loadClass("sun.java.MyNonExistentClass"); + } catch (ClassNotFoundException ignored) { + } + + try { + cl.loadClass("sun.java.MyNonExistentJavaClass"); + } catch (ClassNotFoundException ignored) { + } + + // Get the events gathered + MissingClassEvents events = MissingClassTelemetry.getEvents(); + ConcurrentHashMap, MissingClassEvent> eventsGathered = events.getEventsAndClean(); + + // Only one class miss gathered with two occurrences + assertEquals(2, eventsGathered.size()); + assertEquals(1, eventsGathered.values().iterator().next().getOccurrences()); + assertEquals(1, eventsGathered.values().iterator().next().getOccurrences()); + } + + /** + * The same class thrown in the same line ends up in a single event with two occurrences. + */ + @Test + public void addOccurrenceIfSameStackTrace() { + Assume.assumeTrue("The telemetry should be enabled", MissingClassTelemetry.enabled()); + + for (int i = 0; i < 2; i++) { + try { + //Exceptions thrown at the same line, with the same stack trace become occurrences of just one event + cl.loadClass("sun.java.MyNonExistentJavaClass"); + } catch (ClassNotFoundException ignored) { + } + } + + // Get the events gathered + MissingClassEvents events = MissingClassTelemetry.getEvents(); + ConcurrentHashMap, MissingClassEvent> eventsGathered = events.getEventsAndClean(); + + // Only one class miss gathered with two occurrences + assertEquals(1, eventsGathered.size()); + assertEquals(2, eventsGathered.values().iterator().next().getOccurrences()); + } + + /** + * A class not from the split packages is not gathered. + */ + @Test + public void nonJavaClassesNotGathered() { + Assume.assumeTrue("The telemetry should be enabled", MissingClassTelemetry.enabled()); + + try { + cl.loadClass("jenkins.MyNonExistentClass"); + } catch (ClassNotFoundException ignored) { + } + + // Get the events gathered + MissingClassEvents events = MissingClassTelemetry.getEvents(); + ConcurrentHashMap, MissingClassEvent> eventsGathered = events.getEventsAndClean(); + + // No events gathered + assertEquals(0, eventsGathered.size()); + } + + /** + * Only a max number of events is gathered. In this test, just one wit two occurrences + */ + @Test + public void maxEventsLimitedSameStackTrace() { + Assume.assumeTrue("The telemetry should be enabled", MissingClassTelemetry.enabled()); + + MissingClassEvents.MAX_EVENTS_PER_SEND = 1; + for (int i = 0; i < 2; i++) { + try { + //Exceptions thrown at the same line, with the same stack trace become occurrences of just one event + cl.loadClass("sun.java.MyNonExistentJavaClass"); + } catch (ClassNotFoundException ignored) { + } + } + + // Get the events gathered + MissingClassEvents events = MissingClassTelemetry.getEvents(); + ConcurrentHashMap, MissingClassEvent> eventsGathered = events.getEventsAndClean(); + + // Only one event gathered + assertEquals(1, eventsGathered.size()); + assertEquals(2, eventsGathered.values().iterator().next().getOccurrences()); + } + + /** + * Only a max number of events is gathered. In this test, just one wit one occurrence. The second one is discarded + */ + @Test + public void maxEventsLimitedDifferentStackTrace() { + Assume.assumeTrue("The telemetry should be enabled", MissingClassTelemetry.enabled()); + + MissingClassEvents.MAX_EVENTS_PER_SEND = 1; + + try { + cl.loadClass("sun.java.MyNonExistentClassGathered"); + } catch (ClassNotFoundException ignored) { + } + + try { + cl.loadClass("sun.java.MyNonExistentJavaClassNotGathered"); + } catch (ClassNotFoundException ignored) { + } + + // Get the events gathered + MissingClassEvents events = MissingClassTelemetry.getEvents(); + ConcurrentHashMap, MissingClassEvent> eventsGathered = events.getEventsAndClean(); + + // Only one event gathered + assertEquals(1, eventsGathered.size()); + assertEquals(1, eventsGathered.values().iterator().next().getOccurrences()); + assertThat(eventsGathered.values().iterator().next().getStackTrace(), containsString("MyNonExistentClassGathered")); + assertThat(eventsGathered.values().iterator().next().getStackTrace(), not(containsString("MyNonExistentJavaClassNotGathered"))); + } + + /** + * Test the cycles in the exceptions. This specific tests shows that we first look for reportable exceptions in the + * causes and when found a reportable exception, we stop searching. So the warning because a cycle is not logged. + */ + @Test + public void cyclesNotReachedBecauseCNFEReported() { + Assume.assumeTrue("The telemetry should be enabled", MissingClassTelemetry.enabled()); + + logging.record(MissingClassTelemetry.class, Logger.getLogger(MissingClassTelemetry.class.getName()).getLevel()).capture(5); + + try { + /* + parent -> child -> cnfe + \ + parent + We first look into the causes exceptions. When found, we don't look into the suppressed, so the cycle is not + found here + */ + + ClassNotFoundException cnfe = new ClassNotFoundException("sun.java.MyNonExistentClassGathered"); + Exception child = new Exception("child", cnfe); + Exception parent = new Exception("parent", child); // parent -> caused by -> child + child.addSuppressed(parent); + + // Some extra wrapping + throw new Exception(new Exception (new Exception (parent))); + + } catch (Exception e) { + // Look for anything to report + MissingClassTelemetry.reportExceptionInside(e); + + // Get the events gathered + MissingClassEvents events = MissingClassTelemetry.getEvents(); + ConcurrentHashMap, MissingClassEvent> eventsGathered = events.getEventsAndClean(); + + // One event gathered + assertEquals(1, eventsGathered.size()); + + // the circular reference has not been recorded in the log because we reached a CNFE previously + assertEquals("No circular message was printed in logs", 0, logging.getRecords().stream().filter(r -> r.getMessage().contains(MissingClassTelemetry.CIRCULAR_REFERENCE)).count()); + } + } + + /** + * Test the cycles in the exceptions. This specific tests shows that we first look for reportable exceptions deep + * in the causes and suppressed exceptions in this order. We report the cycle but also the CNFE. + */ + @Test + public void cnfeFoundAfterCycle() { + Assume.assumeTrue("The telemetry should be enabled", MissingClassTelemetry.enabled()); + + logging.record(MissingClassTelemetry.class, Logger.getLogger(MissingClassTelemetry.class.getName()).getLevel()).capture(5); + + try { + ClassNotFoundException cnfe = new ClassNotFoundException("sun.java.MyNonExistentClassGathered"); + + /* + parent -> child + \ \ + cnfe parent + */ + Exception child = new Exception("child"); + Exception parent = new Exception("parent", child); // parent -> caused by -> child + child.addSuppressed(parent); // Boooomm!!!! The parent is a child suppressed exception -> cycle + parent.addSuppressed(cnfe); + + // Some extra wrapping + throw new Exception(new Exception (new Exception (parent))); + + } catch (Exception e) { + // Look for anything to report + MissingClassTelemetry.reportExceptionInside(e); + + // Get the events gathered + MissingClassEvents events = MissingClassTelemetry.getEvents(); + ConcurrentHashMap, MissingClassEvent> eventsGathered = events.getEventsAndClean(); + + // One event gathered + assertEquals(1, eventsGathered.size()); + + // the circular reference has been recorded in the log + assertThat(logging, LoggerRule.recorded(containsString(MissingClassTelemetry.CIRCULAR_REFERENCE))); + } + } + + /** + * Test the cycles in the exceptions. This specific tests shows that we first look for reportable exceptions deep + * in the causes and suppressed exceptions in this order. We report the cycle but also the CNFE in the parent. + */ + @Test + public void cnfeAfterCNFENotJava11AndCycle() { + Assume.assumeTrue("The telemetry should be enabled", MissingClassTelemetry.enabled()); + + logging.record(MissingClassTelemetry.class, Logger.getLogger(MissingClassTelemetry.class.getName()).getLevel()).capture(5); + + try { + ClassNotFoundException cnfe = new ClassNotFoundException("sun.java.MyNonExistentClassGathered"); + ClassNotFoundException cnfeNonJava11 = new ClassNotFoundException("MyNonExistentClassGathered"); + + /* + parent -> child -> grandchild + \ \ \ + cnfe parent cnfe (non java11) + */ + Exception grandchild = new Exception("grandchild"); + Exception child = new Exception("child"); + Exception parent = new Exception("parent", child); // parent -> caused by -> child + child.addSuppressed(parent); // Boooomm!!!! The parent is a child suppressed exception -> cycle + grandchild.addSuppressed(cnfeNonJava11); + parent.addSuppressed(cnfe); + + // Some extra wrapping + throw new Exception(new Exception (new Exception (parent))); + + } catch (Exception e) { + // Look for anything to report + MissingClassTelemetry.reportExceptionInside(e); + + // Get the events gathered + MissingClassEvents events = MissingClassTelemetry.getEvents(); + ConcurrentHashMap, MissingClassEvent> eventsGathered = events.getEventsAndClean(); + + // One event gathered + assertEquals(1, eventsGathered.size()); + + // the circular reference has been recorded in the log + assertThat(logging, LoggerRule.recorded(containsString(MissingClassTelemetry.CIRCULAR_REFERENCE))); + } + } + + @Test + public void nothingGatheredWhenTelemetryDisabled() { + Assume.assumeFalse("The telemetry should not be enabled", MissingClassTelemetry.enabled()); + + try { + cl.loadClass("sun.java.MyNonExistentClass"); + } catch (ClassNotFoundException ignored) { + } + + ConcurrentHashMap, MissingClassEvent> eventsGathered = MissingClassTelemetry.getEvents().getEventsAndClean(); + + // No events gathered + assertEquals(0, eventsGathered.size()); + } +} -- GitLab From a6f5b2b1288d15cd2ea5c2fd9b8916e6397bf795 Mon Sep 17 00:00:00 2001 From: Josh Soref Date: Fri, 5 Jul 2019 09:29:41 -0400 Subject: [PATCH 404/476] Cleanup properties -- don't escape spaces (#4026) * IntelliJ/Properties(tr): Invalid string escape Re-encode with utf-8 * IntelliJ/Properties(pt): Invalid string escape (newline) * IntelliJ/Properties(da): Invalid string escape (newline) * IntelliJ/Properties(da): Invalid string escape * IntelliJ/Properties(pt_BR): Invalid string escape * IntelliJ/Properties(bg): Invalid string escape * IntelliJ/Properties(pl): Invalid string escape --- .../hudson/PluginManager/installed_tr.properties | 4 ++-- .../HudsonHomeDiskUsageMonitor/index_da.properties | 6 +++--- .../HudsonHomeDiskUsageMonitor/index_pt.properties | 4 ++-- .../hudson/diagnosis/OldDataMonitor/manage_pt.properties | 2 +- .../hudson/model/AbstractBuild/index_tr.properties | 6 +++--- .../hudson/model/AbstractBuild/sidepanel_tr.properties | 4 ++-- .../hudson/model/AbstractBuild/tasks_tr.properties | 2 +- .../hudson/model/AbstractItem/delete_tr.properties | 2 +- .../hudson/model/AbstractItem/noWorkspace_tr.properties | 8 ++++---- .../model/AbstractProject/configure-common_tr.properties | 2 +- .../hudson/model/AbstractProject/main_tr.properties | 2 +- .../resources/hudson/model/AllView/noJob_tr.properties | 2 +- .../hudson/model/Computer/sidepanel_tr.properties | 2 +- .../model/DirectoryBrowserSupport/dir_tr.properties | 2 +- .../main/resources/hudson/model/Run/console_tr.properties | 2 +- .../resources/hudson/model/User/sidepanel_tr.properties | 2 +- .../main/resources/hudson/model/View/delete_tr.properties | 2 +- .../main/resources/hudson/model/View/index_tr.properties | 2 +- .../main/resources/hudson/model/View/newJob_tr.properties | 4 ++-- .../MonitorMarkedNodeOffline/message_bg.properties | 2 +- .../hudson/scm/EmptyChangeLogSet/digest_tr.properties | 2 +- .../hudson/scm/SCM/project-changes_tr.properties | 2 +- .../hudson/slaves/JNLPLauncher/help_bg.properties | 2 +- .../Fingerprinter/FingerprintAction/index_tr.properties | 6 +++--- .../main/resources/hudson/tasks/Maven/help_bg.properties | 2 +- .../AdministrativeMonitorImpl/message_bg.properties | 2 +- .../AdministrativeMonitorImpl/message_pt_BR.properties | 2 +- .../hudson/util/DoubleLaunchChecker/index_tr.properties | 4 ++-- .../hudson/util/HudsonIsLoading/index_tr.properties | 4 ++-- .../InsufficientPermissionDetected/index_pt_BR.properties | 2 +- .../resources/jenkins/management/Messages_tr.properties | 4 ++-- .../jenkins/model/Jenkins/fingerprintCheck_tr.properties | 6 +++--- .../jenkins/model/Jenkins/loginError_tr.properties | 4 ++-- .../resources/jenkins/model/Jenkins/login_tr.properties | 2 +- .../resources/jenkins/model/Jenkins/oops_pl.properties | 2 +- .../model/Jenkins/projectRelationship-help_tr.properties | 8 ++++---- .../model/Jenkins/projectRelationship_tr.properties | 4 ++-- .../jenkins/model/Jenkins/systemInfo_tr.properties | 4 ++-- .../JenkinsLocationConfiguration/config_tr.properties | 4 ++-- .../main/resources/jenkins/model/Messages_da.properties | 2 +- .../src/main/resources/lib/hudson/executors_tr.properties | 2 +- .../resources/lib/hudson/listScmBrowsers_tr.properties | 2 +- .../resources/lib/hudson/project/config-scm_tr.properties | 2 +- .../lib/hudson/project/upstream-downstream_tr.properties | 4 ++-- core/src/main/resources/lib/hudson/queue_tr.properties | 2 +- .../main/resources/lib/hudson/scriptConsole_bg.properties | 2 +- .../main/resources/lib/hudson/scriptConsole_tr.properties | 2 +- 47 files changed, 73 insertions(+), 73 deletions(-) diff --git a/core/src/main/resources/hudson/PluginManager/installed_tr.properties b/core/src/main/resources/hudson/PluginManager/installed_tr.properties index fd8f5dae81..6718e29308 100644 --- a/core/src/main/resources/hudson/PluginManager/installed_tr.properties +++ b/core/src/main/resources/hudson/PluginManager/installed_tr.properties @@ -27,6 +27,6 @@ Enabled=Devrede Name=\u0130sim Uninstall=Kald\u0131r Version=Versiyon -New\ plugins\ will\ take\ effect\ once\ you\ restart\ Jenkins=Yeni\ eklentiler\ Jenkins'\u0131\ bir\ kere\ yeniden\ ba\u015flatt\u0131ktan\ sonra\ devreye\ girecektir -Changes\ will\ take\ effect\ when\ you\ restart\ Jenkins=De\u011fi\u015fiklikler\ Jenkins'\u0131\ yeniden\ ba\u015flatt\u0131ktan\ sonra\ devreye\ girecektir +New\ plugins\ will\ take\ effect\ once\ you\ restart\ Jenkins=Yeni eklentiler Jenkins'\u0131 bir kere yeniden ba\u015flatt\u0131ktan sonra devreye girecektir +Changes\ will\ take\ effect\ when\ you\ restart\ Jenkins=De\u011fi\u015fiklikler Jenkins'\u0131 yeniden ba\u015flatt\u0131ktan sonra devreye girecektir downgradeTo={0} s\u00FCr\u00FCm\u00FCne al\u00E7alt diff --git a/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index_da.properties b/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index_da.properties index 1a98b30ed3..4c52441124 100644 --- a/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index_da.properties +++ b/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index_da.properties @@ -20,12 +20,12 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -description.1=\ +description.1=\ Dit JENKINS_HOME ({0}) er n\u00e6sten fyldt. \ N\u00e5r dette direktorie fylder helt op vil det sprede d\u00f8d og \u00f8del\u00e6ggelse, da Jenkins ikke vil kunne gemme mere data. -solution.2=\ +solution.2=\ Flyt JENKINS_HOME til et st\u00f8rre diskafsnit. -JENKINS_HOME\ is\ almost\ full=JENKINS_HOME\ er\ n\u00e6sten\ fyldt\ op +JENKINS_HOME\ is\ almost\ full=JENKINS_HOME er n\u00e6sten fyldt op blurb=JENKINS_HOME er n\u00e6sten fyldt op solution.1=Slet nogle filer p\u00e5 dette diskafsnit for at frig\u00f8re mere plads description.2=For at undg\u00e5 problemer skal du handle nu. diff --git a/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index_pt.properties b/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index_pt.properties index b1e7f81355..cefd9be60c 100644 --- a/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index_pt.properties +++ b/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index_pt.properties @@ -22,9 +22,9 @@ JENKINS_HOME\ is\ almost\ full=o JENKINS_HOME est\u00e1 quase cheio description.2=Para previnir esse problema, fa\u00e7a alguma coisa agora. -description.1=O seu JENKINS_HOME ({0}) est\u00e1 quase cheio. \ +description.1=O seu JENKINS_HOME ({0}) est\u00e1 quase cheio. \ Quando esse diret\u00f3rio estiver lotado ocorrer\u00e3o alguns estragos, pois o Jenkins n\u00e3o pode gravar mais dado nenhum. -solution.2=Mova o JENKINS_HOME para uma parti\u00e7\u00e3o maior. \ +solution.2=Mova o JENKINS_HOME para uma parti\u00e7\u00e3o maior. \ Veja
a nossa Wiki para aprender como fazer isso. blurb=JENKINS_HOME est\u00e1 quase cheio solution.1=Limpe alguns arquivos dessa parti\u00e7\u00e3o para liberar mais espa\u00e7o. diff --git a/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_pt.properties b/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_pt.properties index 7f3656053f..596e528494 100644 --- a/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_pt.properties +++ b/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_pt.properties @@ -25,7 +25,7 @@ Discard\ Unreadable\ Data=Descartar dados ileg\u00edveis Version=Vers\u00e3o Upgrade=Upgrade Resave\ data\ files\ with\ structure\ changes\ no\ newer\ than\ Jenkins=Regravar os arquivos de dados com a mudan\u00e7a de estrutura sem ser mais nova que o Jenkins -blurb.2=Algumas vezes ocorre erro ao ler os dados (se o plugin adiciona algum dado que depois \u00e9 \ +blurb.2=Algumas vezes ocorre erro ao ler os dados (se o plugin adiciona algum dado que depois \u00e9 \ desativado, se o c\u00f3digo de migra\u00e7\u00e3o n\u00e3o estiver escrito com as mudan\u00e7as de estrutura, ou se o Jenkins sofreu \ downgraded depois de tiver escrito algum dado que \u00e9 ileg\u00edvel por uma vers\u00e3o mais antiga). \ Esses erros s\u00e3o logados,mas o dado ileg\u00edvel ser\u00e1 ignorado, permitindo ao Jenkins iniciar e \ diff --git a/core/src/main/resources/hudson/model/AbstractBuild/index_tr.properties b/core/src/main/resources/hudson/model/AbstractBuild/index_tr.properties index 8a342342f1..52776c9b91 100644 --- a/core/src/main/resources/hudson/model/AbstractBuild/index_tr.properties +++ b/core/src/main/resources/hudson/model/AbstractBuild/index_tr.properties @@ -26,11 +26,11 @@ Build\ Artifacts=Yap\u0131land\u0131rma Hatalar\u0131 Changes\ in\ dependency=Ba\u011f\u0131ml\u0131l\u0131ktaki de\u011fi\u015fiklikler beingExecuted=Yap\u0131land\u0131rma {0} d\u0131r \u00E7al\u0131\u015Fmaktad\u0131r detail=detay -Not\ yet\ determined=Hen\u00fcz\ belirlenmedi +Not\ yet\ determined=Hen\u00fcz belirlenmedi Failed\ to\ determine=Belirleme esnas\u0131nda hata olu\u015ftu log=log -Upstream\ Builds=Upstream\ Yap\u0131land\u0131rmalar -Downstream\ Builds=Downstream\ Yap\u0131land\u0131rmalar +Upstream\ Builds=Upstream Yap\u0131land\u0131rmalar +Downstream\ Builds=Downstream Yap\u0131land\u0131rmalar none=hi\u00e7birisi Permalinks=Permalinks Build\ number=Yap\u0131land\u0131rma numaras\u0131 diff --git a/core/src/main/resources/hudson/model/AbstractBuild/sidepanel_tr.properties b/core/src/main/resources/hudson/model/AbstractBuild/sidepanel_tr.properties index 7f69781518..5e65db5af0 100644 --- a/core/src/main/resources/hudson/model/AbstractBuild/sidepanel_tr.properties +++ b/core/src/main/resources/hudson/model/AbstractBuild/sidepanel_tr.properties @@ -20,5 +20,5 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -Previous\ Build=\u00d6nceki\ Yap\u0131land\u0131rma -Next\ Build=Sonraki\ Yap\u0131land\u0131rma +Previous\ Build=\u00d6nceki Yap\u0131land\u0131rma +Next\ Build=Sonraki Yap\u0131land\u0131rma diff --git a/core/src/main/resources/hudson/model/AbstractBuild/tasks_tr.properties b/core/src/main/resources/hudson/model/AbstractBuild/tasks_tr.properties index 488b75c906..e6a2d92a98 100644 --- a/core/src/main/resources/hudson/model/AbstractBuild/tasks_tr.properties +++ b/core/src/main/resources/hudson/model/AbstractBuild/tasks_tr.properties @@ -24,7 +24,7 @@ Back\ to\ Project=Projeye geri d\u00F6n Changes=De\u011Fi\u015Fiklikler Console\ Output=Konsol \u00C7\u0131kt\u0131s\u0131 View\ Build\ Information=in\u015Fa bilgisi g\u00F6r\u00FCnt\u00FCle -View\ as\ plain\ text=D\u00fcz\ metin\ olarak\ g\u00f6ster +View\ as\ plain\ text=D\u00fcz metin olarak g\u00f6ster Edit\ Build\ Information=S\u00FCr\u00FCm Bilgisini D\u00FCzenle Status=Durum raw=ham diff --git a/core/src/main/resources/hudson/model/AbstractItem/delete_tr.properties b/core/src/main/resources/hudson/model/AbstractItem/delete_tr.properties index ea6133d792..07eca89db6 100644 --- a/core/src/main/resources/hudson/model/AbstractItem/delete_tr.properties +++ b/core/src/main/resources/hudson/model/AbstractItem/delete_tr.properties @@ -20,6 +20,6 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -Are\ you\ sure\ about\ deleting\ the\ job?=Bu\ i\u015fi\ silmek\ istedi\u011finize\ emin\ misiniz? +Are\ you\ sure\ about\ deleting\ the\ job?=Bu i\u015fi silmek istedi\u011finize emin misiniz? Yes=Evet blurb={0} ''''{1}'''' Silmek istedi\u011Finizden eminmisiniz ? diff --git a/core/src/main/resources/hudson/model/AbstractItem/noWorkspace_tr.properties b/core/src/main/resources/hudson/model/AbstractItem/noWorkspace_tr.properties index 0696ad6f25..3df83ba960 100644 --- a/core/src/main/resources/hudson/model/AbstractItem/noWorkspace_tr.properties +++ b/core/src/main/resources/hudson/model/AbstractItem/noWorkspace_tr.properties @@ -22,7 +22,7 @@ li3=\u00c7al\u0131\u015fma alan\u0131 dizini ({0}), Jenkins''\u0131n kontrol\u00fc d\u0131\u015f\u0131nda silindi. text=Jenkins''\u0131n bir \u00e7al\u0131\u015fma alan\u0131 yaratmas\u0131 i\u00e7in bir yap\u0131land\u0131rma \u00e7al\u0131\u015ft\u0131r\u0131n. -Error\:\ no\ workspace=Hata\:\ \u00c7al\u0131\u015fma Alan\u0131 mevcut de\u011fil -A\ project\ won't\ have\ any\ workspace\ until\ at\ least\ one\ build\ is\ performed.=Bir\ proje,\ en\ az\u0131ndan\ bir\ yap\u0131land\u0131rma\ \u00e7al\u0131\u015ft\u0131r\u0131lmadan\ bir\ \u00e7al\u0131\u015fma\ alan\u0131na\ sahip\ olamaz. -There's\ no\ workspace\ for\ this\ project.\ Possible\ reasons\ are\:=Bu\ projenin\ bir\ \u00e7al\u0131\u015fma\ alan\u0131\ yok.\ Muhtemel\ sebepler\: -The\ project\ was\ renamed\ recently\ and\ no\ build\ was\ done\ under\ the\ new\ name.=Projenin\ ismi\ yeni\ de\u011fi\u015ftirildi\ ve\ yeni\ isim\ alt\u0131nda\ herhangi\ bir\ yap\u0131land\u0131rma\ \u00e7al\u0131\u015ft\u0131r\u0131lmad\u0131. +Error\:\ no\ workspace=Hata\: \u00c7al\u0131\u015fma Alan\u0131 mevcut de\u011fil +A\ project\ won't\ have\ any\ workspace\ until\ at\ least\ one\ build\ is\ performed.=Bir proje, en az\u0131ndan bir yap\u0131land\u0131rma \u00e7al\u0131\u015ft\u0131r\u0131lmadan bir \u00e7al\u0131\u015fma alan\u0131na sahip olamaz. +There's\ no\ workspace\ for\ this\ project.\ Possible\ reasons\ are\:=Bu projenin bir \u00e7al\u0131\u015fma alan\u0131 yok. Muhtemel sebepler\: +The\ project\ was\ renamed\ recently\ and\ no\ build\ was\ done\ under\ the\ new\ name.=Projenin ismi yeni de\u011fi\u015ftirildi ve yeni isim alt\u0131nda herhangi bir yap\u0131land\u0131rma \u00e7al\u0131\u015ft\u0131r\u0131lmad\u0131. diff --git a/core/src/main/resources/hudson/model/AbstractProject/configure-common_tr.properties b/core/src/main/resources/hudson/model/AbstractProject/configure-common_tr.properties index 369ac68c65..9fdb13988f 100644 --- a/core/src/main/resources/hudson/model/AbstractProject/configure-common_tr.properties +++ b/core/src/main/resources/hudson/model/AbstractProject/configure-common_tr.properties @@ -20,7 +20,7 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -Advanced\ Project\ Options=Geli\u015fmi\u015f\ Proje\ Se\u00e7enekleri +Advanced\ Project\ Options=Geli\u015fmi\u015f Proje Se\u00e7enekleri JDK\ to\ be\ used\ for\ this\ project=Bu proje i\u00e7in kullan\u0131lacak olan JDK default.value=(Varsay\u0131lan) Tie\ this\ project\ to\ a\ node=Bu projeyi bir noda ba\u011fla diff --git a/core/src/main/resources/hudson/model/AbstractProject/main_tr.properties b/core/src/main/resources/hudson/model/AbstractProject/main_tr.properties index b1ea9d029b..7b8cee0e83 100644 --- a/core/src/main/resources/hudson/model/AbstractProject/main_tr.properties +++ b/core/src/main/resources/hudson/model/AbstractProject/main_tr.properties @@ -20,6 +20,6 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -Workspace=\u00c7al\u0131\u015fma\ Alan\u0131 +Workspace=\u00c7al\u0131\u015fma Alan\u0131 Last\ Successful\ Artifacts=Son Ba\u015far\u0131l\u0131 Artefaktlar Recent\ Changes=Son De\u011fi\u015fiklikler diff --git a/core/src/main/resources/hudson/model/AllView/noJob_tr.properties b/core/src/main/resources/hudson/model/AllView/noJob_tr.properties index 1f083c8726..983cb8c936 100644 --- a/core/src/main/resources/hudson/model/AllView/noJob_tr.properties +++ b/core/src/main/resources/hudson/model/AllView/noJob_tr.properties @@ -23,4 +23,4 @@ newJob=L\u00FCtfen ba\u015Flamak i\u00E7in yeni i\u015Fler olu\u015Fturun login=Yeni i\u015F olu\u015Fturmak i\u00E7in l\u00FCtfen giri\u015F yap\u0131n. signup=E\u011fer bir hesab\u0131n\u0131z yoksa, hemen kaydolun. -Welcome\ to\ Jenkins\!=Jenkins'a\ Ho\u015fgeldiniz\! +Welcome\ to\ Jenkins\!=Jenkins'a Ho\u015fgeldiniz\! diff --git a/core/src/main/resources/hudson/model/Computer/sidepanel_tr.properties b/core/src/main/resources/hudson/model/Computer/sidepanel_tr.properties index 87af65f9c3..446874afed 100644 --- a/core/src/main/resources/hudson/model/Computer/sidepanel_tr.properties +++ b/core/src/main/resources/hudson/model/Computer/sidepanel_tr.properties @@ -24,5 +24,5 @@ Back\ to\ List=Listeye D\u00f6n Build\ History=Yap\u0131land\u0131rma Ge\u00e7mi\u015fi Configure=Yap\u0131land\u0131r Load\ Statistics=Y\u00FCklenme istatistikleri -Script\ Console=Script\ Konsolu +Script\ Console=Script Konsolu Status=Durum diff --git a/core/src/main/resources/hudson/model/DirectoryBrowserSupport/dir_tr.properties b/core/src/main/resources/hudson/model/DirectoryBrowserSupport/dir_tr.properties index c1e6a63942..9418b0af16 100644 --- a/core/src/main/resources/hudson/model/DirectoryBrowserSupport/dir_tr.properties +++ b/core/src/main/resources/hudson/model/DirectoryBrowserSupport/dir_tr.properties @@ -20,6 +20,6 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -all\ files\ in\ zip=Zip\ halinde\ t\u00fcm\ dosyalar +all\ files\ in\ zip=Zip halinde t\u00fcm dosyalar No\ files\ in\ directory=Dizin i\u00e7erisinde dosya bulunmuyor view=G\u00F6r\u00FCn\u00FCm diff --git a/core/src/main/resources/hudson/model/Run/console_tr.properties b/core/src/main/resources/hudson/model/Run/console_tr.properties index 79afa5fdab..9c03c22807 100644 --- a/core/src/main/resources/hudson/model/Run/console_tr.properties +++ b/core/src/main/resources/hudson/model/Run/console_tr.properties @@ -20,5 +20,5 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -Console\ Output=Konsol\ Ç\u0131kt\u0131s\u0131 +Console\ Output=Konsol \u00C7\u0131kt\u0131s\u0131 skipSome={0,number,integer} KB atlan\u0131yor.. T\u00FCm Tutanak diff --git a/core/src/main/resources/hudson/model/User/sidepanel_tr.properties b/core/src/main/resources/hudson/model/User/sidepanel_tr.properties index fe2bf4f34f..865c954d8c 100644 --- a/core/src/main/resources/hudson/model/User/sidepanel_tr.properties +++ b/core/src/main/resources/hudson/model/User/sidepanel_tr.properties @@ -24,4 +24,4 @@ My\ Views=Benim G\u00F6r\u00FCn\u00FCmlerim People=\u0130nsanlar Status=Durum Builds=Yap\u0131land\u0131rmalar -Configure=Konfig\u00fcrasyonu\ De\u011fi\u015ftir +Configure=Konfig\u00fcrasyonu De\u011fi\u015ftir diff --git a/core/src/main/resources/hudson/model/View/delete_tr.properties b/core/src/main/resources/hudson/model/View/delete_tr.properties index e292a581f1..06edb5477f 100644 --- a/core/src/main/resources/hudson/model/View/delete_tr.properties +++ b/core/src/main/resources/hudson/model/View/delete_tr.properties @@ -20,5 +20,5 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -Are\ you\ sure\ about\ deleting\ the\ view?=G\u00f6r\u00fcnt\u00fcy\u00fc\ silmek\ istedi\u011finize\ emin\ misiniz? +Are\ you\ sure\ about\ deleting\ the\ view?=G\u00f6r\u00fcnt\u00fcy\u00fc silmek istedi\u011finize emin misiniz? Yes=Evet diff --git a/core/src/main/resources/hudson/model/View/index_tr.properties b/core/src/main/resources/hudson/model/View/index_tr.properties index 8a586ea4d4..3c513a3bdb 100644 --- a/core/src/main/resources/hudson/model/View/index_tr.properties +++ b/core/src/main/resources/hudson/model/View/index_tr.properties @@ -20,4 +20,4 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -Dashboard=Kontrol\ Merkezi +Dashboard=Kontrol Merkezi diff --git a/core/src/main/resources/hudson/model/View/newJob_tr.properties b/core/src/main/resources/hudson/model/View/newJob_tr.properties index 265e611f4c..9d998a09d2 100644 --- a/core/src/main/resources/hudson/model/View/newJob_tr.properties +++ b/core/src/main/resources/hudson/model/View/newJob_tr.properties @@ -20,8 +20,8 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -#JobName=\u0130\u015f\ ad\u0131 -#CopyExisting=Varolan\ bir\ i\u015fi\ kopyala +#JobName=\u0130\u015f ad\u0131 +#CopyExisting=Varolan bir i\u015fi kopyala #Copy\ from=Kopyalanacak i\u015f CopyExisting=Varolandan kopyala {0} JobName=isim diff --git a/core/src/main/resources/hudson/node_monitors/MonitorMarkedNodeOffline/message_bg.properties b/core/src/main/resources/hudson/node_monitors/MonitorMarkedNodeOffline/message_bg.properties index dea163dd1e..a0925ea0c4 100644 --- a/core/src/main/resources/hudson/node_monitors/MonitorMarkedNodeOffline/message_bg.properties +++ b/core/src/main/resources/hudson/node_monitors/MonitorMarkedNodeOffline/message_bg.properties @@ -22,7 +22,7 @@ Dismiss=\ \u041e\u0442\u043a\u0430\u0437\u0432\u0430\u043d\u0435 -# Jenkins took some agents offline because their key health metrics went below a threshold. \ +# Jenkins took some agents offline because their key health metrics went below a threshold. \ # If you don\u2019t want Jenkins to do this, \ # change the setting. blurb=\ diff --git a/core/src/main/resources/hudson/scm/EmptyChangeLogSet/digest_tr.properties b/core/src/main/resources/hudson/scm/EmptyChangeLogSet/digest_tr.properties index 40ac076fb4..13ff5647f7 100644 --- a/core/src/main/resources/hudson/scm/EmptyChangeLogSet/digest_tr.properties +++ b/core/src/main/resources/hudson/scm/EmptyChangeLogSet/digest_tr.properties @@ -20,4 +20,4 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -No\ changes.=Herhangi\ bir\ de\u011fi\u015fiklik\ yok. +No\ changes.=Herhangi bir de\u011fi\u015fiklik yok. diff --git a/core/src/main/resources/hudson/scm/SCM/project-changes_tr.properties b/core/src/main/resources/hudson/scm/SCM/project-changes_tr.properties index 73d879d528..bb1ca7b874 100644 --- a/core/src/main/resources/hudson/scm/SCM/project-changes_tr.properties +++ b/core/src/main/resources/hudson/scm/SCM/project-changes_tr.properties @@ -21,4 +21,4 @@ # THE SOFTWARE. No\ builds.=Herhangi bir yap\u0131land\u0131rm\a yok. -No\ changes\ in\ any\ of\ the\ builds.=Yap\u0131land\u0131rmalarda\ hi\u00e7birinde\ de\u011fi\u015fiklik\ yok. +No\ changes\ in\ any\ of\ the\ builds.=Yap\u0131land\u0131rmalarda hi\u00e7birinde de\u011fi\u015fiklik yok. diff --git a/core/src/main/resources/hudson/slaves/JNLPLauncher/help_bg.properties b/core/src/main/resources/hudson/slaves/JNLPLauncher/help_bg.properties index 6e9390b1d1..8de8edf0b3 100644 --- a/core/src/main/resources/hudson/slaves/JNLPLauncher/help_bg.properties +++ b/core/src/main/resources/hudson/slaves/JNLPLauncher/help_bg.properties @@ -20,7 +20,7 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -# Allows an agent to be launched using Java Web Start.
\ +# Allows an agent to be launched using Java Web Start.
\ # In this case, a JNLP file must be opened on the agent machine, which will \ # establish a TCP connection to the Jenkins master.
\ # This means that the agent need not be reachable from the master; the agent \ diff --git a/core/src/main/resources/hudson/tasks/Fingerprinter/FingerprintAction/index_tr.properties b/core/src/main/resources/hudson/tasks/Fingerprinter/FingerprintAction/index_tr.properties index a7e945a4ba..d0cf7759c6 100644 --- a/core/src/main/resources/hudson/tasks/Fingerprinter/FingerprintAction/index_tr.properties +++ b/core/src/main/resources/hudson/tasks/Fingerprinter/FingerprintAction/index_tr.properties @@ -20,10 +20,10 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -Recorded\ Fingerprints=Kay\u0131tl\u0131\ parmakizleri +Recorded\ Fingerprints=Kay\u0131tl\u0131 parmakizleri File=Dosya -Original\ owner=Orijinal\ sahibi +Original\ owner=Orijinal sahibi Age=Ya\u015f -more\ details=daha\ fazla\ detay +more\ details=daha fazla detay outside\ Jenkins=Jenkins'\u0131n d\u0131\u015f\u0131nda this\ build=bu yap\u0131land\u0131rma diff --git a/core/src/main/resources/hudson/tasks/Maven/help_bg.properties b/core/src/main/resources/hudson/tasks/Maven/help_bg.properties index d25d153121..2d4ca93eaf 100644 --- a/core/src/main/resources/hudson/tasks/Maven/help_bg.properties +++ b/core/src/main/resources/hudson/tasks/Maven/help_bg.properties @@ -20,7 +20,7 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -# Jenkins passes various environment \ +# Jenkins passes various environment \ # variables to Maven, which you can access from Maven as "${env.VARIABLENAME}". para2=\ Jenkins \u043f\u0440\u0435\u0434\u0430\u0432\u0430 \u043d\u044f\u043a\u043e\u0438 \u043f\u0440\u043e\u043c\u0435\u043d\u043b\u0438\u0432\u0438 \u043d\u0430\ diff --git a/core/src/main/resources/hudson/triggers/SCMTrigger/AdministrativeMonitorImpl/message_bg.properties b/core/src/main/resources/hudson/triggers/SCMTrigger/AdministrativeMonitorImpl/message_bg.properties index 14df1b0337..7425711be9 100644 --- a/core/src/main/resources/hudson/triggers/SCMTrigger/AdministrativeMonitorImpl/message_bg.properties +++ b/core/src/main/resources/hudson/triggers/SCMTrigger/AdministrativeMonitorImpl/message_bg.properties @@ -22,7 +22,7 @@ # There are more SCM polling activities scheduled than handled, so \ # the threads are not keeping up with the demands. \ -# Check if your polling is \ +# Check if your polling is \ # hanging, and/or increase the number of threads if necessary. blurb=\ \u0417\u0430\u044f\u0432\u043a\u0438\u0442\u0435 \u0437\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0442\u0430 \u0437\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b \u043d\u0430 \u0432\u0435\u0440\u0441\u0438\u0438 \u0441\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0432\u0430\u0442 \u043f\u043e-\u0431\u0430\u0432\u043d\u043e\ diff --git a/core/src/main/resources/hudson/triggers/SCMTrigger/AdministrativeMonitorImpl/message_pt_BR.properties b/core/src/main/resources/hudson/triggers/SCMTrigger/AdministrativeMonitorImpl/message_pt_BR.properties index abfbedfc5a..8cc38db9b3 100644 --- a/core/src/main/resources/hudson/triggers/SCMTrigger/AdministrativeMonitorImpl/message_pt_BR.properties +++ b/core/src/main/resources/hudson/triggers/SCMTrigger/AdministrativeMonitorImpl/message_pt_BR.properties @@ -22,7 +22,7 @@ # There are more SCM polling activities scheduled than handled, so \ # the threads are not keeping up with the demands. \ -# Check if your polling is \ +# Check if your polling is \ # hanging, and/or increase the number of threads if necessary. blurb=Existem mais atividades de verifica\u00E7\u00E3o de SCM agendadas do que gerenciadas, por isso as threads n\u00E3o est\u00E3o acompanhando as demandas. Verifique se as verifica\u00E7\u00F5es est\u00E3o pendentes e aumente o n\u00FAmero de threads se necess\u00E1rio. diff --git a/core/src/main/resources/hudson/util/DoubleLaunchChecker/index_tr.properties b/core/src/main/resources/hudson/util/DoubleLaunchChecker/index_tr.properties index d8c74038a6..d948c8628d 100644 --- a/core/src/main/resources/hudson/util/DoubleLaunchChecker/index_tr.properties +++ b/core/src/main/resources/hudson/util/DoubleLaunchChecker/index_tr.properties @@ -24,5 +24,5 @@ message=\ Jenkins, ''{0}'' dizinini kullanan birden fazla Jenkins uygulamas\u0131 oldu\u011funu belirledi.\ Bu Jenkins''\u0131n garip davran\u0131\u015flar sergilemesine sebep olabilir, durumu en k\u0131sa zamanda d\u00fczeltin Error=Hata -This\ Jenkins=Bu\ Jenkins -Other\ Jenkins=Di\u011fer\ Jenkins +This\ Jenkins=Bu Jenkins +Other\ Jenkins=Di\u011fer Jenkins diff --git a/core/src/main/resources/hudson/util/HudsonIsLoading/index_tr.properties b/core/src/main/resources/hudson/util/HudsonIsLoading/index_tr.properties index d83050db64..e9cd2bc0e8 100644 --- a/core/src/main/resources/hudson/util/HudsonIsLoading/index_tr.properties +++ b/core/src/main/resources/hudson/util/HudsonIsLoading/index_tr.properties @@ -20,5 +20,5 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -Please\ wait\ while\ Jenkins\ is\ getting\ ready\ to\ work=Jenkins\ kullan\u0131ma haz\u0131r\ oluncaya\ kadar\ l\u00fctfen\ bekleyiniz -Your\ browser\ will\ reload\ automatically\ when\ Jenkins\ is\ ready.=Jenkins\ haz\u0131r\ oldu\u011funda\ taray\u0131c\u0131n\u0131z\ otomatik\ olarak\ yeniden\ y\u00fcklenecektir. +Please\ wait\ while\ Jenkins\ is\ getting\ ready\ to\ work=Jenkins kullan\u0131ma haz\u0131r oluncaya kadar l\u00fctfen bekleyiniz +Your\ browser\ will\ reload\ automatically\ when\ Jenkins\ is\ ready.=Jenkins haz\u0131r oldu\u011funda taray\u0131c\u0131n\u0131z otomatik olarak yeniden y\u00fcklenecektir. diff --git a/core/src/main/resources/hudson/util/InsufficientPermissionDetected/index_pt_BR.properties b/core/src/main/resources/hudson/util/InsufficientPermissionDetected/index_pt_BR.properties index 2f5904304a..16fe5d4ceb 100644 --- a/core/src/main/resources/hudson/util/InsufficientPermissionDetected/index_pt_BR.properties +++ b/core/src/main/resources/hudson/util/InsufficientPermissionDetected/index_pt_BR.properties @@ -34,7 +34,7 @@ de seguran\u00e7a, poder\u00e1 desativ\u00e1-lo. Error=Erro # \ # For how to turn off security manager in your container, refer to \ -# \ +# \ # Container-specific documentations of Jenkins. errorMessage.2=Para desativar o gerenciador de seguran\u00e7a, \ Documenta\u00e7\u00e3o especifica sobre containers do Jenkins diff --git a/core/src/main/resources/jenkins/management/Messages_tr.properties b/core/src/main/resources/jenkins/management/Messages_tr.properties index 32d022deee..dd80796a86 100644 --- a/core/src/main/resources/jenkins/management/Messages_tr.properties +++ b/core/src/main/resources/jenkins/management/Messages_tr.properties @@ -31,9 +31,9 @@ SystemInfoLink.DisplayName=Sistem Bilgisi SystemInfoLink.Description=Sorun \u00E7\u00F6zebilmek i\u00E7in \u00E7e\u015Fitli ortam de\u011Fi\u015Fkenlerini g\u00F6sterir. ConsoleLink.DisplayName=Script Konsolu ConsoleLink.Description=Y\u00F6netim/sorun \u00E7\u00F6zme/te\u015Fhis i\u00E7in scriptleri \u00E7al\u0131\u015Ft\u0131r\u0131r. -ShutdownLink.DisplayName_cancel=Kapatma i\u015Flemini iptal\ et +ShutdownLink.DisplayName_cancel=Kapatma i\u015Flemini iptal et ShutdownLink.DisplayName_prepare=Kapatma i\u015Flemine haz\u0131rlan ShutdownLink.Description=Sistemin g\u00FCvenli bir \u015Fekilde kapat\u0131labilmesi i\u00E7in, yeni yap\u0131land\u0131rma \u00E7al\u0131\u015Ft\u0131r\u0131lmas\u0131n\u0131 durdurur. -ConfigureLink.DisplayName=Sistem Konfig\u00FCrasyonunu\ De\u011Fi\u015Ftir +ConfigureLink.DisplayName=Sistem Konfig\u00FCrasyonunu De\u011Fi\u015Ftir ConfigureLink.Description=Evrensel ayarlar\u0131 ve path'lari konfig\u00FCre et PluginsLink.Description=Jenkins fonksiyonalitesini art\u0131rmak i\u00E7in kullan\u0131lan eklentileri ekle, \u00E7\u0131kar, devreye al veya devre d\u0131\u015F\u0131 b\u0131rak diff --git a/core/src/main/resources/jenkins/model/Jenkins/fingerprintCheck_tr.properties b/core/src/main/resources/jenkins/model/Jenkins/fingerprintCheck_tr.properties index 45faf26931..592726095f 100644 --- a/core/src/main/resources/jenkins/model/Jenkins/fingerprintCheck_tr.properties +++ b/core/src/main/resources/jenkins/model/Jenkins/fingerprintCheck_tr.properties @@ -20,9 +20,9 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -Check\ File\ Fingerprint=Dosya\ \u00fczerindeki\ parmakizini\ kontrol\ et -File\ to\ check=Kontrol\ edilecek\ dosya -Check=Kontrol\ Et +Check\ File\ Fingerprint=Dosya \u00fczerindeki parmakizini kontrol et +File\ to\ check=Kontrol edilecek dosya +Check=Kontrol Et description=\ Bir jar dosyan\u0131z var ve hangi versiyon oldu\u011funu bilmiyor musunuz?
\ Parmakizini Jenkins i\u00e7erisindeki veritaban\u0131nda aratarak bulabilirsiniz. diff --git a/core/src/main/resources/jenkins/model/Jenkins/loginError_tr.properties b/core/src/main/resources/jenkins/model/Jenkins/loginError_tr.properties index 8145edd56b..fbd4b1649e 100644 --- a/core/src/main/resources/jenkins/model/Jenkins/loginError_tr.properties +++ b/core/src/main/resources/jenkins/model/Jenkins/loginError_tr.properties @@ -21,5 +21,5 @@ # THE SOFTWARE. If\ you\ are\ a\ system\ administrator\ and\ suspect\ this\ to\ be\ a\ configuration\ problem,\ see\ the\ server\ console\ output\ for\ more\ details.=E\u011Fer bir sistem y\u00F6neticisi vard\u0131r ve bu bir yap\u0131land\u0131rma sorunu oldu\u011Fundan \u015F\u00FCpheleniyorsan\u0131z, sunucu konsolu \u00E7\u0131k\u0131\u015F\u0131 Daha fazla bilgi i\u00E7in bkz -Invalid\ login\ information.\ Please\ try\ again.=Ge\u00e7ersiz\ giri\u015f\ bilgisi.\ L\u00fctfen\ tekrar\ deneyiniz. -Try\ again=Tekrar\ deneyiniz +Invalid\ login\ information.\ Please\ try\ again.=Ge\u00e7ersiz giri\u015f bilgisi. L\u00fctfen tekrar deneyiniz. +Try\ again=Tekrar deneyiniz diff --git a/core/src/main/resources/jenkins/model/Jenkins/login_tr.properties b/core/src/main/resources/jenkins/model/Jenkins/login_tr.properties index d3d0214f07..dd754814e7 100644 --- a/core/src/main/resources/jenkins/model/Jenkins/login_tr.properties +++ b/core/src/main/resources/jenkins/model/Jenkins/login_tr.properties @@ -23,5 +23,5 @@ signUp=E\u011fer \u00fcye de\u011filseniz bir kullan\u0131c\u0131 yarat\u0131n. User=Kullan\u0131c\u0131 Password=\u015eifre -Remember\ me\ on\ this\ computer=Beni\ bu\ bilgisayarda\ hat\u0131rla +Remember\ me\ on\ this\ computer=Beni bu bilgisayarda hat\u0131rla login=giri\u015f diff --git a/core/src/main/resources/jenkins/model/Jenkins/oops_pl.properties b/core/src/main/resources/jenkins/model/Jenkins/oops_pl.properties index a70107665c..d4418e81b9 100644 --- a/core/src/main/resources/jenkins/model/Jenkins/oops_pl.properties +++ b/core/src/main/resources/jenkins/model/Jenkins/oops_pl.properties @@ -19,7 +19,7 @@ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -Twitter\:\ @jenkinsci=Twitter\:\ @jenkinsci +Twitter\:\ @jenkinsci=Twitter\: @jenkinsci Mailing\ Lists=Lista mailingowa Oops!=Oops! Bug\ tracker=Zg\u0142aszanie b\u0142\u0119d\u00F3w diff --git a/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_tr.properties b/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_tr.properties index 9885e1fb9c..afcdcbed14 100644 --- a/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_tr.properties +++ b/core/src/main/resources/jenkins/model/Jenkins/projectRelationship-help_tr.properties @@ -25,7 +25,7 @@ body=\ E\u011fer birbirine ba\u011fl\u0131 projeleriniz varsa, Jenkins parmakizi deste\u011fi\ ile olu\u015fturulan kay\u0131tlar\u0131 kullanarak hangi upstream projenin hangi downstream proje taraf\u0131ndan\ kullan\u0131ld\u0131\u011f\u0131n\u0131 takip edebilir. -For\ this\ feature\ to\ work,\ the\ following\ conditions\ need\ to\ be\ met\:=Bu\ \u00f6zelli\u011fin\ \u00e7al\u0131\u015fabilmesi\ i\u00e7in\ devam\u0131ndaki\ \u015fartlar\u0131n\ sa\u011flanmas\u0131\ gerekir: -The\ upstream\ project\ records\ the\ fingerprints\ of\ its\ build\ artifacts.=Upstream\ proje\, kendi yap\u0131land\u0131rma artefaktlar\u0131n\u0131n\ parmakizlerini\ kaydeder. -The\ downstream\ project\ records\ the\ fingerprints\ of\ the\ upstream\ jar\ files\ it\ uses.=Downstream\ proje,\ upstream\ projeden\ kulland\u0131\u011f\u0131\ jar\'lar\u0131n\ parmakizini\ kaydeder. -This\ allows\ Jenkins\ to\ correlate\ two\ projects.=Bu,\ Jenkins\'a\ iki\ projeyi\ kar\u015f\u0131l\u0131kl\u0131\ ili\u015fkilendirme\ yetene\u011fini\ verir. +For\ this\ feature\ to\ work,\ the\ following\ conditions\ need\ to\ be\ met\:=Bu \u00f6zelli\u011fin \u00e7al\u0131\u015fabilmesi i\u00e7in devam\u0131ndaki \u015fartlar\u0131n sa\u011flanmas\u0131 gerekir: +The\ upstream\ project\ records\ the\ fingerprints\ of\ its\ build\ artifacts.=Upstream proje\, kendi yap\u0131land\u0131rma artefaktlar\u0131n\u0131n parmakizlerini kaydeder. +The\ downstream\ project\ records\ the\ fingerprints\ of\ the\ upstream\ jar\ files\ it\ uses.=Downstream proje, upstream projeden kulland\u0131\u011f\u0131 jar\'lar\u0131n parmakizini kaydeder. +This\ allows\ Jenkins\ to\ correlate\ two\ projects.=Bu, Jenkins\'a iki projeyi kar\u015f\u0131l\u0131kl\u0131 ili\u015fkilendirme yetene\u011fini verir. diff --git a/core/src/main/resources/jenkins/model/Jenkins/projectRelationship_tr.properties b/core/src/main/resources/jenkins/model/Jenkins/projectRelationship_tr.properties index 7bdfbdbde8..434dfdd2b8 100644 --- a/core/src/main/resources/jenkins/model/Jenkins/projectRelationship_tr.properties +++ b/core/src/main/resources/jenkins/model/Jenkins/projectRelationship_tr.properties @@ -21,6 +21,6 @@ # THE SOFTWARE. Project\ Relationship=Projelerin \u0130li\u015fkisi -upstream\ project=upstream\ proje -downstream\ project=downstream\ proje +upstream\ project=upstream proje +downstream\ project=downstream proje Compare=Kar\u015f\u0131la\u015ft\u0131r diff --git a/core/src/main/resources/jenkins/model/Jenkins/systemInfo_tr.properties b/core/src/main/resources/jenkins/model/Jenkins/systemInfo_tr.properties index 8612528f97..15402a0854 100644 --- a/core/src/main/resources/jenkins/model/Jenkins/systemInfo_tr.properties +++ b/core/src/main/resources/jenkins/model/Jenkins/systemInfo_tr.properties @@ -20,5 +20,5 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -System\ Properties=Sistem\ \u00d6zellikleri -Environment\ Variables=Ortam\ De\u011fi\u015fkenleri +System\ Properties=Sistem \u00d6zellikleri +Environment\ Variables=Ortam De\u011fi\u015fkenleri diff --git a/core/src/main/resources/jenkins/model/JenkinsLocationConfiguration/config_tr.properties b/core/src/main/resources/jenkins/model/JenkinsLocationConfiguration/config_tr.properties index 6559200e04..ee75c83e3e 100644 --- a/core/src/main/resources/jenkins/model/JenkinsLocationConfiguration/config_tr.properties +++ b/core/src/main/resources/jenkins/model/JenkinsLocationConfiguration/config_tr.properties @@ -20,5 +20,5 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -System\ Admin\ e-mail\ address=Sistem\ Admin\ e-posta\ Adresi -Jenkins\ URL=Jenkins\ URL'i +System\ Admin\ e-mail\ address=Sistem Admin e-posta Adresi +Jenkins\ URL=Jenkins URL'i diff --git a/core/src/main/resources/jenkins/model/Messages_da.properties b/core/src/main/resources/jenkins/model/Messages_da.properties index dedadb72f3..cdac5eebba 100644 --- a/core/src/main/resources/jenkins/model/Messages_da.properties +++ b/core/src/main/resources/jenkins/model/Messages_da.properties @@ -32,7 +32,7 @@ Hudson.NodeBeingRemoved=Node bliver fjernet Hudson.UnsafeChar=''{0}'' er et usikkert tegn Hudson.ViewAlreadyExists=En visning ved navn "{0}" findes allerede Hudson.ViewName=Alle -Hudson.NotUsesUTF8ToDecodeURL=\ +Hudson.NotUsesUTF8ToDecodeURL=\ Din container bruger ikke UTF-8 til at afkode URLer. Hvis du bruger ikke-ASCII tegn i jobnavne etc, \ vil dette skabe problemer. Hudson.ReadPermission.Description=\ diff --git a/core/src/main/resources/lib/hudson/executors_tr.properties b/core/src/main/resources/lib/hudson/executors_tr.properties index e0ddd9c707..7b0b90de3d 100644 --- a/core/src/main/resources/lib/hudson/executors_tr.properties +++ b/core/src/main/resources/lib/hudson/executors_tr.properties @@ -27,5 +27,5 @@ offline=\u00e7evrim d\u0131\u015f\u0131 Dead=\u00d6l\u00fc Idle=Beklemede Building=Yap\u0131land\u0131r\u0131yor -terminate\ this\ build=Bu yap\u0131land\u0131rmay\u0131\ durdur +terminate\ this\ build=Bu yap\u0131land\u0131rmay\u0131 durdur suspended=durdurulmu\u015f diff --git a/core/src/main/resources/lib/hudson/listScmBrowsers_tr.properties b/core/src/main/resources/lib/hudson/listScmBrowsers_tr.properties index eddab7dc20..6a8cc4d061 100644 --- a/core/src/main/resources/lib/hudson/listScmBrowsers_tr.properties +++ b/core/src/main/resources/lib/hudson/listScmBrowsers_tr.properties @@ -20,5 +20,5 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -Repository\ browser=Repository\ taray\u0131c\u0131s\u0131 +Repository\ browser=Repository taray\u0131c\u0131s\u0131 Auto=Otomatik diff --git a/core/src/main/resources/lib/hudson/project/config-scm_tr.properties b/core/src/main/resources/lib/hudson/project/config-scm_tr.properties index b904007813..964c308907 100644 --- a/core/src/main/resources/lib/hudson/project/config-scm_tr.properties +++ b/core/src/main/resources/lib/hudson/project/config-scm_tr.properties @@ -20,4 +20,4 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -Source\ Code\ Management=Kaynak\ Kodu\ Y\u00f6netimi +Source\ Code\ Management=Kaynak Kodu Y\u00f6netimi diff --git a/core/src/main/resources/lib/hudson/project/upstream-downstream_tr.properties b/core/src/main/resources/lib/hudson/project/upstream-downstream_tr.properties index 35deccf279..4c9d275fe6 100644 --- a/core/src/main/resources/lib/hudson/project/upstream-downstream_tr.properties +++ b/core/src/main/resources/lib/hudson/project/upstream-downstream_tr.properties @@ -20,5 +20,5 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -Upstream\ Projects=Upstream\ Projeler -Downstream\ Projects=Downstream\ Projeler +Upstream\ Projects=Upstream Projeler +Downstream\ Projects=Downstream Projeler diff --git a/core/src/main/resources/lib/hudson/queue_tr.properties b/core/src/main/resources/lib/hudson/queue_tr.properties index 1c13c2548e..b3abee66be 100644 --- a/core/src/main/resources/lib/hudson/queue_tr.properties +++ b/core/src/main/resources/lib/hudson/queue_tr.properties @@ -22,6 +22,6 @@ Build\ Queue=Yap\u0131land\u0131rma Listesi{0,choice,0#|0< ({0,number})} No\ builds\ in\ the\ queue.=S\u0131rada bekleyen yap\u0131land\u0131rma yok. -Jenkins\ is\ going\ to\ shut\ down.\ No\ further\ builds\ will\ be\ performed.=Jenkins\ kapat\u0131lacakt\u0131r.\ Bundan\ sonra\ ba\u015fka\ yap\u0131land\u0131rma\ ba\u015flat\u0131lmayacakt\u0131r. +Jenkins\ is\ going\ to\ shut\ down.\ No\ further\ builds\ will\ be\ performed.=Jenkins kapat\u0131lacakt\u0131r. Bundan sonra ba\u015fka yap\u0131land\u0131rma ba\u015flat\u0131lmayacakt\u0131r. WaitingFor={0} bekleniyor cancel=iptal diff --git a/core/src/main/resources/lib/hudson/scriptConsole_bg.properties b/core/src/main/resources/lib/hudson/scriptConsole_bg.properties index b271dfcbf9..be4c62b772 100644 --- a/core/src/main/resources/lib/hudson/scriptConsole_bg.properties +++ b/core/src/main/resources/lib/hudson/scriptConsole_bg.properties @@ -33,7 +33,7 @@ description2=\ It\ is\ not\ possible\ to\ run\ scripts\ when\ slave\ is\ offline.=\ \u041a\u043e\u0433\u0430\u0442\u043e \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u0438\u044f\u0442 \u043a\u043e\u043c\u043f\u044e\u0442\u044a\u0440 \u043d\u0435 \u0435 \u043d\u0430 \u043b\u0438\u043d\u0438\u044f, \u043d\u0435 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0441\u0435 \u0438\u0437\u043f\u044a\u043b\u043d\u044f\u0432\u0430\u0442 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432\u0435. # \ -# Type in an arbitrary Groovy script and \ +# Type in an arbitrary Groovy script and \ # execute it on the server. Useful for trouble-shooting and diagnostics. \ # Use the \u2018println\u2019 command to see the output (if you use System.out, \ # it will go to the server\u2019s stdout, which is harder to see.) Example: diff --git a/core/src/main/resources/lib/hudson/scriptConsole_tr.properties b/core/src/main/resources/lib/hudson/scriptConsole_tr.properties index d11cf3ad7e..59a1ae2f17 100644 --- a/core/src/main/resources/lib/hudson/scriptConsole_tr.properties +++ b/core/src/main/resources/lib/hudson/scriptConsole_tr.properties @@ -20,6 +20,6 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -Script\ Console=Script\ Konsolu +Script\ Console=Script Konsolu Run=\u0130al\u0131\u015ft\u0131r Result=Sonu\u00e7 -- GitLab From 406344157bc3e39a1f00f2aee63760c2caee79d9 Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Sun, 7 Jul 2019 20:23:25 -0700 Subject: [PATCH 405/476] [maven-release-plugin] prepare release jenkins-2.184 --- cli/pom.xml | 2 +- core/pom.xml | 2 +- pom.xml | 4 ++-- test-jdk8/pom.xml | 2 +- test-pom/pom.xml | 2 +- test/pom.xml | 2 +- war/pom.xml | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/cli/pom.xml b/cli/pom.xml index 5cb529ccec..540cd91c9b 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -5,7 +5,7 @@ org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.184 cli diff --git a/core/pom.xml b/core/pom.xml index f708264d07..92a9cac1a9 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -29,7 +29,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.184 jenkins-core diff --git a/pom.xml b/pom.xml index 04bddf405f..1d67413673 100644 --- a/pom.xml +++ b/pom.xml @@ -34,7 +34,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.184 pom Jenkins main module @@ -60,7 +60,7 @@ THE SOFTWARE. scm:git:git://github.com/jenkinsci/jenkins.git scm:git:ssh://git@github.com/jenkinsci/jenkins.git https://github.com/jenkinsci/jenkins - ${scmTag} + jenkins-2.184 diff --git a/test-jdk8/pom.xml b/test-jdk8/pom.xml index 70c4870837..53787563e6 100644 --- a/test-jdk8/pom.xml +++ b/test-jdk8/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-test-parent - ${revision}${changelist} + 2.184 ../test-pom diff --git a/test-pom/pom.xml b/test-pom/pom.xml index 3e9e75fb1f..c4e30bf8ad 100644 --- a/test-pom/pom.xml +++ b/test-pom/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.184 jenkins-test-parent diff --git a/test/pom.xml b/test/pom.xml index 4c5abecc6f..d7fd62d850 100644 --- a/test/pom.xml +++ b/test/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-test-parent - ${revision}${changelist} + 2.184 ../test-pom diff --git a/war/pom.xml b/war/pom.xml index 5bcfd78481..13586050a7 100644 --- a/war/pom.xml +++ b/war/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.184 jenkins-war -- GitLab From d37bcb54d9b4b0a5f3559bec3f86787142af204f Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Sun, 7 Jul 2019 20:23:36 -0700 Subject: [PATCH 406/476] [maven-release-plugin] prepare for next development iteration --- cli/pom.xml | 2 +- core/pom.xml | 2 +- pom.xml | 6 +++--- test-jdk8/pom.xml | 2 +- test-pom/pom.xml | 2 +- test/pom.xml | 2 +- war/pom.xml | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/cli/pom.xml b/cli/pom.xml index 540cd91c9b..5cb529ccec 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -5,7 +5,7 @@ org.jenkins-ci.main jenkins-parent - 2.184 + ${revision}${changelist} cli diff --git a/core/pom.xml b/core/pom.xml index 92a9cac1a9..f708264d07 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -29,7 +29,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.184 + ${revision}${changelist} jenkins-core diff --git a/pom.xml b/pom.xml index 1d67413673..3380879ad7 100644 --- a/pom.xml +++ b/pom.xml @@ -34,7 +34,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.184 + ${revision}${changelist} pom Jenkins main module @@ -60,7 +60,7 @@ THE SOFTWARE. scm:git:git://github.com/jenkinsci/jenkins.git scm:git:ssh://git@github.com/jenkinsci/jenkins.git https://github.com/jenkinsci/jenkins - jenkins-2.184 + ${scmTag} @@ -76,7 +76,7 @@ THE SOFTWARE. - 2.184 + 2.185 -SNAPSHOT @@ -43,4 +43,4 @@ THE SOFTWARE. - \ No newline at end of file + -- GitLab From 078c442cbeb2d316f5f6acdf0c3ca7d83fe89b84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20Gond=C5=BEa?= Date: Thu, 11 Jul 2019 15:40:50 +0200 Subject: [PATCH 411/476] Revert "[JENKINS-57515] update JNA library from 4.5.2 to 5.3.1 (#4060)" This reverts commit a604ddc73903365df7c37a75e58d34b9873a4e40. --- core/pom.xml | 2 +- core/src/main/java/hudson/util/ProcessTree.java | 3 ++- core/src/main/java/hudson/util/jna/Kernel32Utils.java | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/core/pom.xml b/core/pom.xml index be1384e126..e3443ad2fd 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -534,7 +534,7 @@ THE SOFTWARE. net.java.dev.jna jna - 5.3.1 + 4.5.2 org.kohsuke diff --git a/core/src/main/java/hudson/util/ProcessTree.java b/core/src/main/java/hudson/util/ProcessTree.java index e8e48915c6..4e2a4b3c14 100644 --- a/core/src/main/java/hudson/util/ProcessTree.java +++ b/core/src/main/java/hudson/util/ProcessTree.java @@ -26,6 +26,7 @@ package hudson.util; import com.sun.jna.Memory; import com.sun.jna.Native; import com.sun.jna.NativeLong; +import com.sun.jna.Pointer; import com.sun.jna.LastErrorException; import com.sun.jna.ptr.IntByReference; import hudson.EnvVars; @@ -1441,7 +1442,7 @@ public abstract class ProcessTree implements Iterable, IProcessTree, * Read the remainder of psinfo_t differently depending on whether the * Java process is 32-bit or 64-bit. */ - if (Native.POINTER_SIZE == 8) { + if (Pointer.SIZE == 8) { psinfo.seek(236); // offset of pr_argc argc = adjust(psinfo.readInt()); argp = adjustL(psinfo.readLong()); diff --git a/core/src/main/java/hudson/util/jna/Kernel32Utils.java b/core/src/main/java/hudson/util/jna/Kernel32Utils.java index b88c4c7f35..300c186a4c 100644 --- a/core/src/main/java/hudson/util/jna/Kernel32Utils.java +++ b/core/src/main/java/hudson/util/jna/Kernel32Utils.java @@ -115,7 +115,7 @@ public class Kernel32Utils { public static File getTempDir() { Memory buf = new Memory(1024); if (Kernel32.INSTANCE.GetTempPathW(512,buf)!=0) {// the first arg is number of wchar - return new File(buf.getWideString(0)); + return new File(buf.getString(0, true)); } else { return null; } -- GitLab From 9769092ee0980fc78cf69d0c2cac067e0807c080 Mon Sep 17 00:00:00 2001 From: Josh Soref Date: Thu, 11 Jul 2019 10:49:00 -0400 Subject: [PATCH 412/476] [JENKINS-57383] add missing cast (#4104) --- core/src/main/java/hudson/ProxyConfiguration.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/hudson/ProxyConfiguration.java b/core/src/main/java/hudson/ProxyConfiguration.java index 6912e2ce5f..cecd2f6843 100644 --- a/core/src/main/java/hudson/ProxyConfiguration.java +++ b/core/src/main/java/hudson/ProxyConfiguration.java @@ -396,7 +396,7 @@ public final class ProxyConfiguration extends AbstractDescribableImpl 0 ? DEFAULT_CONNECT_TIMEOUT_MILLIS : TimeUnit.SECONDS.toMillis(30)); + method.getParams().setParameter("http.socket.timeout", DEFAULT_CONNECT_TIMEOUT_MILLIS > 0 ? DEFAULT_CONNECT_TIMEOUT_MILLIS : (int)TimeUnit.SECONDS.toMillis(30)); HttpClient client = new HttpClient(); if (Util.fixEmptyAndTrim(name) != null && !isNoProxyHost(host, noProxyHost)) { -- GitLab From f4364e4ef4ebc7de26dd93d9de62643b138edd7c Mon Sep 17 00:00:00 2001 From: Jesse Glick Date: Thu, 11 Jul 2019 10:50:06 -0400 Subject: [PATCH 413/476] [JENKINS-58362] Need to have only one copy of SystemCommandLanguage among detached plugins (#4099) * Need to have only one copy of SystemCommandLanguage among detached plugins. * Removing some cases from LoadDetachedPluginsTest which were sensitive to particular versions of detached plugins and thus hard to maintain. Already had to do one such change in 84f939cebd1a0d03633e7b7c01e71ac387fb6463 and now upgradeFromJenkins2WithNewerDependency began failing after a war/pom.xml change. --- .../install/LoadDetachedPluginsTest.java | 57 ------------------ ...enkins.install.InstallUtil.lastExecVersion | 1 - .../plugins/script-security.jpi | Bin 150155 -> 0 bytes ...enkins.install.InstallUtil.lastExecVersion | 1 - .../plugins/command-launcher.jpi | Bin 38884 -> 0 bytes .../plugins/script-security.jpi | Bin 157463 -> 0 bytes ...enkins.install.InstallUtil.lastExecVersion | 1 - .../plugins/script-security.jpi | Bin 169194 -> 0 bytes war/pom.xml | 2 +- 9 files changed, 1 insertion(+), 61 deletions(-) delete mode 100644 test/src/test/resources/jenkins/install/LoadDetachedPluginsTest/upgradeFromJenkins2WithNewerDependency/jenkins.install.InstallUtil.lastExecVersion delete mode 100644 test/src/test/resources/jenkins/install/LoadDetachedPluginsTest/upgradeFromJenkins2WithNewerDependency/plugins/script-security.jpi delete mode 100644 test/src/test/resources/jenkins/install/LoadDetachedPluginsTest/upgradeFromJenkins2WithNewerPlugin/jenkins.install.InstallUtil.lastExecVersion delete mode 100644 test/src/test/resources/jenkins/install/LoadDetachedPluginsTest/upgradeFromJenkins2WithNewerPlugin/plugins/command-launcher.jpi delete mode 100644 test/src/test/resources/jenkins/install/LoadDetachedPluginsTest/upgradeFromJenkins2WithNewerPlugin/plugins/script-security.jpi delete mode 100644 test/src/test/resources/jenkins/install/LoadDetachedPluginsTest/upgradeFromJenkins2WithOlderDependency/jenkins.install.InstallUtil.lastExecVersion delete mode 100644 test/src/test/resources/jenkins/install/LoadDetachedPluginsTest/upgradeFromJenkins2WithOlderDependency/plugins/script-security.jpi diff --git a/test/src/test/java/jenkins/install/LoadDetachedPluginsTest.java b/test/src/test/java/jenkins/install/LoadDetachedPluginsTest.java index c5c51ddcc0..250ff76fd4 100644 --- a/test/src/test/java/jenkins/install/LoadDetachedPluginsTest.java +++ b/test/src/test/java/jenkins/install/LoadDetachedPluginsTest.java @@ -27,7 +27,6 @@ package jenkins.install; import hudson.ClassicPluginStrategy; import jenkins.plugins.DetachedPluginsUtil; import jenkins.plugins.DetachedPluginsUtil.DetachedPlugin; -import hudson.Plugin; import hudson.PluginManager; import hudson.PluginManagerUtil; import hudson.PluginWrapper; @@ -87,62 +86,6 @@ public class LoadDetachedPluginsTest { }); } - @Issue("JENKINS-48604") - @Test - @LocalData - public void upgradeFromJenkins2WithNewerDependency() { - VersionNumber since = new VersionNumber("2.0"); - rr.then(r -> { - List detachedPlugins = DetachedPluginsUtil.getDetachedPlugins(since); - assertThat("Plugins have been detached since the pre-upgrade version", - detachedPlugins.size(), greaterThan(1)); - assertThat("Plugins detached between the pre-upgrade version and the current version should be installed", - getInstalledDetachedPlugins(r, detachedPlugins).size(), equalTo(detachedPlugins.size())); - Plugin scriptSecurity = r.jenkins.getPlugin("script-security"); - assertThat("Script-security should be installed", scriptSecurity, notNullValue()); - assertThat("Dependencies of detached plugins should not be downgraded", - scriptSecurity.getWrapper().getVersionNumber(), equalTo(new VersionNumber("1.34"))); - assertNoFailedPlugins(r); - }); - } - - @Test - @LocalData - public void upgradeFromJenkins2WithOlderDependency() { - VersionNumber since = new VersionNumber("2.0"); - rr.then(r -> { - List detachedPlugins = DetachedPluginsUtil.getDetachedPlugins(since); - assertThat("Plugins have been detached since the pre-upgrade version", - detachedPlugins.size(), greaterThan(1)); - assertThat("Plugins detached between the pre-upgrade version and the current version should be installed", - getInstalledDetachedPlugins(r, detachedPlugins).size(), equalTo(detachedPlugins.size())); - Plugin scriptSecurity = r.jenkins.getPlugin("script-security"); - assertThat("Script-security should be installed", scriptSecurity, notNullValue()); - assertThat("Dependencies of detached plugins should be upgraded to the required version", - scriptSecurity.getWrapper().getVersionNumber(), equalTo(new VersionNumber("1.56"))); - assertNoFailedPlugins(r); - }); - } - - @Issue("JENKINS-48899") - @Test - @LocalData - public void upgradeFromJenkins2WithNewerPlugin() { - // @LocalData has command-launcher 1.2 installed, which should not be downgraded to the detached version: 1.0. - VersionNumber since = new VersionNumber("2.0"); - rr.then(r -> { - List detachedPlugins = DetachedPluginsUtil.getDetachedPlugins(since); - assertThat("Plugins have been detached since the pre-upgrade version", - detachedPlugins.size(), greaterThan(1)); - assertThat("Plugins detached between the pre-upgrade version and the current version should be installed", - getInstalledDetachedPlugins(r, detachedPlugins).size(), equalTo(detachedPlugins.size())); - Plugin commandLauncher = r.jenkins.getPlugin("command-launcher"); - assertThat("Installed detached plugins should not be overwritten by older versions", - commandLauncher.getWrapper().getVersionNumber(), equalTo(new VersionNumber("1.2"))); - assertNoFailedPlugins(r); - }); - } - @Test public void newInstallation() { rr.then(r -> { diff --git a/test/src/test/resources/jenkins/install/LoadDetachedPluginsTest/upgradeFromJenkins2WithNewerDependency/jenkins.install.InstallUtil.lastExecVersion b/test/src/test/resources/jenkins/install/LoadDetachedPluginsTest/upgradeFromJenkins2WithNewerDependency/jenkins.install.InstallUtil.lastExecVersion deleted file mode 100644 index 415b19fc36..0000000000 --- a/test/src/test/resources/jenkins/install/LoadDetachedPluginsTest/upgradeFromJenkins2WithNewerDependency/jenkins.install.InstallUtil.lastExecVersion +++ /dev/null @@ -1 +0,0 @@ -2.0 \ No newline at end of file diff --git a/test/src/test/resources/jenkins/install/LoadDetachedPluginsTest/upgradeFromJenkins2WithNewerDependency/plugins/script-security.jpi b/test/src/test/resources/jenkins/install/LoadDetachedPluginsTest/upgradeFromJenkins2WithNewerDependency/plugins/script-security.jpi deleted file mode 100644 index 39a6c2b2674ca3133da274ff65b4dc0f680a2e2f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 150155 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%0A~2TO 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

On)U(FsVXjLz^Sk|gq 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ð`N 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

qO&gGw$)1yc6lN6U(fV^lz6BV_7GJUvrV45%&$P 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 diff --git a/war/pom.xml b/war/pom.xml index 5bcfd78481..ee080b9278 100644 --- a/war/pom.xml +++ b/war/pom.xml @@ -405,7 +405,7 @@ THE SOFTWARE. org.jenkins-ci.plugins command-launcher - 1.0 + 1.2 hpi -- GitLab From 1b2cd19a61600cb8b886637224d92a51e6032a93 Mon Sep 17 00:00:00 2001 From: Vincent Latombe Date: Thu, 11 Jul 2019 16:53:06 +0200 Subject: [PATCH 414/476] [JENKINS-24752] Avoid nodeprovisioner delay after consulting strategies (#4082) * Avoid nodeprovisioner delay after consulting strategies * Try another aproach - rate limit the review every second * Throttle NodeProvisioner#update every second * Re-indent to limit diff * Update lastSuggestedReview * Fix prior merge * Logging messages * Supplier * Ignore additional calls to suggestReviewNow if we have a queued review --- .../java/hudson/slaves/NodeProvisioner.java | 32 ++++++++++++------- 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/core/src/main/java/hudson/slaves/NodeProvisioner.java b/core/src/main/java/hudson/slaves/NodeProvisioner.java index dc003a298f..d603494a17 100644 --- a/core/src/main/java/hudson/slaves/NodeProvisioner.java +++ b/core/src/main/java/hudson/slaves/NodeProvisioner.java @@ -32,6 +32,7 @@ import static hudson.model.LoadStatistics.DECAY; import hudson.model.MultiStageTimeSeries.TimeScale; import hudson.Extension; import jenkins.util.SystemProperties; +import jenkins.util.Timer; import org.jenkinsci.Symbol; import javax.annotation.Nonnull; @@ -136,6 +137,7 @@ public class NodeProvisioner { private StrategyState provisioningState = null; private transient volatile long lastSuggestedReview; + private transient volatile boolean queuedReview; /** * Exponential moving average of the "planned capacity" over time, which is the number of @@ -165,19 +167,28 @@ public class NodeProvisioner { /** * Give the {@link NodeProvisioner} a hint that now would be a good time to think about provisioning some nodes. - * The hint will be ignored if subjected to excessive pestering by callers. + * Hints are throttled to one every second. * * @since 1.415 */ public void suggestReviewNow() { - if (System.currentTimeMillis() > lastSuggestedReview + TimeUnit.SECONDS.toMillis(1)) { - lastSuggestedReview = System.currentTimeMillis(); - Computer.threadPoolForRemoting.submit(new Runnable() { - public void run() { + if (!queuedReview) { + long delay = TimeUnit.SECONDS.toMillis(1) - (System.currentTimeMillis() - lastSuggestedReview); + if (delay < 0) { + lastSuggestedReview = System.currentTimeMillis(); + Computer.threadPoolForRemoting.submit(() -> { LOGGER.fine(() -> "running suggested review for " + label); update(); - } - }); + }); + } else { + queuedReview = true; + LOGGER.fine(() -> "running suggested review in " + delay + " ms for " + label); + Timer.get().schedule(() -> { + lastSuggestedReview = System.currentTimeMillis(); + LOGGER.fine(() -> "running suggested review for " + label + " after " + delay + " ms"); + update(); + }, delay, TimeUnit.MILLISECONDS); + } } else { LOGGER.fine(() -> "ignoring suggested review for " + label); } @@ -195,7 +206,7 @@ public class NodeProvisioner { provisioningLock.lock(); try { lastSuggestedReview = System.currentTimeMillis(); - + queuedReview = false; // We need to get the lock on Queue for two reasons: // 1. We will potentially adding a lot of nodes and we don't want to fight with Queue#maintain to acquire // the Queue#lock in order to add each node. Much better is to hold the Queue#lock until all nodes @@ -209,9 +220,7 @@ public class NodeProvisioner { // that causes issues in Queue#maintain) we should be able to remove the need for Queue#lock // // TODO once Nodes#addNode is made lock free, we should be able to remove the requirement for Queue#lock - Queue.withLock(new Runnable() { - @Override - public void run() { + Queue.withLock(() -> { Jenkins jenkins = Jenkins.get(); // clean up the cancelled launch activity, then count the # of executors that we are about to // bring up. @@ -311,7 +320,6 @@ public class NodeProvisioner { } else { provisioningState = new StrategyState(snapshot, label, plannedCapacitySnapshot); } - } }); if (provisioningState != null) { -- GitLab From f76ee6d8787baf662580a6973c0b0efca83b8b73 Mon Sep 17 00:00:00 2001 From: Ivan Fernandez Calvo Date: Thu, 11 Jul 2019 16:54:07 +0200 Subject: [PATCH 415/476] [JENKINS-43610] Split Trilead out from Core (#4085) * [JENKINS-43610] Split Trilead out from Core * revert changes on ./core/src/main/resources/jenkins/split-plugin-cycles.txt * remove JDK version on split-plugins.txt * bump trilead-api version to 1.0.4 * fix: add trilead-api incremental version to detached plugins * fix: add consume-incrementals setting to maven * Update core/src/main/resources/jenkins/split-plugins.txt Co-Authored-By: Jesse Glick --- .mvn/maven.config | 1 + core/pom.xml | 10 +++++----- core/src/main/resources/jenkins/split-plugins.txt | 3 +++ war/pom.xml | 6 ++++++ 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/.mvn/maven.config b/.mvn/maven.config index e54fdacfe6..2a0299c486 100644 --- a/.mvn/maven.config +++ b/.mvn/maven.config @@ -1 +1,2 @@ +-Pconsume-incrementals -Pmight-produce-incrementals diff --git a/core/pom.xml b/core/pom.xml index f708264d07..36ff6543a6 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -101,6 +101,11 @@ THE SOFTWARE. + + org.connectbot.jbcrypt + jbcrypt + 1.0.0 + org.jruby.ext.posix jna-posix @@ -116,11 +121,6 @@ THE SOFTWARE. trilead-putty-extension 1.2 - - org.jenkins-ci - trilead-ssh2 - build-217-jenkins-14 - org.kohsuke.stapler stapler-groovy diff --git a/core/src/main/resources/jenkins/split-plugins.txt b/core/src/main/resources/jenkins/split-plugins.txt index 6b09bbe877..98a89ebccd 100644 --- a/core/src/main/resources/jenkins/split-plugins.txt +++ b/core/src/main/resources/jenkins/split-plugins.txt @@ -28,3 +28,6 @@ jdk-tool 2.112 1.0 # JENKINS-55681 jaxb 2.163 2.3.0 11 + +#JENKINS-43610 Split Trilead out from Core +trilead-api 2.184 1.0.4-rc17.8e3daef99f43 diff --git a/war/pom.xml b/war/pom.xml index ee080b9278..e3a711c6b7 100644 --- a/war/pom.xml +++ b/war/pom.xml @@ -420,6 +420,12 @@ THE SOFTWARE. 2.3.0 hpi + + org.jenkins-ci.plugins + trilead-api + 1.0.4-rc17.8e3daef99f43 + hpi + ${project.build.directory}/${project.build.finalName}/WEB-INF/detached-plugins true -- GitLab From b9d507cbcf8e946f8da2f3df3f40602bb539eab0 Mon Sep 17 00:00:00 2001 From: Jesse Glick Date: Thu, 11 Jul 2019 10:55:41 -0400 Subject: [PATCH 416/476] Also skip detached plugin installation if a *.[jh]pl file exists. (#4100) --- core/src/main/java/hudson/PluginManager.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/hudson/PluginManager.java b/core/src/main/java/hudson/PluginManager.java index 856eca5dd3..4f640dfc78 100644 --- a/core/src/main/java/hudson/PluginManager.java +++ b/core/src/main/java/hudson/PluginManager.java @@ -602,7 +602,10 @@ public abstract class PluginManager extends AbstractModelObject implements OnMas } void considerDetachedPlugin(String shortName) { - if (new File(rootDir, shortName + ".jpi").isFile() || new File(rootDir, shortName + ".hpi").isFile()) { + if (new File(rootDir, shortName + ".jpi").isFile() || + new File(rootDir, shortName + ".hpi").isFile() || + new File(rootDir, shortName + ".jpl").isFile() || + new File(rootDir, shortName + ".hpl").isFile()) { LOGGER.fine(() -> "not considering loading a detached dependency " + shortName + " as it is already on disk"); return; } -- GitLab From 8349cebb61a9aa73511f243465a6c5f57cfadd2f Mon Sep 17 00:00:00 2001 From: Jeff Thompson <37345299+jeffret-b@users.noreply.github.com> Date: Thu, 11 Jul 2019 09:25:53 -0600 Subject: [PATCH 417/476] [JENKINS-55945] IllegalStateException trying to get user. (#4107) This change catches the exception and returns false, invalidating the user session. This behavior is sensible, because if we are unable to validate the user we must assume the session is invalid. Catching the error at this point reportedly helps with some scenarios and shouldn't cause any further harm. --- .../security/HttpSessionContextIntegrationFilter2.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/hudson/security/HttpSessionContextIntegrationFilter2.java b/core/src/main/java/hudson/security/HttpSessionContextIntegrationFilter2.java index 7a67c77dd0..aafc93af3b 100644 --- a/core/src/main/java/hudson/security/HttpSessionContextIntegrationFilter2.java +++ b/core/src/main/java/hudson/security/HttpSessionContextIntegrationFilter2.java @@ -84,7 +84,13 @@ public class HttpSessionContextIntegrationFilter2 extends HttpSessionContextInte return false; } - User userFromSession = User.getById(authentication.getName(), false); + User userFromSession; + try { + userFromSession = User.getById(authentication.getName(), false); + } catch (IllegalStateException ise) { + logger.warn("Encountered IllegalStateException trying to get a user. System init may not have completed yet. Invalidating user session."); + return false; + } if (userFromSession == null) { // no requirement for further test as there is no user inside return false; -- GitLab From 31658d0f70bed742305ec1ac0065d7c3ebab42ac Mon Sep 17 00:00:00 2001 From: Jeff Thompson <37345299+jeffret-b@users.noreply.github.com> Date: Fri, 12 Jul 2019 03:32:50 -0600 Subject: [PATCH 418/476] [JENKINS-53322] Pre-work for removing dom4j fork. (#4089) Changes to enable Jenkins to use either the standard, current dom4j release or the Jenkins-custom fork. This allows us to separately remove the fork and reference the standard one. --- licenseCompleter.groovy | 2 +- .../java/hudson/bugs/JnlpAccessWithSecuredHudsonTest.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/licenseCompleter.groovy b/licenseCompleter.groovy index fb6ecdc308..1eddc3310a 100644 --- a/licenseCompleter.groovy +++ b/licenseCompleter.groovy @@ -48,7 +48,7 @@ complete { rewriteLicense([], license("BSD License","http://jaxen.codehaus.org/license.html")) } - match("*:dom4j") { + match("org.jenkins-ci.dom4j:dom4j") { rewriteLicense([],license("BSD License","http://dom4j.sourceforge.net/dom4j-1.6.1/license.html")) } diff --git a/test/src/test/java/hudson/bugs/JnlpAccessWithSecuredHudsonTest.java b/test/src/test/java/hudson/bugs/JnlpAccessWithSecuredHudsonTest.java index c6dff42f1a..c99d0b5d3e 100644 --- a/test/src/test/java/hudson/bugs/JnlpAccessWithSecuredHudsonTest.java +++ b/test/src/test/java/hudson/bugs/JnlpAccessWithSecuredHudsonTest.java @@ -95,8 +95,8 @@ public class JnlpAccessWithSecuredHudsonTest { XmlPage jnlp = (XmlPage) wc.goTo("computer/test/slave-agent.jnlp","application/x-java-jnlp-file"); URL baseUrl = jnlp.getUrl(); Document dom = new DOMReader().read(jnlp.getXmlDocument()); - for( Element jar : (List)dom.selectNodes("//jar") ) { - URL url = new URL(baseUrl,jar.attributeValue("href")); + for( Object jar : dom.selectNodes("//jar") ) { + URL url = new URL(baseUrl,((org.dom4j.Element)jar).attributeValue("href")); System.out.println(url); // now make sure that these URLs are unprotected -- GitLab From 67fe12b342e0d438ae6e68199b89ae582eea22f7 Mon Sep 17 00:00:00 2001 From: based2 Date: Fri, 12 Jul 2019 11:33:07 +0200 Subject: [PATCH 419/476] update commons codec from 1.9 to 1.12 (#4052) --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 3380879ad7..f7752d07d1 100644 --- a/pom.xml +++ b/pom.xml @@ -271,7 +271,7 @@ THE SOFTWARE. commons-codec commons-codec - 1.9 + 1.12 -- GitLab From 3af38487d1491801da51c47389d8a4493e5b9d67 Mon Sep 17 00:00:00 2001 From: Ivan Fernandez Calvo Date: Fri, 12 Jul 2019 15:23:54 +0200 Subject: [PATCH 420/476] [JENKINS-43610] use trilead-api 1.0.4 (#4109) --- core/src/main/resources/jenkins/split-plugins.txt | 2 +- war/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/core/src/main/resources/jenkins/split-plugins.txt b/core/src/main/resources/jenkins/split-plugins.txt index 98a89ebccd..0547f25558 100644 --- a/core/src/main/resources/jenkins/split-plugins.txt +++ b/core/src/main/resources/jenkins/split-plugins.txt @@ -30,4 +30,4 @@ jdk-tool 2.112 1.0 jaxb 2.163 2.3.0 11 #JENKINS-43610 Split Trilead out from Core -trilead-api 2.184 1.0.4-rc17.8e3daef99f43 +trilead-api 2.184 1.0.4 diff --git a/war/pom.xml b/war/pom.xml index e3a711c6b7..8caaec114a 100644 --- a/war/pom.xml +++ b/war/pom.xml @@ -423,7 +423,7 @@ THE SOFTWARE. org.jenkins-ci.plugins trilead-api - 1.0.4-rc17.8e3daef99f43 + 1.0.4 hpi -- GitLab From 701d00c9ed7dec35147cee1ea3ac50fe57b5b721 Mon Sep 17 00:00:00 2001 From: Alexey Date: Fri, 12 Jul 2019 16:24:12 +0300 Subject: [PATCH 421/476] Set `screenResolution` cookie to root path (#4103) `YUI.util.Cookie` set `screenResolution` cookie for every visited path. --- core/src/main/resources/hudson/model/View/index.jelly | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/core/src/main/resources/hudson/model/View/index.jelly b/core/src/main/resources/hudson/model/View/index.jelly index 5fd54a3de3..ec0e6d458e 100644 --- a/core/src/main/resources/hudson/model/View/index.jelly +++ b/core/src/main/resources/hudson/model/View/index.jelly @@ -45,7 +45,9 @@ THE SOFTWARE. -- GitLab From 0b8804c4d9996f4a3d2247feaf10aecfbbea9513 Mon Sep 17 00:00:00 2001 From: "Artem V. Navrotskiy" Date: Fri, 12 Jul 2019 23:29:43 +0300 Subject: [PATCH 422/476] Rename property: `hudson.node_monitors.AbstractNodeMonitorDescriptor.{period -> periodMinutes}` --- .../hudson/node_monitors/AbstractNodeMonitorDescriptor.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/hudson/node_monitors/AbstractNodeMonitorDescriptor.java b/core/src/main/java/hudson/node_monitors/AbstractNodeMonitorDescriptor.java index b752c16d00..6a15ff1ab8 100644 --- a/core/src/main/java/hudson/node_monitors/AbstractNodeMonitorDescriptor.java +++ b/core/src/main/java/hudson/node_monitors/AbstractNodeMonitorDescriptor.java @@ -54,7 +54,7 @@ import java.util.logging.Logger; * @author Kohsuke Kawaguchi */ public abstract class AbstractNodeMonitorDescriptor extends Descriptor { - private static long PERIOD = SystemProperties.getLong(AbstractNodeMonitorDescriptor.class.getName() + ".period", TimeUnit.MINUTES.toMillis(5)); + private static int PERIOD_MINUTES = SystemProperties.getInteger(AbstractNodeMonitorDescriptor.class.getName() + ".periodMinutes", 5); /** * @deprecated as of 1.522 @@ -62,7 +62,7 @@ public abstract class AbstractNodeMonitorDescriptor extends Descriptor extends Descriptor clazz) { - this(clazz,PERIOD); + this(clazz,TimeUnit.MINUTES.toMillis(PERIOD_MINUTES)); } /** -- GitLab From 0831263b271d46d3e37ae78704c031d4eb0f262d Mon Sep 17 00:00:00 2001 From: "Artem V. Navrotskiy" Date: Fri, 12 Jul 2019 23:31:21 +0300 Subject: [PATCH 423/476] Revert change default disk usage check period --- .../hudson/node_monitors/AbstractNodeMonitorDescriptor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/hudson/node_monitors/AbstractNodeMonitorDescriptor.java b/core/src/main/java/hudson/node_monitors/AbstractNodeMonitorDescriptor.java index 6a15ff1ab8..18f06f3288 100644 --- a/core/src/main/java/hudson/node_monitors/AbstractNodeMonitorDescriptor.java +++ b/core/src/main/java/hudson/node_monitors/AbstractNodeMonitorDescriptor.java @@ -54,7 +54,7 @@ import java.util.logging.Logger; * @author Kohsuke Kawaguchi */ public abstract class AbstractNodeMonitorDescriptor extends Descriptor { - private static int PERIOD_MINUTES = SystemProperties.getInteger(AbstractNodeMonitorDescriptor.class.getName() + ".periodMinutes", 5); + private static int PERIOD_MINUTES = SystemProperties.getInteger(AbstractNodeMonitorDescriptor.class.getName() + ".periodMinutes", 60); /** * @deprecated as of 1.522 -- GitLab From 752f5e4b669d1bf482b8eb456a51ee81e509113c Mon Sep 17 00:00:00 2001 From: "Artem V. Navrotskiy" Date: Sat, 13 Jul 2019 21:37:29 +0300 Subject: [PATCH 424/476] Minor refactoring: avoid converting copy-paste --- .../hudson/node_monitors/AbstractNodeMonitorDescriptor.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/hudson/node_monitors/AbstractNodeMonitorDescriptor.java b/core/src/main/java/hudson/node_monitors/AbstractNodeMonitorDescriptor.java index 18f06f3288..01e5968cb6 100644 --- a/core/src/main/java/hudson/node_monitors/AbstractNodeMonitorDescriptor.java +++ b/core/src/main/java/hudson/node_monitors/AbstractNodeMonitorDescriptor.java @@ -54,7 +54,7 @@ import java.util.logging.Logger; * @author Kohsuke Kawaguchi */ public abstract class AbstractNodeMonitorDescriptor extends Descriptor { - private static int PERIOD_MINUTES = SystemProperties.getInteger(AbstractNodeMonitorDescriptor.class.getName() + ".periodMinutes", 60); + private static long PERIOD = TimeUnit.MINUTES.toMillis(SystemProperties.getInteger(AbstractNodeMonitorDescriptor.class.getName() + ".periodMinutes", 60)); /** * @deprecated as of 1.522 @@ -62,7 +62,7 @@ public abstract class AbstractNodeMonitorDescriptor extends Descriptor extends Descriptor clazz) { - this(clazz,TimeUnit.MINUTES.toMillis(PERIOD_MINUTES)); + this(clazz, PERIOD); } /** -- GitLab From a4c9cba4f393a89acfcf08bbf586b08fa1b72be2 Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Sun, 14 Jul 2019 12:23:13 -0700 Subject: [PATCH 425/476] [maven-release-plugin] prepare release jenkins-2.185 --- cli/pom.xml | 2 +- core/pom.xml | 2 +- pom.xml | 4 ++-- test-jdk8/pom.xml | 2 +- test-pom/pom.xml | 2 +- test/pom.xml | 2 +- war/pom.xml | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/cli/pom.xml b/cli/pom.xml index 5cb529ccec..437768ee56 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -5,7 +5,7 @@ org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.185 cli diff --git a/core/pom.xml b/core/pom.xml index 36ff6543a6..aa62c3ad2a 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -29,7 +29,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.185 jenkins-core diff --git a/pom.xml b/pom.xml index f7752d07d1..72ef82107c 100644 --- a/pom.xml +++ b/pom.xml @@ -34,7 +34,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.185 pom Jenkins main module @@ -60,7 +60,7 @@ THE SOFTWARE. scm:git:git://github.com/jenkinsci/jenkins.git scm:git:ssh://git@github.com/jenkinsci/jenkins.git https://github.com/jenkinsci/jenkins - ${scmTag} + jenkins-2.185 diff --git a/test-jdk8/pom.xml b/test-jdk8/pom.xml index 70c4870837..c5a32ae95e 100644 --- a/test-jdk8/pom.xml +++ b/test-jdk8/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-test-parent - ${revision}${changelist} + 2.185 ../test-pom diff --git a/test-pom/pom.xml b/test-pom/pom.xml index 3e9e75fb1f..6cfb7557c5 100644 --- a/test-pom/pom.xml +++ b/test-pom/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.185 jenkins-test-parent diff --git a/test/pom.xml b/test/pom.xml index 4c5abecc6f..cabbd716ea 100644 --- a/test/pom.xml +++ b/test/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-test-parent - ${revision}${changelist} + 2.185 ../test-pom diff --git a/war/pom.xml b/war/pom.xml index 8caaec114a..4ba20e2da9 100644 --- a/war/pom.xml +++ b/war/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.185 jenkins-war -- GitLab From 6fea9b24d8979f5b26245025f3a0dd48a572293c Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Sun, 14 Jul 2019 12:23:24 -0700 Subject: [PATCH 426/476] [maven-release-plugin] prepare for next development iteration --- cli/pom.xml | 2 +- core/pom.xml | 2 +- pom.xml | 6 +++--- test-jdk8/pom.xml | 2 +- test-pom/pom.xml | 2 +- test/pom.xml | 2 +- war/pom.xml | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/cli/pom.xml b/cli/pom.xml index 437768ee56..5cb529ccec 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -5,7 +5,7 @@ org.jenkins-ci.main jenkins-parent - 2.185 + ${revision}${changelist} cli diff --git a/core/pom.xml b/core/pom.xml index aa62c3ad2a..36ff6543a6 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -29,7 +29,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.185 + ${revision}${changelist} jenkins-core diff --git a/pom.xml b/pom.xml index 72ef82107c..e8441ece66 100644 --- a/pom.xml +++ b/pom.xml @@ -34,7 +34,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.185 + ${revision}${changelist} pom Jenkins main module @@ -60,7 +60,7 @@ THE SOFTWARE. scm:git:git://github.com/jenkinsci/jenkins.git scm:git:ssh://git@github.com/jenkinsci/jenkins.git https://github.com/jenkinsci/jenkins - jenkins-2.185 + ${scmTag} @@ -76,7 +76,7 @@ THE SOFTWARE. - 2.185 + 2.186 -SNAPSHOT - - org.jenkins-ci - trilead-ssh2 - build214-jenkins-1 - com.github.spotbugs spotbugs-annotations diff --git a/core/pom.xml b/core/pom.xml index 36ff6543a6..89f534c2a8 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -116,11 +116,6 @@ THE SOFTWARE. jnr-posix 3.0.45 - - org.kohsuke - trilead-putty-extension - 1.2 - org.kohsuke.stapler stapler-groovy diff --git a/war/pom.xml b/war/pom.xml index 8caaec114a..0d6a965d65 100644 --- a/war/pom.xml +++ b/war/pom.xml @@ -100,7 +100,7 @@ THE SOFTWARE. org.jenkins-ci.modules ssh-cli-auth - 1.5 + 1.7 org.jenkins-ci.modules -- GitLab From 87dfbedb4b419bcf566ae9ab3912e51908273b90 Mon Sep 17 00:00:00 2001 From: Jesse Glick Date: Tue, 16 Jul 2019 18:24:20 -0400 Subject: [PATCH 431/476] Behave robustly in the face of errors from AdministrativeMonitor.isActivated. --- core/src/main/java/jenkins/model/Jenkins.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/jenkins/model/Jenkins.java b/core/src/main/java/jenkins/model/Jenkins.java index 86f58fe0c2..b141cecd83 100644 --- a/core/src/main/java/jenkins/model/Jenkins.java +++ b/core/src/main/java/jenkins/model/Jenkins.java @@ -2174,7 +2174,14 @@ public class Jenkins extends AbstractCIBase implements DirectlyModifiableTopLeve * @since 2.64 */ public List getActiveAdministrativeMonitors() { - return administrativeMonitors.stream().filter(m -> m.isEnabled() && m.isActivated()).collect(Collectors.toList()); + return administrativeMonitors.stream().filter(m -> { + try { + return m.isEnabled() && m.isActivated(); + } catch (Throwable x) { + LOGGER.log(Level.WARNING, null, x); + return false; + } + }).collect(Collectors.toList()); } public NodeDescriptor getDescriptor() { -- GitLab From 34ec1450211d2b6274a331a1a64ec3913f66ed81 Mon Sep 17 00:00:00 2001 From: Kanstantsin Shautsou Date: Wed, 17 Jul 2019 02:22:01 +0300 Subject: [PATCH 432/476] Remove extra space in css url() --- war/src/main/webapp/css/style.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/war/src/main/webapp/css/style.css b/war/src/main/webapp/css/style.css index 14c3f1250a..2040688c26 100644 --- a/war/src/main/webapp/css/style.css +++ b/war/src/main/webapp/css/style.css @@ -733,7 +733,7 @@ LABEL.attach-previous { padding-left: 20px; min-height: 16px; line-height: 16px; - background-image: url( "../images/16x16/warning.png" ); + background-image: url("../images/16x16/warning.png"); background-size: 16px 16px; background-position: left center; background-repeat: no-repeat; @@ -749,7 +749,7 @@ LABEL.attach-previous { font-weight: bold; padding-left: 20px; min-height: 16px; - background-image: url( "../images/16x16/go-next.png" ); /* TODO: get a better icon */ + background-image: url("../images/16x16/go-next.png"); /* TODO: get a better icon */ background-position: left center; background-repeat: no-repeat; } -- GitLab From aacc3ec40a0f09d41334f17ab254f5a82ae29b6e Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Tue, 16 Jul 2019 20:22:44 -0700 Subject: [PATCH 433/476] [maven-release-plugin] prepare release jenkins-2.186 --- cli/pom.xml | 2 +- core/pom.xml | 2 +- pom.xml | 4 ++-- test-jdk8/pom.xml | 2 +- test-pom/pom.xml | 2 +- test/pom.xml | 2 +- war/pom.xml | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/cli/pom.xml b/cli/pom.xml index 5d3738bd42..df318013dd 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -5,7 +5,7 @@ org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.186 cli diff --git a/core/pom.xml b/core/pom.xml index 41c58c486f..634550138e 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -29,7 +29,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.186 jenkins-core diff --git a/pom.xml b/pom.xml index e8441ece66..644600288a 100755 --- a/pom.xml +++ b/pom.xml @@ -34,7 +34,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.186 pom Jenkins main module @@ -60,7 +60,7 @@ THE SOFTWARE. scm:git:git://github.com/jenkinsci/jenkins.git scm:git:ssh://git@github.com/jenkinsci/jenkins.git https://github.com/jenkinsci/jenkins - ${scmTag} + jenkins-2.186 diff --git a/test-jdk8/pom.xml b/test-jdk8/pom.xml index 70c4870837..76f819f518 100644 --- a/test-jdk8/pom.xml +++ b/test-jdk8/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-test-parent - ${revision}${changelist} + 2.186 ../test-pom diff --git a/test-pom/pom.xml b/test-pom/pom.xml index 3e9e75fb1f..4ae7596d18 100644 --- a/test-pom/pom.xml +++ b/test-pom/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.186 jenkins-test-parent diff --git a/test/pom.xml b/test/pom.xml index 4c5abecc6f..42b8e05d42 100644 --- a/test/pom.xml +++ b/test/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-test-parent - ${revision}${changelist} + 2.186 ../test-pom diff --git a/war/pom.xml b/war/pom.xml index 0d6a965d65..0a1f837532 100644 --- a/war/pom.xml +++ b/war/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.186 jenkins-war -- GitLab From dedde6195362b4aeae75f8a147cdf263b2f9854b Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Tue, 16 Jul 2019 20:22:51 -0700 Subject: [PATCH 434/476] [maven-release-plugin] prepare for next development iteration --- cli/pom.xml | 2 +- core/pom.xml | 2 +- pom.xml | 6 +++--- test-jdk8/pom.xml | 2 +- test-pom/pom.xml | 2 +- test/pom.xml | 2 +- war/pom.xml | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/cli/pom.xml b/cli/pom.xml index df318013dd..5d3738bd42 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -5,7 +5,7 @@ org.jenkins-ci.main jenkins-parent - 2.186 + ${revision}${changelist} cli diff --git a/core/pom.xml b/core/pom.xml index 634550138e..41c58c486f 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -29,7 +29,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.186 + ${revision}${changelist} jenkins-core diff --git a/pom.xml b/pom.xml index 644600288a..cd909d34b9 100755 --- a/pom.xml +++ b/pom.xml @@ -34,7 +34,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.186 + ${revision}${changelist} pom Jenkins main module @@ -60,7 +60,7 @@ THE SOFTWARE. scm:git:git://github.com/jenkinsci/jenkins.git scm:git:ssh://git@github.com/jenkinsci/jenkins.git https://github.com/jenkinsci/jenkins - jenkins-2.186 + ${scmTag} @@ -76,7 +76,7 @@ THE SOFTWARE. - 2.186 + 2.187 -SNAPSHOT + org.jenkins-ci.plugins.workflow + workflow-api + 2.35 + hpi + + + + org.jenkins-ci.plugins.workflow + workflow-step-api + 2.20 + hpi + + + + org.jenkins-ci.plugins + scm-api + 2.4.1 + hpi + + + + org.jenkins-ci.plugins + structs + 1.18 hpi -- GitLab From 5169f14019be77d6b205b7c2d5fe608b92ed3446 Mon Sep 17 00:00:00 2001 From: Jesse Glick Date: Thu, 1 Aug 2019 13:55:44 -0400 Subject: [PATCH 448/476] Batch up dynamic plugin installations from setup wizard (#4124) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Batch up dynamic plugin installations from setup wizard. * Reworked to thread the list of batched-up plugins properly and introduced CompleteBatchJob to force the setup wizard to wait. * UpdateCenterPluginInstallTest.test_installKnownPlugins failure. * @amuniz notes that an existing message could now be considered misleading. * Introduced UpdateCenter.DownloadJob.getDisplayName for better consistency in logging, as suggested by @Vlatombe. * Reducing log levels of messages from dynamicLoad which are not of great interest, as suggested by @Vlatombe. * Reducing log level of another message of little interest. * Adding classic UI for CompleteBatchJob. * CompleteBatchJob should be used only when dynamicLoad. * Null defense on UpdateCenterJob.site. Otherwise can get: java.lang.NullPointerException at hudson.model.UpdateCenter.getConnectionCheckJob(UpdateCenter.java:850) at hudson.model.UpdateCenter.addConnectionCheckJob(UpdateCenter.java:817) at hudson.model.UpdateCenter.addJob(UpdateCenter.java:804) at hudson.model.UpdateSite$Plugin.deploy(UpdateSite.java:1367) at hudson.PluginManager.install(PluginManager.java:1537) at hudson.PluginManager.install(PluginManager.java:1496) at hudson.PluginManager.doInstall(PluginManager.java:1445) at … --- core/src/main/java/hudson/PluginManager.java | 137 ++++++++---------- .../main/java/hudson/model/UpdateCenter.java | 110 ++++++++++++-- .../main/java/hudson/model/UpdateSite.java | 10 +- .../CompleteBatchJob/Failure/status.jelly | 34 +++++ .../CompleteBatchJob/Pending/status.jelly | 28 ++++ .../CompleteBatchJob/Running/status.jelly | 28 ++++ .../CompleteBatchJob/Success/status.jelly | 28 ++++ .../UpdateCenter/CompleteBatchJob/row.jelly | 10 ++ .../model/UpdateCenter/DownloadJob/row.jelly | 2 +- .../model/UpdateCenterPluginInstallTest.java | 2 +- 10 files changed, 301 insertions(+), 88 deletions(-) create mode 100644 core/src/main/resources/hudson/model/UpdateCenter/CompleteBatchJob/Failure/status.jelly create mode 100644 core/src/main/resources/hudson/model/UpdateCenter/CompleteBatchJob/Pending/status.jelly create mode 100644 core/src/main/resources/hudson/model/UpdateCenter/CompleteBatchJob/Running/status.jelly create mode 100644 core/src/main/resources/hudson/model/UpdateCenter/CompleteBatchJob/Success/status.jelly create mode 100644 core/src/main/resources/hudson/model/UpdateCenter/CompleteBatchJob/row.jelly diff --git a/core/src/main/java/hudson/PluginManager.java b/core/src/main/java/hudson/PluginManager.java index 4f640dfc78..75e0873c43 100644 --- a/core/src/main/java/hudson/PluginManager.java +++ b/core/src/main/java/hudson/PluginManager.java @@ -84,7 +84,6 @@ import org.jenkinsci.Symbol; import org.jenkinsci.bytecode.Transformer; import org.jvnet.hudson.reactor.Executable; import org.jvnet.hudson.reactor.Reactor; -import org.jvnet.hudson.reactor.ReactorException; import org.jvnet.hudson.reactor.TaskBuilder; import org.jvnet.hudson.reactor.TaskGraphBuilder; import org.kohsuke.accmod.Restricted; @@ -150,6 +149,7 @@ import java.util.jar.JarFile; import java.util.jar.Manifest; import java.util.logging.Level; import java.util.logging.Logger; +import java.util.stream.Collectors; import static hudson.init.InitMilestone.*; import static java.util.logging.Level.*; @@ -872,16 +872,16 @@ public abstract class PluginManager extends AbstractModelObject implements OnMas * TODO: revisit where/how to expose this. This is an experiment. */ public void dynamicLoad(File arc) throws IOException, InterruptedException, RestartRequiredException { - dynamicLoad(arc, false); + dynamicLoad(arc, false, null); } /** * Try the dynamicLoad, removeExisting to attempt to dynamic load disabled plugins */ @Restricted(NoExternalUse.class) - public void dynamicLoad(File arc, boolean removeExisting) throws IOException, InterruptedException, RestartRequiredException { + public void dynamicLoad(File arc, boolean removeExisting, @CheckForNull List batch) throws IOException, InterruptedException, RestartRequiredException { try (ACLContext context = ACL.as(ACL.SYSTEM)) { - LOGGER.info("Attempting to dynamic load "+arc); + LOGGER.log(FINE, "Attempting to dynamic load {0}", arc); PluginWrapper p = null; String sn; try { @@ -928,9 +928,12 @@ public abstract class PluginManager extends AbstractModelObject implements OnMas p.resolvePluginDependencies(); strategy.load(p); - Jenkins.get().refreshExtensions(); + if (batch != null) { + batch.add(p); + } else { + start(Collections.singletonList(p)); + } - p.getPlugin().postInitialize(); } catch (Exception e) { failedPlugins.add(new FailedPlugin(sn, e)); activePlugins.remove(p); @@ -938,46 +941,55 @@ public abstract class PluginManager extends AbstractModelObject implements OnMas throw new IOException("Failed to install "+ sn +" plugin",e); } - // run initializers in the added plugin - Reactor r = new Reactor(InitMilestone.ordering()); - final ClassLoader loader = p.classLoader; - r.addAll(new InitializerFinder(loader) { - @Override - protected boolean filter(Method e) { - return e.getDeclaringClass().getClassLoader() != loader || super.filter(e); - } - }.discoverTasks(r)); - try { - new InitReactorRunner().run(r); - } catch (ReactorException e) { - throw new IOException("Failed to initialize "+ sn +" plugin",e); + LOGGER.log(FINE, "Plugin {0}:{1} dynamically {2}", new Object[] {p.getShortName(), p.getVersion(), batch != null ? "loaded but not yet started" : "installed"}); + } + } + + @Restricted(NoExternalUse.class) + public void start(List plugins) throws Exception { + Jenkins.get().refreshExtensions(); + + for (PluginWrapper p : plugins) { + p.getPlugin().postInitialize(); + } + + // run initializers in the added plugins + Reactor r = new Reactor(InitMilestone.ordering()); + Set loaders = plugins.stream().map(p -> p.classLoader).collect(Collectors.toSet()); + r.addAll(new InitializerFinder(uberClassLoader) { + @Override + protected boolean filter(Method e) { + return !loaders.contains(e.getDeclaringClass().getClassLoader()) || super.filter(e); } + }.discoverTasks(r)); + new InitReactorRunner().run(r); - // recalculate dependencies of plugins optionally depending the newly deployed one. - for (PluginWrapper depender: plugins) { - if (depender.equals(p)) { - // skip itself. - continue; - } - for (Dependency d: depender.getOptionalDependencies()) { - if (d.shortName.equals(p.getShortName())) { - // this plugin depends on the newly loaded one! - // recalculate dependencies! - getPluginStrategy().updateDependency(depender, p); - break; - } + Map pluginsByName = plugins.stream().collect(Collectors.toMap(p -> p.getShortName(), p -> p)); + + // recalculate dependencies of plugins optionally depending the newly deployed ones. + for (PluginWrapper depender: this.plugins) { + if (plugins.contains(depender)) { + // skip itself. + continue; + } + for (Dependency d: depender.getOptionalDependencies()) { + PluginWrapper dependee = pluginsByName.get(d.shortName); + if (dependee != null) { + // this plugin depends on the newly loaded one! + // recalculate dependencies! + getPluginStrategy().updateDependency(depender, dependee); + break; } } + } - // Redo who depends on who. - resolveDependentPlugins(); + // Redo who depends on who. + resolveDependentPlugins(); - try { - Jenkins.get().refreshExtensions(); - } catch (ExtensionRefreshException e) { - throw new IOException("Failed to refresh extensions after installing " + sn + " plugin", e); - } - LOGGER.info("Plugin " + p.getShortName()+":"+p.getVersion() + " dynamically installed"); + try { + Jenkins.get().refreshExtensions(); + } catch (ExtensionRefreshException e) { + throw new IOException("Failed to refresh extensions after installing some plugins", e); } } @@ -1487,6 +1499,10 @@ public abstract class PluginManager extends AbstractModelObject implements OnMas private List> install(@Nonnull Collection plugins, boolean dynamicLoad, @CheckForNull UUID correlationId) { List> installJobs = new ArrayList<>(); + LOGGER.log(INFO, "Starting installation of a batch of {0} plugins plus their dependencies", plugins.size()); + long start = System.nanoTime(); + List batch = new ArrayList<>(); + for (String n : plugins) { // JENKINS-22080 plugin names can contain '.' as could (according to rumour) update sites int index = n.indexOf('.'); @@ -1518,18 +1534,17 @@ public abstract class PluginManager extends AbstractModelObject implements OnMas if (p == null) { throw new Failure("No such plugin: " + n); } - Future jobFuture = p.deploy(dynamicLoad, correlationId); + Future jobFuture = p.deploy(dynamicLoad, correlationId, batch); installJobs.add(jobFuture); } - trackInitialPluginInstall(installJobs); - - return installJobs; - } - - private void trackInitialPluginInstall(@Nonnull final List> installJobs) { final Jenkins jenkins = Jenkins.get(); final UpdateCenter updateCenter = jenkins.getUpdateCenter(); + + if (dynamicLoad) { + installJobs.add(updateCenter.addJob(updateCenter.new CompleteBatchJob(batch, start, correlationId))); + } + final Authentication currentAuth = Jenkins.getAuthentication(); if (!jenkins.getInstallState().isSetupComplete()) { @@ -1567,32 +1582,8 @@ public abstract class PluginManager extends AbstractModelObject implements OnMas } }.start(); } - - // Fire a one-off thread to wait for the plugins to be deployed and then - // refresh the dependent plugins list. - new Thread() { - @Override - public void run() { - INSTALLING: while (true) { - for (Future deployJob : installJobs) { - try { - Thread.sleep(500); - } catch (InterruptedException e) { - LOGGER.log(SEVERE, "Unexpected error while waiting for some plugins to install. Plugin Manager state may be invalid. Please restart Jenkins ASAP.", e); - } - if (!deployJob.isCancelled() && !deployJob.isDone()) { - // One of the plugins is not installing/canceled, so - // go back to sleep and try again in a while. - continue INSTALLING; - } - } - // All the plugins are installed. It's now safe to refresh. - resolveDependentPlugins(); - break; - } - } - }.start(); - + + return installJobs; } private UpdateSite.Plugin getPlugin(String pluginName, String siteName) { diff --git a/core/src/main/java/hudson/model/UpdateCenter.java b/core/src/main/java/hudson/model/UpdateCenter.java index 938417509a..63e517dd4e 100644 --- a/core/src/main/java/hudson/model/UpdateCenter.java +++ b/core/src/main/java/hudson/model/UpdateCenter.java @@ -799,8 +799,11 @@ public class UpdateCenter extends AbstractModelObject implements Saveable, OnMas } - /*package*/ synchronized Future addJob(UpdateCenterJob job) { - addConnectionCheckJob(job.site); + @Restricted(NoExternalUse.class) + public synchronized Future addJob(UpdateCenterJob job) { + if (job.site != null) { + addConnectionCheckJob(job.site); + } return job.submit(); } @@ -846,7 +849,7 @@ public class UpdateCenter extends AbstractModelObject implements Saveable, OnMas private @CheckForNull ConnectionCheckJob getConnectionCheckJob(@Nonnull UpdateSite site) { synchronized (jobs) { for (UpdateCenterJob job : jobs) { - if (job instanceof ConnectionCheckJob && job.site.getId().equals(site.getId())) { + if (job instanceof ConnectionCheckJob && job.site != null && job.site.getId().equals(site.getId())) { return (ConnectionCheckJob) job; } } @@ -1331,7 +1334,7 @@ public class UpdateCenter extends AbstractModelObject implements Saveable, OnMas /** * Which {@link UpdateSite} does this belong to? */ - public final UpdateSite site; + public final @CheckForNull UpdateSite site; /** * Simple correlation ID that can be used to associated a batch of jobs e.g. the @@ -1344,7 +1347,7 @@ public class UpdateCenter extends AbstractModelObject implements Saveable, OnMas */ protected Throwable error; - protected UpdateCenterJob(UpdateSite site) { + protected UpdateCenterJob(@CheckForNull UpdateSite site) { this.site = site; } @@ -1492,7 +1495,7 @@ public class UpdateCenter extends AbstractModelObject implements Saveable, OnMas public void run() { connectionStates.put(ConnectionStatus.INTERNET, ConnectionStatus.UNCHECKED); connectionStates.put(ConnectionStatus.UPDATE_SITE, ConnectionStatus.UNCHECKED); - if (ID_UPLOAD.equals(site.getId())) { + if (site == null || ID_UPLOAD.equals(site.getId())) { return; } LOGGER.fine("Doing a connectivity check"); @@ -1595,7 +1598,7 @@ public class UpdateCenter extends AbstractModelObject implements Saveable, OnMas if (dynamicLoad) { try { // remove the existing, disabled inactive plugin to force a new one to load - pm.dynamicLoad(getDestination(), true); + pm.dynamicLoad(getDestination(), true, null); } catch (Exception e) { LOGGER.log(Level.SEVERE, "Failed to dynamically load " + plugin.getDisplayName(), e); error = e; @@ -1660,9 +1663,20 @@ public class UpdateCenter extends AbstractModelObject implements Saveable, OnMas */ protected abstract File getDestination(); + /** + * Code name used for logging. + */ @Exported public abstract String getName(); + /** + * Display name used for the GUI. + * @since TODO + */ + public String getDisplayName() { + return getName(); + } + /** * Called when the whole thing went successfully. */ @@ -1971,6 +1985,8 @@ public class UpdateCenter extends AbstractModelObject implements Saveable, OnMas */ protected final boolean dynamicLoad; + @CheckForNull List batch; + /** * @deprecated as of 1.442 */ @@ -1999,7 +2015,13 @@ public class UpdateCenter extends AbstractModelObject implements Saveable, OnMas return new File(baseDir, plugin.name + ".hpi"); } + @Override public String getName() { + return plugin.name; + } + + @Override + public String getDisplayName() { return plugin.getDisplayName(); } @@ -2027,7 +2049,7 @@ public class UpdateCenter extends AbstractModelObject implements Saveable, OnMas if (dynamicLoad) { try { - pm.dynamicLoad(getDestination()); + pm.dynamicLoad(getDestination(), false, batch); } catch (RestartRequiredException e) { throw new SuccessButRequiresRestart(e.message); } catch (Exception e) { @@ -2100,7 +2122,7 @@ public class UpdateCenter extends AbstractModelObject implements Saveable, OnMas */ @Override protected void replace(File dst, File src) throws IOException { - if (!site.getId().equals(ID_UPLOAD)) { + if (site == null || !site.getId().equals(ID_UPLOAD)) { verifyChecksums(this, plugin, src); } @@ -2123,6 +2145,61 @@ public class UpdateCenter extends AbstractModelObject implements Saveable, OnMas throw new IOException("Failed to rename "+src+" to "+dst); } } + + void setBatch(List batch) { + this.batch = batch; + } + + } + + @Restricted(NoExternalUse.class) + public final class CompleteBatchJob extends UpdateCenterJob { + + private final List batch; + private final long start; + @Exported(inline = true) + public volatile CompleteBatchJobStatus status = new Pending(); + + public CompleteBatchJob(List batch, long start, UUID correlationId) { + super(getCoreSource()); + this.batch = batch; + this.start = start; + setCorrelationId(correlationId); + } + + @Override + public void run() { + LOGGER.info("Completing installing of plugin batch…"); + status = new Running(); + try { + Jenkins.get().getPluginManager().start(batch); + status = new Success(); + } catch (Exception x) { + status = new Failure(x); + LOGGER.log(Level.WARNING, "Failed to start some plugins", x); + } + LOGGER.log(INFO, "Completed installation of {0} plugins in {1}", new Object[] {batch.size(), Util.getTimeSpanString((System.nanoTime() - start) / 1_000_000)}); + } + + @ExportedBean + public abstract class CompleteBatchJobStatus { + @Exported + public final int id = iota.incrementAndGet(); + } + + public class Pending extends CompleteBatchJobStatus {} + + public class Running extends CompleteBatchJobStatus {} + + public class Success extends CompleteBatchJobStatus {} + + public class Failure extends CompleteBatchJobStatus { + Failure(Throwable problemStackTrace) { + this.problemStackTrace = problemStackTrace; + } + public final Throwable problemStackTrace; + } + } /** @@ -2159,7 +2236,13 @@ public class UpdateCenter extends AbstractModelObject implements Saveable, OnMas return new File(baseDir, plugin.name + ".bak"); } + @Override public String getName() { + return plugin.name; + } + + @Override + public String getDisplayName() { return plugin.getDisplayName(); } @@ -2219,6 +2302,9 @@ public class UpdateCenter extends AbstractModelObject implements Saveable, OnMas } protected URL getURL() throws MalformedURLException { + if (site == null) { + throw new MalformedURLException("no update site defined"); + } return new URL(site.getData().core.url); } @@ -2236,6 +2322,9 @@ public class UpdateCenter extends AbstractModelObject implements Saveable, OnMas @Override protected void replace(File dst, File src) throws IOException { + if (site == null) { + throw new IOException("no update site defined"); + } verifyChecksums(this, site.getData().core, src); Lifecycle.get().rewriteHudsonWar(src); } @@ -2247,6 +2336,9 @@ public class UpdateCenter extends AbstractModelObject implements Saveable, OnMas } protected URL getURL() throws MalformedURLException { + if (site == null) { + throw new MalformedURLException("no update site defined"); + } return new URL(site.getData().core.url); } diff --git a/core/src/main/java/hudson/model/UpdateSite.java b/core/src/main/java/hudson/model/UpdateSite.java index 77a6230a07..3b6491fa96 100644 --- a/core/src/main/java/hudson/model/UpdateSite.java +++ b/core/src/main/java/hudson/model/UpdateSite.java @@ -1319,7 +1319,7 @@ public class UpdateSite { * See {@link UpdateCenter#isRestartRequiredForCompletion()} */ public Future deploy(boolean dynamicLoad) { - return deploy(dynamicLoad, null); + return deploy(dynamicLoad, null, null); } /** @@ -1334,18 +1334,19 @@ public class UpdateSite { * the plugin will only take effect after the reboot. * See {@link UpdateCenter#isRestartRequiredForCompletion()} * @param correlationId A correlation ID to be set on the job. + * @param batch if defined, a list of plugins to add to, which will be started later */ @Restricted(NoExternalUse.class) - public Future deploy(boolean dynamicLoad, @CheckForNull UUID correlationId) { + public Future deploy(boolean dynamicLoad, @CheckForNull UUID correlationId, @CheckForNull List batch) { Jenkins.get().checkPermission(Jenkins.ADMINISTER); UpdateCenter uc = Jenkins.get().getUpdateCenter(); for (Plugin dep : getNeededDependencies()) { UpdateCenter.InstallationJob job = uc.getJob(dep); if (job == null || job.status instanceof UpdateCenter.DownloadJob.Failure) { LOGGER.log(Level.INFO, "Adding dependent install of " + dep.name + " for plugin " + name); - dep.deploy(dynamicLoad); + dep.deploy(dynamicLoad, /* UpdateCenterPluginInstallTest.test_installKnownPlugins specifically asks that these not be correlated */ null, batch); } else { - LOGGER.log(Level.INFO, "Dependent install of " + dep.name + " for plugin " + name + " already added, skipping"); + LOGGER.log(Level.FINE, "Dependent install of {0} for plugin {1} already added, skipping", new Object[] {dep.name, name}); } } PluginWrapper pw = getInstalled(); @@ -1362,6 +1363,7 @@ public class UpdateSite { } UpdateCenter.InstallationJob job = createInstallationJob(this, uc, dynamicLoad); job.setCorrelationId(correlationId); + job.setBatch(batch); return uc.addJob(job); } diff --git a/core/src/main/resources/hudson/model/UpdateCenter/CompleteBatchJob/Failure/status.jelly b/core/src/main/resources/hudson/model/UpdateCenter/CompleteBatchJob/Failure/status.jelly new file mode 100644 index 0000000000..4c1e2ffeac --- /dev/null +++ b/core/src/main/resources/hudson/model/UpdateCenter/CompleteBatchJob/Failure/status.jelly @@ -0,0 +1,34 @@ + + + + +

+
${it.problemStackTrace}
+ diff --git a/core/src/main/resources/hudson/model/UpdateCenter/CompleteBatchJob/Pending/status.jelly b/core/src/main/resources/hudson/model/UpdateCenter/CompleteBatchJob/Pending/status.jelly new file mode 100644 index 0000000000..21e0f59484 --- /dev/null +++ b/core/src/main/resources/hudson/model/UpdateCenter/CompleteBatchJob/Pending/status.jelly @@ -0,0 +1,28 @@ + + + + + ${%Pending} + diff --git a/core/src/main/resources/hudson/model/UpdateCenter/CompleteBatchJob/Running/status.jelly b/core/src/main/resources/hudson/model/UpdateCenter/CompleteBatchJob/Running/status.jelly new file mode 100644 index 0000000000..a8d871fe18 --- /dev/null +++ b/core/src/main/resources/hudson/model/UpdateCenter/CompleteBatchJob/Running/status.jelly @@ -0,0 +1,28 @@ + + + + + ${%Running} + diff --git a/core/src/main/resources/hudson/model/UpdateCenter/CompleteBatchJob/Success/status.jelly b/core/src/main/resources/hudson/model/UpdateCenter/CompleteBatchJob/Success/status.jelly new file mode 100644 index 0000000000..9a3854624c --- /dev/null +++ b/core/src/main/resources/hudson/model/UpdateCenter/CompleteBatchJob/Success/status.jelly @@ -0,0 +1,28 @@ + + + + + ${%Success} + diff --git a/core/src/main/resources/hudson/model/UpdateCenter/CompleteBatchJob/row.jelly b/core/src/main/resources/hudson/model/UpdateCenter/CompleteBatchJob/row.jelly new file mode 100644 index 0000000000..9a6e44e27a --- /dev/null +++ b/core/src/main/resources/hudson/model/UpdateCenter/CompleteBatchJob/row.jelly @@ -0,0 +1,10 @@ + + + + ${%Loading plugin extensions} + + + + + + diff --git a/core/src/main/resources/hudson/model/UpdateCenter/DownloadJob/row.jelly b/core/src/main/resources/hudson/model/UpdateCenter/DownloadJob/row.jelly index 1ea067b9f0..7dd6d3cd9d 100644 --- a/core/src/main/resources/hudson/model/UpdateCenter/DownloadJob/row.jelly +++ b/core/src/main/resources/hudson/model/UpdateCenter/DownloadJob/row.jelly @@ -25,7 +25,7 @@ THE SOFTWARE. - ${it.name} + ${it.displayName} diff --git a/test/src/test/java/hudson/model/UpdateCenterPluginInstallTest.java b/test/src/test/java/hudson/model/UpdateCenterPluginInstallTest.java index cae5ae3f98..4ae0e544a6 100644 --- a/test/src/test/java/hudson/model/UpdateCenterPluginInstallTest.java +++ b/test/src/test/java/hudson/model/UpdateCenterPluginInstallTest.java @@ -81,7 +81,7 @@ public class UpdateCenterPluginInstallTest { Assert.assertEquals("ok", json.get("status")); JSONObject status = installStatus.getJSONObject("data"); JSONArray states = status.getJSONArray("jobs"); - Assert.assertEquals(2, states.size()); + Assert.assertEquals(states.toString(), 2, states.size()); JSONObject pluginInstallState = states.getJSONObject(0); Assert.assertEquals("changelog-history", pluginInstallState.get("name")); -- GitLab From dae53088b71d78346d235b8c3bb783c583dd4d52 Mon Sep 17 00:00:00 2001 From: Matt Sicker Date: Thu, 1 Aug 2019 17:18:16 -0500 Subject: [PATCH 449/476] [JENKINS-58548] Remove extra whitespace from scriptText (#4133) * [JENKINS-58548] Remove extra whitespace from scriptText This removes the unnecessary whitespace being output in scriptText and anywhere else that has non-XML whitespace semantics in its output when using . Signed-off-by: Matt Sicker * Fix test name Co-Authored-By: Daniel Beck <1831569+daniel-beck@users.noreply.github.com> --- .../resources/jenkins/model/Jenkins/_scriptText.jelly | 4 ++-- core/src/main/resources/lib/layout/view.jelly | 5 ++++- test/src/test/java/jenkins/model/JenkinsTest.java | 10 ++++++++++ 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/core/src/main/resources/jenkins/model/Jenkins/_scriptText.jelly b/core/src/main/resources/jenkins/model/Jenkins/_scriptText.jelly index f87b23b69d..d3ec942025 100644 --- a/core/src/main/resources/jenkins/model/Jenkins/_scriptText.jelly +++ b/core/src/main/resources/jenkins/model/Jenkins/_scriptText.jelly @@ -26,8 +26,8 @@ THE SOFTWARE. Called from doScriptText() to display the execution result. --> - + - + diff --git a/core/src/main/resources/lib/layout/view.jelly b/core/src/main/resources/lib/layout/view.jelly index b845934521..e1cb8efc8b 100644 --- a/core/src/main/resources/lib/layout/view.jelly +++ b/core/src/main/resources/lib/layout/view.jelly @@ -35,6 +35,9 @@ - ${h.initPageVariables(context)} + + + + diff --git a/test/src/test/java/jenkins/model/JenkinsTest.java b/test/src/test/java/jenkins/model/JenkinsTest.java index 171f7d133f..c6e57ff628 100644 --- a/test/src/test/java/jenkins/model/JenkinsTest.java +++ b/test/src/test/java/jenkins/model/JenkinsTest.java @@ -38,6 +38,7 @@ import static org.junit.Assert.fail; import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException; import com.gargoylesoftware.htmlunit.HttpMethod; import com.gargoylesoftware.htmlunit.Page; +import com.gargoylesoftware.htmlunit.TextPage; import com.gargoylesoftware.htmlunit.WebRequest; import com.gargoylesoftware.htmlunit.WebResponse; import com.gargoylesoftware.htmlunit.html.HtmlForm; @@ -328,6 +329,15 @@ public class JenkinsTest { wc.assertFails("script", HttpURLConnection.HTTP_FORBIDDEN); } + @Test + @Issue("JENKINS-58548") + public void testDoScriptTextDoesNotOutputExtraWhitespace() throws Exception { + j.jenkins.setSecurityRealm(j.createDummySecurityRealm()); + WebClient wc = j.createWebClient().login("admin"); + TextPage page = wc.getPage(new WebRequest(wc.createCrumbedUrl("scriptText?script=print 'hello'"), HttpMethod.POST)); + assertEquals("hello", page.getContent()); + } + @Test public void testDoEval() throws Exception { ApiTokenTestHelper.enableLegacyBehavior(); -- GitLab From 974d1dd544d2ed83a966714f4d031ddcd478574f Mon Sep 17 00:00:00 2001 From: Abhyudaya Sharma Date: Mon, 5 Aug 2019 17:37:26 +0530 Subject: [PATCH 450/476] Support JMH benchmarks from Jenkins Test Harness (#4135) * Support running JMH benchmarks from JTH 2.51 * Fix NPE caused by ExtensionFinderTest * A test for running a sample benchmark * Bump up JTH to 2.54 * git ignore the report produced by benchmarks * Fix BindException in BootFailureTest * Fix NPE during `tearDown()` in CustomPluginManagerTest JenkinsRule >= 2.50 does not ignore errors during Jenkins shutdown --- test-pom/pom.xml | 2 +- test/.gitignore | 1 + .../test/java/benchmarks/BenchmarkTest.java | 47 +++++++++++++++++++ .../test/java/benchmarks/SampleBenchmark.java | 20 ++++++++ .../java/hudson/CustomPluginManagerTest.java | 8 +++- .../test/java/hudson/ExtensionFinderTest.java | 4 +- .../java/hudson/util/BootFailureTest.java | 1 + 7 files changed, 79 insertions(+), 4 deletions(-) create mode 100644 test/src/test/java/benchmarks/BenchmarkTest.java create mode 100644 test/src/test/java/benchmarks/SampleBenchmark.java diff --git a/test-pom/pom.xml b/test-pom/pom.xml index da12966f05..e082082283 100644 --- a/test-pom/pom.xml +++ b/test-pom/pom.xml @@ -64,7 +64,7 @@ THE SOFTWARE. ${project.groupId} jenkins-test-harness - 2.49 + 2.54 test diff --git a/test/.gitignore b/test/.gitignore index 908bb9cb14..a23af2a934 100644 --- a/test/.gitignore +++ b/test/.gitignore @@ -1,2 +1,3 @@ !*.zip hs_err_pid*.log +jmh-report.json diff --git a/test/src/test/java/benchmarks/BenchmarkTest.java b/test/src/test/java/benchmarks/BenchmarkTest.java new file mode 100644 index 0000000000..5e490542c7 --- /dev/null +++ b/test/src/test/java/benchmarks/BenchmarkTest.java @@ -0,0 +1,47 @@ +package benchmarks; + +import org.junit.Test; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.results.format.ResultFormatType; +import org.openjdk.jmh.runner.Runner; +import org.openjdk.jmh.runner.options.ChainedOptionsBuilder; +import org.openjdk.jmh.runner.options.OptionsBuilder; + +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.concurrent.TimeUnit; + +import static org.junit.Assert.assertTrue; + +public class BenchmarkTest { + /** + * Runs a sample benchmark to make sure that benchmarks execute successfully and generate a report. + *

+ * To run your benchmarks, create a benchmark runner similar to this class and use + * {@link jenkins.benchmark.jmh.BenchmarkFinder} to automatically find classes for benchmark which are annotated + * with {@link jenkins.benchmark.jmh.JmhBenchmark}. + * @throws Exception when the benchmark fails to run or throws an exception. + * @see Blog post on writing benchmarks + */ + @Test + public void runSampleBenchmark() throws Exception { + // run the minimum possible number of iterations + ChainedOptionsBuilder options = new OptionsBuilder() + .mode(Mode.AverageTime) + .forks(1) + .result("jmh-report.json") + .resultFormat(ResultFormatType.JSON) + .operationsPerInvocation(1) + .threads(1) + .warmupForks(0) + .warmupIterations(0) + .measurementBatchSize(1) + .measurementIterations(1) + .timeUnit(TimeUnit.MICROSECONDS) + .shouldFailOnError(true) + // just run the SampleBenchmark, not other benchmarks + .include(SampleBenchmark.class.getName() + ".*"); + new Runner(options.build()).run(); + assertTrue(Files.exists(Paths.get("jmh-report.json"))); + } +} diff --git a/test/src/test/java/benchmarks/SampleBenchmark.java b/test/src/test/java/benchmarks/SampleBenchmark.java new file mode 100644 index 0000000000..ccf45c1f51 --- /dev/null +++ b/test/src/test/java/benchmarks/SampleBenchmark.java @@ -0,0 +1,20 @@ +package benchmarks; + +import jenkins.benchmark.jmh.JmhBenchmark; +import jenkins.benchmark.jmh.JmhBenchmarkState; +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.infra.Blackhole; + +/** + * A sample benchmark. + */ +@JmhBenchmark +public class SampleBenchmark { + public static class MyState extends JmhBenchmarkState { + } + + @Benchmark + public void benchmark(MyState state, Blackhole blackhole) { + blackhole.consume(state.getJenkins().getSystemMessage()); + } +} diff --git a/test/src/test/java/hudson/CustomPluginManagerTest.java b/test/src/test/java/hudson/CustomPluginManagerTest.java index fa84da86f4..1f239b81b7 100644 --- a/test/src/test/java/hudson/CustomPluginManagerTest.java +++ b/test/src/test/java/hudson/CustomPluginManagerTest.java @@ -67,8 +67,12 @@ public class CustomPluginManagerTest { } @Override - public void tearDown(JenkinsRule jenkinsRule, WithCustomLocalPluginManager recipe) throws Exception { - System.setProperty(LocalPluginManager.CUSTOM_PLUGIN_MANAGER, oldValue); + public void tearDown(JenkinsRule jenkinsRule, WithCustomLocalPluginManager recipe) { + if (oldValue != null) { + System.setProperty(LocalPluginManager.CUSTOM_PLUGIN_MANAGER, oldValue); + } else { + System.clearProperty(LocalPluginManager.CUSTOM_PLUGIN_MANAGER); + } } } } diff --git a/test/src/test/java/hudson/ExtensionFinderTest.java b/test/src/test/java/hudson/ExtensionFinderTest.java index c71f6d6ce5..df1a809fc7 100644 --- a/test/src/test/java/hudson/ExtensionFinderTest.java +++ b/test/src/test/java/hudson/ExtensionFinderTest.java @@ -92,7 +92,9 @@ public class ExtensionFinderTest extends HudsonTestCase { @Extension public static class ModuleImpl extends AbstractModule { protected void configure() { - if (TestEnvironment.get().testCase instanceof ExtensionFinderTest) { + TestEnvironment environment = TestEnvironment.get(); + // JMH benchmarks do not initialize TestEnvironment, so check for null + if (environment != null && environment.testCase instanceof ExtensionFinderTest) { bind(String.class).annotatedWith(LionKing.class).toInstance("lion king"); } } diff --git a/test/src/test/java/hudson/util/BootFailureTest.java b/test/src/test/java/hudson/util/BootFailureTest.java index aeaf88e7d0..57b39eb20b 100644 --- a/test/src/test/java/hudson/util/BootFailureTest.java +++ b/test/src/test/java/hudson/util/BootFailureTest.java @@ -48,6 +48,7 @@ public class BootFailureTest { @Override public Hudson newHudson() throws Exception { + localPort = 0; ServletContext ws = createWebServer(); wa = new WebAppMain() { @Override -- GitLab From b2616a947abfc3562f481492250408aacdfbb254 Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Tue, 6 Aug 2019 08:44:49 -0700 Subject: [PATCH 451/476] Test shouldn't be interactively breaking This causes the test to time out. What I don't understand is how this test got merged in the first place. --- test/src/test/java/jenkins/triggers/TriggerTest.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/test/src/test/java/jenkins/triggers/TriggerTest.java b/test/src/test/java/jenkins/triggers/TriggerTest.java index 31ec8c4aed..b76dd379b3 100644 --- a/test/src/test/java/jenkins/triggers/TriggerTest.java +++ b/test/src/test/java/jenkins/triggers/TriggerTest.java @@ -44,7 +44,6 @@ public class TriggerTest { Thread.sleep(100); } j.waitUntilNoActivity(); - j.interactiveBreak(); assertThat(l.getMessages().toArray(new String[0]) [0], containsString("Trigger " + BadTimerTrigger.class.getName() + ".run() triggered by " + p.toString() + " spent too much time ")); @@ -115,4 +114,4 @@ public class TriggerTest { stam.getErrors().containsKey("Test" + i), equalTo(true)); } } -} \ No newline at end of file +} -- GitLab From d259fcaae190b4205a9c4c75aa9914dcea372927 Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Wed, 7 Aug 2019 01:41:09 -0700 Subject: [PATCH 452/476] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 2297cabccf..af50107df4 100755 --- a/pom.xml +++ b/pom.xml @@ -76,7 +76,7 @@ THE SOFTWARE. - 2.188 + 2.189 -SNAPSHOT -<?xml version="1.0" encoding="UTF-8"?> - - - - ${title} - - - - - 2001-01-01T00:00:00Z - - - ${h.xsDate(adapter.getEntryTimestamp(entries[0]))} - - - - Jenkins Server - - urn:uuid:903deee0-7bfa-11db-9fe1-0800200c9a66 - - - - ${adapter.getEntryTitle(e)} - - ${adapter.getEntryID(e)} - ${h.xsDate(adapter.getEntryTimestamp(e))} - ${h.xsDate(adapter.getEntryTimestamp(e))} - - - ${desc} - - - - + + <?xml version="1.0" encoding="UTF-8"?> + + + ${title} + + + + + 2001-01-01T00:00:00Z + + + ${h.xsDate(adapter.getEntryTimestamp(entries[0]))} + + + + Jenkins Server + + urn:uuid:903deee0-7bfa-11db-9fe1-0800200c9a66 + + + + ${adapter.getEntryTitle(e)} + + ${adapter.getEntryID(e)} + ${h.xsDate(adapter.getEntryTimestamp(e))} + ${h.xsDate(adapter.getEntryTimestamp(e))} + + + ${desc} + + + + + diff --git a/core/src/main/resources/hudson/rss20.jelly b/core/src/main/resources/hudson/rss20.jelly index 9919b177fc..8db8633bcb 100644 --- a/core/src/main/resources/hudson/rss20.jelly +++ b/core/src/main/resources/hudson/rss20.jelly @@ -23,28 +23,29 @@ THE SOFTWARE. --> -<?xml version="1.0" encoding="UTF-8"?> + + <?xml version="1.0" encoding="UTF-8"?> + + + + ${title} + ${rootURL}${url} + ${title} - - - - ${title} - ${rootURL}${url} - ${title} - - - - ${adapter.getEntryTitle(e)} - ${rootURL}${h.encode(adapter.getEntryUrl(e))} - ${adapter.getEntryID(e)} - ${h.rfc822Date(adapter.getEntryTimestamp(e))} - - - - ${desc} - - - - - + + + ${adapter.getEntryTitle(e)} + ${rootURL}${h.encode(adapter.getEntryUrl(e))} + ${adapter.getEntryID(e)} + ${h.rfc822Date(adapter.getEntryTimestamp(e))} + + + + ${desc} + + + + + + -- GitLab From 1756d586e208c1facd8075d54af95579b239b53b Mon Sep 17 00:00:00 2001 From: Kshithij Iyer Date: Wed, 14 Aug 2019 19:11:52 +0530 Subject: [PATCH 456/476] Updating LICENSE section of readme.md (#4141) * Updating LICNESE section of readme.md * Changing raw to blob in the LICENSE link. --- README.md | 25 ++----------------------- 1 file changed, 2 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 1cc7c70e4e..9a105ecf65 100644 --- a/README.md +++ b/README.md @@ -34,32 +34,11 @@ Follow the [contributing](CONTRIBUTING.md) file. All information about Jenkins can be found on our [website]. Follow us on Twitter [@jenkinsci]. # License -Jenkins is **licensed** under the **[MIT License]**. The terms of the license are as follows: +Jenkins is **licensed** under the **[MIT License]**. - The MIT License (MIT) - - Copyright (c) 2004 Kohsuke Kawaguchi, Sun Microsystems Inc., and a number of other contributors. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. [ButlerImage]: https://jenkins.io/sites/default/files/jenkins_logo.png -[MIT License]: https://github.com/jenkinsci/jenkins/raw/master/LICENSE.txt +[MIT License]: https://github.com/jenkinsci/jenkins/blob/master/LICENSE.txt [Mirrors]: http://mirrors.jenkins-ci.org [GitHub]: https://github.com/jenkinsci/jenkins [website]: https://jenkins.io/ -- GitLab From 3356311377bfc57c1072b354ce811bdca32c2e91 Mon Sep 17 00:00:00 2001 From: Oleg Nenashev Date: Thu, 15 Aug 2019 23:01:17 +0200 Subject: [PATCH 457/476] Disable Windows builds, ATH and Incrementals to mitigate the ongoing INFRA issue (#4153) * Disable Windows builds, ATH and Incrementals to mitigate the ongoing INFRA issue See https://groups.google.com/forum/#!topic/jenkinsci-dev/v9d-XosOp2s is resolved * Restore incrementals publishing --- Jenkinsfile | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index c7dc2954de..95c9becb3f 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -11,7 +11,8 @@ def failFast = false properties([buildDiscarder(logRotator(numToKeepStr: '50', artifactNumToKeepStr: '3')), durabilityHint('PERFORMANCE_OPTIMIZED')]) -def buildTypes = ['Linux', 'Windows'] +// TODO: Restore 'Windows' once https://groups.google.com/forum/#!topic/jenkinsci-dev/v9d-XosOp2s is resolved +def buildTypes = ['Linux'] def jdks = [8, 11] def builds = [:] @@ -72,7 +73,9 @@ for(j = 0; j < jdks.size(); j++) { } }} +// TODO: Restore ATH once https://groups.google.com/forum/#!topic/jenkinsci-dev/v9d-XosOp2s is resolved // TODO: ATH flow now supports Java 8 only, it needs to be reworked (INFRA-1690) +/* builds.ath = { node("docker&&highmem") { // Just to be safe @@ -94,7 +97,7 @@ builds.ath = { runATH jenkins: fileUri, metadataFile: metadataPath } } -} +}*/ builds.failFast = failFast parallel builds -- GitLab From ecdc79c41fd3a754605d352eb4c22d52e9d9ffa2 Mon Sep 17 00:00:00 2001 From: Gabriel Belingueres Date: Fri, 16 Aug 2019 04:53:21 -0300 Subject: [PATCH 458/476] [JENKINS-58836] Wrong spanish argentinian translation for 'logout' (#4144) Modificed logout key. --- core/src/main/resources/lib/layout/layout_es_AR.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/resources/lib/layout/layout_es_AR.properties b/core/src/main/resources/lib/layout/layout_es_AR.properties index 8dfcaffc2f..6acf234ba1 100644 --- a/core/src/main/resources/lib/layout/layout_es_AR.properties +++ b/core/src/main/resources/lib/layout/layout_es_AR.properties @@ -21,5 +21,5 @@ # THE SOFTWARE. Page\ generated=P\u00E1gina generada -logout=Volver al proyecto +logout=Desconectar search=Buscar -- GitLab From 3661cefad43380e31bbe4a343948cbcc1440c6c4 Mon Sep 17 00:00:00 2001 From: "A. Jard" Date: Fri, 16 Aug 2019 09:53:56 +0200 Subject: [PATCH 459/476] [JENKINS-58571] Check if name is editable on item before doing rename. (#4122) * [58571] Check if name is editable on item before doing rename. * [JENKINS-58571]Form failure when rename item with not editable name. * [JENKINS-58571] Change to IOException when isNameEditable is false. * [JENKINS-58571] Validate test harness furure version. * [JENKINS-58571] Validate test harness 2.55. --- .../main/java/hudson/model/AbstractItem.java | 10 ++++ .../java/hudson/model/AbstractItemTest.java | 59 +++++++++++++++++++ test-pom/pom.xml | 2 +- 3 files changed, 70 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/hudson/model/AbstractItem.java b/core/src/main/java/hudson/model/AbstractItem.java index 4a7524d1be..eae1e64e40 100644 --- a/core/src/main/java/hudson/model/AbstractItem.java +++ b/core/src/main/java/hudson/model/AbstractItem.java @@ -275,6 +275,11 @@ public abstract class AbstractItem extends Actionable implements Item, HttpDelet */ @Restricted(NoExternalUse.class) public @Nonnull FormValidation doCheckNewName(@QueryParameter String newName) { + + if (!isNameEditable()) { + return FormValidation.error("Trying to rename an item that does not support this operation."); + } + // TODO: Create an Item.RENAME permission to use here, see JENKINS-18649. if (!hasPermission(Item.CONFIGURE)) { if (parent instanceof AccessControlled) { @@ -351,6 +356,11 @@ public abstract class AbstractItem extends Actionable implements Item, HttpDelet * you can use this method. */ protected void renameTo(final String newName) throws IOException { + + if (!isNameEditable()) { + throw new IOException("Trying to rename an item that does not support this operation."); + } + // always synchronize from bigger objects first final ItemGroup parent = getParent(); String oldName = this.name; diff --git a/core/src/test/java/hudson/model/AbstractItemTest.java b/core/src/test/java/hudson/model/AbstractItemTest.java index 79507b4335..b71a64e0d6 100644 --- a/core/src/test/java/hudson/model/AbstractItemTest.java +++ b/core/src/test/java/hudson/model/AbstractItemTest.java @@ -5,10 +5,13 @@ package hudson.model; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; +import static org.junit.Assert.fail; +import java.io.IOException; import java.util.Collection; import org.junit.Test; +import org.jvnet.hudson.test.Issue; /** * @author kingfai @@ -91,4 +94,60 @@ public class AbstractItemTest { assertEquals(displayName, i.getDisplayNameOrNull()); assertEquals(displayName, i.getDisplayName()); } + + private class NameNotEditableItem extends AbstractItem { + + protected NameNotEditableItem(ItemGroup parent, String name){ + super(parent, name); + } + + @Override + public Collection getAllJobs() { + return null; + } + + @Override + public boolean isNameEditable() { + return false; //so far it's the default value, but it's good to be explicit for test. + } + } + + @Test + @Issue("JENKINS-58571") + public void renameMethodShouldThrowExceptionWhenNotIsNameEditable() { + + //GIVEN + NameNotEditableItem item = new NameNotEditableItem(null,"NameNotEditableItem"); + + //WHEN + try { + item.renameTo("NewName"); + fail("An item with isNameEditable false must throw exception when trying to rename it."); + } catch (IOException e) { + + //THEN + assertEquals(e.getMessage(),"Trying to rename an item that does not support this operation."); + assertEquals("NameNotEditableItem",item.getName()); + } + } + + @Test + @Issue("JENKINS-58571") + public void doConfirmRenameMustThrowFormFailureWhenNotIsNameEditable() throws IOException { + + //GIVEN + NameNotEditableItem item = new NameNotEditableItem(null,"NameNotEditableItem"); + + //WHEN + try { + item.doConfirmRename("MyNewName"); + fail("An item with isNameEditable false must throw exception when trying to call doConfirmRename."); + } catch (Failure f) { + + //THEN + assertEquals(f.getMessage(),"Trying to rename an item that does not support this operation."); + assertEquals("NameNotEditableItem",item.getName()); + } + } + } diff --git a/test-pom/pom.xml b/test-pom/pom.xml index e082082283..c0cfecf61f 100644 --- a/test-pom/pom.xml +++ b/test-pom/pom.xml @@ -64,7 +64,7 @@ THE SOFTWARE. ${project.groupId} jenkins-test-harness - 2.54 + 2.55 test -- GitLab From 46972f723f60a47c87c99258b857d979396b66db Mon Sep 17 00:00:00 2001 From: Daniel Beck <1831569+daniel-beck@users.noreply.github.com> Date: Fri, 16 Aug 2019 09:54:31 +0200 Subject: [PATCH 460/476] Remove build-pipeline-plugin from setup wizard (#4147) --- core/src/main/resources/jenkins/install/platform-plugins.json | 1 - 1 file changed, 1 deletion(-) diff --git a/core/src/main/resources/jenkins/install/platform-plugins.json b/core/src/main/resources/jenkins/install/platform-plugins.json index 48af4a4007..43c0c79cb9 100644 --- a/core/src/main/resources/jenkins/install/platform-plugins.json +++ b/core/src/main/resources/jenkins/install/platform-plugins.json @@ -49,7 +49,6 @@ { "name": "github-branch-source", "suggested": true, "added": "2.0" }, { "name": "pipeline-github-lib", "suggested": true, "added": "2.0" }, { "name": "pipeline-stage-view", "suggested": true, "added": "2.0" }, - { "name": "build-pipeline-plugin" }, { "name": "conditional-buildstep" }, { "name": "jenkins-multijob-plugin" }, { "name": "parameterized-trigger" }, -- GitLab From fda304cb923f96079b7ddc891a3c4f53d200e9fe Mon Sep 17 00:00:00 2001 From: Damian Szczepanik Date: Fri, 16 Aug 2019 09:55:07 +0200 Subject: [PATCH 461/476] Add Polish translations (#4140) --- .../resources/hudson/Messages_pl.properties | 3 ++- .../hudson/PluginManager/index_pl.properties | 5 ++-- .../hudson/PluginManager/table_pl.properties | 6 +++-- .../message_pl.properties | 4 ++- .../hudson/diagnosis/Messages_pl.properties | 4 ++- .../AbstractItem/confirm-rename_pl.properties | 25 +++++++++++++++++ .../hudson/model/Messages_pl.properties | 2 ++ .../Pending/status_pl.properties | 23 ++++++++++++++++ .../Success/status_pl.properties | 23 ++++++++++++++++ .../CompleteBatchJob/row_pl.properties | 23 ++++++++++++++++ .../View/AsynchPeople/index_pl.properties | 5 ++-- .../model/RenameAction/action_pl.properties | 23 ++++++++++++++++ .../ApiTokenProperty/config_pl.properties | 25 +++++++++++++++++ .../UserSeedProperty/config_pl.properties | 27 +++++++++++++++++++ .../breadcrumb-config-outline_pl.properties | 2 +- 15 files changed, 189 insertions(+), 11 deletions(-) create mode 100644 core/src/main/resources/hudson/model/AbstractItem/confirm-rename_pl.properties create mode 100644 core/src/main/resources/hudson/model/UpdateCenter/CompleteBatchJob/Pending/status_pl.properties create mode 100644 core/src/main/resources/hudson/model/UpdateCenter/CompleteBatchJob/Success/status_pl.properties create mode 100644 core/src/main/resources/hudson/model/UpdateCenter/CompleteBatchJob/row_pl.properties create mode 100644 core/src/main/resources/jenkins/model/RenameAction/action_pl.properties create mode 100644 core/src/main/resources/jenkins/security/ApiTokenProperty/config_pl.properties create mode 100644 core/src/main/resources/jenkins/security/seed/UserSeedProperty/config_pl.properties diff --git a/core/src/main/resources/hudson/Messages_pl.properties b/core/src/main/resources/hudson/Messages_pl.properties index fca6881a87..0a48ca1491 100644 --- a/core/src/main/resources/hudson/Messages_pl.properties +++ b/core/src/main/resources/hudson/Messages_pl.properties @@ -1,6 +1,6 @@ # The MIT License # -# Copyright (c) 2016-2017, Damian Szczepanik +# Copyright (c) 2016-2019, Damian Szczepanik # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -33,3 +33,4 @@ AboutJenkins.DisplayName=Informacje o Jenkinsie AboutJenkins.Description=Sprawd\u017A wersj\u0119 i licencj\u0119 # {0} v{1} is missing. To fix, install v{1} or later. PluginWrapper.missing=Brakuje wtyczki {0} w wersji {1}. Aby rozwi\u0105za\u0107 problem, zainstaluj wersj\u0119 {1} lub wy\u017Csz\u0105. +PluginWrapper.failed_to_load_dependency=Nie uda\u0142o si\u0119 za\u0142adowa\u0107 wtyczki {0} o wersji {1}. Rozwi\u0105\u017C ten problem w pierwszej kolejno\u015Bci. \ No newline at end of file diff --git a/core/src/main/resources/hudson/PluginManager/index_pl.properties b/core/src/main/resources/hudson/PluginManager/index_pl.properties index 28218ebbaf..88b2e384cc 100644 --- a/core/src/main/resources/hudson/PluginManager/index_pl.properties +++ b/core/src/main/resources/hudson/PluginManager/index_pl.properties @@ -1,6 +1,6 @@ # The MIT License # -# Copyright (c) 2004-2010, Sun Microsystems, Inc. +# Copyright (c) 2004-2019, Sun Microsystems, Inc., Damian Szczepanik # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -21,7 +21,8 @@ # THE SOFTWARE. All=Wszystkie -None=\u017Badnej +None=\u017Badne Select=Zaznacz UpdatePageDescription=Ta strona zawiera aktualizacje wtyczek, kt\u00F3rych aktualnie u\u017Cywasz UpdatePageLegend=Nieaktywne wiersze oznaczaj\u0105 ju\u017C wykonane aktualizacje, czekaj\u0105ce na restart. Zacieniowane ale aktywne wiersze s\u0105 w trakcie aktualizacji lub zako\u0144czy\u0142y si\u0119 b\u0142\u0119dnie. +Compatible=Kompatybilne diff --git a/core/src/main/resources/hudson/PluginManager/table_pl.properties b/core/src/main/resources/hudson/PluginManager/table_pl.properties index 475890ea44..17d4e19055 100644 --- a/core/src/main/resources/hudson/PluginManager/table_pl.properties +++ b/core/src/main/resources/hudson/PluginManager/table_pl.properties @@ -1,6 +1,6 @@ # The MIT License # -# Copyright (c) 2004-2017, Sun Microsystems, Inc., Damian Szczepanik +# Copyright (c) 2004-2019, Sun Microsystems, Inc., Damian Szczepanik # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -32,4 +32,6 @@ Name=Nazwa No\ updates=Brak dost\u0119pnych aktualizacji Version=Wersja coreWarning=UWAGA: Ten dodatek jest przygotowany dla Jenkinsa w wersji {0} lub nowszej. Mo\u017Ce nie dzia\u0142a\u0107 poprawnie z Twoj\u0105 wersj\u0105 Jenkinsa. -Update\ Center=Centrum aktualizacji \ No newline at end of file +Update\ Center=Centrum aktualizacji +securityWarning= \ +Ostrze\u017Cenie: Ta wtyczka mo\u017Ce nie by\u0107 bezpieczna. Sprawd\u017A nast\u0119puj\u0105ce ostrze\u017Cenia dotycz\u0105ce bezpiecze\u0144stwa: diff --git a/core/src/main/resources/hudson/PluginWrapper/PluginWrapperAdministrativeMonitor/message_pl.properties b/core/src/main/resources/hudson/PluginWrapper/PluginWrapperAdministrativeMonitor/message_pl.properties index 3d164add4d..fb0aba2425 100644 --- a/core/src/main/resources/hudson/PluginWrapper/PluginWrapperAdministrativeMonitor/message_pl.properties +++ b/core/src/main/resources/hudson/PluginWrapper/PluginWrapperAdministrativeMonitor/message_pl.properties @@ -1,6 +1,6 @@ # The MIT License # -# Copyright (c) 2016, Damian Szczepanik +# Copyright (c) 2016-2019, Damian Szczepanik # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -21,3 +21,5 @@ # THE SOFTWARE. Correct=Napraw Dependency\ errors=Wyst\u0105pi\u0142y b\u0142\u0119dy podczas \u0142adowania niekt\u00F3rych wtyczek +blurbOriginal=Niekt\u00F3re wtyczki nie mog\u0142y zosta\u0107 za\u0142adowane z powodu niewystarczaj\u0105cych zale\u017Cno\u015Bci. Rozwi\u0105\u017C te problemy i uruchom ponownie Jenkinsa, aby korzysta\u0107 z funkcjonalno\u015Bci oferowanych przez te wtyczki. +blurbDerived=Nast\u0119puj\u0105ce wtyczki nie mog\u0142y zosta\u0107 za\u0142adowane z powodu problem\u00F3w wymienionych wy\u017Cej. Rozwi\u0105\u017C je, a wtyczki zostan\u0105 za\u0142adowane ponownie. diff --git a/core/src/main/resources/hudson/diagnosis/Messages_pl.properties b/core/src/main/resources/hudson/diagnosis/Messages_pl.properties index d06325b6ae..ef9b80b04f 100644 --- a/core/src/main/resources/hudson/diagnosis/Messages_pl.properties +++ b/core/src/main/resources/hudson/diagnosis/Messages_pl.properties @@ -1,6 +1,6 @@ # The MIT License # -# Copyright (c) 2016 Damian Szczepanik +# Copyright (c) 2016-2019 Damian Szczepanik # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -21,3 +21,5 @@ # THE SOFTWARE. OldDataMonitor.DisplayName=Zarz\u0105dzanie starymi danymi OldDataMonitor.Description=Usuwanie danych po nieu\u017Cywanych lub starszych wersjach wtyczek. +HudsonHomeDiskUsageMonitor.DisplayName=Monitoring zu\u017Cycia dysku +TooManyJobsButNoView.DisplayName=Zbyt wiele projekt\u00F3w jest nie przypisanych do widok\u00F3w diff --git a/core/src/main/resources/hudson/model/AbstractItem/confirm-rename_pl.properties b/core/src/main/resources/hudson/model/AbstractItem/confirm-rename_pl.properties new file mode 100644 index 0000000000..d0cc0858d1 --- /dev/null +++ b/core/src/main/resources/hudson/model/AbstractItem/confirm-rename_pl.properties @@ -0,0 +1,25 @@ +# The MIT License +# +# Copyright (c) 2019, Damian Szczepanik +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +Rename=Zmie\u0144 nazw\u0119 +DescribeRename=Zmie\u0144 nazw\u0119 {0} +NewName=Nowa nazwa diff --git a/core/src/main/resources/hudson/model/Messages_pl.properties b/core/src/main/resources/hudson/model/Messages_pl.properties index 988d71ab09..dc0d3a26c5 100644 --- a/core/src/main/resources/hudson/model/Messages_pl.properties +++ b/core/src/main/resources/hudson/model/Messages_pl.properties @@ -80,3 +80,5 @@ Hudson.ViewName=Wszystkie RunParameterDefinition.DisplayName=Parametr uruchomienia# SCM check out aborted Hudson.JobAlreadyExists=Projekt o nazwie \u2018{0}\u2019 ju\u017C istnieje AbstractProject.CustomWorkspaceEmpty=Nie wprowadzono dedykowanego katalogu projektu. +AbstractItem.NewNameUnchanged=Nowa nazwa jest taka sama, jak aktualna. +Hudson.NoName=Nazwa nie zosta\u0142a podana diff --git a/core/src/main/resources/hudson/model/UpdateCenter/CompleteBatchJob/Pending/status_pl.properties b/core/src/main/resources/hudson/model/UpdateCenter/CompleteBatchJob/Pending/status_pl.properties new file mode 100644 index 0000000000..736b5d2172 --- /dev/null +++ b/core/src/main/resources/hudson/model/UpdateCenter/CompleteBatchJob/Pending/status_pl.properties @@ -0,0 +1,23 @@ +# The MIT License +# +# Copyright (c) 2019, Damian Szczepanik +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +Pending=W trakcie diff --git a/core/src/main/resources/hudson/model/UpdateCenter/CompleteBatchJob/Success/status_pl.properties b/core/src/main/resources/hudson/model/UpdateCenter/CompleteBatchJob/Success/status_pl.properties new file mode 100644 index 0000000000..9d55cf00dc --- /dev/null +++ b/core/src/main/resources/hudson/model/UpdateCenter/CompleteBatchJob/Success/status_pl.properties @@ -0,0 +1,23 @@ +# The MIT License +# +# Copyright (c) 2019, Damian Szczepanik +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +Success=Sukces diff --git a/core/src/main/resources/hudson/model/UpdateCenter/CompleteBatchJob/row_pl.properties b/core/src/main/resources/hudson/model/UpdateCenter/CompleteBatchJob/row_pl.properties new file mode 100644 index 0000000000..ea99c2da3a --- /dev/null +++ b/core/src/main/resources/hudson/model/UpdateCenter/CompleteBatchJob/row_pl.properties @@ -0,0 +1,23 @@ +# The MIT License +# +# Copyright (c) 2019, Damian Szczepanik +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +Loading\ plugin\ extensions=\u0141adowanie wtyczki diff --git a/core/src/main/resources/hudson/model/View/AsynchPeople/index_pl.properties b/core/src/main/resources/hudson/model/View/AsynchPeople/index_pl.properties index 253a5acf3e..72113ae5fb 100644 --- a/core/src/main/resources/hudson/model/View/AsynchPeople/index_pl.properties +++ b/core/src/main/resources/hudson/model/View/AsynchPeople/index_pl.properties @@ -1,6 +1,6 @@ # The MIT License # -# Copyright (c) 2004-2016, Kohsuke Kawaguchi, Sun Microsystems, Inc., and a number of other of contributors +# Copyright (c) 2004-2019, Kohsuke Kawaguchi, Sun Microsystems, Inc., and a number of other of contributors # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -23,7 +23,6 @@ Name=Nazwa On=Na People=U\u017Cytkownicy -User\ Id=Identyfikator u\u017Cytkownika +User\ ID=Identyfikator u\u017Cytkownika Last\ Commit\ Activity=Ostatnia zmiana blurb=Prezentuje wszystkich uwierzytelnionych u\u017Cytkownik\u00F3w w\u0142\u0105cznie z identyfikatorem oraz osoby wymienione w opisach zarejestrowanych zmian. - diff --git a/core/src/main/resources/jenkins/model/RenameAction/action_pl.properties b/core/src/main/resources/jenkins/model/RenameAction/action_pl.properties new file mode 100644 index 0000000000..50641f4479 --- /dev/null +++ b/core/src/main/resources/jenkins/model/RenameAction/action_pl.properties @@ -0,0 +1,23 @@ +# The MIT License +# +# Copyright (c) 2019 Damian Szczepanik +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +Rename=Zmie\u0144 nazw\u0119 diff --git a/core/src/main/resources/jenkins/security/ApiTokenProperty/config_pl.properties b/core/src/main/resources/jenkins/security/ApiTokenProperty/config_pl.properties new file mode 100644 index 0000000000..14b2752cda --- /dev/null +++ b/core/src/main/resources/jenkins/security/ApiTokenProperty/config_pl.properties @@ -0,0 +1,25 @@ +# The MIT License +# +# Copyright (c) 2019 Damian Szczepanik +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +NoTokenYet=Nie ma zarejestrowanych token\u00F3w dla tego u\u017Cytkownika +CurrentTokens=Aktualny token +AddNewToken=Dodaj nowy token diff --git a/core/src/main/resources/jenkins/security/seed/UserSeedProperty/config_pl.properties b/core/src/main/resources/jenkins/security/seed/UserSeedProperty/config_pl.properties new file mode 100644 index 0000000000..4374a9b0d8 --- /dev/null +++ b/core/src/main/resources/jenkins/security/seed/UserSeedProperty/config_pl.properties @@ -0,0 +1,27 @@ +# The MIT License +# +# Copyright (c) 2019, Damian Szczepanik +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +resetSeed.button=Zako\u0144cz wszystkie sesje +resetSeed.result=Operacja zako\u0144czona pomy\u015Blnie. Wszystkie sesje zako\u0144czone. +resetSeed.confirmation=Wszystkie aktywne sesje zostan\u0105 zako\u0144czone. \n\ +B\u0119dzie wymagane ponowne zalogowanie si\u0119. \n\ +Czy kontynuowa\u0107? diff --git a/core/src/main/resources/lib/form/breadcrumb-config-outline_pl.properties b/core/src/main/resources/lib/form/breadcrumb-config-outline_pl.properties index f28de3a558..80087ba039 100644 --- a/core/src/main/resources/lib/form/breadcrumb-config-outline_pl.properties +++ b/core/src/main/resources/lib/form/breadcrumb-config-outline_pl.properties @@ -1,3 +1,3 @@ # This file is under the MIT License by authors -configuration=konfiguracja +configuration=Konfiguracja -- GitLab From f8f095e466fe6782b14712bb792acfcf1bf04533 Mon Sep 17 00:00:00 2001 From: Matt Sicker Date: Fri, 16 Aug 2019 02:55:34 -0500 Subject: [PATCH 462/476] Replace Charset.forName with StandardCharsets (#4132) This refactors usage of Charset::forName on common character sets that now have an equivalent value in StandardCharsets. --- core/src/main/java/hudson/TcpSlaveAgentListener.java | 3 +-- .../main/java/hudson/security/csrf/DefaultCrumbIssuer.java | 6 +++--- core/src/main/java/hudson/util/HttpResponses.java | 6 ++---- core/src/main/java/hudson/util/WriterOutputStream.java | 3 ++- core/src/main/java/hudson/util/XStream2.java | 4 ++-- core/src/test/java/hudson/util/AtomicFileWriterTest.java | 4 ++-- test/src/test/java/hudson/model/UsageStatisticsTest.java | 3 +-- 7 files changed, 13 insertions(+), 16 deletions(-) diff --git a/core/src/main/java/hudson/TcpSlaveAgentListener.java b/core/src/main/java/hudson/TcpSlaveAgentListener.java index 307d321e69..f7918d6bd8 100644 --- a/core/src/main/java/hudson/TcpSlaveAgentListener.java +++ b/core/src/main/java/hudson/TcpSlaveAgentListener.java @@ -27,7 +27,6 @@ import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.io.ByteArrayInputStream; import java.io.SequenceInputStream; import java.io.Writer; -import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.security.interfaces.RSAPublicKey; import javax.annotation.Nullable; @@ -140,7 +139,7 @@ public final class TcpSlaveAgentListener extends Thread { @Nullable public String getIdentityPublicKey() { RSAPublicKey key = InstanceIdentityProvider.RSA.getPublicKey(); - return key == null ? null : new String(Base64.encodeBase64(key.getEncoded()), Charset.forName("UTF-8")); + return key == null ? null : new String(Base64.encodeBase64(key.getEncoded()), StandardCharsets.UTF_8); } /** diff --git a/core/src/main/java/hudson/security/csrf/DefaultCrumbIssuer.java b/core/src/main/java/hudson/security/csrf/DefaultCrumbIssuer.java index e355360c93..7999f864de 100644 --- a/core/src/main/java/hudson/security/csrf/DefaultCrumbIssuer.java +++ b/core/src/main/java/hudson/security/csrf/DefaultCrumbIssuer.java @@ -5,7 +5,7 @@ */ package hudson.security.csrf; -import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.logging.Level; @@ -118,8 +118,8 @@ public class DefaultCrumbIssuer extends CrumbIssuer { String newCrumb = issueCrumb(request, salt); if ((newCrumb != null) && (crumb != null)) { // String.equals() is not constant-time, but this is - return MessageDigest.isEqual(newCrumb.getBytes(Charset.forName("US-ASCII")), - crumb.getBytes(Charset.forName("US-ASCII"))); + return MessageDigest.isEqual(newCrumb.getBytes(StandardCharsets.US_ASCII), + crumb.getBytes(StandardCharsets.US_ASCII)); } } return false; diff --git a/core/src/main/java/hudson/util/HttpResponses.java b/core/src/main/java/hudson/util/HttpResponses.java index 206db06530..975a094144 100644 --- a/core/src/main/java/hudson/util/HttpResponses.java +++ b/core/src/main/java/hudson/util/HttpResponses.java @@ -33,7 +33,7 @@ import javax.annotation.Nonnull; import javax.servlet.ServletException; import java.io.File; import java.io.IOException; -import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import java.util.Map; /** @@ -142,8 +142,6 @@ public class HttpResponses extends org.kohsuke.stapler.HttpResponses { */ static class JSONObjectResponse implements HttpResponse { - private static final Charset UTF8 = Charset.forName("UTF-8"); - private final JSONObject jsonObject; /** @@ -210,7 +208,7 @@ public class HttpResponses extends org.kohsuke.stapler.HttpResponses { */ @Override public void generateResponse(StaplerRequest req, StaplerResponse rsp, Object node) throws IOException, ServletException { - byte[] bytes = jsonObject.toString().getBytes(UTF8); + byte[] bytes = jsonObject.toString().getBytes(StandardCharsets.UTF_8); rsp.setContentType("application/json; charset=UTF-8"); rsp.setContentLength(bytes.length); rsp.getOutputStream().write(bytes); diff --git a/core/src/main/java/hudson/util/WriterOutputStream.java b/core/src/main/java/hudson/util/WriterOutputStream.java index d3e25b4c04..387d4088fe 100644 --- a/core/src/main/java/hudson/util/WriterOutputStream.java +++ b/core/src/main/java/hudson/util/WriterOutputStream.java @@ -30,6 +30,7 @@ import java.nio.charset.CharsetDecoder; import java.nio.charset.CodingErrorAction; import java.nio.charset.CoderResult; import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import java.nio.charset.UnsupportedCharsetException; import java.nio.*; @@ -127,7 +128,7 @@ public class WriterOutputStream extends OutputStream { String encoding = System.getProperty("file.encoding"); return Charset.forName(encoding); } catch (UnsupportedCharsetException e) { - return Charset.forName("UTF-8"); + return StandardCharsets.UTF_8; } } } diff --git a/core/src/main/java/hudson/util/XStream2.java b/core/src/main/java/hudson/util/XStream2.java index 5a37dbed71..40d9552c71 100644 --- a/core/src/main/java/hudson/util/XStream2.java +++ b/core/src/main/java/hudson/util/XStream2.java @@ -70,7 +70,7 @@ import java.io.Writer; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; -import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import java.util.HashSet; import java.util.Map; import java.util.Set; @@ -308,7 +308,7 @@ public class XStream2 extends XStream { * @since 1.504 */ public void toXMLUTF8(Object obj, OutputStream out) throws IOException { - Writer w = new OutputStreamWriter(out, Charset.forName("UTF-8")); + Writer w = new OutputStreamWriter(out, StandardCharsets.UTF_8); w.write("\n"); toXML(obj, w); } diff --git a/core/src/test/java/hudson/util/AtomicFileWriterTest.java b/core/src/test/java/hudson/util/AtomicFileWriterTest.java index 5280c35646..f331a8f5d4 100644 --- a/core/src/test/java/hudson/util/AtomicFileWriterTest.java +++ b/core/src/test/java/hudson/util/AtomicFileWriterTest.java @@ -83,7 +83,7 @@ public class AtomicFileWriterTest { final Path childFileInSymlinkToDir = Paths.get(zeSymlink.toString(), "childFileInSymlinkToDir"); - new AtomicFileWriter(childFileInSymlinkToDir, Charset.forName("UTF-8")); + new AtomicFileWriter(childFileInSymlinkToDir, StandardCharsets.UTF_8); } @Test @@ -154,7 +154,7 @@ public class AtomicFileWriterTest { assertFalse(parentExistsAndIsAFile.exists()); try { - new AtomicFileWriter(parentExistsAndIsAFile.toPath(), Charset.forName("UTF-8")); + new AtomicFileWriter(parentExistsAndIsAFile.toPath(), StandardCharsets.UTF_8); fail("Expected a failure"); } catch (IOException e) { assertThat(e.getMessage(), diff --git a/test/src/test/java/hudson/model/UsageStatisticsTest.java b/test/src/test/java/hudson/model/UsageStatisticsTest.java index 69af370730..272698240a 100644 --- a/test/src/test/java/hudson/model/UsageStatisticsTest.java +++ b/test/src/test/java/hudson/model/UsageStatisticsTest.java @@ -42,7 +42,6 @@ import org.jvnet.hudson.test.JenkinsRule; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStreamReader; -import java.nio.charset.Charset; import java.security.KeyFactory; import java.security.interfaces.RSAPrivateKey; import java.security.spec.PKCS8EncodedKeySpec; @@ -172,7 +171,7 @@ public class UsageStatisticsTest { private void compareWithFile(String fileName, Object object) throws IOException { Class clazz = this.getClass(); - String fileContent = Resources.toString(clazz.getResource(clazz.getSimpleName() + "/" + fileName), Charset.forName("UTF-8")); + String fileContent = Resources.toString(clazz.getResource(clazz.getSimpleName() + "/" + fileName), StandardCharsets.UTF_8); fileContent = fileContent.replace("JVMVENDOR", System.getProperty("java.vendor")); fileContent = fileContent.replace("JVMNAME", System.getProperty("java.vm.name")); fileContent = fileContent.replace("JVMVERSION", System.getProperty("java.version")); -- GitLab From 9d16af6b2d55ccf8bf7b90ef56574dc9ba8c804e Mon Sep 17 00:00:00 2001 From: Raihaan Shouhell Date: Fri, 16 Aug 2019 16:56:18 +0900 Subject: [PATCH 463/476] Move file to right folder (#4116) --- core/src/main/java/{jenkins/util => hudson/os}/WindowsUtil.java | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename core/src/main/java/{jenkins/util => hudson/os}/WindowsUtil.java (100%) diff --git a/core/src/main/java/jenkins/util/WindowsUtil.java b/core/src/main/java/hudson/os/WindowsUtil.java similarity index 100% rename from core/src/main/java/jenkins/util/WindowsUtil.java rename to core/src/main/java/hudson/os/WindowsUtil.java -- GitLab From 8b70c48a5f449ca4966c69aa180bed918379980b Mon Sep 17 00:00:00 2001 From: Wadeck Follonier Date: Fri, 16 Aug 2019 09:56:42 +0200 Subject: [PATCH 464/476] [JENKINS-58736] Correction of /assets throwing 500 (#4136) --- .../main/java/jenkins/model/AssetManager.java | 10 +++- .../java/jenkins/model/AssetManagerTest.java | 58 +++++++++++++++++++ 2 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 test/src/test/java/jenkins/model/AssetManagerTest.java diff --git a/core/src/main/java/jenkins/model/AssetManager.java b/core/src/main/java/jenkins/model/AssetManager.java index ed148aac50..4a7513c8b2 100644 --- a/core/src/main/java/jenkins/model/AssetManager.java +++ b/core/src/main/java/jenkins/model/AssetManager.java @@ -3,10 +3,14 @@ package jenkins.model; import hudson.Extension; import hudson.model.UnprotectedRootAction; import java.util.concurrent.TimeUnit; + +import org.apache.commons.lang.StringUtils; import org.jenkinsci.Symbol; import org.kohsuke.stapler.StaplerRequest; import org.kohsuke.stapler.StaplerResponse; +import javax.annotation.CheckForNull; +import javax.annotation.Nonnull; import javax.servlet.ServletException; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @@ -74,7 +78,11 @@ public class AssetManager implements UnprotectedRootAction { * look for child classloader first. But to support plugins that get split, if the child classloader * doesn't find it, fall back to the parent classloader. */ - private URL findResource(String path) throws IOException { + private @CheckForNull URL findResource(@Nonnull String path) throws IOException { + if (StringUtils.isBlank(path)) { + return null; + } + try { if (path.contains("..")) // crude avoidance of directory traversal attack throw new IllegalArgumentException(path); diff --git a/test/src/test/java/jenkins/model/AssetManagerTest.java b/test/src/test/java/jenkins/model/AssetManagerTest.java new file mode 100644 index 0000000000..c9ad69752b --- /dev/null +++ b/test/src/test/java/jenkins/model/AssetManagerTest.java @@ -0,0 +1,58 @@ +/* + * The MIT License + * + * Copyright (c) 2019 CloudBees, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package jenkins.model; + +import org.junit.Rule; +import org.junit.Test; +import org.jvnet.hudson.test.Issue; +import org.jvnet.hudson.test.JenkinsRule; + +import java.net.HttpURLConnection; +import java.net.URL; + +import static org.junit.Assert.assertEquals; + +public class AssetManagerTest { + + @Rule + public JenkinsRule j = new JenkinsRule(); + + @Test + @Issue("JENKINS-58736") + public void emptyAssetDoesNotThrowError() throws Exception { + URL url = new URL(j.getURL() + "assets"); + HttpURLConnection httpCon = (HttpURLConnection) url.openConnection(); + assertEquals(HttpURLConnection.HTTP_NOT_FOUND, httpCon.getResponseCode()); + } + + @Test + @Issue("JENKINS-9598") + public void jqueryLoad() throws Exception { + // webclient does not work because it tries to parse the jquery2.js and there is a missing comma + URL url = new URL(j.getURL() + "assets/jquery-detached/jsmodules/jquery2.js"); + HttpURLConnection httpCon = (HttpURLConnection) url.openConnection(); + assertEquals(HttpURLConnection.HTTP_OK, httpCon.getResponseCode()); + } +} -- GitLab From 3d8115624ae6137a57547ab39ebc4ef97d87ea43 Mon Sep 17 00:00:00 2001 From: Matt Sicker Date: Fri, 16 Aug 2019 03:00:24 -0500 Subject: [PATCH 465/476] Clean up formatting (#4143) Signed-off-by: Matt Sicker --- core/src/main/java/hudson/model/User.java | 66 ++++++++--------------- 1 file changed, 22 insertions(+), 44 deletions(-) diff --git a/core/src/main/java/hudson/model/User.java b/core/src/main/java/hudson/model/User.java index 9c09bb94d0..6c6658ed53 100644 --- a/core/src/main/java/hudson/model/User.java +++ b/core/src/main/java/hudson/model/User.java @@ -262,13 +262,11 @@ public class User extends AbstractModelObject implements AccessControlled, Descr return id; } - public @Nonnull - String getUrl() { + public @Nonnull String getUrl() { return "user/" + Util.rawEncode(idStrategy().keyFor(id)); } - public @Nonnull - String getSearchUrl() { + public @Nonnull String getSearchUrl() { return "/user/" + Util.rawEncode(idStrategy().keyFor(id)); } @@ -276,8 +274,7 @@ public class User extends AbstractModelObject implements AccessControlled, Descr * The URL of the user page. */ @Exported(visibility = 999) - public @Nonnull - String getAbsoluteUrl() { + public @Nonnull String getAbsoluteUrl() { return Jenkins.get().getRootUrl() + getUrl(); } @@ -286,8 +283,7 @@ public class User extends AbstractModelObject implements AccessControlled, Descr * This is configurable by the user. */ @Exported(visibility = 999) - public @Nonnull - String getFullName() { + public @Nonnull String getFullName() { return fullName; } @@ -301,8 +297,7 @@ public class User extends AbstractModelObject implements AccessControlled, Descr } @Exported - public @CheckForNull - String getDescription() { + public @CheckForNull String getDescription() { return description; } @@ -370,8 +365,7 @@ public class User extends AbstractModelObject implements AccessControlled, Descr * @throws UsernameNotFoundException If this user is not a valid user in the backend {@link SecurityRealm}. * @since 1.419 */ - public @Nonnull - Authentication impersonate() throws UsernameNotFoundException { + public @Nonnull Authentication impersonate() throws UsernameNotFoundException { return this.impersonate(this.getUserDetailsForImpersonation()); } @@ -384,8 +378,7 @@ public class User extends AbstractModelObject implements AccessControlled, Descr * @return userDetails for the user, in case he's not found but seems legitimate, we provide a userDetails with minimum access * @throws UsernameNotFoundException If this user is not a valid user in the backend {@link SecurityRealm}. */ - public @Nonnull - UserDetails getUserDetailsForImpersonation() throws UsernameNotFoundException { + public @Nonnull UserDetails getUserDetailsForImpersonation() throws UsernameNotFoundException { ImpersonatingUserDetailsService userDetailsService = new ImpersonatingUserDetailsService( Jenkins.get().getSecurityRealm().getSecurityComponents().userDetails ); @@ -431,8 +424,7 @@ public class User extends AbstractModelObject implements AccessControlled, Descr * @see #getUserDetailsForImpersonation() */ @Restricted(NoExternalUse.class) - public @Nonnull - Authentication impersonate(@Nonnull UserDetails userDetails) { + public @Nonnull Authentication impersonate(@Nonnull UserDetails userDetails) { return new UsernamePasswordAuthenticationToken(userDetails.getUsername(), "", userDetails.getAuthorities()); } @@ -470,8 +462,7 @@ public class User extends AbstractModelObject implements AccessControlled, Descr * @deprecated use {@link User#get(String, boolean, java.util.Map)} */ @Deprecated - public static @Nullable - User get(String idOrFullName, boolean create) { + public static @Nullable User get(String idOrFullName, boolean create) { return get(idOrFullName, create, Collections.emptyMap()); } @@ -491,8 +482,7 @@ public class User extends AbstractModelObject implements AccessControlled, Descr * @return An existing or created user. May be {@code null} if a user does not exist and * {@code create} is false. */ - public static @Nullable - User get(String idOrFullName, boolean create, @Nonnull Map context) { + public static @Nullable User get(String idOrFullName, boolean create, @Nonnull Map context) { if (idOrFullName == null) { return null; } @@ -512,8 +502,7 @@ public class User extends AbstractModelObject implements AccessControlled, Descr * @return An existing or created user. May be {@code null} if a user does not exist and * {@code create} is false. */ - private static @Nullable - User getOrCreateById(@Nonnull String id, @Nonnull String fullName, boolean create) { + private static @Nullable User getOrCreateById(@Nonnull String id, @Nonnull String fullName, boolean create) { User u = AllUsers.get(id); if (u == null && (create || UserIdMapper.getInstance().isMapped(id))) { u = new User(id, fullName); @@ -546,8 +535,7 @@ public class User extends AbstractModelObject implements AccessControlled, Descr * Otherwise use {@link #getOrCreateByIdOrFullName(String)} or {@link #get(String, boolean, Map)}. */ @Deprecated - public static @Nonnull - User get(String idOrFullName) { + public static @Nonnull User get(String idOrFullName) { return getOrCreateByIdOrFullName(idOrFullName); } @@ -577,8 +565,7 @@ public class User extends AbstractModelObject implements AccessControlled, Descr * * @since 1.172 */ - public static @CheckForNull - User current() { + public static @CheckForNull User current() { return get(Jenkins.getAuthentication()); } @@ -590,8 +577,7 @@ public class User extends AbstractModelObject implements AccessControlled, Descr * @return a {@link User} object for the supplied {@link Authentication} or {@code null} * @since 1.609 */ - public static @CheckForNull - User get(@CheckForNull Authentication a) { + public static @CheckForNull User get(@CheckForNull Authentication a) { if (a == null || a instanceof AnonymousAuthenticationToken) return null; @@ -610,16 +596,14 @@ public class User extends AbstractModelObject implements AccessControlled, Descr * and the user does not exist. * @since 1.651.2 / 2.3 */ - public static @Nullable - User getById(String id, boolean create) { + public static @Nullable User getById(String id, boolean create) { return getOrCreateById(id, id, create); } /** * Gets all the users. */ - public static @Nonnull - Collection getAll() { + public static @Nonnull Collection getAll() { final IdStrategy strategy = idStrategy(); ArrayList users = new ArrayList<>(AllUsers.values()); users.sort((o1, o2) -> strategy.compare(o1.getId(), o2.getId())); @@ -657,8 +641,7 @@ public class User extends AbstractModelObject implements AccessControlled, Descr /** * Returns the user name. */ - public @Nonnull - String getDisplayName() { + public @Nonnull String getDisplayName() { return getFullName(); } @@ -686,8 +669,7 @@ public class User extends AbstractModelObject implements AccessControlled, Descr */ @SuppressWarnings("unchecked") @WithBridgeMethods(List.class) - public @Nonnull - RunList getBuilds() { + public @Nonnull RunList getBuilds() { return RunList.fromJobs((Iterable) Jenkins.get(). allItems(Job.class)).filter((Predicate>) r -> r instanceof AbstractBuild && relatedTo((AbstractBuild) r)); } @@ -697,8 +679,7 @@ public class User extends AbstractModelObject implements AccessControlled, Descr * * @since 1.191 */ - public @Nonnull - Set> getProjects() { + public @Nonnull Set> getProjects() { Set> r = new HashSet<>(); for (AbstractProject p : Jenkins.get().allItems(AbstractProject.class)) if (p.hasParticipant(this)) @@ -706,8 +687,7 @@ public class User extends AbstractModelObject implements AccessControlled, Descr return r; } - public @Override - String toString() { + public @Override String toString() { return fullName; } @@ -945,8 +925,7 @@ public class User extends AbstractModelObject implements AccessControlled, Descr * @return a possibly empty list * @since 1.498 */ - public @Nonnull - List getAuthorities() { + public @Nonnull List getAuthorities() { if (!Jenkins.get().hasPermission(Jenkins.ADMINISTER)) { return Collections.emptyList(); } @@ -1136,8 +1115,7 @@ public class User extends AbstractModelObject implements AccessControlled, Descr * extract user ID from idOrFullName with help from contextual infos. * can return null if no user ID matched the input */ - public abstract @CheckForNull - String resolveCanonicalId(String idOrFullName, Map context); + public abstract @CheckForNull String resolveCanonicalId(String idOrFullName, Map context); /** * Gets priority of the resolver. -- GitLab From 0c2d194f0d933fdba8f5a9a1fda8adc8826981c0 Mon Sep 17 00:00:00 2001 From: Jesse Glick Date: Fri, 16 Aug 2019 06:02:56 -0400 Subject: [PATCH 466/476] doQuietDown() cannot actually throw IOException. (#4151) --- core/src/main/java/jenkins/model/Jenkins.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/jenkins/model/Jenkins.java b/core/src/main/java/jenkins/model/Jenkins.java index 458440fd96..e7caf609fc 100644 --- a/core/src/main/java/jenkins/model/Jenkins.java +++ b/core/src/main/java/jenkins/model/Jenkins.java @@ -3836,10 +3836,10 @@ public class Jenkins extends AbstractCIBase implements DirectlyModifiableTopLeve } @RequirePOST - public synchronized HttpRedirect doQuietDown() throws IOException { + public synchronized HttpRedirect doQuietDown() { try { return doQuietDown(false,0); - } catch (InterruptedException e) { + } catch (IOException | InterruptedException e) { throw new AssertionError(); // impossible } } -- GitLab From 35e507ee385e866a45b9418f734fc594d9eea1f0 Mon Sep 17 00:00:00 2001 From: Aakash R Kanvinde Date: Fri, 16 Aug 2019 04:36:26 -0700 Subject: [PATCH 467/476] [JENKINS-58157] Fixing 'delete build' button too long (#4121) * [JENKINS-58157] Fixing 'delete build' button too long * Update breadcrumbs.css --- core/src/main/resources/lib/layout/breadcrumbs.css | 8 ++++++++ war/src/main/webapp/css/layout-common.css | 3 +++ war/src/main/webapp/css/responsive-grid.css | 6 ++++++ war/src/main/webapp/css/style.css | 4 ++++ 4 files changed, 21 insertions(+) diff --git a/core/src/main/resources/lib/layout/breadcrumbs.css b/core/src/main/resources/lib/layout/breadcrumbs.css index 5dcc7624eb..26c4683a8a 100644 --- a/core/src/main/resources/lib/layout/breadcrumbs.css +++ b/core/src/main/resources/lib/layout/breadcrumbs.css @@ -24,6 +24,7 @@ margin: 0; height: 2em; border-bottom: 1px solid #d3d7cf; + display:block; } #breadcrumbs LI { @@ -31,6 +32,7 @@ line-height:2em; height: 2em; color:#555753; + display:inline-block; } #breadcrumbs LI A { @@ -46,6 +48,12 @@ #breadcrumbs LI A:link, #breadcrumbs LI A:visited { text-decoration:none; color:#555753; + display: block; + max-width: 1330px; + float: left; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; } #breadcrumbs LI A:hover, #crumbs LI A:focus { diff --git a/war/src/main/webapp/css/layout-common.css b/war/src/main/webapp/css/layout-common.css index 7bd3415c3b..2f6d41c2a6 100644 --- a/war/src/main/webapp/css/layout-common.css +++ b/war/src/main/webapp/css/layout-common.css @@ -93,6 +93,7 @@ body { body.two-column #main-panel { margin-left: 320px; + display:block; } body.full-screen { @@ -112,6 +113,7 @@ body.full-screen #main-panel { body.two-column #main-panel { margin-left: 0; + display:block; } } @@ -122,6 +124,7 @@ body.full-screen #main-panel { body.two-column #main-panel { margin-left: 360px; + display:block; } } diff --git a/war/src/main/webapp/css/responsive-grid.css b/war/src/main/webapp/css/responsive-grid.css index f4a890db49..1e1309ea49 100644 --- a/war/src/main/webapp/css/responsive-grid.css +++ b/war/src/main/webapp/css/responsive-grid.css @@ -13,6 +13,12 @@ -moz-box-sizing: border-box; box-sizing: border-box; } +h1.build-caption.page-headline { + max-width: 1200px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} *:before, *:after { -webkit-box-sizing: border-box; diff --git a/war/src/main/webapp/css/style.css b/war/src/main/webapp/css/style.css index 2040688c26..c07251a62d 100644 --- a/war/src/main/webapp/css/style.css +++ b/war/src/main/webapp/css/style.css @@ -26,12 +26,16 @@ #tasks { margin-bottom: 20px; + display: inline-block; } #tasks .task { margin-bottom: 4px; font-size: 14px; + max-width: 325px; + overflow: hidden; white-space: nowrap; + text-overflow: ellipsis; } /* buildQueue */ -- GitLab From eadd4b72e1437acd6d3f262441e436d81db2092b Mon Sep 17 00:00:00 2001 From: Matt Sicker Date: Fri, 16 Aug 2019 06:37:01 -0500 Subject: [PATCH 468/476] [JENKINS-58734] Use SHA-256 for crumbs (#4134) * [JENKINS-58734] Use SHA-256 for crumbs Signed-off-by: Matt Sicker * Use SHA-256 more consistently Signed-off-by: Matt Sicker --- .../security/csrf/DefaultCrumbIssuer.java | 23 ++++++++----------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/core/src/main/java/hudson/security/csrf/DefaultCrumbIssuer.java b/core/src/main/java/hudson/security/csrf/DefaultCrumbIssuer.java index 7999f864de..f3ee220249 100644 --- a/core/src/main/java/hudson/security/csrf/DefaultCrumbIssuer.java +++ b/core/src/main/java/hudson/security/csrf/DefaultCrumbIssuer.java @@ -49,14 +49,8 @@ public class DefaultCrumbIssuer extends CrumbIssuer { @DataBoundConstructor public DefaultCrumbIssuer(boolean excludeClientIPFromCrumb) { - try { - this.md = MessageDigest.getInstance("MD5"); - this.excludeClientIPFromCrumb = excludeClientIPFromCrumb; - } catch (NoSuchAlgorithmException e) { - this.md = null; - this.excludeClientIPFromCrumb = false; - LOGGER.log(Level.SEVERE, "Can't find MD5", e); - } + this.excludeClientIPFromCrumb = excludeClientIPFromCrumb; + initializeMessageDigest(); } public boolean isExcludeClientIPFromCrumb() { @@ -64,14 +58,17 @@ public class DefaultCrumbIssuer extends CrumbIssuer { } private Object readResolve() { + initializeMessageDigest(); + return this; + } + + private void initializeMessageDigest() { try { - this.md = MessageDigest.getInstance("MD5"); + md = MessageDigest.getInstance("SHA-256"); } catch (NoSuchAlgorithmException e) { - this.md = null; - LOGGER.log(Level.SEVERE, "Can't find MD5", e); + md = null; + LOGGER.log(Level.SEVERE, e, () -> "Cannot find SHA-256 MessageDigest implementation."); } - - return this; } /** -- GitLab From 374ce3a0d8a65d8e5e74111f5da9488e9a46c2ca Mon Sep 17 00:00:00 2001 From: Oleg Nenashev Date: Fri, 16 Aug 2019 18:00:34 +0200 Subject: [PATCH 469/476] Release drafter: Order changelog entries using categories (#4156) Categories match what we have on https://jenkins.io/changelog/ , except localization fixes which get a new category in the bottom --- .github/release-drafter.yml | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml index 60c4140141..91aa5c6459 100644 --- a/.github/release-drafter.yml +++ b/.github/release-drafter.yml @@ -4,7 +4,6 @@ name-template: $NEXT_PATCH_VERSION version-template: $MAJOR.$MINOR tag-template: jenkins-$NEXT_MINOR_VERSION -# TODO: categories are YAGNI for now, until we can extract `type` somehow exclude-labels: - reverted - no-changelog @@ -17,6 +16,7 @@ change-template: |- pull: $NUMBER authors: - $AUTHOR + template: | **Disclaimer**: This is an automatically generated changelog draft for Jenkins weekly releases. See https://jenkins.io/changelog/ for the official changelogs. @@ -24,6 +24,26 @@ template: | ```yaml $CHANGES ``` + +# Categories will be commented out, because we use YAML +# Now we use categories only for sorting +categories: + - title: Major BUGs and regressions + labels: + - major-bug + - regression-fix + - title: Major RFE + label: major-rfe + - title: RFEs + label: enhancement + - title: Bug fixes + label: bug + - title: Localization + label: localization + # TODO: consider merging category or changing emojis + - title: Internal/Developer changes + label: internal + replacers: - search: '/\[*JENKINS-(\d+)\]*\s*-*\s*/g' replace: |- @@ -34,3 +54,6 @@ replacers: message: |- issue: replace: "issue:" + + - search: "##" + replace: "#" -- GitLab From afcdb045c1bab10617421029cd513dbad70b4101 Mon Sep 17 00:00:00 2001 From: Pavel Janousek Date: Sat, 17 Aug 2019 02:01:39 +0200 Subject: [PATCH 470/476] [JENKINS-54772] Fix reported list of environment variables from agent (#3770) * [JENKINS-54772] Fix reported list of environment variables from agent * Feedback incorporated * Code moved to SlaveComputer class --- .../java/hudson/slaves/SlaveComputer.java | 29 +++++++++++++++++++ .../EnvVarsSlaveInfo/systemInfo.jelly | 2 +- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/hudson/slaves/SlaveComputer.java b/core/src/main/java/hudson/slaves/SlaveComputer.java index c77d5aed30..79d168d1a5 100644 --- a/core/src/main/java/hudson/slaves/SlaveComputer.java +++ b/core/src/main/java/hudson/slaves/SlaveComputer.java @@ -26,6 +26,7 @@ package hudson.slaves; import hudson.AbortException; import hudson.FilePath; import hudson.Functions; +import hudson.Main; import hudson.RestrictedSince; import hudson.Util; import hudson.console.ConsoleLogFilter; @@ -87,6 +88,8 @@ import java.security.Security; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Map; +import java.util.TreeMap; import java.util.concurrent.Future; import java.util.logging.Handler; import java.util.logging.Level; @@ -902,6 +905,32 @@ public class SlaveComputer extends Computer { return channel.call(new DetectOS()) ? "Unix" : "Windows"; } + /** + * Expose real full env vars map from agent for UI presentation + */ + public Map getEnvVarsFull() throws IOException, InterruptedException { + if(getChannel() == null) { + Map env = new TreeMap<> (); + env.put("N/A","N/A"); + return env; + } else { + return getChannel().call(new ListFullEnvironment()); + } + } + + private static class ListFullEnvironment extends MasterToSlaveCallable,IOException> { + public Map call() throws IOException { + Map env = new TreeMap<>(System.getenv()); + if(Main.isUnitTest || Main.isDevelopmentMode) { + // if unit test is launched with maven debug switch, + // we need to prevent forked Maven processes from seeing it, or else + // they'll hang + env.remove("MAVEN_OPTS"); + } + return env; + } + } + private static final Logger logger = Logger.getLogger(SlaveComputer.class.getName()); private static final class SlaveVersion extends MasterToSlaveCallable { diff --git a/core/src/main/resources/jenkins/slaves/systemInfo/EnvVarsSlaveInfo/systemInfo.jelly b/core/src/main/resources/jenkins/slaves/systemInfo/EnvVarsSlaveInfo/systemInfo.jelly index 37af3c7c75..9525653a7b 100644 --- a/core/src/main/resources/jenkins/slaves/systemInfo/EnvVarsSlaveInfo/systemInfo.jelly +++ b/core/src/main/resources/jenkins/slaves/systemInfo/EnvVarsSlaveInfo/systemInfo.jelly @@ -29,5 +29,5 @@ THE SOFTWARE. --> - + \ No newline at end of file -- GitLab From 7ce920909a94d3bd1b3c369bcd467e8d6e5d24b3 Mon Sep 17 00:00:00 2001 From: Oleg Nenashev Date: Sat, 17 Aug 2019 13:09:13 +0200 Subject: [PATCH 471/476] Release Drafter: RFE is used as a changelog filter for RFEs (#4158) Just noticed that I forgot to change the layout --- .github/release-drafter.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml index 91aa5c6459..ee1096aa39 100644 --- a/.github/release-drafter.yml +++ b/.github/release-drafter.yml @@ -35,7 +35,7 @@ categories: - title: Major RFE label: major-rfe - title: RFEs - label: enhancement + label: rfe - title: Bug fixes label: bug - title: Localization -- GitLab From 2b74d09392611a12f3674ec69ce7b68d22779159 Mon Sep 17 00:00:00 2001 From: Oleg Nenashev Date: Sat, 17 Aug 2019 13:09:44 +0200 Subject: [PATCH 472/476] README: Update the plugins number and link the plugins site (#4157) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9a105ecf65..ee4ed648cb 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ [![Docker Pulls](https://img.shields.io/docker/pulls/jenkins/jenkins.svg)](https://hub.docker.com/r/jenkins/jenkins/) In a nutshell, Jenkins is the leading open-source automation server. -Built with Java, it provides over 1000 plugins to support automating virtually anything, +Built with Java, it provides over 1600 [plugins](https://plugins.jenkins.io/) to support automating virtually anything, so that humans can actually spend their time doing things machines cannot. # What to Use Jenkins for and When to Use It -- GitLab From f982d84a076afce73d31dab56c3f084b6f521e83 Mon Sep 17 00:00:00 2001 From: Alex Earl Date: Sat, 17 Aug 2019 04:10:56 -0700 Subject: [PATCH 473/476] Fix JENKINS-23349 (#4152) This fixes the issue when the project name includes a character that can't be encoded directly in UTF-8, e.g., surrogate pairs. --- core/src/main/java/hudson/Util.java | 57 +++++++++++++++++-------- core/src/test/java/hudson/UtilTest.java | 1 + 2 files changed, 40 insertions(+), 18 deletions(-) diff --git a/core/src/main/java/hudson/Util.java b/core/src/main/java/hudson/Util.java index 73c3f03a9a..76611efbd9 100644 --- a/core/src/main/java/hudson/Util.java +++ b/core/src/main/java/hudson/Util.java @@ -866,29 +866,50 @@ public class Util { CharBuffer buf = null; char c; for (int i = 0, m = s.length(); i < m; i++) { - c = s.charAt(i); - if (c > 122 || uriMap[c]) { + int codePoint = Character.codePointAt(s, i); + if((codePoint&0xffffff80)==0) { // 1 byte + c = s.charAt(i); + if (c > 122 || uriMap[c]) { + if (!escaped) { + out = new StringBuilder(i + (m - i) * 3); + out.append(s, 0, i); + enc = StandardCharsets.UTF_8.newEncoder(); + buf = CharBuffer.allocate(1); + escaped = true; + } + // 1 char -> UTF8 + buf.put(0, c); + buf.rewind(); + try { + ByteBuffer bytes = enc.encode(buf); + while (bytes.hasRemaining()) { + byte b = bytes.get(); + out.append('%'); + out.append(toDigit((b >> 4) & 0xF)); + out.append(toDigit(b & 0xF)); + } + } catch (CharacterCodingException ex) { + } + } else if (escaped) { + out.append(c); + } + } else { if (!escaped) { out = new StringBuilder(i + (m - i) * 3); out.append(s, 0, i); - enc = StandardCharsets.UTF_8.newEncoder(); - buf = CharBuffer.allocate(1); escaped = true; } - // 1 char -> UTF8 - buf.put(0,c); - buf.rewind(); - try { - ByteBuffer bytes = enc.encode(buf); - while (bytes.hasRemaining()) { - byte b = bytes.get(); - out.append('%'); - out.append(toDigit((b >> 4) & 0xF)); - out.append(toDigit(b & 0xF)); - } - } catch (CharacterCodingException ex) { } - } else if (escaped) { - out.append(c); + + byte[] bytes = new String(new int[] { codePoint }, 0, 1).getBytes(StandardCharsets.UTF_8); + for(int j=0;j> 4) & 0xF)); + out.append(toDigit(bytes[j] & 0xF)); + } + + if(Character.charCount(codePoint) > 1) { + i++; // we processed two characters + } } } return escaped ? out.toString() : s; diff --git a/core/src/test/java/hudson/UtilTest.java b/core/src/test/java/hudson/UtilTest.java index 0e8632e4f1..a346f889cf 100644 --- a/core/src/test/java/hudson/UtilTest.java +++ b/core/src/test/java/hudson/UtilTest.java @@ -158,6 +158,7 @@ public class UtilTest { " \"#%/:;<>?", "%20%22%23%25%2F%3A%3B%3C%3E%3F", "[\\]^`{|}~", "%5B%5C%5D%5E%60%7B%7C%7D%7E", "d\u00E9velopp\u00E9s", "d%C3%A9velopp%C3%A9s", + "Foo \uD800\uDF98 Foo", "Foo%20%F0%90%8E%98%20Foo" }; for (int i = 0; i < data.length; i += 2) { assertEquals("test " + i, data[i + 1], Util.rawEncode(data[i])); -- GitLab From 16ea4d0d9a856b0b7dca432f9a512eab2f1f6ae0 Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Sun, 18 Aug 2019 18:54:06 -0700 Subject: [PATCH 474/476] [maven-release-plugin] prepare release jenkins-2.190 --- cli/pom.xml | 2 +- core/pom.xml | 2 +- pom.xml | 4 ++-- test-jdk8/pom.xml | 2 +- test-pom/pom.xml | 2 +- test/pom.xml | 2 +- war/pom.xml | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/cli/pom.xml b/cli/pom.xml index 5d3738bd42..5a90a70de8 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -5,7 +5,7 @@ org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.190 cli diff --git a/core/pom.xml b/core/pom.xml index 41c58c486f..ca2d81c243 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -29,7 +29,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.190 jenkins-core diff --git a/pom.xml b/pom.xml index f5b1d423ec..7f8a9bb9ac 100755 --- a/pom.xml +++ b/pom.xml @@ -34,7 +34,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.190 pom Jenkins main module @@ -60,7 +60,7 @@ THE SOFTWARE. scm:git:git://github.com/jenkinsci/jenkins.git scm:git:ssh://git@github.com/jenkinsci/jenkins.git https://github.com/jenkinsci/jenkins - ${scmTag} + jenkins-2.190 diff --git a/test-jdk8/pom.xml b/test-jdk8/pom.xml index 70c4870837..d11347b74b 100644 --- a/test-jdk8/pom.xml +++ b/test-jdk8/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-test-parent - ${revision}${changelist} + 2.190 ../test-pom diff --git a/test-pom/pom.xml b/test-pom/pom.xml index c0cfecf61f..d0faa73dc8 100644 --- a/test-pom/pom.xml +++ b/test-pom/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.190 jenkins-test-parent diff --git a/test/pom.xml b/test/pom.xml index 4c5abecc6f..ce4eb6e3f8 100644 --- a/test/pom.xml +++ b/test/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-test-parent - ${revision}${changelist} + 2.190 ../test-pom diff --git a/war/pom.xml b/war/pom.xml index 4ffd2b7678..7fa27d8c99 100644 --- a/war/pom.xml +++ b/war/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.190 jenkins-war -- GitLab From 01d7f443c9e3178da7222e1dff3fc8cf82bc6943 Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Sun, 18 Aug 2019 18:54:13 -0700 Subject: [PATCH 475/476] [maven-release-plugin] prepare for next development iteration --- cli/pom.xml | 2 +- core/pom.xml | 2 +- pom.xml | 6 +++--- test-jdk8/pom.xml | 2 +- test-pom/pom.xml | 2 +- test/pom.xml | 2 +- war/pom.xml | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/cli/pom.xml b/cli/pom.xml index 5a90a70de8..5d3738bd42 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -5,7 +5,7 @@ org.jenkins-ci.main jenkins-parent - 2.190 + ${revision}${changelist} cli diff --git a/core/pom.xml b/core/pom.xml index ca2d81c243..41c58c486f 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -29,7 +29,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.190 + ${revision}${changelist} jenkins-core diff --git a/pom.xml b/pom.xml index 7f8a9bb9ac..33a91a7f75 100755 --- a/pom.xml +++ b/pom.xml @@ -34,7 +34,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.190 + ${revision}${changelist} pom Jenkins main module @@ -60,7 +60,7 @@ THE SOFTWARE. scm:git:git://github.com/jenkinsci/jenkins.git scm:git:ssh://git@github.com/jenkinsci/jenkins.git https://github.com/jenkinsci/jenkins - jenkins-2.190 + ${scmTag} @@ -76,7 +76,7 @@ THE SOFTWARE. - 2.190 + 2.191 -SNAPSHOT

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