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 extends TopLevelItem> 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='";s=document.createElement(q);s.value=r}else{s=document.createElement("input");s.name=n;s.type=o;s.value=r;if(p){s.checked=true}}}return s}function h(o,v){var n=o.nodeName.toUpperCase(),s=(this.CLASS_NAME_PREFIX+this.CSS_CLASS_NAME),t=this,u,p,q;function w(x){if(!(x in v)){u=o.getAttributeNode(x);if(u&&("value" in u)){YAHOO.log('Setting attribute "'+x+'" using source element\'s attribute value of "'+u.value+'"',"info",t.toString());v[x]=u.value}}}function r(){w("type");if(v.type=="button"){v.type="push"}if(!("disabled" in v)){v.disabled=o.disabled}w("name");w("value");w("title")}switch(n){case"A":v.type="link";w("href");w("target");break;case"INPUT":r();if(!("checked" in v)){v.checked=o.checked}break;case"BUTTON":r();p=o.parentNode.parentNode;if(g.hasClass(p,s+"-checked")){v.checked=true}if(g.hasClass(p,s+"-disabled")){v.disabled=true}o.removeAttribute("value");o.setAttribute("type","button");break}o.removeAttribute("id");o.removeAttribute("name");if(!("tabindex" in v)){v.tabindex=o.tabIndex}if(!("label" in v)){q=n=="INPUT"?o.value:o.innerHTML;if(q&&q.length>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"?"":'')+""+p+">";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"?"":'')+""+p+">";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:}
-
${%The upstream project records the fingerprints of its build artifacts}
-
${%The downstream project records the fingerprints of the upstream files it uses}
+
${%The upstream project records the fingerprints of its build artifacts.}
+
${%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.
-
diff --git a/core/src/main/resources/jenkins/security/ApiTokenProperty/config.properties b/core/src/main/resources/jenkins/security/ApiTokenProperty/config.properties
index 9462963172..73da2d2594 100644
--- a/core/src/main/resources/jenkins/security/ApiTokenProperty/config.properties
+++ b/core/src/main/resources/jenkins/security/ApiTokenProperty/config.properties
@@ -2,6 +2,7 @@ TokenDisplayedOnce=Copy this token now, because it cannot be recovered in the fu
AddNewToken=Add new Token
GenerateNewToken=Generate
RevokeToken=Revoke this token
+CopyToken=Copy this token
NoTokenYet=There are no registered tokens for this user.
TokenLastUse=Used {0} time(s), last time was {1} day(s) ago
StatisticsDisabled=No statistics available
diff --git a/core/src/main/resources/lib/layout/copyButton.jelly b/core/src/main/resources/lib/layout/copyButton.jelly
index c0a5e9adeb..d1fcdb0435 100644
--- a/core/src/main/resources/lib/layout/copyButton.jelly
+++ b/core/src/main/resources/lib/layout/copyButton.jelly
@@ -29,8 +29,7 @@ THE SOFTWARE.
Creates a small button that lets the user copies a text into clipboard
- Tooltip of the button. Currently this doesn't work as reliably as we'd like.
- More ZeroClipboard hacking is likely necessary.
+ Tooltip of the button.
Text to be copied into the clipboard.
@@ -53,7 +52,7 @@ THE SOFTWARE.
-
diff --git a/core/src/main/resources/lib/layout/svg-icon-token-revoke.jelly b/core/src/main/resources/lib/layout/svg-icon-token-revoke.jelly
index 63b98732d3..f43bc8fe13 100644
--- a/core/src/main/resources/lib/layout/svg-icon-token-revoke.jelly
+++ b/core/src/main/resources/lib/layout/svg-icon-token-revoke.jelly
@@ -26,11 +26,15 @@ THE SOFTWARE.
Icon used for revoking the token in the user config screen
+
+ Title for the icon.
+
--
GitLab
From 1f08f54bfd75e7a7d35ae75b7a76ddfc3feffa1e Mon Sep 17 00:00:00 2001
From: Nicolae Pascu
Date: Thu, 11 Apr 2019 18:02:54 +1000
Subject: [PATCH 257/476] move svg-icon-token-revoke.jelly to ApiTokenProperty
dir
---
.../security/ApiTokenProperty}/svg-icon-token-revoke.jelly | 0
1 file changed, 0 insertions(+), 0 deletions(-)
rename core/src/main/resources/{lib/layout => jenkins/security/ApiTokenProperty}/svg-icon-token-revoke.jelly (100%)
diff --git a/core/src/main/resources/lib/layout/svg-icon-token-revoke.jelly b/core/src/main/resources/jenkins/security/ApiTokenProperty/svg-icon-token-revoke.jelly
similarity index 100%
rename from core/src/main/resources/lib/layout/svg-icon-token-revoke.jelly
rename to core/src/main/resources/jenkins/security/ApiTokenProperty/svg-icon-token-revoke.jelly
--
GitLab
From ec3ec2e4922d268d87bd33d51064265fd9092258 Mon Sep 17 00:00:00 2001
From: Daniel Beck
Date: Thu, 11 Apr 2019 10:36:03 +0200
Subject: [PATCH 258/476] Inline the revoke icon into
ApiTokenProperty/config.jelly
---
.../security/ApiTokenProperty/config.jelly | 19 +++++++--
.../svg-icon-token-revoke.jelly | 40 -------------------
2 files changed, 15 insertions(+), 44 deletions(-)
delete mode 100644 core/src/main/resources/jenkins/security/ApiTokenProperty/svg-icon-token-revoke.jelly
diff --git a/core/src/main/resources/jenkins/security/ApiTokenProperty/config.jelly b/core/src/main/resources/jenkins/security/ApiTokenProperty/config.jelly
index d9552b4260..58e913e9f9 100644
--- a/core/src/main/resources/jenkins/security/ApiTokenProperty/config.jelly
+++ b/core/src/main/resources/jenkins/security/ApiTokenProperty/config.jelly
@@ -24,9 +24,20 @@ THE SOFTWARE.
-->
-
+
+
+
+
+
+
-
+
@@ -130,7 +141,7 @@ THE SOFTWARE.
-
+
diff --git a/core/src/main/resources/jenkins/security/ApiTokenProperty/svg-icon-token-revoke.jelly b/core/src/main/resources/jenkins/security/ApiTokenProperty/svg-icon-token-revoke.jelly
deleted file mode 100644
index f43bc8fe13..0000000000
--- a/core/src/main/resources/jenkins/security/ApiTokenProperty/svg-icon-token-revoke.jelly
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
-
-
-
- Icon used for revoking the token in the user config screen
-
- Title for the icon.
-
-
-
-
--
GitLab
From ceb84623cb36eae14643812255d749218b5d2a1a Mon Sep 17 00:00:00 2001
From: Jesse Glick
Date: Thu, 11 Apr 2019 16:05:53 -0400
Subject: [PATCH 259/476] Pulling marker from StreamTaskListener up to
TaskListener.
---
core/src/main/java/hudson/model/TaskListener.java | 4 ++--
core/src/main/java/hudson/util/StreamTaskListener.java | 3 +--
2 files changed, 3 insertions(+), 4 deletions(-)
diff --git a/core/src/main/java/hudson/model/TaskListener.java b/core/src/main/java/hudson/model/TaskListener.java
index e5e27f56c5..bbc1236f53 100644
--- a/core/src/main/java/hudson/model/TaskListener.java
+++ b/core/src/main/java/hudson/model/TaskListener.java
@@ -33,11 +33,11 @@ import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintStream;
import java.io.PrintWriter;
-import java.io.Serializable;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.Formatter;
import javax.annotation.Nonnull;
+import org.jenkinsci.remoting.SerializableOnlyOverRemoting;
import org.kohsuke.accmod.Restricted;
import org.kohsuke.accmod.restrictions.NoExternalUse;
import org.kohsuke.accmod.restrictions.ProtectedExternally;
@@ -66,7 +66,7 @@ import org.kohsuke.accmod.restrictions.ProtectedExternally;
*
* @author Kohsuke Kawaguchi
*/
-public interface TaskListener extends Serializable {
+public interface TaskListener extends SerializableOnlyOverRemoting {
/**
* This writer will receive the output of the build
*/
diff --git a/core/src/main/java/hudson/util/StreamTaskListener.java b/core/src/main/java/hudson/util/StreamTaskListener.java
index ac2ed2550c..931a0b99bb 100644
--- a/core/src/main/java/hudson/util/StreamTaskListener.java
+++ b/core/src/main/java/hudson/util/StreamTaskListener.java
@@ -43,7 +43,6 @@ import java.nio.file.StandardOpenOption;
import java.util.logging.Level;
import java.util.logging.Logger;
import jenkins.util.SystemProperties;
-import org.jenkinsci.remoting.SerializableOnlyOverRemoting;
import org.kohsuke.stapler.framework.io.WriterOutputStream;
import javax.annotation.CheckForNull;
@@ -60,7 +59,7 @@ import javax.annotation.Nonnull;
*
* @author Kohsuke Kawaguchi
*/
-public class StreamTaskListener extends AbstractTaskListener implements TaskListener, SerializableOnlyOverRemoting, Closeable {
+public class StreamTaskListener extends AbstractTaskListener implements TaskListener, Closeable {
@Nonnull
private PrintStream out;
@CheckForNull
--
GitLab
From 0445bf20363c74da448c89edd610f50747f73f3a Mon Sep 17 00:00:00 2001
From: Daniel Beck
Date: Thu, 11 Apr 2019 16:49:19 -0400
Subject: [PATCH 260/476] Note: Env.platform is not set by copy constructor
Co-Authored-By: jsoref
---
core/src/main/java/hudson/EnvVars.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/core/src/main/java/hudson/EnvVars.java b/core/src/main/java/hudson/EnvVars.java
index 7f01ac4be8..0dbec25143 100644
--- a/core/src/main/java/hudson/EnvVars.java
+++ b/core/src/main/java/hudson/EnvVars.java
@@ -120,7 +120,7 @@ public class EnvVars extends TreeMap {
}
}
- @SuppressWarnings("CopyConstructorMissesField")
+ @SuppressWarnings("CopyConstructorMissesField") // does not set #platform, see its Javadoc
public EnvVars(@Nonnull EnvVars m) {
// this constructor is so that in future we can get rid of the downcasting.
this((Map)m);
--
GitLab
From 35814051039706d921bcb818e707a0c72278a781 Mon Sep 17 00:00:00 2001
From: Daniel Beck
Date: Thu, 11 Apr 2019 16:50:33 -0400
Subject: [PATCH 261/476] Note: Cause.cause is not set by copy constructor
Co-Authored-By: jsoref
---
core/src/main/java/hudson/model/CauseAction.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/core/src/main/java/hudson/model/CauseAction.java b/core/src/main/java/hudson/model/CauseAction.java
index 5e9c9ca3e6..9881a8009a 100644
--- a/core/src/main/java/hudson/model/CauseAction.java
+++ b/core/src/main/java/hudson/model/CauseAction.java
@@ -75,7 +75,7 @@ public class CauseAction implements FoldableAction, RunAction2 {
this(Arrays.asList(c));
}
- @SuppressWarnings("CopyConstructorMissesField")
+ @SuppressWarnings("CopyConstructorMissesField") // does not initialize the deprecated #cause field
public CauseAction(Collection extends Cause> causes) {
addCauses(causes);
}
--
GitLab
From cb938ae352d2e532cdf1db3f51102ac55a47af82 Mon Sep 17 00:00:00 2001
From: Jesse Glick
Date: Fri, 12 Apr 2019 15:50:19 -0400
Subject: [PATCH 262/476] Deprecating Run.updateSymlinks.
---
core/src/main/java/hudson/model/Run.java | 35 ++----------------------
1 file changed, 3 insertions(+), 32 deletions(-)
diff --git a/core/src/main/java/hudson/model/Run.java b/core/src/main/java/hudson/model/Run.java
index ca2f0c811a..3a11b059d1 100644
--- a/core/src/main/java/hudson/model/Run.java
+++ b/core/src/main/java/hudson/model/Run.java
@@ -107,7 +107,6 @@ import jenkins.model.ArtifactManagerFactory;
import jenkins.model.BuildDiscarder;
import jenkins.model.Jenkins;
import jenkins.model.JenkinsLocationConfiguration;
-import jenkins.model.PeepholePermalink;
import jenkins.model.RunAction2;
import jenkins.model.StandardArtifactManager;
import jenkins.model.lazy.BuildReference;
@@ -1813,8 +1812,6 @@ public abstract class Run ,RunT extends Run,RunT extends Run
Date: Fri, 12 Apr 2019 15:55:13 -0400
Subject: [PATCH 263/476] [JENKINS-56995] Implement
MavenConsoleAnnotator.flush.
---
.../main/java/hudson/tasks/_maven/MavenConsoleAnnotator.java | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/core/src/main/java/hudson/tasks/_maven/MavenConsoleAnnotator.java b/core/src/main/java/hudson/tasks/_maven/MavenConsoleAnnotator.java
index dfbe86cbc2..1ae80effe3 100644
--- a/core/src/main/java/hudson/tasks/_maven/MavenConsoleAnnotator.java
+++ b/core/src/main/java/hudson/tasks/_maven/MavenConsoleAnnotator.java
@@ -75,6 +75,11 @@ public class MavenConsoleAnnotator extends LineTransformationOutputStream {
out.write(b,0,len);
}
+ @Override
+ public void flush() throws IOException {
+ out.flush();
+ }
+
@Override
public void close() throws IOException {
super.close();
--
GitLab
From e638b6761ce086c92786e9818675c79cd3221cf2 Mon Sep 17 00:00:00 2001
From: Jesse Glick
Date: Fri, 12 Apr 2019 16:06:38 -0400
Subject: [PATCH 264/476] Removing some tests from AbstractProjectTest that are
now expected to fail in core.
---
.../hudson/model/AbstractProjectTest.java | 65 -------------------
1 file changed, 65 deletions(-)
diff --git a/test/src/test/java/hudson/model/AbstractProjectTest.java b/test/src/test/java/hudson/model/AbstractProjectTest.java
index 071b5b9ec7..b4b807c7ec 100644
--- a/test/src/test/java/hudson/model/AbstractProjectTest.java
+++ b/test/src/test/java/hudson/model/AbstractProjectTest.java
@@ -34,13 +34,11 @@ import com.gargoylesoftware.htmlunit.html.HtmlPage;
import hudson.FilePath;
import hudson.Functions;
import hudson.Launcher;
-import hudson.Util;
import hudson.maven.MavenModuleSet;
import hudson.scm.NullSCM;
import hudson.scm.SCM;
import hudson.scm.SCMDescriptor;
import hudson.security.GlobalMatrixAuthorizationStrategy;
-import hudson.tasks.ArtifactArchiver;
import hudson.tasks.BatchFile;
import hudson.tasks.BuildTrigger;
import hudson.tasks.Shell;
@@ -50,8 +48,6 @@ import hudson.triggers.Trigger;
import hudson.triggers.TriggerDescriptor;
import hudson.util.OneShotEvent;
import hudson.util.StreamTaskListener;
-import java.io.File;
-import java.io.IOException;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
@@ -60,11 +56,9 @@ import java.util.ResourceBundle;
import java.util.Vector;
import java.util.concurrent.Future;
import jenkins.model.Jenkins;
-import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;
-import org.junit.Assume;
import org.junit.Rule;
import org.junit.Test;
import org.jvnet.hudson.test.Issue;
@@ -258,65 +252,6 @@ public class AbstractProjectTest {
}
}
- @Test
- @Issue("JENKINS-1986")
- public void buildSymlinks() throws Exception {
- Assume.assumeFalse("If we're on Windows, don't bother doing this", Functions.isWindows());
-
- FreeStyleProject job = j.createFreeStyleProject();
- job.getBuildersList().add(new Shell("echo \"Build #$BUILD_NUMBER\"\n"));
- FreeStyleBuild build = job.scheduleBuild2(0, new Cause.UserCause()).get();
- File lastSuccessful = new File(job.getRootDir(), "lastSuccessful"),
- lastStable = new File(job.getRootDir(), "lastStable");
- // First build creates links
- assertSymlinkForBuild(lastSuccessful, 1);
- assertSymlinkForBuild(lastStable, 1);
- FreeStyleBuild build2 = job.scheduleBuild2(0, new Cause.UserCause()).get();
- // Another build updates links
- assertSymlinkForBuild(lastSuccessful, 2);
- assertSymlinkForBuild(lastStable, 2);
- // Delete latest build should update links
- build2.delete();
- assertSymlinkForBuild(lastSuccessful, 1);
- assertSymlinkForBuild(lastStable, 1);
- // Delete all builds should remove links
- build.delete();
- assertFalse("lastSuccessful link should be removed", lastSuccessful.exists());
- assertFalse("lastStable link should be removed", lastStable.exists());
- }
-
- private static void assertSymlinkForBuild(File file, int buildNumber)
- throws IOException, InterruptedException {
- assert file.exists() : "should exist and point to something that exists";
- assert Util.isSymlink(file) : "should be symlink";
- String s = FileUtils.readFileToString(new File(file, "log"));
- assert s.contains("Build #" + buildNumber + "\n") : "link should point to build #$buildNumber, but link was: ${Util.resolveSymlink(file, TaskListener.NULL)}\nand log was:\n$s";
- }
-
- @Test
- @Issue("JENKINS-2543")
- public void symlinkForPostBuildFailure() throws Exception {
- Assume.assumeFalse("If we're on Windows, don't bother doing this", Functions.isWindows());
-
- // Links should be updated after post-build actions when final build result is known
- FreeStyleProject job = j.createFreeStyleProject();
- job.getBuildersList().add(new Shell("echo \"Build #$BUILD_NUMBER\"\n"));
- FreeStyleBuild build = job.scheduleBuild2(0, new Cause.UserCause()).get();
- assert Result.SUCCESS == build.getResult();
- File lastSuccessful = new File(job.getRootDir(), "lastSuccessful"),
- lastStable = new File(job.getRootDir(), "lastStable");
- // First build creates links
- assertSymlinkForBuild(lastSuccessful, 1);
- assertSymlinkForBuild(lastStable, 1);
- // Archive artifacts that don't exist to create failure in post-build action
- job.getPublishersList().add(new ArtifactArchiver("*.foo", "", false, false));
- build = job.scheduleBuild2(0, new Cause.UserCause()).get();
- assert Result.FAILURE == build.getResult();
- // Links should not be updated since build failed
- assertSymlinkForBuild(lastSuccessful, 1);
- assertSymlinkForBuild(lastStable, 1);
- }
-
/* TODO too slow, seems capable of causing testWorkspaceLock to time out:
@Test
@Issue("JENKINS-15156")
--
GitLab
From 646e23e5c9c95a40ba07e82aa83944d85d7b107d Mon Sep 17 00:00:00 2001
From: Jesse Glick
Date: Fri, 12 Apr 2019 16:21:26 -0400
Subject: [PATCH 265/476] Moved a test out of
JenkinsBuildsAndWorkspacesDirectoriesTest.
---
...insBuildsAndWorkspacesDirectoriesTest.java | 44 -------------------
1 file changed, 44 deletions(-)
diff --git a/test/src/test/java/jenkins/model/JenkinsBuildsAndWorkspacesDirectoriesTest.java b/test/src/test/java/jenkins/model/JenkinsBuildsAndWorkspacesDirectoriesTest.java
index 6d67c7317c..a89b9a0d84 100644
--- a/test/src/test/java/jenkins/model/JenkinsBuildsAndWorkspacesDirectoriesTest.java
+++ b/test/src/test/java/jenkins/model/JenkinsBuildsAndWorkspacesDirectoriesTest.java
@@ -1,7 +1,6 @@
package jenkins.model;
import hudson.Functions;
-import hudson.Util;
import hudson.init.InitMilestone;
import hudson.maven.MavenModuleSet;
import hudson.maven.MavenModuleSetBuild;
@@ -21,12 +20,10 @@ import org.jvnet.hudson.test.RestartableJenkinsRule;
import org.jvnet.hudson.test.recipes.LocalData;
import java.io.File;
-import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.logging.Level;
-import java.util.logging.LogRecord;
import java.util.stream.Stream;
import java.util.stream.Collectors;
@@ -353,45 +350,4 @@ public class JenkinsBuildsAndWorkspacesDirectoriesTest {
});
}
- @Test
- @Issue("JENKINS-17137")
- public void externalBuildDirectorySymlinks() throws Exception {
- assumeFalse(Functions.isWindows()); // symlinks may not be available
-
- // Hack to get String builds usable in lambda below
- final List builds = new ArrayList<>();
-
- story.then(steps -> {
- builds.add(story.j.createTmpDir().toString());
- setBuildsDirProperty(builds.get(0) + "/${ITEM_FULL_NAME}");
- });
-
- story.then(steps -> {
-
- assertEquals(builds.get(0) + "/${ITEM_FULL_NAME}", story.j.jenkins.getRawBuildsDir());
- FreeStyleProject p = story.j.jenkins.createProject(MockFolder.class, "d").createProject(FreeStyleProject.class, "p");
- FreeStyleBuild b1 = p.scheduleBuild2(0).get();
- File link = new File(p.getRootDir(), "lastStable");
- assertTrue(link.exists());
- assertEquals(resolveAll(link).getAbsolutePath(), b1.getRootDir().getAbsolutePath());
- FreeStyleBuild b2 = p.scheduleBuild2(0).get();
- assertTrue(link.exists());
- assertEquals(resolveAll(link).getAbsolutePath(), b2.getRootDir().getAbsolutePath());
- b2.delete();
- assertTrue(link.exists());
- assertEquals(resolveAll(link).getAbsolutePath(), b1.getRootDir().getAbsolutePath());
- b1.delete();
- assertFalse(link.exists());
- });
- }
-
- private File resolveAll(File link) throws InterruptedException, IOException {
- while (true) {
- File f = Util.resolveSymlinkToFile(link);
- if (f == null) {
- return link;
- }
- link = f;
- }
- }
}
--
GitLab
From 83a465e8b24feca904d75d7c235bfe492dafe2d8 Mon Sep 17 00:00:00 2001
From: Jesse Glick
Date: Fri, 12 Apr 2019 22:33:39 -0400
Subject: [PATCH 266/476] Rewriting cache system in PeepholePermalink to use
plain text files rather than symlinks.
---
.../hudson/model/PermalinkProjectAction.java | 3 +-
.../java/jenkins/model/PeepholePermalink.java | 193 +++++++++---------
.../jenkins/model/PeepholePermalinkTest.java | 46 -----
.../jenkins/model/PeepholePermalinkTest.java | 73 ++-----
4 files changed, 115 insertions(+), 200 deletions(-)
delete mode 100644 core/src/test/java/jenkins/model/PeepholePermalinkTest.java
diff --git a/core/src/main/java/hudson/model/PermalinkProjectAction.java b/core/src/main/java/hudson/model/PermalinkProjectAction.java
index 7909040f65..26273b38d6 100644
--- a/core/src/main/java/hudson/model/PermalinkProjectAction.java
+++ b/core/src/main/java/hudson/model/PermalinkProjectAction.java
@@ -27,6 +27,7 @@ import jenkins.model.PeepholePermalink;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
+import javax.annotation.CheckForNull;
/**
* Optional interface for {@link Action}s that are attached
@@ -86,7 +87,7 @@ public interface PermalinkProjectAction extends Action {
* @return null
* if the target of the permalink doesn't exist.
*/
- public abstract Run,?> resolve(Job,?> job);
+ public abstract @CheckForNull Run,?> resolve(Job,?> job);
/**
* List of {@link Permalink}s that are built into Jenkins.
diff --git a/core/src/main/java/jenkins/model/PeepholePermalink.java b/core/src/main/java/jenkins/model/PeepholePermalink.java
index 4593c1da92..9291fe9259 100644
--- a/core/src/main/java/jenkins/model/PeepholePermalink.java
+++ b/core/src/main/java/jenkins/model/PeepholePermalink.java
@@ -9,18 +9,17 @@ import hudson.model.Run;
import hudson.model.TaskListener;
import hudson.model.listeners.RunListener;
import hudson.util.AtomicFileWriter;
-import hudson.util.StreamTaskListener;
import java.io.File;
import java.io.IOException;
-import java.io.StringWriter;
-import java.util.Arrays;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
import java.util.HashMap;
import java.util.Map;
+import java.util.TreeMap;
import java.util.logging.Level;
import java.util.logging.Logger;
+import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
-import org.apache.commons.io.FileUtils;
/**
* Convenient base implementation for {@link Permalink}s that satisfy
@@ -46,8 +45,7 @@ import org.apache.commons.io.FileUtils;
*
*
* This base class provides a file-based caching mechanism that avoids
- * walking the long build history. The cache is a symlink to the build directory
- * where symlinks are supported, and text file that contains the build number otherwise.
+ * walking the long build history.
*
*
* The implementation transparently tolerates G(B) that goes from true to false over time
@@ -56,13 +54,17 @@ import org.apache.commons.io.FileUtils;
* from false to true, then call {@link #resolve(Job)} to check the current permalink target
* is up to date, then call {@link #updateCache(Job, Run)} if it needs updating.
*
- * @author Kohsuke Kawaguchi
* @since 1.507
*/
public abstract class PeepholePermalink extends Permalink implements Predicate> {
- /** JENKINS-22822: avoids rereading symlinks */
- static final Map symlinks = new HashMap<>();
+ /**
+ * JENKINS-22822: avoids rereading caches.
+ * Top map keys are {@link builds} directories.
+ * Inner maps are from permalink name tp build number.
+ * Synchronization is first on the outer map, then on the inner.
+ */
+ private static final Map> caches = new HashMap<>();
/**
* Checks if the given build satisfies the peep-hole criteria.
@@ -71,9 +73,8 @@ public abstract class PeepholePermalink extends Permalink implements Predicate run);
- /**
- * The file in which the permalink target gets recorded.
- */
+ /** @deprecated No longer used. */
+ @Deprecated
protected File getPermalinkFile(Job,?> job) {
return new File(job.getBuildDir(),getId());
}
@@ -83,32 +84,27 @@ public abstract class PeepholePermalink extends Permalink implements Predicate resolve(Job, ?> job) {
- File f = getPermalinkFile(job);
- Run,?> b=null;
-
- try {
- String target = readSymlink(f);
- if (target!=null) {
- int n = Integer.parseInt(Util.getFileName(target));
- if (n==RESOLVES_TO_NONE) return null;
-
- b = job.getBuildByNumber(n);
- if (b!=null && apply(b))
- return b; // found it (in the most efficient way possible)
-
- // the cache is stale. start the search
- if (b==null)
- b=job.getNearestOldBuild(n);
+ Map cache = cacheFor(job.getBuildDir());
+ int n;
+ synchronized (cache) {
+ n = cache.getOrDefault(getId(), 0);
+ }
+ if (n == RESOLVES_TO_NONE) {
+ return null;
+ }
+ Run, ?> b;
+ if (n > 0) {
+ b = job.getBuildByNumber(n);
+ if (b != null && apply(b)) {
+ return b; // found it (in the most efficient way possible)
}
- } catch (InterruptedException e) {
- LOGGER.log(Level.WARNING, "Failed to read permalink cache:" + f, e);
- // if we fail to read the cache, fall back to the re-computation
- } catch (NumberFormatException e) {
- LOGGER.log(Level.WARNING, "Failed to parse the build number in the permalink cache:" + f, e);
- // if we fail to read the cache, fall back to the re-computation
- } catch (IOException e) {
- // this happens when the symlink doesn't exist
- // (and it cannot be distinguished from the case when the actual I/O error happened
+ } else {
+ b = null;
+ }
+
+ // the cache is stale. start the search
+ if (b == null) {
+ b = job.getNearestOldBuild(n);
}
if (b==null) {
@@ -132,72 +128,71 @@ public abstract class PeepholePermalink extends Permalink implements Predicate job, @Nullable Run,?> b) {
- final int n = b==null ? RESOLVES_TO_NONE : b.getNumber();
-
- File cache = getPermalinkFile(job);
- cache.getParentFile().mkdirs();
-
- try {
- String target = String.valueOf(n);
- if (b != null && !new File(job.getBuildDir(), target).exists()) {
- // (re)create the build Number->Id symlink
- Util.createSymlink(job.getBuildDir(),b.getId(),target,TaskListener.NULL);
+ private static @Nonnull Map cacheFor(@Nonnull File buildDir) {
+ synchronized (caches) {
+ Map cache = caches.get(buildDir);
+ if (cache == null) {
+ cache = load(buildDir);
+ caches.put(buildDir, cache);
}
- writeSymlink(cache, target);
- } catch (IOException | InterruptedException e) {
- LOGGER.log(Level.WARNING, "Failed to update "+job+" "+getId()+" permalink for " + b, e);
- cache.delete();
+ return cache;
}
}
- // File.exists returns false for a link with a missing target, so for Java 6 compatibility we have to use this circuitous method to see if it was created.
- private static boolean exists(File link) {
- File[] kids = link.getParentFile().listFiles();
- return kids != null && Arrays.asList(kids).contains(link);
- }
-
- static String readSymlink(File cache) throws IOException, InterruptedException {
- synchronized (symlinks) {
- String target = symlinks.get(cache);
- if (target != null) {
- LOGGER.log(Level.FINE, "readSymlink cached {0} → {1}", new Object[] {cache, target});
- return target;
+ private static @Nonnull Map load(@Nonnull File buildDir) {
+ Map cache = new TreeMap<>();
+ File storage = storageFor(buildDir);
+ if (storage.isFile()) {
+ try {
+ Files.lines(storage.toPath(), StandardCharsets.UTF_8).forEach(line -> {
+ int idx = line.indexOf(' ');
+ if (idx == -1) {
+ return;
+ }
+ try {
+ cache.put(line.substring(0, idx), Integer.parseInt(line.substring(idx + 1)));
+ } catch (NumberFormatException x) {
+ LOGGER.log(Level.WARNING, "failed to read " + storage, x);
+ }
+ });
+ } catch (IOException x) {
+ LOGGER.log(Level.WARNING, "failed to read " + storage, x);
}
+ LOGGER.fine(() -> "loading from " + storage + ": " + cache);
}
- String target = Util.resolveSymlink(cache);
- if (target==null && cache.exists()) {
- // if this file isn't a symlink, it must be a regular file
- target = FileUtils.readFileToString(cache,"UTF-8").trim();
- }
- LOGGER.log(Level.FINE, "readSymlink {0} → {1}", new Object[] {cache, target});
- synchronized (symlinks) {
- symlinks.put(cache, target);
- }
- return target;
+ return cache;
}
- static void writeSymlink(File cache, String target) throws IOException, InterruptedException {
- LOGGER.log(Level.FINE, "writeSymlink {0} → {1}", new Object[] {cache, target});
- synchronized (symlinks) {
- symlinks.put(cache, target);
- }
- StringWriter w = new StringWriter();
- StreamTaskListener listener = new StreamTaskListener(w);
- Util.createSymlink(cache.getParentFile(),target,cache.getName(),listener);
- // Avoid calling resolveSymlink on a nonexistent file as it will probably throw an IOException:
- if (!exists(cache) || Util.resolveSymlink(cache)==null) {
- // symlink not supported. use a regular file
- AtomicFileWriter cw = new AtomicFileWriter(cache);
- try {
- cw.write(target);
- cw.commit();
- } finally {
- cw.abort();
- }
+ static @Nonnull File storageFor(@Nonnull File buildDir) {
+ return new File(buildDir, "permalinks");
+ }
+
+ /**
+ * Remembers the value 'n' in the cache for future {@link #resolve(Job)}.
+ */
+ protected void updateCache(@Nonnull Job,?> job, @CheckForNull Run,?> b) {
+ File buildDir = job.getBuildDir();
+ Map cache = cacheFor(buildDir);
+ synchronized (cache) {
+ cache.put(getId(), b == null ? RESOLVES_TO_NONE : b.getNumber());
+ File storage = storageFor(buildDir);
+ LOGGER.fine(() -> "saving to " + storage + ": " + cache);
+ try {
+ AtomicFileWriter cw = new AtomicFileWriter(storage);
+ try {
+ for (Map.Entry entry : cache.entrySet()) {
+ cw.write(entry.getKey());
+ cw.write(' ');
+ cw.write(Integer.toString(entry.getValue()));
+ cw.write('\n');
+ }
+ cw.commit();
+ } finally {
+ cw.abort();
+ }
+ } catch (IOException x) {
+ LOGGER.log(Level.WARNING, "failed to update " + storage, x);
+ }
}
}
@@ -212,8 +207,7 @@ public abstract class PeepholePermalink extends Permalink implements Predicate r = pp.find(run.getPreviousBuild());
- if (LOGGER.isLoggable(Level.FINE))
- LOGGER.fine("Updating "+pp.getPermalinkFile(j).getName()+" permalink from deleted "+run.getNumber()+" to "+(r == null ? -1 : r.getNumber()));
+ LOGGER.fine(() -> "Updating " + pp.getId() + " permalink from deleted " + run + " to " + (r == null ? -1 : r.getNumber()));
pp.updateCache(j,r);
}
}
@@ -229,8 +223,7 @@ public abstract class PeepholePermalink extends Permalink implements Predicate cur = pp.resolve(j);
if (cur==null || cur.getNumber() "Updating " + pp.getId() + " permalink to completed " + run);
pp.updateCache(j,run);
}
}
diff --git a/core/src/test/java/jenkins/model/PeepholePermalinkTest.java b/core/src/test/java/jenkins/model/PeepholePermalinkTest.java
deleted file mode 100644
index fa992e0bb1..0000000000
--- a/core/src/test/java/jenkins/model/PeepholePermalinkTest.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright 2013 Jesse Glick.
- *
- * 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 java.io.File;
-import org.junit.Test;
-import static org.junit.Assert.*;
-import org.junit.Rule;
-import org.junit.rules.TemporaryFolder;
-import org.jvnet.hudson.test.Issue;
-
-public class PeepholePermalinkTest {
-
- @Rule public TemporaryFolder tmp = new TemporaryFolder();
-
- @Issue("JENKINS-17681")
- @Test public void symlinks() throws Exception {
- File link = new File(tmp.getRoot(), "link");
- PeepholePermalink.writeSymlink(link, "stuff");
- PeepholePermalink.symlinks.clear(); // so we actually test the filesystem
- assertEquals("stuff", PeepholePermalink.readSymlink(link));
- }
-
-}
diff --git a/test/src/test/java/jenkins/model/PeepholePermalinkTest.java b/test/src/test/java/jenkins/model/PeepholePermalinkTest.java
index c25e276b4e..d37b01971e 100644
--- a/test/src/test/java/jenkins/model/PeepholePermalinkTest.java
+++ b/test/src/test/java/jenkins/model/PeepholePermalinkTest.java
@@ -1,17 +1,15 @@
package jenkins.model;
-import hudson.Functions;
-import hudson.Util;
import hudson.model.FreeStyleBuild;
import hudson.model.FreeStyleProject;
+import hudson.model.Job;
import hudson.model.Run;
-import java.io.File;
+import java.nio.file.Files;
+import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;
-import org.junit.Assume;
import org.junit.Rule;
import org.junit.Test;
import org.jvnet.hudson.test.FailureBuilder;
-import org.jvnet.hudson.test.Issue;
import org.jvnet.hudson.test.JenkinsRule;
public class PeepholePermalinkTest {
@@ -24,76 +22,45 @@ public class PeepholePermalinkTest {
*/
@Test
public void basics() throws Exception {
- Assume.assumeFalse("can't run on windows because we rely on symlinks", Functions.isWindows());
-
FreeStyleProject p = j.createFreeStyleProject();
FreeStyleBuild b1 = j.assertBuildStatusSuccess(p.scheduleBuild2(0));
- File lsb = new File(p.getBuildDir(), "lastSuccessfulBuild");
- File lfb = new File(p.getBuildDir(), "lastFailedBuild");
+ String lsb = "lastSuccessfulBuild";
+ String lfb = "lastFailedBuild";
- assertLink(lsb, b1);
+ assertStorage(lsb, p, b1);
// now another build that fails
p.getBuildersList().add(new FailureBuilder());
FreeStyleBuild b2 = p.scheduleBuild2(0).get();
- assertLink(lsb, b1);
- assertLink(lfb, b2);
+ assertStorage(lsb, p, b1);
+ assertStorage(lfb, p, b2);
// one more build and this time it succeeds
p.getBuildersList().clear();
FreeStyleBuild b3 = j.assertBuildStatusSuccess(p.scheduleBuild2(0));
- assertLink(lsb, b3);
- assertLink(lfb, b2);
+ assertStorage(lsb, p, b3);
+ assertStorage(lfb, p, b2);
- // delete b3 and symlinks should update properly
+ // delete b3 and links should update properly
b3.delete();
- assertLink(lsb, b1);
- assertLink(lfb, b2);
+ assertStorage(lsb, p, b1);
+ assertStorage(lfb, p, b2);
b1.delete();
- assertLink(lsb, null);
- assertLink(lfb, b2);
+ assertStorage(lsb, p, null);
+ assertStorage(lfb, p, b2);
b2.delete();
- assertLink(lsb, null);
- assertLink(lfb, null);
- }
-
- private void assertLink(File symlink, Run build) throws Exception {
- assertEquals(build == null ? "-1" : Integer.toString(build.getNumber()), Util.resolveSymlink(symlink));
- }
-
- /**
- * job/JOBNAME/lastStable and job/JOBNAME/lastSuccessful symlinks that we
- * used to generate should still work
- */
- @Test
- public void legacyCompatibility() throws Exception {
- Assume.assumeFalse("can't run on windows because we rely on symlinks", Functions.isWindows());
-
- FreeStyleProject p = j.createFreeStyleProject();
- FreeStyleBuild b1 = j.assertBuildStatusSuccess(p.scheduleBuild2(0));
-
- for (String n : new String[] {"lastStable", "lastSuccessful"}) {
- // test if they both point to b1
- assertEquals(new File(p.getRootDir(), n + "/build.xml").length(), new File(b1.getRootDir(), "build.xml").length());
- }
+ assertStorage(lsb, p, null);
+ assertStorage(lfb, p, null);
}
- @Test
- @Issue("JENKINS-19034")
- public void rebuildBuildNumberPermalinks() throws Exception {
- FreeStyleProject p = j.createFreeStyleProject();
- FreeStyleBuild b = j.assertBuildStatusSuccess(p.scheduleBuild2(0));
- File f = new File(p.getBuildDir(), "1");
- // assertTrue(Util.isSymlink(f))
- f.delete();
- PeepholePermalink link = (PeepholePermalink) p.getPermalinks().stream().filter(l -> l instanceof PeepholePermalink).findAny().get();
- link.updateCache(p, b);
- assertTrue("build symlink hasn't been restored", f.exists());
+ private void assertStorage(String id, Job, ?> job, Run, ?> build) throws Exception {
+ assertThat(Files.readAllLines(PeepholePermalink.storageFor(job.getBuildDir()).toPath()),
+ hasItem(id + " " + (build == null ? -1 : build.getNumber())));
}
}
--
GitLab
From 803cc953e49220a5f8efd2081b3fea1a45987ebb Mon Sep 17 00:00:00 2001
From: Jesse Glick
Date: Sat, 13 Apr 2019 12:43:46 -0400
Subject: [PATCH 267/476] Make ${port} be honored by `mvn -f war
hudson-dev:run`.
---
war/pom.xml | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/war/pom.xml b/war/pom.xml
index bc8f98da18..113ed62e60 100644
--- a/war/pom.xml
+++ b/war/pom.xml
@@ -459,11 +459,9 @@ THE SOFTWARE.
Reload webapp when you hit ENTER. (See JETTY-282 for more)
-->
manual
-
-
- ${port}
-
-
+
+ ${port}
+ ../core/src/main/resources
--
GitLab
From ed84746e22e7f979ed1b8c69bf4c622471f0e39a Mon Sep 17 00:00:00 2001
From: Jesse Glick
Date: Thu, 28 Mar 2019 10:19:51 -0400
Subject: [PATCH 268/476] Merge pull request #3940 from
jglick/NegativeArraySizeException-JENKINS-45661
[JENKINS-45661] Defend against and better diagnose corrupted console notes
(cherry picked from commit bd57ac6536b963b4c5a418eededd6057cfc101e3)
---
.../console/ConsoleAnnotationOutputStream.java | 12 +++++-------
core/src/main/java/hudson/console/ConsoleNote.java | 11 +++++++----
.../java/hudson/console/AnnotatedLargeTextTest.java | 4 ++--
3 files changed, 14 insertions(+), 13 deletions(-)
diff --git a/core/src/main/java/hudson/console/ConsoleAnnotationOutputStream.java b/core/src/main/java/hudson/console/ConsoleAnnotationOutputStream.java
index f3a22c875c..5c731a17dd 100644
--- a/core/src/main/java/hudson/console/ConsoleAnnotationOutputStream.java
+++ b/core/src/main/java/hudson/console/ConsoleAnnotationOutputStream.java
@@ -24,9 +24,6 @@
package hudson.console;
import hudson.MarkupText;
-import org.apache.commons.io.output.ProxyWriter;
-import org.kohsuke.stapler.framework.io.WriterOutputStream;
-
import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.IOException;
@@ -38,6 +35,9 @@ import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
+import org.apache.commons.io.output.ProxyWriter;
+import org.apache.commons.lang.StringEscapeUtils;
+import org.kohsuke.stapler.framework.io.WriterOutputStream;
/**
* Used to convert plain text console output (as byte sequence) + embedded annotations into HTML (as char sequence),
@@ -119,11 +119,9 @@ public class ConsoleAnnotationOutputStream extends LineTransformationOutputSt
}
});
}
- } catch (IOException e) {
+ } catch (IOException | ClassNotFoundException e) {
// if we failed to resurrect an annotation, ignore it.
- LOGGER.log(Level.FINE,"Failed to resurrect annotation",e);
- } catch (ClassNotFoundException e) {
- LOGGER.log(Level.FINE,"Failed to resurrect annotation",e);
+ LOGGER.log(Level.FINE, "Failed to resurrect annotation from \"" + StringEscapeUtils.escapeJava(new String(in, next, rest)) + "\"", e);
}
int bytesUsed = rest - b.available(); // bytes consumed by annotations
diff --git a/core/src/main/java/hudson/console/ConsoleNote.java b/core/src/main/java/hudson/console/ConsoleNote.java
index b4f67cf3d6..39977a590e 100644
--- a/core/src/main/java/hudson/console/ConsoleNote.java
+++ b/core/src/main/java/hudson/console/ConsoleNote.java
@@ -239,6 +239,9 @@ public abstract class ConsoleNote implements Serializable, Describable implements Serializable, Describable
Date: Mon, 15 Apr 2019 04:06:03 -0700
Subject: [PATCH 269/476] [maven-release-plugin] prepare release jenkins-2.173
---
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 b02df3123e..f8d189a5bb 100644
--- a/cli/pom.xml
+++ b/cli/pom.xml
@@ -5,7 +5,7 @@
org.jenkins-ci.mainjenkins-parent
- ${revision}${changelist}
+ 2.173cli
diff --git a/core/pom.xml b/core/pom.xml
index 276901c0e7..055e0268c1 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -29,7 +29,7 @@ THE SOFTWARE.
org.jenkins-ci.mainjenkins-parent
- ${revision}${changelist}
+ 2.173jenkins-core
diff --git a/pom.xml b/pom.xml
index 5316f97a19..54e2df2bbc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -34,7 +34,7 @@ THE SOFTWARE.
org.jenkins-ci.mainjenkins-parent
- ${revision}${changelist}
+ 2.173pomJenkins main module
@@ -60,7 +60,7 @@ THE SOFTWARE.
scm:git:git://github.com/jenkinsci/jenkins.gitscm:git:ssh://git@github.com/jenkinsci/jenkins.githttps://github.com/jenkinsci/jenkins
- ${scmTag}
+ jenkins-2.173
diff --git a/test-jdk8/pom.xml b/test-jdk8/pom.xml
index 70c4870837..44995a66ed 100644
--- a/test-jdk8/pom.xml
+++ b/test-jdk8/pom.xml
@@ -28,7 +28,7 @@ THE SOFTWARE.
org.jenkins-ci.mainjenkins-test-parent
- ${revision}${changelist}
+ 2.173../test-pom
diff --git a/test-pom/pom.xml b/test-pom/pom.xml
index 36b18e666f..a1139ad751 100644
--- a/test-pom/pom.xml
+++ b/test-pom/pom.xml
@@ -28,7 +28,7 @@ THE SOFTWARE.
org.jenkins-ci.mainjenkins-parent
- ${revision}${changelist}
+ 2.173jenkins-test-parent
diff --git a/test/pom.xml b/test/pom.xml
index 4c5abecc6f..e60da06015 100644
--- a/test/pom.xml
+++ b/test/pom.xml
@@ -28,7 +28,7 @@ THE SOFTWARE.
org.jenkins-ci.mainjenkins-test-parent
- ${revision}${changelist}
+ 2.173../test-pom
diff --git a/war/pom.xml b/war/pom.xml
index bc8f98da18..29fa00c313 100644
--- a/war/pom.xml
+++ b/war/pom.xml
@@ -28,7 +28,7 @@ THE SOFTWARE.
org.jenkins-ci.mainjenkins-parent
- ${revision}${changelist}
+ 2.173jenkins-war
--
GitLab
From 3dc04f96ae743239c7d7118c2a3a76e364924626 Mon Sep 17 00:00:00 2001
From: Kohsuke Kawaguchi
Date: Mon, 15 Apr 2019 04:06:11 -0700
Subject: [PATCH 270/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 f8d189a5bb..b02df3123e 100644
--- a/cli/pom.xml
+++ b/cli/pom.xml
@@ -5,7 +5,7 @@
org.jenkins-ci.mainjenkins-parent
- 2.173
+ ${revision}${changelist}cli
diff --git a/core/pom.xml b/core/pom.xml
index 055e0268c1..276901c0e7 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -29,7 +29,7 @@ THE SOFTWARE.
org.jenkins-ci.mainjenkins-parent
- 2.173
+ ${revision}${changelist}jenkins-core
diff --git a/pom.xml b/pom.xml
index 54e2df2bbc..e24506e390 100644
--- a/pom.xml
+++ b/pom.xml
@@ -34,7 +34,7 @@ THE SOFTWARE.
org.jenkins-ci.mainjenkins-parent
- 2.173
+ ${revision}${changelist}pomJenkins main module
@@ -60,7 +60,7 @@ THE SOFTWARE.
scm:git:git://github.com/jenkinsci/jenkins.gitscm:git:ssh://git@github.com/jenkinsci/jenkins.githttps://github.com/jenkinsci/jenkins
- jenkins-2.173
+ ${scmTag}
@@ -76,7 +76,7 @@ THE SOFTWARE.
- 2.173
+ 2.174-SNAPSHOT
+
+
diff --git a/war/images/light-grey.svg b/war/images/light-grey.svg
new file mode 100644
index 0000000000..0d481ac309
--- /dev/null
+++ b/war/images/light-grey.svg
@@ -0,0 +1,178 @@
+
+
+
+
diff --git a/war/images/makeBalls.sh b/war/images/makeBalls.sh
index d17b81b7cc..26b49cc441 100755
--- a/war/images/makeBalls.sh
+++ b/war/images/makeBalls.sh
@@ -26,7 +26,7 @@
for sz in 16x16 24x24 32x32 48x48
do
- for color in grey blue yellow red green
+ for color in light-grey dark-grey grey blue yellow red green
do
cp $sz/$color.gif ../src/main/webapp/images/$sz/$color.gif
./makeFlash.sh $sz/$color.gif ../src/main/webapp/images/$sz/${color}_anime.gif
diff --git a/war/images/makeFlash.sh b/war/images/makeFlash.sh
index 11092a6c84..6d7e29575b 100755
--- a/war/images/makeFlash.sh
+++ b/war/images/makeFlash.sh
@@ -30,7 +30,7 @@ src=$1
dst=$2
for p in 20 40 60 80 100
do
- convert $src -alpha off -fill white -colorize ${p}% -transparent-color white -alpha on $t.$p.gif
+ convert $src -fill white -colorize ${p}% $t.$p.gif
done
convert -delay 10 $src $t.20.gif $t.40.gif $t.60.gif $t.80.gif $t.100.gif $t.80.gif $t.60.gif $t.40.gif $t.20.gif -loop 0 $dst
diff --git a/war/src/main/webapp/images/16x16/aborted.gif b/war/src/main/webapp/images/16x16/aborted.gif
index ad26e1e42bbe16d7edfdc58f5e43edcacc4315f8..16f9a8d206464a8e8984855819d21b925c4bee82 100644
GIT binary patch
literal 638
zcmZ?wbhEHb6krfw_{IPNfq{WRK|#U6!J(m{VPRq6;o%Vx5s{IRQBhIR(b2K7v2k&6
z@$vBq2?>dbiAhOG$;rtnDJiL`sTmm=nVFf{+1WWcIeB?``T6+;1qFqLg~i3iB_$=L
zrKM$MWfc__)z#HCH8pj0b@lc24Gj&Ajg8IC%`Gi0t*x!??d=^M9i5$>-QC?iJw3g>
zy?uRs{r&wDCQO((apI&&lO|7|JY~w1sZ*!UoH=v$?AdeX%$Yxb{=$U|7cXACbm`Ld
z>(_7CuwmoIjhi-Y+Pr!5_U+sE?AdeRz=1=D4jnmiJ{VM9V-|O-4x0w$;~2
z!`#M7UrCfl*0se(LEFmS&O}9wm(932SyxKk%-T{JYbpP-zP`S{zrVr3!NS7A!^6YG#KgtL#m2_Q$H&KP$jHda$;ryf%FD~k%*@Qr
z&d$%z&(P4&($dn?)6><})z;S5*x1FMk1>+S9B@$vEU^78if_V@Sq`1tty`}_R-{Qmy_lR*JYlTZOYlTZN}
ze04x9i000mG5C8xNoq$S$gM@{KNjfDTG)IPmG#4K!B^VSXj*2NSE0hoy
z7==C_B``WPD;^XK6fcAr9w{_HIxi)v1{8!87$q+^rysWrjY>rj6tF9t7!U~o5HNyC
z5UZ~q7t{s;3_yby2@DX&*#XalDGUY)H0uW1+n|Ka{gs5X6E*Fx&3i0VO_?3@V~y
cMS^zi{=w*0=*W;+H+%#sBG8e=L4g1OJ0@i9jsO4v
diff --git a/war/src/main/webapp/images/16x16/aborted.png b/war/src/main/webapp/images/16x16/aborted.png
index 3d5e4d7060698dbb8b4e48eb685838333ad1acd8..5371801768da24572165946facc5d2989c6df1a8 100644
GIT binary patch
delta 522
zcmdnPGJ|D;WIYQ51H;x|=C6PhQ?Zk02nR>#8#j<3XMsm#F#`k38xUsf%KKXc6qGD+
zjVKAuPb(=;EJ|f4FE7{2%*!rLPAo{(%P&fw{mw=Ts7Mr~$g#8}Bfp3txFoeKHBZ4k
zv8X7sr1Chcbs$iIGQ^b9qU6+ihK!Pu0xNxekXa>(dFlDO1x5K;smUcE123H1$I8IK
z=Dg1J`
zZO%B(S+nHLn^*D$icc35T)H#oiGu2$t!XOaar!^m*PdB?DAV?_+$F82+v@`qYNu9u
zPgHSKl8>1*|4ZxI~#4ii8Y%JN_i^%C`?QjTI345_D$AT$_4A;PY0^ZsOtIA_9#dyL$+u&$kl7}0UiI@2FcKI%UHx3v
JF*_wR0RV6`+&%yR
delta 558
zcmV+}0@3}L1iS>08Gi-<001BJ|6u?C0s~1zK~#7FrBVZ|Tu~IfPv5p}h2L>)H>@4i
zjA}%+ZN+Sy+P2-b?LG4rwNEm+oH^tIfdKm-`=P+HWy|=NFJCs4mzNKSjg3uw@#4i9
zNs_Mb+_}^9TY-7==JoFA=-7~*on4iXkRZ9;Zf3LD{04*J!+-tz_t&jlxpLc21=g)w
zx1_DDZBa@}O0p=5%_ZlAPTH@5`7UB
z2#}Gw0s`~^63EdA=sqd{qg8S0)Twu0)qn=)1QpGT6n`LsHL?dF0836zW*Uv=+_y!<
z^leZm6c@tniXfUlj2s}HCs(dqnepu)p-m};g@xr)rcBvXTU*;n9;I-|Xd~L{fB*jd
zlf8TQ&VBUg(OtS$6W8~pKs+tkgv@~h2M%p-Z||9rk&y>J)kJ&e&YhblPMkPMXB|L1
w?YE;G5hoI9iT?ru!9{R{;Y88DPT@Z+2;DYRyU*7jzyJUM07*qoM6N<$f+v;^c>n+a
diff --git a/war/src/main/webapp/images/16x16/aborted_anime.gif b/war/src/main/webapp/images/16x16/aborted_anime.gif
index 505f94fe88ff82eab44abf660f8f65487b5cb0e0..266e35bd1d89f0b481aac6f562dbc43a5cfb4b73 100644
GIT binary patch
literal 4858
zcmeI$XHZk=8VB&4)RRU+8X+Me2?^2@ihziP1W|U?OIeC|RYJMK+F)$hAt#A=se%O&
zQA81}2zIcbpkf8Z-cYc2MeMpSo}DZowy-;U_wJqR$xJ?+%w+OD&+q-e&&lAx0Pj9p
zCWeXW#B^Q3!NDORA)%q6VPRq6;o%Vx5s{IRBSwsfii#RJa^$E{qehP&J!Z_9=;&yz
zRvQx&6B`>F7Z(>FAD@trkeHY_Zrr%>RUv
zmXeY(Yu2pUvuDqpJ9pl^d8w(XX=!N)g6Q>ngTXL={`~ax^aTqRWMpJyW@ct(Wo2h)
z=j7z%=H@P3xG*m-FF!wj(V|6*7cXA6Y}xYV%ZrMNR<2xGQc_Y{TDo@a+AUkQR904Q
z-MY1^s;auWdgsoawY9Ye4jedm@L+v?{fQGNPM$n@>eQ*TXU|@^aN**`i&w8+y>{)|
z_3PJf-n@DH_U$`&?%ca~@4TG`x2bHs}
z6-(UDFwD))%hyLKerZONt)Ai+NnPcq${&1OXXe@|i3I)b@SfvX%WdR5Vi*KT)
zwi|UO+Na1apHN+gZAm7orFM1h^@NbUeKM#8s2HG((-Ad4t
z^%}vtQC`!hPY1ka%$PBA=1dgXoH=v4JJacOC^e(e2&i>;Wt!t5&T7)K;%v4YaLUvj%`GD=S;KZe4kKc|}FV`t|EKZQ6tq1pc;d+qQlC
zc0h3d{{4VpU0oee*wE0>*w~0FY-(ycfBw7);*A?OT3cJ&+S=ON+kwTqckiMQA3uKl
z*I{4{=I75T(i?`_3dbWDF
zF1HfHys2mQ&5N{@--ekM`9AuA&9N|B^If6DHKhG$o?V1hqnrc(5pGMDE;Z>uQwRVl
zE-vngkqsL*Y}~jJNZGu3GYBg*seqInJ9YppyLRo`y?ghbJ$q_uYCv}F-Me?+zI{Lt
zuyg3pArN9f(2*lYjvhS<9GyOW8X#(JZfwC5?OmJ|0wx(RM}|t+We#>yOEVb9^V0g9A%K+8qf`dpT5z|4+k(sr0VSVbmae=jxzsL0QHKoiA8;_%_a
zCKbny9Xo#fxaqJnAvtsA3^@1zm2>CLp}~WKxpL(Snmwo)5I^7?1n~n7K@?1PE#Mpk
zU`$%jbMW)$&%e|;V)?+-q#;g%2^9>tiU1pIYOM#Slvlv0iYb%oai--Cr
zCl#byr#IM85^XbZe(tqe0Y{kd{dgQhrS@P`m|uDV>PNFzdvaik8IwUHlW-8-Nh2hX
z$QxiH9)h^T)N(4Gu!~R%kzzESLK1|qhRO}kYzfMP>2>-3?|7kk<`sDW?{3D_#fd9vz{QCX?1h!kB
literal 2511
zcmd^=i7%vg7=XX8of&IPW(S{{ktk+5!&+TLB#sps%U}>y+D$6bu(l1U3f=8EvXwE$
zQt4u?Z8yrAag}jjb;MEkecuLgTlalm{n>BVO6m`2>iY|R&-*;@`&n`<3=CaK5DD6a
zpxD^hxVX6Z`1pi`1fftU5{VKM6O)pXl9Q8DQc_Y=Q`6GY($mw$VsS=BMrLMaR#sMa
zc6LrqPJVuVK|w)bVPR2GQE_o`Nl8g*X=zzmS$TPRMMXtrWo1=WRdscBO-)U0ZEam$
zU44ChLqkJjV`EcOQ*(23OG`^@YinCuTSrGnXJ==%
zey||qDaVMZqG$OuSdXHj!K5P0h;R*U%@`7e8e*c%)G^Z2R7MDhwt%Xvp~o`PW{Po$
z0HHFq_5V~UCOordlaO4^I4VgRCh71wq>LP8N*@j;u!1Sl1XANL+$qo?;G~yuBNCyY
zeRd1Rk?QznI+9fh%ruE6+)i|3^SLXh)o<>K0f9N`cSi<>j@tH6U|mXXoJH0CjkFcJ^Ode3Y2d_a?)PsbMw33DtV?O-`N29*0k^3EDSMlL|7`
zbfX~;3FARvtg(s&S4FeTY99RU;~VmAkACoC$hg3+p^!g|@hChJf-!D%1)@LSAHvJU
zkYx#>iGL8~)D;j}F+z^f%2A}f!=_%s2AzY#LEfNk5O#NWcVAy0S~6%D1Uxl0H9I>C
z>b;!q*4Ebc_BKfO@bK{DB3
zZplQm!~
zqB!B6E>*=g95*iC$(c?jI{g#~tWF2A$U66+#nQe6q^LK)ea+9gl(aR}ANfe%t8#wkn^qqq#qaDT%fp
z>-q+ASaP9SzcAiwgFgWA-cI}MBb8qx)BnyIr29FfI?4X!Z8_~TDHRdxAK)>RH@I78
W1;1aNjQSdcCP1oWlboU>@V|IxE
diff --git a/war/src/main/webapp/images/16x16/dark-grey.gif b/war/src/main/webapp/images/16x16/dark-grey.gif
new file mode 100644
index 0000000000000000000000000000000000000000..16f9a8d206464a8e8984855819d21b925c4bee82
GIT binary patch
literal 638
zcmZ?wbhEHb6krfw_{IPNfq{WRK|#U6!J(m{VPRq6;o%Vx5s{IRQBhIR(b2K7v2k&6
z@$vBq2?>dbiAhOG$;rtnDJiL`sTmm=nVFf{+1WWcIeB?``T6+;1qFqLg~i3iB_$=L
zrKM$MWfc__)z#HCH8pj0b@lc24Gj&Ajg8IC%`Gi0t*x!??d=^M9i5$>-QC?iJw3g>
zy?uRs{r&wDCQO((apI&&lO|7|JY~w1sZ*!UoH=v$?AdeX%$Yxb{=$U|7cXACbm`Ld
z>(_7CuwmoIjhi-Y+Pr!5_U+sE?AdeRz=1=D4jnmiJ{VM9V-|O-4x0w$;~2
z!`#M7UrCfl*0se(LEFmS&O}9wm(932SyxKk%-T{J-?)JUISV`@iy0VL
z-heP;SKi+uprB-lYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Kt-Y;MUJH<
z8TmyF!6m6>sd)K*L8CyMhYi&$i*%Qs1^*>q6K
zQ|U)xV!F^;cP_WHm%ktG5j>jErpZ+C!rk!evy91$b{eb4xp4>_XrIj}()Dsrn4;^y
zA3t_8tLw$^ELs@ABY4u&GraQ4k?uo%vaL>r9ffPJo}8Z5ty^OCbJfCtFM?Iq^P{Sl
z2A+BnyfotIwTWDF+w%{X3s1j$^HW*o#HybMbxe~cs%46;Hu0D`<4L|9gN4jCdGo5D
Re}FN-;OXk;vd$@?2>=jb+dlvR
literal 0
HcmV?d00001
diff --git a/war/src/main/webapp/images/16x16/dark-grey_anime.gif b/war/src/main/webapp/images/16x16/dark-grey_anime.gif
new file mode 100644
index 0000000000000000000000000000000000000000..266e35bd1d89f0b481aac6f562dbc43a5cfb4b73
GIT binary patch
literal 4858
zcmeI$XHZk=8VB&4)RRU+8X+Me2?^2@ihziP1W|U?OIeC|RYJMK+F)$hAt#A=se%O&
zQA81}2zIcbpkf8Z-cYc2MeMpSo}DZowy-;U_wJqR$xJ?+%w+OD&+q-e&&lAx0Pj9p
zCWeXW#B^Q3!NDORA)%q6VPRq6;o%Vx5s{IRBSwsfii#RJa^$E{qehP&J!Z_9=;&yz
zRvQx&6B`>F7Z(>FAD@trkeHY_Zrr%>RUv
zmXeY(Yu2pUvuDqpJ9pl^d8w(XX=!N)g6Q>ngTXL={`~ax^aTqRWMpJyW@ct(Wo2h)
z=j7z%=H@P3xG*m-FF!wj(V|6*7cXA6Y}xYV%ZrMNR<2xGQc_Y{TDo@a+AUkQR904Q
z-MY1^s;auWdgsoawY9Ye4jedm@L+v?{fQGNPM$n@>eQ*TXU|@^aN**`i&w8+y>{)|
z_3PJf-n@DH_U$`&?%ca~@4TG`x2bHs}
z6-(UDFwD))%hyLKerZONt)Ai+NnPcq${&1OXXe@|i3I)b@SfvX%WdR5Vi*KT)
zwi|UO+Na1apHN+gZAm7orFM1h^@NbUeKM#8s2HG((-Ad4t
z^%}vtQC`!hPY1ka%$PBA=1dgXoH=v4JJacOC^e(e2&i>;Wt!t5&T7)K;%v4YaLUvj%`GD=S;KZe4kKc|}FV`t|EKZQ6tq1pc;d+qQlC
zc0h3d{{4VpU0oee*wE0>*w~0FY-(ycfBw7);*A?OT3cJ&+S=ON+kwTqckiMQA3uKl
z*I{4{=I75T(i?`_3dbWDF
zF1HfHys2mQ&5N{@--ekM`9AuA&9N|B^If6DHKhG$o?V1hqnrc(5pGMDE;Z>uQwRVl
zE-vngkqsL*Y}~jJNZGu3GYBg*seqInJ9YppyLRo`y?ghbJ$q_uYCv}F-Me?+zI{Lt
zuyg3pArN9f(2*lYjvhS<9GyOW8X#(JZfwC5?OmJ|0wx(RM}|t+We#>yOEVb9^V0g9A%K+8qf`dpT5z|4+k(sr0VSVbmae=jxzsL0QHKoiA8;_%_a
zCKbny9Xo#fxaqJnAvtsA3^@1zm2>CLp}~WKxpL(Snmwo)5I^7?1n~n7K@?1PE#Mpk
zU`$%jbMW)$&%e|;V)?+-q#;g%2^9>tiU1pIYOM#Slvlv0iYb%oai--Cr
zCl#byr#IM85^XbZe(tqe0Y{kd{dgQhrS@P`m|uDV>PNFzdvaik8IwUHlW-8-Nh2hX
z$QxiH9)h^T)N(4Gu!~R%kzzESLK1|qhRO}kYzfMP>2>-3?|7kk<`sDW?{3D_#fd9vz{QCX?1h!kB
literal 0
HcmV?d00001
diff --git a/war/src/main/webapp/images/16x16/disabled.gif b/war/src/main/webapp/images/16x16/disabled.gif
index ad26e1e42bbe16d7edfdc58f5e43edcacc4315f8..a0e501cddbd0bd261449ef0a122598bd75d1b2c4 100644
GIT binary patch
literal 268
zcmZ?wbhEHb6krfw_#(+LXU?2Oixw?ix^(5rm220o-Mo48_U+qu?AWn?|Nesq4<0{$
z{PgM5=gytGeEIU#t5h!K7aoF_3PJf-@g6y>C^Y`-+%x9{qNsD25dm_
zCkrbBgCv6vND^cx18Zl3T3xUv*zK1DBA5vX~$bQ*ZBlzFJjr(O>}~5wS&j+msa<
FtN}&6YzP1V
literal 576
zcmd7P$!Z#50KoBYAWRYF@Er!6laj(5rWW)dq%{yyLK^e|3O$y-Lr*=lI?18X(uABu
zakuUk7hG_`eXWXCQAb75XhaNXK`n}uyhZ;{@Pq$_`1OmI?;wC+1%O;GS11%prBbC*
zsnu$YMx)hgbvm71uQwPBMx)VWGMUY0i^XEKT5UF)-EMa{98Rax<#M^*ZjZ;~^?H3i
zpWp8f1OmZeFcb=f!{JCI5{*Vx(bGckTpDz>bU8k
zDwWISN~Kb*R%^9dyd=qc5+-
zB9be-xRMFkT#6)c^4k}R&%1?e;_`$;3PeI42gh(eO>ijTsfbTnP@KjIl7IAr>%+cE
z&LRGjryw8;fdZ)*TAdvBZxq2!Wo#A(GcBY{Qy9vcp>0M@|GN8wpfD*t6EF`9LY~}U
g&$RE)r61<|*!`RP?Dw}v9}lRfmFv{2&j1|%17;oO>i_@%
diff --git a/war/src/main/webapp/images/16x16/disabled.png b/war/src/main/webapp/images/16x16/disabled.png
index 3d5e4d7060698dbb8b4e48eb685838333ad1acd8..74b29d9c09ce80f7073878b97f47adfd658a5f7a 100644
GIT binary patch
delta 381
zcmV-@0fPR#1dRib8Gi%-006c6H|hWY0aQsuK~xwS1;M{-6JY=V(D&UX#3Uw&ZP39%
zMGypavx19*xai=Zjw1LER8f#_f=h5w1i`V3ly(<4p{odjAfoLeLP1+>e%|FSz0dbT
z1ONa4)Bt#vY@a)IqtV{_Q2+F{1PBrE`1<9Sy)&(PVN(73{eQLp{0$Hy=&xLQ+U?X-
za${q)^5?rp_aT7?XD=+bIxRCwZiF<7l?jEikD`dv@4Nc_cDhHa2mPpu`6vLUZfqerbQ-xAgPV+4iVyt#%
zaw7vn6ElSp<#x{cFA~^ZYs@pbOeU8r(D8Q@LIkfrE?%7qh@fHq{r$!Df&@ahzx-pf
zUDiaTy49a=FCK0zgp?2wntB#)-dehL^tg1i`{nc6sy%ygmk)H>@4i
zjA}%+ZN+Sy+P2-b?LG4rwNEm+oH^tIfdKm-`=P+HWy|=NFJCs4mzNKSjg3uw@#4i9
zNs_Mb+_}^9TY-7==JoFA=-7~*on4iXkRZ9;Zf3LD{04*J!+-tz_t&jlxpLc21=g)w
zx1_DDZBa@}O0p=5%_ZlAPTH@5`7UB
z2#}Gw0s`~^63EdA=sqd{qg8S0)Twu0)qn=)1QpGT6n`LsHL?dF0836zW*Uv=+_y!<
z^leZm6c@tniXfUlj2s}HCs(dqnepu)p-m};g@xr)rcBvXTU*;n9;I-|Xd~L{fB*jd
zlf8TQ&VBUg(OtS$6W8~pKs+tkgv@~h2M%p-Z||9rk&y>J)kJ&e&YhblPMkPMXB|L1
w?YE;G5hoI9iT?ru!9{R{;Y88DPT@Z+2;DYRyU*7jzyJUM07*qoM6N<$f(>sDZ2$lO
diff --git a/war/src/main/webapp/images/16x16/disabled_anime.gif b/war/src/main/webapp/images/16x16/disabled_anime.gif
index 505f94fe88ff82eab44abf660f8f65487b5cb0e0..2c95e2b9bd821a1948a35be6ba0c54eab56e842c 100644
GIT binary patch
literal 1551
zcmZ?wbhEHb6krfw_{zj^_wL<)|Neda`0?Sxhd+P*yn6NO^XJbuY}l}M>(*VncJ1A}
z_t2q3$BrF4bLPyYOP6lkxbf!Ao3CHLK701;<;#~}zI-`%?%dnAZ;u=~a`NQKix)3m
zxpL*^&6^J%JoxqN*M|=uZr!@|{rmUp*RS8ZckkW1cRzmo`19w_>({T}zkmPt@83Cd
z<}6yYXz9|WD_5>uyLRp7&6~Gx-@aqVj{W=hA3S*Q`0?YXPoKVg`SPbvpML-T{r~@e
z25dm_KewN2NU*bGfUA+70W%{|jp9!hRxSo61|5)kkT)6FCOR}0c<4wmH_v=iY|Lk`
zFPY0$e0Gjk)LN(9y$P<)IbjktT884MLzNFDZRyVpn7uMoZxOfIYQ}R$=#+M2qoPK>(Q`G)#av@~_pob|PJblYcY_PdzqXlbw3nl(GYrFZFOO)cFPCo|UB
z>t<^jvoSg=FpFxhUAv!kuB*9OF$0^J!XdwF&W=!53Nh#~GB7gm0U-lhi$iCCkb#9%
z^MQiQ1QRa4V}~|Qk>PG|4>_2?qsYsCz@WlJtdrH@g$|DbTLW`%1cx}!#|1Th3POx5
zT-^TrQ9N86>|6|tT$z5n9d+!SOhP>MT+RJm-A=4^9QBLYr^Y$;FI&yd!Q~|+$S`%@
zRCYcAFBUfb#rw812zWCJGO-JKy)2y9?5n|z?a@*;x;gD=|#85v8V
z70VV~*D5?jS)CmQa2ZM)20W6F)luPwfQKW(zjXZo=)WCj+i*Qq-tWY)LUM>&<(O{({D
z>6)CF=HfQ7&VQ;?VO(6{RIGNYg6!0mYWG+y)UKj8_3-mxjo6^oH`Z)>aVBo>{Va*w
cs_sV{6rc$VCCmoGwF4GUgE0jU!t8Dh0C$cmbN~PV
literal 2511
zcmd^=i7%vg7=XX8of&IPW(S{{ktk+5!&+TLB#sps%U}>y+D$6bu(l1U3f=8EvXwE$
zQt4u?Z8yrAag}jjb;MEkecuLgTlalm{n>BVO6m`2>iY|R&-*;@`&n`<3=CaK5DD6a
zpxD^hxVX6Z`1pi`1fftU5{VKM6O)pXl9Q8DQc_Y=Q`6GY($mw$VsS=BMrLMaR#sMa
zc6LrqPJVuVK|w)bVPR2GQE_o`Nl8g*X=zzmS$TPRMMXtrWo1=WRdscBO-)U0ZEam$
zU44ChLqkJjV`EcOQ*(23OG`^@YinCuTSrGnXJ==%
zey||qDaVMZqG$OuSdXHj!K5P0h;R*U%@`7e8e*c%)G^Z2R7MDhwt%Xvp~o`PW{Po$
z0HHFq_5V~UCOordlaO4^I4VgRCh71wq>LP8N*@j;u!1Sl1XANL+$qo?;G~yuBNCyY
zeRd1Rk?QznI+9fh%ruE6+)i|3^SLXh)o<>K0f9N`cSi<>j@tH6U|mXXoJH0CjkFcJ^Ode3Y2d_a?)PsbMw33DtV?O-`N29*0k^3EDSMlL|7`
zbfX~;3FARvtg(s&S4FeTY99RU;~VmAkACoC$hg3+p^!g|@hChJf-!D%1)@LSAHvJU
zkYx#>iGL8~)D;j}F+z^f%2A}f!=_%s2AzY#LEfNk5O#NWcVAy0S~6%D1Uxl0H9I>C
z>b;!q*4Ebc_BKfO@bK{DB3
zZplQm!~
zqB!B6E>*=g95*iC$(c?jI{g#~tWF2A$U66+#nQe6q^LK)ea+9gl(aR}ANfe%t8#wkn^qqq#qaDT%fp
z>-q+ASaP9SzcAiwgFgWA-cI}MBb8qx)BnyIr29FfI?4X!Z8_~TDHRdxAK)>RH@I78
W1;1aNjQSdcCP1oWlboU>@V|IxE
diff --git a/war/src/main/webapp/images/16x16/light-grey.gif b/war/src/main/webapp/images/16x16/light-grey.gif
new file mode 100644
index 0000000000000000000000000000000000000000..825afac2f066d1e9a06014d99c30db0b5999ab38
GIT binary patch
literal 636
zcmZ?wbhEHb6krfw_{IPNYu2pUuwlcF9XodJ+_`JluHCzL@7c3w@7}%p_wPS=@Zh0C
zhYlY;eB{WHqeqV(J9g~&@#7~>oH%*%-X>9fByXW`}gm^fB(R~8DfOuPZmaylNJASd*&vl
zr}`$QXC`O!r6=a*CfXY4nV5nggAPauD8?ArcQ-IJHMg|3IjhUbC^@t>t1IXj=xRvH
z_9Z%%A+FG0Hs!53{w8&{2TRGX8>#Ixi2)9UR8d}&`tx}WZ;xliu
zl~mI)G%?oKR1)D3P;YV)kyF#s(biCr%8%u$JQ`
literal 0
HcmV?d00001
diff --git a/war/src/main/webapp/images/16x16/light-grey.png b/war/src/main/webapp/images/16x16/light-grey.png
new file mode 100644
index 0000000000000000000000000000000000000000..5cfabaf81b258de366144b703f9bde75c575a5ff
GIT binary patch
literal 538
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6n2Mb|LpV4>-?)JUISV`@iy0VL
z-heP;SKi+uprB-lYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Kt-Y;MUJH<
z8TmyF!6m6>sd)`Qlwjev;X
zw?pNe=5C9dNvopme5U^lc6ZsS(CElBSHMo>-=B)zB0HKH56xM$xY$R)p6h5^qUQ7_
z*3;i+_sf2}kt)s4)jHjDwn(Jcb!IscJ{b)WF7b6ITzYF(=HzaEoBwQ%h6vxbdtu74
zwn6%8KU1c;WlBp#^W1zqYh#U(N&349Vk@W0pIYK2wZwDQ(!f_soV=do-($SY{VI4-
T_O>Qq958sg`njxgN@xNA@FLf=
literal 0
HcmV?d00001
diff --git a/war/src/main/webapp/images/16x16/light-grey_anime.gif b/war/src/main/webapp/images/16x16/light-grey_anime.gif
new file mode 100644
index 0000000000000000000000000000000000000000..4e5a40f0754dbb821b791fb27ad9e3b175370fc2
GIT binary patch
literal 3534
zcmZ?wbhEHb6krfw_{IPNYu2pUuwlcF9XodJ+_`JluHCzL@7c3w@7}%p_wPS=@Zh0C
zhYlY;eB{WHqeqV(J9g~&@#7~>oH%*%-X>9fByXW`}gm^fB(R~8DfOuPZmZlpqmx{bNji5
z1UowhxEkphFf&4gJaZG%Q+*TDGn2FV(i3xY6KxIjOiV$LK?mefP$V+2?`~jdYHn$5
zb5@s=QF3T&R#(t5(AAKX?NiV+GBq*KQkD^I)m1gLw6!+XRg)4^Xpz%4wsNvF*H@S3
z5pI#tG_TBRn*#b@4RE2*YqXkx6dsU*T7px)#pBB!RMqphJL$;-yC*DNL^t)!wN
zFTu~o#^=~9Eyyb@Dk8}JiARisv+}|F1B{hyLM|^HIgYn8@e7==W_ak(BKDQ#qeG$N
z0R|>kHkJYbr?!RiW)U+q8kLUqDfT4^aj`HU1pqO=Z3X%om^Kd_IDnQINll4&?%aVV
z#s?1`K++>5F%pv!KY#v=oEU%n_(5cPWLx3TP~f2>Rk(m>S+X&oqx7YfBCAs7NC#$Z
zwd%E!@Z9*tac|njP|lQ@IUO@6a+NLK>bKyulGB=w06imvECo?cUR@_+Q3VwZZ7p>r
zSwVI_1t)VsNd;vUWkoqr9yVSzXJG+xSvff=QC_yC=FZ~$Jc2@k{9K#3gkeJ~TQ*hH%l97;*l2_CAdqaB6v;aL1DR!}jH=Y8Qm>~cE|3B+w1%WW)@1*3N~eb0&GW
zF-{aLl$dntUD8Ykk=7QMCxI3!Q@B!v5@k3zM3uQYwFL$Fc{o@a5A%q^5rk>qFQV4cg!!YSIPBrVL%#Jq`_k%M1cE!11kN?Km;fQlli=@%4AkopEv
z*%0Y>A`%u<32Q4jl-#_VR3=z1^Es@;@kq`4vB}v*3hhG93#)BpoD-U+bl55hsH{y;
zkS*d<{uHiZ;lkgdbZoXNAIo7U5la;j?qfaH1_o~IhrJeBNV74s>MC)tg|Jt$Hn2J>
z3$`({ury3$<5%J1ES)?xlc$-1pPQX&3Ns@sC$Czda{;fv-X_w+r2*)CU>q|kwDhk$
zxb}KdMbNS+!EFWZj|(5N_XSI4E#9^0-X>e4AYdhisLY5d%SQtodyPJtU5QCOpq9XB
Qbu$>No6$BJ{n}{O0G3|NMgRZ+
literal 0
HcmV?d00001
diff --git a/war/src/main/webapp/images/16x16/nobuilt.gif b/war/src/main/webapp/images/16x16/nobuilt.gif
index ad26e1e42bbe16d7edfdc58f5e43edcacc4315f8..825afac2f066d1e9a06014d99c30db0b5999ab38 100644
GIT binary patch
delta 435
zcmV;k0ZjhD1pEXjM@dFFIbje05CHZ700000tgNiCu&}texVgExy1Kf%ySu!+yuH1>
zk!L4=&CSiu&d$%z&(P4&(b3V;($dq@)6~?|)z#J3*4Ee8*Vx$D+1c6J+S=RO+uhyW
z-rnBd-{0Zk;o{=ruz*=jZ3>=;-O`>FVn0>+9?6?CkCB?e6aG@9*#M
z@bK~R@$&NW^z`)g_4W4l_V@Sq`T6b4&ASp66G%zY792JEvB{4ZYJ2fpP8Wtdg9xF3CLOwSyCmReC
zgcvC?I6OM4CK(D2H-bGGCU7hF9pdEoEB0eJ=zMCd^X$A;$
delta 413
zcmV;O0b>6A1i%D;M@dFFIbje05CHZ70GgVboSdAUot>YbpP-zP`S{zrVr3!NS7A!^6YG#KgtL#m2_Q$H&K!Ko4Ec&d$%z&(P4&($dn?
z)6><})z;S5*x1FMk1
z>+S9B@$vEU^78if_V@Sq`1tty`}_R-{Qmy_k>R3$A^8LW002q=EC2ui01yBW000M_
zfJ%acgoTDlIwc=8M}~tm7au7l7!)OriYYHEln@sfg+3l7Fgi3V9uy1|FN7E#DKtPj
zFD0r56oeEQB`-IpAGZvRN<|P9uq&Jx5D5VgFoH=CtFImx)CK_zK!Xjv7}poGok^8p4B#DYUG+wR)|B|ef2DxzaWf_Clx!RS`#$dFk#d;}>X(2>PK
HfdBwIwm0Ei
diff --git a/war/src/main/webapp/images/16x16/nobuilt.png b/war/src/main/webapp/images/16x16/nobuilt.png
index 3d5e4d7060698dbb8b4e48eb685838333ad1acd8..5cfabaf81b258de366144b703f9bde75c575a5ff 100644
GIT binary patch
delta 524
zcmdnPGK*z`WIYQ51H;x|=C6PhQ?Zk02nR>#8#j<3XMsm#F#`k38xUsf%KKXc6qGD+
zjVKAuPb(=;EJ|f4FE7{2%*!rLPAo{(%P&fw{mw=Ts7Mr~$g#8}Bfp3txFoeKHBZ4k
zv8X7sr1Chcbs$iIGQ^b9qU6+ihK!Pu0xNxekXa>(dFlDO1x5K;smUcE123H1$I8IK
z=;`U=7$PA#_260U!-X;jKK8fGY8GJU>*_8lE(kt1sr&zdlLwDp&1GMtc9i$2i{#3m
zOJ(-W-pZaVcT0!=WAx=`+mCLrIpZ>WyNUA74^=1ab!Mhjo31vqyltL1t^WR-zlydK
z_bYk!$R?+{)Lm*zzL|aLPSH`;^p@gTzWdIWyz1AKt9aIF;<-p>!*?rt4cEH%gS?WT
z_7ogfectl%k<}C?FDAD+BHvR^PEhllB9OP|{57?o22p$K#Z?`FH0Ig1t-`v}-`9c@e0oZiHG`rGV&*>5*e
zrTMv9r<=|eiS)Y8EGNPzqang2zV3ueZ_Ub_+|6(EpUu$_;oEjEOgYvzNMG$|$~3o3
zX^Ci_n~!I0tT8f4e>XvF08Gi-<001BJ|6u?C0s~1zK~#7FrBVZ|Tu~IfPv5p}h2L>)H>@4i
zjA}%+ZN+Sy+P2-b?LG4rwNEm+oH^tIfdKm-`=P+HWy|=NFJCs4mzNKSjg3uw@#4i9
zNs_Mb+_}^9TY-7==JoFA=-7~*on4iXkRZ9;Zf3LD{04*J!+-tz_t&jlxpLc21=g)w
zx1_DDZBa@}O0p=5%_ZlAPTH@5`7UB
z2#}Gw0s`~^63EdA=sqd{qg8S0)Twu0)qn=)1QpGT6n`LsHL?dF0836zW*Uv=+_y!<
z^leZm6c@tniXfUlj2s}HCs(dqnepu)p-m};g@xr)rcBvXTU*;n9;I-|Xd~L{fB*jd
zlf8TQ&VBUg(OtS$6W8~pKs+tkgv@~h2M%p-Z||9rk&y>J)kJ&e&YhblPMkPMXB|L1
w?YE;G5hoI9iT?ru!9{R{;Y88DPT@Z+2;DYRyU*7jzyJUM07*qoM6N<$f-CY4djJ3c
diff --git a/war/src/main/webapp/images/16x16/nobuilt_anime.gif b/war/src/main/webapp/images/16x16/nobuilt_anime.gif
index 505f94fe88ff82eab44abf660f8f65487b5cb0e0..4e5a40f0754dbb821b791fb27ad9e3b175370fc2 100644
GIT binary patch
literal 3534
zcmZ?wbhEHb6krfw_{IPNYu2pUuwlcF9XodJ+_`JluHCzL@7c3w@7}%p_wPS=@Zh0C
zhYlY;eB{WHqeqV(J9g~&@#7~>oH%*%-X>9fByXW`}gm^fB(R~8DfOuPZmZlpqmx{bNji5
z1UowhxEkphFf&4gJaZG%Q+*TDGn2FV(i3xY6KxIjOiV$LK?mefP$V+2?`~jdYHn$5
zb5@s=QF3T&R#(t5(AAKX?NiV+GBq*KQkD^I)m1gLw6!+XRg)4^Xpz%4wsNvF*H@S3
z5pI#tG_TBRn*#b@4RE2*YqXkx6dsU*T7px)#pBB!RMqphJL$;-yC*DNL^t)!wN
zFTu~o#^=~9Eyyb@Dk8}JiARisv+}|F1B{hyLM|^HIgYn8@e7==W_ak(BKDQ#qeG$N
z0R|>kHkJYbr?!RiW)U+q8kLUqDfT4^aj`HU1pqO=Z3X%om^Kd_IDnQINll4&?%aVV
z#s?1`K++>5F%pv!KY#v=oEU%n_(5cPWLx3TP~f2>Rk(m>S+X&oqx7YfBCAs7NC#$Z
zwd%E!@Z9*tac|njP|lQ@IUO@6a+NLK>bKyulGB=w06imvECo?cUR@_+Q3VwZZ7p>r
zSwVI_1t)VsNd;vUWkoqr9yVSzXJG+xSvff=QC_yC=FZ~$Jc2@k{9K#3gkeJ~TQ*hH%l97;*l2_CAdqaB6v;aL1DR!}jH=Y8Qm>~cE|3B+w1%WW)@1*3N~eb0&GW
zF-{aLl$dntUD8Ykk=7QMCxI3!Q@B!v5@k3zM3uQYwFL$Fc{o@a5A%q^5rk>qFQV4cg!!YSIPBrVL%#Jq`_k%M1cE!11kN?Km;fQlli=@%4AkopEv
z*%0Y>A`%u<32Q4jl-#_VR3=z1^Es@;@kq`4vB}v*3hhG93#)BpoD-U+bl55hsH{y;
zkS*d<{uHiZ;lkgdbZoXNAIo7U5la;j?qfaH1_o~IhrJeBNV74s>MC)tg|Jt$Hn2J>
z3$`({ury3$<5%J1ES)?xlc$-1pPQX&3Ns@sC$Czda{;fv-X_w+r2*)CU>q|kwDhk$
zxb}KdMbNS+!EFWZj|(5N_XSI4E#9^0-X>e4AYdhisLY5d%SQtodyPJtU5QCOpq9XB
Qbu$>No6$BJ{n}{O0G3|NMgRZ+
literal 2511
zcmd^=i7%vg7=XX8of&IPW(S{{ktk+5!&+TLB#sps%U}>y+D$6bu(l1U3f=8EvXwE$
zQt4u?Z8yrAag}jjb;MEkecuLgTlalm{n>BVO6m`2>iY|R&-*;@`&n`<3=CaK5DD6a
zpxD^hxVX6Z`1pi`1fftU5{VKM6O)pXl9Q8DQc_Y=Q`6GY($mw$VsS=BMrLMaR#sMa
zc6LrqPJVuVK|w)bVPR2GQE_o`Nl8g*X=zzmS$TPRMMXtrWo1=WRdscBO-)U0ZEam$
zU44ChLqkJjV`EcOQ*(23OG`^@YinCuTSrGnXJ==%
zey||qDaVMZqG$OuSdXHj!K5P0h;R*U%@`7e8e*c%)G^Z2R7MDhwt%Xvp~o`PW{Po$
z0HHFq_5V~UCOordlaO4^I4VgRCh71wq>LP8N*@j;u!1Sl1XANL+$qo?;G~yuBNCyY
zeRd1Rk?QznI+9fh%ruE6+)i|3^SLXh)o<>K0f9N`cSi<>j@tH6U|mXXoJH0CjkFcJ^Ode3Y2d_a?)PsbMw33DtV?O-`N29*0k^3EDSMlL|7`
zbfX~;3FARvtg(s&S4FeTY99RU;~VmAkACoC$hg3+p^!g|@hChJf-!D%1)@LSAHvJU
zkYx#>iGL8~)D;j}F+z^f%2A}f!=_%s2AzY#LEfNk5O#NWcVAy0S~6%D1Uxl0H9I>C
z>b;!q*4Ebc_BKfO@bK{DB3
zZplQm!~
zqB!B6E>*=g95*iC$(c?jI{g#~tWF2A$U66+#nQe6q^LK)ea+9gl(aR}ANfe%t8#wkn^qqq#qaDT%fp
z>-q+ASaP9SzcAiwgFgWA-cI}MBb8qx)BnyIr29FfI?4X!Z8_~TDHRdxAK)>RH@I78
W1;1aNjQSdcCP1oWlboU>@V|IxE
diff --git a/war/src/main/webapp/images/24x24/aborted.gif b/war/src/main/webapp/images/24x24/aborted.gif
index 22d9ed434371ebf0a680c92505d00a97e401aed7..af1ef09b4a2f3bb6838961d98893442e2acd8b6b 100644
GIT binary patch
literal 837
zcmV-L1G@Z2Nk%w1VHf}y0QLX?0000{QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_I
zT3cINTwGjTU0q&YUSD5dU|?WjVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2
zY;0_8ZEbFDZf|dIaBy&OadC2Ta&vQYbaZreb#-=jc6WDoczAeud3k$#dwhI+eSLj?
zetv&{e}I61fq{X7f`WsCgM@^Hg@uKNhK7fShlq%XiHV7dii(Sii;azqj*gCxkB^X$
zkdcv*l9G~>larK`l$Dj0mX?;6mzS8Bn46oMot>SYo}QqfprN6mqN1Xwr>Cf>sH&=}
ztE;Q6t*x)GuduMNva+(awzk8=!^OqL#>U3T$jHmf%goHo&d$!#($dq@)6~?|*4Eb7
z*VowC*xK6K+uPgR+}z*a-{9cj;o;%p;^O1ulq*=;-O`>Few3?Ck9B?(XpL
z@bU5S^78WY^Yiuf_4fAm_xJbs`1tzz`uqF){QUg={r_{r~^~A^8LW00000A^!_W
zZDD6+O<`wgV`~m)VQp<;JuogbH8eFeH2^FC0000O02lxO2mXKnf`f#GhKGoWiU4|7
zMnywLRCJ4jd{09~K{+xsIX^>li*!9lHZwCYDkK^gF*;$1c|AfhIzB%;H7g<)5gL@6^rNKQ{mLN+QM6b%P3PKHA_C)r6*QA_FJ6b=Uu
zJ%&IaB``ZiOH4<8&`7~y0=WP-*bvI|qXGyOHE0d_fx`s}3=tL-2*3ghp*K4uWEinR
z#*G^^T$t!U;X#4{9H$V%)5F084IxgbP?3T}hYAoD7zn`8N+BN*9!#*X!Gi}57$`ts
za6kZ28fgjvF`=LV1PK!;Oo-rM!2y^781OLEMMnVyg$funXux1W0s~fwx>$0kM+yN1
z3>-LMpa5E;7Ifq}B&P-lqL3p8h=4
zw@*$^IvftC)9G@#rlzK*r>EU+_sq7?KJRC7i9je4
zBc;4Tm<&O=EyzhcJJPWmd87QO1j8fc*~v#badv
diff --git a/war/src/main/webapp/images/24x24/aborted.png b/war/src/main/webapp/images/24x24/aborted.png
index 98d2090ba47bfba49fab17d8528409b35557e757..483bef12646f62f4b005f92b2c9e20ecab7abb05 100644
GIT binary patch
delta 754
zcmVY9K00MJDNmK|3RqRFt00009a7bBm000MK000MK
z0XTY@+W-In8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H102OpaSad;k
zbZBpK08?~jc4clLM`3buX>@tV1v^my001L&MObuGZ*_8GWq$x@baZe!FE4j@cP?~c
zZf9>TaB^>IWn*+MZ*phQ$-V^u00J&aL_t(I%e9lcYZOrwhrgNGolG+OBF3nBhz1Ql
z5(1*Fg^g8^pn{LaMnUio5U~&&LHr*qECPlQtfEZ{g&!kvZvO?imGvJUzgFmrGadmd
zS)w0b-&nV&w*ClQ?Kv=e?9@*+0wO{JTq64Mzb{;WF~18K?>g~zaC8TQEDDkU7Z-<+
zBE`*5=chkZb!rV5m>eA0#=s;`9utEObTX)H^K1Xm^MA{F3vluD@Y!`GgH8t~ISh0%
zXlN)XY+@eGJZJ&B?+2wg^;nZBO|Dne!xJsQz{n;s5t1-0PgvsCSb2n3P@FcIt13r)b*
zlcFtBBqXTIMQUd#S$);g)|t7rcSllr;|LM}_99l4yKSSfdL>*wNR(!&HnbWg`pWO`
zJab!t&RO;4&3I{qY}@n?(N~^(G`mQ5^{Mv%d20$3O8d^;J9$Pam2rsaWDmNx{O$GQ
zl|?F4uy7lIMu8kT%-(^~iNP^5r>Ty&vHE3ZX%Pn-hYEK4#%XlYg@H~M4M>nk0(>0&
kwEo>YO{2D?Cii_@%07*qoM6N<$f~bu?MF0Q*
delta 878
zcmV-!1Cjjy1^Nb%8Gi-<007{3J@^0s13^hdK~#7F#8m@~T~QEy->Plfwr$%AY9pu>
zHcsQzb{j6E@?#mSgSB_R*>fj2%tnqN4Qb>gqSx`{l`#C)QsU*t2KP))_NqTz>{}`)19WX~me^?Uv+n
zxn#9ky)`v8wI4owcxbU$j;Exgcz;-6-MV$n2Mro@Z{EClv(##}-skhtxZm%WJRT2;
zIGs-FH*enDXEvL&A+!b2WPVrR;>C+{q~XilxpPOkTrNqY(MU?AQj*DJ5`>tXV7J>z
z&|ok~Wo2b0uYX>>8vFY7>yl7Dd88u3zCL~W^kEK%gUBH!>GgVoR;#5kL`9+irK`Ta
zUg`uJHEPsj=7}k=Y15_wbLPz11J9KTg@OnK84GYUm?MCkA`_^nsE{U2nlx_TzI`X-
z3Uut)@m#xh?OJipc{7NJkoz#6kBnYDWXO-Ewc
zL!2Q)>}}byWm^=9nmLuB0`R^g7E!LbTHvK1Fg6TLV^{=GZHvh!
zOv2T|-rH<8(WWt+5zR+NBTNIsc}A`}7Egn