From 813b77897261d8aa566ad5962efcf372eb47c0f2 Mon Sep 17 00:00:00 2001 From: Daniel Beck Date: Thu, 4 Nov 2021 17:37:49 +0100 Subject: [PATCH 01/19] [JENKINS-67061] Fix overload in ConfigDirectory --- core/src/main/java/jenkins/security/s2m/ConfigDirectory.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/jenkins/security/s2m/ConfigDirectory.java b/core/src/main/java/jenkins/security/s2m/ConfigDirectory.java index 9a4bfef702fc..cbfa699e3acf 100644 --- a/core/src/main/java/jenkins/security/s2m/ConfigDirectory.java +++ b/core/src/main/java/jenkins/security/s2m/ConfigDirectory.java @@ -26,7 +26,7 @@ protected ConfigDirectory(File file) { } @Override - public synchronized void load() { + public synchronized void load2() { COL result = create(); if (dir.exists()) { From 729d9ada968e00dd80482e7b686382efb566b38b Mon Sep 17 00:00:00 2001 From: Jesse Glick Date: Fri, 5 Nov 2021 13:46:20 -0400 Subject: [PATCH 02/19] `AbstractBuild` should implement `getParentExecutable` better --- core/src/main/java/hudson/model/AbstractBuild.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/core/src/main/java/hudson/model/AbstractBuild.java b/core/src/main/java/hudson/model/AbstractBuild.java index 926b9c76e3c9..0a7f1cb68323 100644 --- a/core/src/main/java/hudson/model/AbstractBuild.java +++ b/core/src/main/java/hudson/model/AbstractBuild.java @@ -251,6 +251,12 @@ public AbstractBuild getRootBuild() { return this; } + @Override + public Queue.Executable getParentExecutable() { + AbstractBuild rootBuild = getRootBuild(); + return rootBuild != this ? rootBuild : null; + } + /** * Used to render the side panel "Back to project" link. * From c0a03f779c4869398b536fbc80f75b516f7aaaba Mon Sep 17 00:00:00 2001 From: Zbynek Konecny Date: Sat, 6 Nov 2021 21:42:30 +0100 Subject: [PATCH 03/19] Use CSS animation for console progress (#5871) --- .../resources/hudson/model/Run/console.jelly | 4 +- .../hudson/model/TaskAction/log.jelly | 2 +- .../hudson/slaves/SlaveComputer/log.jelly | 2 +- .../log.groovy | 2 +- .../lib/layout/progressAnimation.jelly | 8 +++ war/src/main/less/base-styles-v2.less | 1 + .../main/less/modules/progress-animation.less | 58 +++++++++++++++++++ 7 files changed, 72 insertions(+), 5 deletions(-) create mode 100644 core/src/main/resources/lib/layout/progressAnimation.jelly create mode 100644 war/src/main/less/modules/progress-animation.less diff --git a/core/src/main/resources/hudson/model/Run/console.jelly b/core/src/main/resources/hudson/model/Run/console.jelly index f5c7b4ec362e..d77128466612 100644 --- a/core/src/main/resources/hudson/model/Run/console.jelly +++ b/core/src/main/resources/hudson/model/Run/console.jelly @@ -51,8 +51,8 @@ THE SOFTWARE.
-            
- +
+
diff --git a/core/src/main/resources/hudson/model/TaskAction/log.jelly b/core/src/main/resources/hudson/model/TaskAction/log.jelly index 820625fcc08e..7011f6d56c70 100644 --- a/core/src/main/resources/hudson/model/TaskAction/log.jelly +++ b/core/src/main/resources/hudson/model/TaskAction/log.jelly @@ -32,7 +32,7 @@ THE SOFTWARE.
       
- +
diff --git a/core/src/main/resources/hudson/slaves/SlaveComputer/log.jelly b/core/src/main/resources/hudson/slaves/SlaveComputer/log.jelly index aad362b85189..6fb706fd701f 100644 --- a/core/src/main/resources/hudson/slaves/SlaveComputer/log.jelly +++ b/core/src/main/resources/hudson/slaves/SlaveComputer/log.jelly @@ -29,7 +29,7 @@ THE SOFTWARE.
       
- +
${number} - - - - - - ${jobName} + + ${jobName_}#${number} + + + + + + ${jobName} #${number} - - - - ${jobName_}#${number} - - - - + + + + ${jobName_}#${number} + + + + From 9a1801554b721cdde706bf752f1172843590f33a Mon Sep 17 00:00:00 2001 From: Basil Crow Date: Mon, 8 Nov 2021 12:30:50 -0800 Subject: [PATCH 05/19] Stop bundling unnecessary copy of ASM 5 (#5524) Co-authored-by: Tim Jacomb <21194782+timja@users.noreply.github.com> --- core/pom.xml | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/core/pom.xml b/core/pom.xml index 2b9a38dcffa8..a1e62367dde5 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -106,16 +106,6 @@ THE SOFTWARE. com.github.jnr jnr-posix - - - org.kohsuke - asm5 - 5.0.1 - org.kohsuke.stapler stapler From 604a6953972e3b3f148da88bd52eb7a596c4b4d8 Mon Sep 17 00:00:00 2001 From: Basil Crow Date: Mon, 8 Nov 2021 12:32:51 -0800 Subject: [PATCH 06/19] Remove unused `jenkins.util.io.LinesStream` (#5896) --- core/src/main/java/hudson/util/TextFile.java | 34 +----- .../java/jenkins/security/s2m/ConfigFile.java | 2 +- .../java/jenkins/util/io/LinesStream.java | 113 ------------------ 3 files changed, 2 insertions(+), 147 deletions(-) delete mode 100644 core/src/main/java/jenkins/util/io/LinesStream.java diff --git a/core/src/main/java/hudson/util/TextFile.java b/core/src/main/java/hudson/util/TextFile.java index 3fc09b811f71..6be87b736b19 100644 --- a/core/src/main/java/hudson/util/TextFile.java +++ b/core/src/main/java/hudson/util/TextFile.java @@ -23,7 +23,6 @@ */ package hudson.util; -import edu.umd.cs.findbugs.annotations.CreatesObligation; import edu.umd.cs.findbugs.annotations.NonNull; import hudson.Util; import java.io.BufferedReader; @@ -38,7 +37,6 @@ import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.util.stream.Stream; -import jenkins.util.io.LinesStream; /** * Represents a text file. @@ -79,20 +77,6 @@ public String read() throws IOException { return out.toString(); } - /** - * @throws RuntimeException in the case of {@link IOException} in {@link #linesStream()} - * @deprecated This method does not properly propagate errors and may lead to file descriptor leaks - * if the collection is not fully iterated. Use {@link #lines2()} instead. - */ - @Deprecated - public @NonNull Iterable lines() { - try { - return linesStream(); - } catch (IOException ex) { - throw new RuntimeException(ex); - } - } - /** * Read all lines from the file as a {@link Stream}. Bytes from the file are decoded into * characters using the {@link StandardCharsets#UTF_8 UTF-8} {@link Charset charset}. If timely @@ -104,26 +88,10 @@ public String read() throws IOException { * @throws IOException if an I/O error occurs opening the file */ @NonNull - public Stream lines2() throws IOException { + public Stream lines() throws IOException { return Files.lines(Util.fileToPath(file)); } - /** - * Creates a new {@link jenkins.util.io.LinesStream} of the file. - *

- * Note: The caller is responsible for closing the returned - * {@code LinesStream}. - * @throws IOException if the file cannot be converted to a - * {@link java.nio.file.Path} or if the file cannot be opened for reading - * @since 2.111 - * @deprecated use {@link #lines2} - */ - @CreatesObligation - @Deprecated - public @NonNull LinesStream linesStream() throws IOException { - return new LinesStream(Util.fileToPath(file)); - } - /** * Overwrites the file by the given string. */ diff --git a/core/src/main/java/jenkins/security/s2m/ConfigFile.java b/core/src/main/java/jenkins/security/s2m/ConfigFile.java index 97be074ba78b..242b694bd6fd 100644 --- a/core/src/main/java/jenkins/security/s2m/ConfigFile.java +++ b/core/src/main/java/jenkins/security/s2m/ConfigFile.java @@ -55,7 +55,7 @@ public synchronized void load2() throws IOException { COL result = create(); if (exists()) { - try (Stream stream = lines2()) { + try (Stream stream = lines()) { stream.forEach(line -> { if (line.startsWith("#")) return; // comment T r = parse(line); diff --git a/core/src/main/java/jenkins/util/io/LinesStream.java b/core/src/main/java/jenkins/util/io/LinesStream.java deleted file mode 100644 index 6e326e600a7f..000000000000 --- a/core/src/main/java/jenkins/util/io/LinesStream.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * The MIT License - * - * Copyright 2018 Daniel Trebbien. - * - * 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.util.io; - -import com.google.common.collect.AbstractIterator; -import edu.umd.cs.findbugs.annotations.CleanupObligation; -import edu.umd.cs.findbugs.annotations.DischargesObligation; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; -import java.io.BufferedReader; -import java.io.Closeable; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.Iterator; - -/** - * Represents a stream over the lines of a text file. - *

- * Although {@code LinesStream} implements {@link java.lang.Iterable}, it - * is intended to be first used to initialize a resource in a try-with-resources - * statement and then iterated, as in: - *

- *  try (LinesStream stream = new LinesStream(...)) {
- *      for (String line : stream) {
- *          ...
- *      }
- *  }
- * 
- * This pattern ensures that the underlying file handle is closed properly. - *

- * Like {@link java.nio.file.DirectoryStream}, {@code LinesStream} supports - * creating at most one {@link Iterator}. Invoking {@link #iterator()} to - * obtain a second or subsequent {@link Iterator} throws - * {@link IllegalStateException}. - * - * @since 2.111 - * @deprecated use {@link Files#lines(Path)} - */ -@Deprecated -@CleanupObligation -public class LinesStream implements Closeable, Iterable { - - private final @NonNull BufferedReader in; - private transient @Nullable Iterator iterator; - - /** - * Opens the text file at {@code path} for reading using charset - * {@link java.nio.charset.StandardCharsets#UTF_8}. - * @param path Path to the file to open for reading. - * @throws IOException if the file at {@code path} cannot be opened for - * reading. - */ - public LinesStream(@NonNull Path path) throws IOException { - in = Files.newBufferedReader(path); // uses UTF-8 by default - } - - @DischargesObligation - @Override - public void close() throws IOException { - in.close(); - } - - @Override - public Iterator iterator() { - if (iterator!=null) - throw new IllegalStateException("Only one Iterator can be created."); - - iterator = new AbstractIterator() { - @Override - protected String computeNext() { - try { - String r = in.readLine(); - if (r==null) { - // Calling close() here helps ensure that the file - // handle is closed even when LinesStream is being used - // incorrectly, where it is iterated over without being - // used to initialize a resource of a try-with-resources - // statement. - in.close(); - return endOfData(); - } - return r; - } catch (IOException e) { - throw new RuntimeException(e); - } - } - }; - - return iterator; - } -} From 8be712947fa6df23f06ad36d9f3d11de51d642b2 Mon Sep 17 00:00:00 2001 From: Basil Crow Date: Mon, 8 Nov 2021 12:32:58 -0800 Subject: [PATCH 07/19] Fix typo in `ClassicPluginStrategy` (#5894) --- .../java/hudson/ClassicPluginStrategy.java | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/core/src/main/java/hudson/ClassicPluginStrategy.java b/core/src/main/java/hudson/ClassicPluginStrategy.java index e97ac65e0d23..7f62a9e244e2 100644 --- a/core/src/main/java/hudson/ClassicPluginStrategy.java +++ b/core/src/main/java/hudson/ClassicPluginStrategy.java @@ -414,7 +414,7 @@ public void startPlugin(PluginWrapper plugin) throws Exception { public void updateDependency(PluginWrapper depender, PluginWrapper dependee) { DependencyClassLoader classLoader = findAncestorDependencyClassLoader(depender.classLoader); if (classLoader != null) { - classLoader.updateTransientDependencies(); + classLoader.updateTransitiveDependencies(); LOGGER.log(Level.INFO, "Updated dependency of {0}", depender.getShortName()); } } @@ -580,9 +580,9 @@ static final class DependencyClassLoader extends ClassLoader { private final PluginManager pluginManager; /** - * Topologically sorted list of transient dependencies. Lazily initialized via double-checked locking. + * Topologically sorted list of transitive dependencies. Lazily initialized via double-checked locking. */ - private volatile List transientDependencies; + private volatile List transitiveDependencies; static { registerAsParallelCapable(); @@ -595,17 +595,17 @@ static final class DependencyClassLoader extends ClassLoader { this.pluginManager = pluginManager; } - private void updateTransientDependencies() { + private void updateTransitiveDependencies() { // This will be recalculated at the next time. - transientDependencies = null; + transitiveDependencies = null; } private List getTransitiveDependencies() { - List localTransientDependencies = transientDependencies; - if (localTransientDependencies == null) { + List localTransitiveDependencies = transitiveDependencies; + if (localTransitiveDependencies == null) { synchronized (this) { - localTransientDependencies = transientDependencies; - if (localTransientDependencies == null) { + localTransitiveDependencies = transitiveDependencies; + if (localTransitiveDependencies == null) { CyclicGraphDetector cgd = new CyclicGraphDetector() { @Override protected List getEdges(PluginWrapper pw) { @@ -629,11 +629,11 @@ protected List getEdges(PluginWrapper pw) { throw new AssertionError(e); // such error should have been reported earlier } - transientDependencies = localTransientDependencies = cgd.getSorted(); + transitiveDependencies = localTransitiveDependencies = cgd.getSorted(); } } } - return localTransientDependencies; + return localTransitiveDependencies; } @Override From 41cea0899085399afa677757ac818e78cda938b1 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 8 Nov 2021 21:33:06 +0100 Subject: [PATCH 08/19] Add computer offline sprite override (#5879) --- core/src/main/java/hudson/model/Computer.java | 7 ------- 1 file changed, 7 deletions(-) diff --git a/core/src/main/java/hudson/model/Computer.java b/core/src/main/java/hudson/model/Computer.java index a01121b2d743..efd82044bd71 100644 --- a/core/src/main/java/hudson/model/Computer.java +++ b/core/src/main/java/hudson/model/Computer.java @@ -1807,11 +1807,4 @@ public long getWhen() { private static final @Deprecated Permission CLOUD_PROVISION = Cloud.PROVISION; private static final Logger LOGGER = Logger.getLogger(Computer.class.getName()); - - static { - IconSet.icons.addIcon(new Icon("icon-computer-user-offline icon-sm", "16x16/computer-user-offline.png", Icon.ICON_SMALL_STYLE)); - IconSet.icons.addIcon(new Icon("icon-computer-user-offline icon-md", "24x24/computer-user-offline.png", Icon.ICON_MEDIUM_STYLE)); - IconSet.icons.addIcon(new Icon("icon-computer-user-offline icon-lg", "32x32/computer-user-offline.png", Icon.ICON_LARGE_STYLE)); - IconSet.icons.addIcon(new Icon("icon-computer-user-offline icon-xlg", "48x48/computer-user-offline.png", Icon.ICON_XLARGE_STYLE)); - } } From a41f13a69090f3600506feb9b2548d610ea48fb8 Mon Sep 17 00:00:00 2001 From: Basil Crow Date: Mon, 8 Nov 2021 12:33:19 -0800 Subject: [PATCH 09/19] Bump `bouncycastle-api` from 2.20 to 2.25 (#5898) --- war/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/war/pom.xml b/war/pom.xml index 53ec00960c0c..9fbd2f1eebfa 100644 --- a/war/pom.xml +++ b/war/pom.xml @@ -331,7 +331,7 @@ THE SOFTWARE. org.jenkins-ci.plugins bouncycastle-api - 2.20 + 2.25 hpi From 3e8a11aa956f2edf4dca6caada6289272379f7aa Mon Sep 17 00:00:00 2001 From: Zbynek Konecny Date: Mon, 8 Nov 2021 21:33:32 +0100 Subject: [PATCH 10/19] Improve artifact list readability in dark theme (#5889) --- war/src/main/less/base/yui-compatibility.less | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/war/src/main/less/base/yui-compatibility.less b/war/src/main/less/base/yui-compatibility.less index e334ea69cd0e..655054472655 100644 --- a/war/src/main/less/base/yui-compatibility.less +++ b/war/src/main/less/base/yui-compatibility.less @@ -110,12 +110,14 @@ } /* Overrides for treeview-skin.css */ - -.ygtvlabel, -.ygtvlabel:link, -.ygtvlabel:visited, -.ygtvlabel:hover { - color: inherit; +.ygtvitem { + .ygtvlabel, + .ygtvlabel:link, + .ygtvlabel:visited, + .ygtvlabel:hover { + color: inherit; + background-color: inherit; + } } .ygtvfocus { From 57737eec99d13341b986aeb6db02dda17d2aaf48 Mon Sep 17 00:00:00 2001 From: Alex Earl Date: Mon, 8 Nov 2021 13:34:28 -0700 Subject: [PATCH 11/19] feat: Add ability to upload a plugin via URL [JENKINS-4814] (#5862) Co-authored-by: Tim Jacomb <21194782+timja@users.noreply.github.com> --- core/src/main/java/hudson/PluginManager.java | 85 +++++++++++++++++-- .../main/resources/hudson/Messages.properties | 5 ++ .../hudson/PluginManager/advanced.jelly | 27 +++--- .../hudson/PluginManager/advanced.properties | 5 +- .../PluginManager/advanced_bg.properties | 3 - .../PluginManager/advanced_da.properties | 1 - .../PluginManager/advanced_de.properties | 1 - .../PluginManager/advanced_es.properties | 2 - .../PluginManager/advanced_fi.properties | 1 - .../PluginManager/advanced_fr.properties | 1 - .../PluginManager/advanced_hu.properties | 1 - .../PluginManager/advanced_it.properties | 2 - .../PluginManager/advanced_ja.properties | 2 - .../PluginManager/advanced_ko.properties | 1 - .../PluginManager/advanced_lv.properties | 1 - .../PluginManager/advanced_nb_NO.properties | 1 - .../PluginManager/advanced_nl.properties | 1 - .../PluginManager/advanced_pl.properties | 1 - .../PluginManager/advanced_pt_BR.properties | 1 - .../PluginManager/advanced_pt_PT.properties | 1 - .../PluginManager/advanced_ru.properties | 1 - .../PluginManager/advanced_sr.properties | 2 - .../PluginManager/advanced_sv_SE.properties | 1 - .../PluginManager/advanced_tr.properties | 2 - .../PluginManager/advanced_zh_TW.properties | 1 - .../test/java/hudson/PluginManagerTest.java | 39 +++++++++ 26 files changed, 140 insertions(+), 49 deletions(-) diff --git a/core/src/main/java/hudson/PluginManager.java b/core/src/main/java/hudson/PluginManager.java index fb75090541e5..47bb91c8ed14 100644 --- a/core/src/main/java/hudson/PluginManager.java +++ b/core/src/main/java/hudson/PluginManager.java @@ -76,6 +76,7 @@ import java.net.URL; import java.net.URLClassLoader; import java.net.URLConnection; +import java.nio.file.Files; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -1734,6 +1735,51 @@ public HttpResponse doProxyConfigure(StaplerRequest req) throws IOException, Ser return new HttpRedirect("advanced"); } + interface PluginCopier { + void copy(File target) throws Exception; + void cleanup(); + } + + class FileUploadPluginCopier implements PluginCopier { + private FileItem fileItem; + + FileUploadPluginCopier(FileItem fileItem) { + this.fileItem = fileItem; + } + + @Override + public void copy(File target) throws Exception { + fileItem.write(target); + } + + @Override + public void cleanup() { + fileItem.delete(); + } + } + + class UrlPluginCopier implements PluginCopier { + private String url; + + UrlPluginCopier(String url) { + this.url = url; + } + + @Override + public void copy(File target) throws Exception { + try(InputStream input = ProxyConfiguration.getInputStream(new URL(url))) { + Files.copy(input, target.toPath()); + } catch(Exception e) { + throw e; + } + } + + @Override + public void cleanup() { + + } + } + /** * Uploads a plugin. */ @@ -1742,11 +1788,21 @@ public HttpResponse doUploadPlugin(StaplerRequest req) throws IOException, Servl try { Jenkins.get().checkPermission(Jenkins.ADMINISTER); + String fileName = ""; + PluginCopier copier; ServletFileUpload upload = new ServletFileUpload(new DiskFileItemFactory()); + List items = upload.parseRequest(req); + if(StringUtils.isNotBlank(items.get(1).getString())) { + // this is a URL deployment + fileName = items.get(1).getString(); + copier = new UrlPluginCopier(fileName); + } else { + // this is a file upload + FileItem fileItem = items.get(0); + fileName = Util.getFileName(fileItem.getName()); + copier = new FileUploadPluginCopier(fileItem); + } - // Parse the request - FileItem fileItem = upload.parseRequest(req).get(0); - String fileName = Util.getFileName(fileItem.getName()); if("".equals(fileName)){ return new HttpRedirect("advanced"); } @@ -1762,12 +1818,12 @@ public HttpResponse doUploadPlugin(StaplerRequest req) throws IOException, Servl // TODO Remove this workaround after FILEUPLOAD-293 is resolved. t.delete(); - fileItem.write(t); + copier.copy(t); } catch (Exception e) { // Exception thrown is too generic so at least limit the scope where it can occur throw new ServletException(e); } - fileItem.delete(); + copier.cleanup(); final String baseName = identifyPluginShortName(t); @@ -1810,6 +1866,25 @@ public HttpResponse doUploadPlugin(StaplerRequest req) throws IOException, Servl } } + @Restricted(NoExternalUse.class) + @RequirePOST public FormValidation doCheckPluginUrl(StaplerRequest request, @QueryParameter String value) throws IOException { + if(StringUtils.isNotBlank(value)) { + try { + URL url = new URL(value); + if(!url.getProtocol().startsWith("http")) { + return FormValidation.error(Messages.PluginManager_invalidUrl()); + } + + if(!url.getProtocol().equals("https")) { + return FormValidation.warning(Messages.PluginManager_insecureUrl()); + } + } catch(MalformedURLException e) { + return FormValidation.error(e.getMessage()); + } + } + return FormValidation.ok(); + } + @Restricted(NoExternalUse.class) @RequirePOST public HttpResponse doCheckUpdatesServer() throws IOException { Jenkins.get().checkPermission(Jenkins.SYSTEM_READ); diff --git a/core/src/main/resources/hudson/Messages.properties b/core/src/main/resources/hudson/Messages.properties index 79caa7662566..67d9aaf1bd2a 100644 --- a/core/src/main/resources/hudson/Messages.properties +++ b/core/src/main/resources/hudson/Messages.properties @@ -106,6 +106,11 @@ PluginManager.newerVersionEntry=\ See the plugin documentation for information about its requirements. PluginManager.unavailable=Unavailable PluginManager.deprecationWarning=This plugin is deprecated. In general, this means that it is either obsolete, no longer being developed, or may no longer work. Learn more. +PluginManager.insecureUrl=\ + You are using an insecure URL to download the plugin, use at your own risk! +PluginManager.invalidUrl=\ + You are using an invalid URL to download the plugin, only https and http (not recommended) are supported. + AboutJenkins.DisplayName=About Jenkins AboutJenkins.Description=See the version and license information. diff --git a/core/src/main/resources/hudson/PluginManager/advanced.jelly b/core/src/main/resources/hudson/PluginManager/advanced.jelly index 9c2647da4d52..1400e4e90493 100644 --- a/core/src/main/resources/hudson/PluginManager/advanced.jelly +++ b/core/src/main/resources/hudson/PluginManager/advanced.jelly @@ -53,21 +53,20 @@ THE SOFTWARE.

-

${%Upload Plugin}

+

${%Deploy Plugin}

- -
- ${%uploadtext} -
-
- - - ${%File}: - - - - - +
+ ${%deploytext} +
+ + + +

${%Or}

+ + + +
diff --git a/core/src/main/resources/hudson/PluginManager/advanced.properties b/core/src/main/resources/hudson/PluginManager/advanced.properties index 85fd3165d6a4..7c4bc676f904 100644 --- a/core/src/main/resources/hudson/PluginManager/advanced.properties +++ b/core/src/main/resources/hudson/PluginManager/advanced.properties @@ -20,5 +20,6 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -uploadtext=\ - You can upload an .hpi file to install a plugin from outside the central plugin repository. +deploytext=\ + You can select a plugin file from your local system or provide a URL to install a plugin from outside the central \ + plugin repository. \ No newline at end of file diff --git a/core/src/main/resources/hudson/PluginManager/advanced_bg.properties b/core/src/main/resources/hudson/PluginManager/advanced_bg.properties index 0fb4aa2df67d..7ab840369ff6 100644 --- a/core/src/main/resources/hudson/PluginManager/advanced_bg.properties +++ b/core/src/main/resources/hudson/PluginManager/advanced_bg.properties @@ -30,9 +30,6 @@ Upload=\ \u041A\u0430\u0447\u0432\u0430\u043D\u0435 Upload\ Plugin=\ \u041A\u0430\u0447\u0432\u0430\u043D\u0435 \u043D\u0430 \u043F\u0440\u0438\u0441\u0442\u0430\u0432\u043A\u0430 -uploadtext=\ - \u041C\u043E\u0436\u0435 \u0434\u0430 \u043A\u0430\u0447\u0438\u0442\u0435 \u0444\u0430\u0439\u043B \u0432\u044A\u0432 \u0444\u043E\u0440\u043C\u0430\u0442 \u201E.hpi\u201C, \u0437\u0430 \u0434\u0430 \u0438\u043D\u0441\u0442\u0430\u043B\u0438\u0440\u0430\u0442\u0435 \u043F\u0440\u0438\u0441\u0442\u0430\u0432\u043A\u0430 \u0438\u0437\u0432\u044A\u043D\ - \u043E\u0444\u0438\u0446\u0438\u0430\u043B\u043D\u043E\u0442\u043E \u0445\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0435. Other\ Sites=\ \u0414\u0440\u0443\u0433\u0438 \u0441\u0430\u0439\u0442\u043E\u0432\u0435 Update\ Center=\ diff --git a/core/src/main/resources/hudson/PluginManager/advanced_da.properties b/core/src/main/resources/hudson/PluginManager/advanced_da.properties index 6d149c87fcf9..34dc4ff63b2e 100644 --- a/core/src/main/resources/hudson/PluginManager/advanced_da.properties +++ b/core/src/main/resources/hudson/PluginManager/advanced_da.properties @@ -27,7 +27,6 @@ User\ name=Brugernavn File=Fil URL=URL lastUpdated=Opdateringsinformation hentet: {0} dage siden -uploadtext=Du kan l\u00E6gge en .hpi fil op for at installere en plugin fra udenfor det centrale plugin lager. Port=Port HTTP\ Proxy\ Configuration=HTTP proxykonfiguration Server=Server diff --git a/core/src/main/resources/hudson/PluginManager/advanced_de.properties b/core/src/main/resources/hudson/PluginManager/advanced_de.properties index d38b9767fed6..5d0793795e96 100644 --- a/core/src/main/resources/hudson/PluginManager/advanced_de.properties +++ b/core/src/main/resources/hudson/PluginManager/advanced_de.properties @@ -24,7 +24,6 @@ HTTP\ Proxy\ Configuration=HTTP-Proxy Konfiguration Upload\ Plugin=Plugin hochladen File=Datei Upload=Hochladen -uploadtext=Geben Sie hier den Pfad zu einer lokalen Plugin-Datei (Dateiendung .hpi) an, die installiert werden soll. Update\ Site=Aktualisierungsserver URL=URL Other\ Sites=Andere Aktualisierungsserver diff --git a/core/src/main/resources/hudson/PluginManager/advanced_es.properties b/core/src/main/resources/hudson/PluginManager/advanced_es.properties index c5b09c4c4820..79599e678aa5 100644 --- a/core/src/main/resources/hudson/PluginManager/advanced_es.properties +++ b/core/src/main/resources/hudson/PluginManager/advanced_es.properties @@ -21,8 +21,6 @@ # THE SOFTWARE. lastUpdated=Informaci\u00F3n de actualizaci\u00F3n es de hace {0}. -uploadtext=\ - Puedes subir un fichero .hpi para instalar un plugin que no est\u00E9 en el repositorio central. File=Archivo Upload\ Plugin=Subir un plugin Upload=Subir diff --git a/core/src/main/resources/hudson/PluginManager/advanced_fi.properties b/core/src/main/resources/hudson/PluginManager/advanced_fi.properties index 6604dfe06cdf..46e6760dd780 100644 --- a/core/src/main/resources/hudson/PluginManager/advanced_fi.properties +++ b/core/src/main/resources/hudson/PluginManager/advanced_fi.properties @@ -31,4 +31,3 @@ Upload=Lataa Upload\ Plugin=Lataa liit\u00E4nn\u00E4inen User\ name=K\u00E4ytt\u00E4j\u00E4 lastUpdated=P\u00E4ivitystiedot haettu: {0} sitten -uploadtext=Voit asentaa liit\u00E4nn\u00E4isi\u00E4 my\u00F6s lataamalla .hpi-tiedoston. diff --git a/core/src/main/resources/hudson/PluginManager/advanced_fr.properties b/core/src/main/resources/hudson/PluginManager/advanced_fr.properties index 7e9c382c2872..241b7c6d9729 100644 --- a/core/src/main/resources/hudson/PluginManager/advanced_fr.properties +++ b/core/src/main/resources/hudson/PluginManager/advanced_fr.properties @@ -26,7 +26,6 @@ File=Fichier Update\ Site=Site de mise \u00E0 jour Upload=Soumettre lastUpdated=Derni\u00E8re mise \u00E0 jour\u00A0: il y a {0} -uploadtext=Vous pouvez t\u00E9l\u00E9verser un fichier .hpi pour installer un plugin ext\u00E9rieur au d\u00E9p\u00F4t centralis\u00E9 de plugin. Proxy\ Needs\ Authorization=Le proxy n\u00E9cessite une authentification Server=Serveur User\ name=Nom d''utilisateur diff --git a/core/src/main/resources/hudson/PluginManager/advanced_hu.properties b/core/src/main/resources/hudson/PluginManager/advanced_hu.properties index 23f4e734192d..799a287123dd 100644 --- a/core/src/main/resources/hudson/PluginManager/advanced_hu.properties +++ b/core/src/main/resources/hudson/PluginManager/advanced_hu.properties @@ -6,4 +6,3 @@ Update\ Site=Friss\u00EDt\u00E9si Oldal Upload=Felt\u00F6lt Upload\ Plugin=Be\u00E9p\u00FCl\u0151 Felt\u00F6lt\u00E9se lastUpdated=Friss\u00EDt\u00E9si inform\u00E1ci\u00F3k utolj\u00E1ra lek\u00E9rve: {0} ezel\u0151tt -uploadtext=Felt\u00F6lthet egy .hpi \u00E1llom\u00E1nyt egy be\u00E9p\u00FCl\u0151 telep\u00EDt\u00E9s\u00E9hez, ami nem tal\u00E1lhat\u00F3 meg a k\u00F6zponti be\u00E9p\u00FCl\u0151 gy\u0171jtem\u00E9nyben. diff --git a/core/src/main/resources/hudson/PluginManager/advanced_it.properties b/core/src/main/resources/hudson/PluginManager/advanced_it.properties index 7a4f34a0a45d..65f84bcf92a8 100644 --- a/core/src/main/resources/hudson/PluginManager/advanced_it.properties +++ b/core/src/main/resources/hudson/PluginManager/advanced_it.properties @@ -25,8 +25,6 @@ File=File HTTP\ Proxy\ Configuration=Configurazione proxy HTTP Other\ Sites=Altri siti Upload=Carica -uploadtext=ネ possibile caricare un file .hpi per installare un plugin non \ - incluso nel repository plugin centrale. Update\ Center=Centro aggiornamenti Update\ Site=Sito aggiornamenti Upload\ Plugin=Carica plugin diff --git a/core/src/main/resources/hudson/PluginManager/advanced_ja.properties b/core/src/main/resources/hudson/PluginManager/advanced_ja.properties index 2f2ea0932c7f..d6941db70953 100644 --- a/core/src/main/resources/hudson/PluginManager/advanced_ja.properties +++ b/core/src/main/resources/hudson/PluginManager/advanced_ja.properties @@ -24,8 +24,6 @@ HTTP\ Proxy\ Configuration=HTTP Proxy\u306E\u8A2D\u5B9A Upload\ Plugin=\u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9 Upload=\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9 File=\u30D5\u30A1\u30A4\u30EB -uploadtext=\ - .hpi\u30D5\u30A1\u30A4\u30EB\u3092\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u3057\u3066\u3001\u30D7\u30E9\u30B0\u30A4\u30F3\u30EA\u30DD\u30B8\u30C8\u30EA\u4EE5\u5916\u304B\u3089\u30D7\u30E9\u30B0\u30A4\u30F3\u3092\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3067\u304D\u307E\u3059\u3002 Update\ Site=\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u30B5\u30A4\u30C8 URL=URL Update\ Center=\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u30BB\u30F3\u30BF\u30FC diff --git a/core/src/main/resources/hudson/PluginManager/advanced_ko.properties b/core/src/main/resources/hudson/PluginManager/advanced_ko.properties index d1146c49661a..441e813787fc 100644 --- a/core/src/main/resources/hudson/PluginManager/advanced_ko.properties +++ b/core/src/main/resources/hudson/PluginManager/advanced_ko.properties @@ -31,4 +31,3 @@ Upload=\uC62C\uB9AC\uAE30 Upload\ Plugin=\uD50C\uB7EC\uADF8\uC778 \uC62C\uB9AC\uAE30 User\ name=\uC0AC\uC6A9\uC790\uBA85 lastUpdated=\uBCC0\uACBD\uC815\uBCF4 \uD68D\uB4DD\uC2DC\uAE30 : {0} \uC804 -uploadtext=\uC911\uC559 \uD50C\uB7EC\uADF8\uC778 \uC800\uC7A5\uC18C \uC678\uC758 \uD50C\uB7EC\uADF8\uC778\uC744 \uC124\uCE58\uD558\uAE30\uC704\uD574\uC11C .hpi \uD30C\uC77C\uC744 \uC62C\uB9B4 \uC218 \uC788\uC2B5\uB2C8\uB2E4. diff --git a/core/src/main/resources/hudson/PluginManager/advanced_lv.properties b/core/src/main/resources/hudson/PluginManager/advanced_lv.properties index c5e1bac0032f..034ccf16bbe0 100644 --- a/core/src/main/resources/hudson/PluginManager/advanced_lv.properties +++ b/core/src/main/resources/hudson/PluginManager/advanced_lv.properties @@ -6,4 +6,3 @@ Update\ Site=Aug\u0161upl\u0101des vietne Upload=Aug\u0161upl\u0101d\u0113t Upload\ Plugin=Aug\u0161upl\u0101d\u0113t spraudni lastUpdated=Atjaunin\u0101jumu inform\u0101cija ieg\u016Bta: pirms {0} -uploadtext=J\u016Bs varat aug\u0161upl\u0101d\u0113t .hpi failu lai uzst\u0101d\u012Btu spraudni \u0101rpus centr\u0101l\u0101 spraud\u0146u repozitorija. diff --git a/core/src/main/resources/hudson/PluginManager/advanced_nb_NO.properties b/core/src/main/resources/hudson/PluginManager/advanced_nb_NO.properties index 2ac5d17c50d1..e77acb250d68 100644 --- a/core/src/main/resources/hudson/PluginManager/advanced_nb_NO.properties +++ b/core/src/main/resources/hudson/PluginManager/advanced_nb_NO.properties @@ -29,4 +29,3 @@ Upload=Last opp Upload\ Plugin=Last opp programtillegg User\ name=Brukernavn lastUpdated=Oppdateringsinformasjon mottatt for: {0} siden -uploadtext=Du kan laste opp en .hpi fil for \u00E5 installere programtillegg som ikke ligger i sentral programtillegg katalog. diff --git a/core/src/main/resources/hudson/PluginManager/advanced_nl.properties b/core/src/main/resources/hudson/PluginManager/advanced_nl.properties index f082f09c983d..22754b0749ca 100644 --- a/core/src/main/resources/hudson/PluginManager/advanced_nl.properties +++ b/core/src/main/resources/hudson/PluginManager/advanced_nl.properties @@ -21,7 +21,6 @@ # THE SOFTWARE. lastUpdated=Laatst geactualiseerd: {0} geleden -uploadtext=U kunt een .hpi bestand uploaden om een plugin te installeren die niet aanwezig is in de centrale pluginlijst. Password=Wachtwoord Server=Server Port=Poortnummer diff --git a/core/src/main/resources/hudson/PluginManager/advanced_pl.properties b/core/src/main/resources/hudson/PluginManager/advanced_pl.properties index 10be11847a20..f471ad2756a7 100644 --- a/core/src/main/resources/hudson/PluginManager/advanced_pl.properties +++ b/core/src/main/resources/hudson/PluginManager/advanced_pl.properties @@ -25,5 +25,4 @@ URL=Adres URL Update\ Site=Strona z aktualizacjami Upload=Prze\u015Blij Upload\ Plugin=Prze\u015Blij wtyczk\u0119 -uploadtext=Mo\u017Cesz przes\u0142a\u0107 plik .hpi \u017Ceby zainstalowa\u0107 wtyczk\u0119 z poza centralnego repozytorium wtyczek Update\ Center=Zarz\u0105dzaj Jenkinsem diff --git a/core/src/main/resources/hudson/PluginManager/advanced_pt_BR.properties b/core/src/main/resources/hudson/PluginManager/advanced_pt_BR.properties index 27f20b4e17a5..87b00ff4661c 100644 --- a/core/src/main/resources/hudson/PluginManager/advanced_pt_BR.properties +++ b/core/src/main/resources/hudson/PluginManager/advanced_pt_BR.properties @@ -21,7 +21,6 @@ # THE SOFTWARE. lastUpdated=Informa\u00E7\u00E3o de atualiza\u00E7\u00E3o obtida: {0} atr\u00E1s -uploadtext=Voc\u00EA pode fazer o upload de um arquivo .hpi para instalar um plugin fora do reposit\u00F3rio central. Update\ Site=Site de atualiza\u00E7\u00E3o File=Arquivo Upload\ Plugin=Atualizar plugin diff --git a/core/src/main/resources/hudson/PluginManager/advanced_pt_PT.properties b/core/src/main/resources/hudson/PluginManager/advanced_pt_PT.properties index e3be3112eb1f..4f3163319f9a 100644 --- a/core/src/main/resources/hudson/PluginManager/advanced_pt_PT.properties +++ b/core/src/main/resources/hudson/PluginManager/advanced_pt_PT.properties @@ -5,4 +5,3 @@ Update\ Site=Atualizar Site Upload=Enviar Upload\ Plugin=Enviar Plugin lastUpdated=Verifica\u00E7\u00E3o de atualiza\u00E7\u00E3o obtida h\u00E1: {0} -uploadtext=Tu podes enviar um ficheiro .hpi para instalar um plugin que n\u00E3o esteja no reposit\u00F3rio de plugins central diff --git a/core/src/main/resources/hudson/PluginManager/advanced_ru.properties b/core/src/main/resources/hudson/PluginManager/advanced_ru.properties index c04a6fe862f4..e1d9e86f1eae 100644 --- a/core/src/main/resources/hudson/PluginManager/advanced_ru.properties +++ b/core/src/main/resources/hudson/PluginManager/advanced_ru.properties @@ -31,4 +31,3 @@ Upload=\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C Upload\ Plugin=\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C \u043F\u043B\u0430\u0433\u0438\u043D User\ name=\u0418\u043C\u044F \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F lastUpdated=\u0418\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044F \u043E \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u044B\u0445 \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u044F\u0445 \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0430: {0} \u043D\u0430\u0437\u0430\u0434 -uploadtext=\u0417\u0434\u0435\u0441\u044C \u0412\u044B \u043C\u043E\u0436\u0435\u0442\u0435 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u043F\u043B\u0430\u0433\u0438\u043D \u043D\u0435 \u0438\u0437 \u0446\u0435\u043D\u0442\u0440\u0430\u043B\u044C\u043D\u043E\u0433\u043E \u0440\u0435\u043F\u043E\u0437\u0438\u0442\u043E\u0440\u0438\u044F, \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0432 .hpi-\u0444\u0430\u0439\u043B diff --git a/core/src/main/resources/hudson/PluginManager/advanced_sr.properties b/core/src/main/resources/hudson/PluginManager/advanced_sr.properties index ec453b66ce17..b173536cdedb 100644 --- a/core/src/main/resources/hudson/PluginManager/advanced_sr.properties +++ b/core/src/main/resources/hudson/PluginManager/advanced_sr.properties @@ -3,8 +3,6 @@ Update\ Center=\u0426\u0435\u043D\u0442\u0430\u0440 \u0437\u0430 \u0430\u0436\u0443\u0440\u0438\u0440\u0430\u045A\u0435 HTTP\ Proxy\ Configuration=\u041F\u043E\u0441\u0442\u0430\u0432\u0459\u0430\u045A\u0435 HTTP Proxy Upload\ Plugin=\u041E\u0442\u043F\u0440\u0435\u043C\u0438 \u043C\u043E\u0434\u0443\u043B\u0443 -uploadtext=\u041C\u043E\u0436\u0435\u0442\u0435 \u043E\u0442\u043F\u0440\u0435\u043C\u0438\u0442\u0438 \u0434\u0430\u0442\u043E\u0442\u0435\u043A\u0443 \u0443 \u0444\u043E\u0440\u043C\u0430\u0442\u0443 ".hpi", \u0434\u0430 \u0431\u0438\u0441\u0442\u0435 \u0438\u043D\u0441\u0442\u0430\u043B\u0438\u0440\u0430\u043B\u0438 \u043C\u043E\u0434\u0443\u043B\u0443 \u0432\u0430\u043D\ -\u0446\u0435\u043D\u0442\u0440\u0430\u043B\u043D\u043E\u0433 \u0438\u0437\u0432\u043E\u0440\u0430 \u0437\u0430 \u043C\u043E\u0434\u0443\u043B\u0435. File=\u0414\u0430\u0442\u043E\u0442\u0435\u043A\u0430 Upload=\u041E\u0442\u043F\u0440\u0435\u043C\u0438 Update\ Site=\u0410\u0436\u0443\u0440\u0438\u0440\u0430\u0458 \u0441\u0442\u0440\u0430\u043D\u0443 diff --git a/core/src/main/resources/hudson/PluginManager/advanced_sv_SE.properties b/core/src/main/resources/hudson/PluginManager/advanced_sv_SE.properties index 7c6bae6e81a7..5f5cae6124cb 100644 --- a/core/src/main/resources/hudson/PluginManager/advanced_sv_SE.properties +++ b/core/src/main/resources/hudson/PluginManager/advanced_sv_SE.properties @@ -31,4 +31,3 @@ Upload=Ladda upp Upload\ Plugin=Ladda upp insticksmodul User\ name=Anv\u00E4ndarnamn lastUpdated=Information uppdaterad {0} sedan -uploadtext=Du kan ladda upp en .hpi-fil f\u00F6r att installera en insticksmodul som ligger utanf\u00F6r den centrala instickskatalogen. diff --git a/core/src/main/resources/hudson/PluginManager/advanced_tr.properties b/core/src/main/resources/hudson/PluginManager/advanced_tr.properties index 34bd395fc3b1..908fe20aca23 100644 --- a/core/src/main/resources/hudson/PluginManager/advanced_tr.properties +++ b/core/src/main/resources/hudson/PluginManager/advanced_tr.properties @@ -22,8 +22,6 @@ HTTP\ Proxy\ Configuration=HTTP Proxy Konfig\u00FCrasyonu Upload\ Plugin=Eklenti Y\u00FCkle -uploadtext=\ -Merkezi eklenti repository''si d\u0131\u015F\u0131nda bir eklenti eklemek i\u00E7in .hpi dosyas\u0131n\u0131 y\u00FCklemeniz yeterli olacakt\u0131r. File=Dosya Update\ Site=G\u00FCncelleme sitesi Upload=Y\u00FCkle diff --git a/core/src/main/resources/hudson/PluginManager/advanced_zh_TW.properties b/core/src/main/resources/hudson/PluginManager/advanced_zh_TW.properties index 5a6a9c1420a9..4c68d165592e 100644 --- a/core/src/main/resources/hudson/PluginManager/advanced_zh_TW.properties +++ b/core/src/main/resources/hudson/PluginManager/advanced_zh_TW.properties @@ -26,7 +26,6 @@ Update\ Center=\u66F4\u65B0\u4E2D\u5FC3 HTTP\ Proxy\ Configuration=HTTP Proxy\u8A2D\u5B9A Upload\ Plugin=\u4E0A\u50B3\u5916\u639B\u7A0B\u5F0F -uploadtext=\u60A8\u53EF\u4EE5\u624B\u52D5\u4E0A\u50B3 .hpi \u6A94\u6848\u4F86\u5B89\u88DD\u4E0D\u5728\u4E2D\u592E\u5132\u5B58\u5EAB\u4E0A\u7684\u5916\u639B\u7A0B\u5F0F\u3002 File=\u6A94\u6848 Upload=\u4E0A\u50B3 diff --git a/test/src/test/java/hudson/PluginManagerTest.java b/test/src/test/java/hudson/PluginManagerTest.java index 79b737b0b162..8ea83cceac41 100644 --- a/test/src/test/java/hudson/PluginManagerTest.java +++ b/test/src/test/java/hudson/PluginManagerTest.java @@ -35,6 +35,7 @@ import com.gargoylesoftware.htmlunit.html.HtmlPage; import hudson.PluginManager.UberClassLoader; import hudson.model.Hudson; +import hudson.model.RootAction; import hudson.model.UpdateCenter; import hudson.model.UpdateCenter.UpdateCenterJob; import hudson.model.UpdateSite; @@ -52,6 +53,7 @@ import java.util.List; import java.util.Objects; import java.util.concurrent.Future; +import javax.servlet.ServletException; import jenkins.ClassLoaderReflectionToolkit; import jenkins.RestartRequiredException; import jenkins.model.GlobalConfiguration; @@ -67,9 +69,12 @@ import org.jvnet.hudson.test.Issue; import org.jvnet.hudson.test.JenkinsRule; import org.jvnet.hudson.test.MockAuthorizationStrategy; +import org.jvnet.hudson.test.TestExtension; import org.jvnet.hudson.test.Url; import org.jvnet.hudson.test.recipes.WithPlugin; import org.jvnet.hudson.test.recipes.WithPluginManager; +import org.kohsuke.stapler.StaplerRequest; +import org.kohsuke.stapler.StaplerResponse; /** * @author Kohsuke Kawaguchi @@ -109,6 +114,40 @@ public class PluginManagerTest { // uploaded legacy plugins get renamed to *.jpi assertTrue( new File(r.jenkins.getRootDir(),"plugins/legacy.jpi").exists() ); } + + @Test public void deployJpiFromUrl() throws Exception { + HtmlPage page = r.createWebClient().goTo("pluginManager/advanced"); + HtmlForm f = page.getFormByName("uploadPlugin"); + f.getInputByName("pluginUrl").setValueAttribute(Jenkins.get().getRootUrl() + "pluginManagerGetPlugin/htmlpublisher.jpi"); + r.submit(f); + + assertTrue( new File(r.jenkins.getRootDir(),"plugins/htmlpublisher.jpi").exists() ); + } + + @TestExtension("deployJpiFromUrl") + public static final class ReturnPluginJpiAction implements RootAction { + + @Override + public String getIconFileName() { + return "gear2.png"; + } + + @Override + public String getDisplayName() { + return "URL to retrieve a plugin jpi"; + } + + @Override + public String getUrlName() { + return "pluginManagerGetPlugin"; + } + + public void doDynamic(StaplerRequest staplerRequest, StaplerResponse staplerResponse) throws ServletException, IOException { + staplerResponse.setContentType("application/octet"); + staplerResponse.setStatus(200); + staplerResponse.serveFile(staplerRequest, PluginManagerTest.class.getClassLoader().getResource("plugins/htmlpublisher.jpi")); + } + } /** * Tests the effect of {@link WithPlugin}. From 997ff0a6bd18609d18dc8d8aa442bfa84e3cc1e7 Mon Sep 17 00:00:00 2001 From: Zbynek Konecny Date: Mon, 8 Nov 2021 21:34:39 +0100 Subject: [PATCH 12/19] Avoid false positives in plugin search (installed tab) (#5870) Co-authored-by: Daniel Beck <1831569+daniel-beck@users.noreply.github.com> --- core/src/main/resources/hudson/PluginManager/_table.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/src/main/resources/hudson/PluginManager/_table.js b/core/src/main/resources/hudson/PluginManager/_table.js index 969ec363861d..469ac2df6358 100644 --- a/core/src/main/resources/hudson/PluginManager/_table.js +++ b/core/src/main/resources/hudson/PluginManager/_table.js @@ -21,7 +21,8 @@ Behaviour.specify("#filter-box", '_table', 0, function(e) { } var makeVisible = true; - var content = items[i].innerHTML.toLowerCase(); + var pluginId = items[i].getAttribute('data-plugin-id'); + var content = (items[i].querySelector('.details').innerText + " " + pluginId).toLowerCase(); for (var j = 0; j < filterParts.length; j++) { var part = filterParts[j]; if (content.indexOf(part) < 0) { From 3e94da2ff545ef346cebc63be5482b9d3f2c5625 Mon Sep 17 00:00:00 2001 From: Tim Jacomb <21194782+timja@users.noreply.github.com> Date: Mon, 8 Nov 2021 20:34:47 +0000 Subject: [PATCH 13/19] JENKINS-67071 Adjust class for section header change (#5893) --- core/src/main/resources/lib/form/section_.js | 2 +- war/src/main/js/config-scrollspy.less | 2 +- war/src/main/js/widgets/config/model/ConfigTableMetaData.js | 4 ++-- .../test/js/widgets/config/freestyle-config-scrollspy.html | 6 +++--- .../js/widgets/config/freestyle-config-scrollspy_bg.html | 6 +++--- war/src/test/js/widgets/config/freestyle-config-tabbed.html | 6 +++--- .../test/js/widgets/config/freestyle-config-tabbed_bg.html | 6 +++--- 7 files changed, 16 insertions(+), 16 deletions(-) diff --git a/core/src/main/resources/lib/form/section_.js b/core/src/main/resources/lib/form/section_.js index b6f0732dc864..8cf90783d5b9 100644 --- a/core/src/main/resources/lib/form/section_.js +++ b/core/src/main/resources/lib/form/section_.js @@ -52,7 +52,7 @@ var section = (function (){ for (var e=dom.firstChild; e!=null; e=e.nextSibling) { if (e.nodeType==1) { - if (e.className=="section-header" && isVisible(e)) { + if (e.className=="jenkins-section__header" && isVisible(e)) { var child = new SectionNode(e); parent.children.push(child); // The next line seems to be unnecessary, as there are no children inside the section header itself. diff --git a/war/src/main/js/config-scrollspy.less b/war/src/main/js/config-scrollspy.less index ec8046aa74d8..ed1392baa7f0 100644 --- a/war/src/main/js/config-scrollspy.less +++ b/war/src/main/js/config-scrollspy.less @@ -21,7 +21,7 @@ .jenkins-config { // The Section header for the General section was manufactured, // so the default is to not display it. - .section-header-row.config_general .section-header { + .section-header-row.config_general .jenkins-section__header { display: none; } diff --git a/war/src/main/js/widgets/config/model/ConfigTableMetaData.js b/war/src/main/js/widgets/config/model/ConfigTableMetaData.js index 4c35d0c92963..263addcb106b 100644 --- a/war/src/main/js/widgets/config/model/ConfigTableMetaData.js +++ b/war/src/main/js/widgets/config/model/ConfigTableMetaData.js @@ -26,7 +26,7 @@ function closestTR(node) { function fromConfigTable(configTable) { var $ = getJQuery(); - var sectionHeaders = $('.section-header', configTable); + var sectionHeaders = $('.jenkins-section__header', configTable); var configForm = markConfigTableParentForm(configTable); // Mark the ancestor s of the section headers and add a title @@ -61,7 +61,7 @@ function fromConfigTable(configTable) { } else { tr = td = 'div'; } - var generalRow = $('<'+tr+' class="section-header-row insert first tr" title="General"><'+td+' colspan="4">
#General
'); + var generalRow = $('<'+tr+' class="section-header-row insert first tr" title="General"><'+td+' colspan="4">
#General
'); firstRow.before(generalRow); firstRow = configTableMetadata.getFirstRow(); var newArray = $.makeArray(topRows); diff --git a/war/src/test/js/widgets/config/freestyle-config-scrollspy.html b/war/src/test/js/widgets/config/freestyle-config-scrollspy.html index 1f3a6be10497..b517d179d64a 100644 --- a/war/src/test/js/widgets/config/freestyle-config-scrollspy.html +++ b/war/src/test/js/widgets/config/freestyle-config-scrollspy.html @@ -40,7 +40,7 @@ -
#Advanced Project Options
+
#Advanced Project Options
@@ -128,7 +128,7 @@ -
#Build Triggers
+
#Build Triggers
@@ -140,7 +140,7 @@ -
#Build
+
#Build
diff --git a/war/src/test/js/widgets/config/freestyle-config-scrollspy_bg.html b/war/src/test/js/widgets/config/freestyle-config-scrollspy_bg.html index 233e8d337c08..8e65df1c0b2f 100644 --- a/war/src/test/js/widgets/config/freestyle-config-scrollspy_bg.html +++ b/war/src/test/js/widgets/config/freestyle-config-scrollspy_bg.html @@ -40,7 +40,7 @@ -
#oミ頒セミソム諌サミスミクムひオミサミスミク ミスミームムびミセミケミコミク ミスミー ミソムミセミオミコムひー
+
#oミ頒セミソム諌サミスミクムひオミサミスミク ミスミームムびミセミケミコミク ミスミー ミソムミセミオミコムひー
@@ -128,7 +128,7 @@ -
#ミ籍イムひセミシミームひクムミスミセ ミクミキミソム諌サミスム紹イミーミスミク ミエミオミケムムひイミクム ミソムミク ミクミキミウムミーミカミエミーミスミオ
+
#ミ籍イムひセミシミームひクムミスミセ ミクミキミソム諌サミスム紹イミーミスミク ミエミオミケムムひイミクム ミソムミク ミクミキミウムミーミカミエミーミスミオ
@@ -140,7 +140,7 @@ -
#ミ侑キミウムミーミカミエミーミスミオ
+
#ミ侑キミウムミーミカミエミーミスミオ
diff --git a/war/src/test/js/widgets/config/freestyle-config-tabbed.html b/war/src/test/js/widgets/config/freestyle-config-tabbed.html index 78f8c7aef1e4..3e9e84a566fa 100644 --- a/war/src/test/js/widgets/config/freestyle-config-tabbed.html +++ b/war/src/test/js/widgets/config/freestyle-config-tabbed.html @@ -35,7 +35,7 @@
-
#Advanced Project Options
+
#Advanced Project Options
@@ -123,7 +123,7 @@
-
#Build Triggers
+
#Build Triggers
@@ -135,7 +135,7 @@
-
#Build
+
#Build
diff --git a/war/src/test/js/widgets/config/freestyle-config-tabbed_bg.html b/war/src/test/js/widgets/config/freestyle-config-tabbed_bg.html index 9d5c3c8d790a..2e731389fddd 100644 --- a/war/src/test/js/widgets/config/freestyle-config-tabbed_bg.html +++ b/war/src/test/js/widgets/config/freestyle-config-tabbed_bg.html @@ -35,7 +35,7 @@ -
#ミ頒セミソム諌サミスミクムひオミサミスミク ミスミームムびミセミケミコミク ミスミー ミソムミセミオミコムひー
+
#ミ頒セミソム諌サミスミクムひオミサミスミク ミスミームムびミセミケミコミク ミスミー ミソムミセミオミコムひー
@@ -123,7 +123,7 @@ -
#ミ籍イムひセミシミームひクムミスミセ ミクミキミソム諌サミスム紹イミーミスミク ミエミオミケムムひイミクム ミソムミク ミクミキミウムミーミカミエミーミスミオ
+
#ミ籍イムひセミシミームひクムミスミセ ミクミキミソム諌サミスム紹イミーミスミク ミエミオミケムムひイミクム ミソムミク ミクミキミウムミーミカミエミーミスミオ
@@ -135,7 +135,7 @@ -
#ミ侑キミウムミーミカミエミーミスミオ
+
#ミ侑キミウムミーミカミエミーミスミオ
From e8f2ae4e4c1ae63ae48d18f2a7b7134f317c7f7f Mon Sep 17 00:00:00 2001 From: Pauline Iogna Date: Mon, 8 Nov 2021 21:34:55 +0100 Subject: [PATCH 14/19] Hacktoberfest [JENKINS-66730] Un-inlining AsynchPeople/index.jelly (#5835) Co-authored-by: Wadeck Follonier Co-authored-by: Pauline Iogna --- .../model/View/AsynchPeople/index.jelly | 64 +------------------ .../View/AsynchPeople/people-resources.js | 61 ++++++++++++++++++ 2 files changed, 63 insertions(+), 62 deletions(-) create mode 100644 core/src/main/resources/hudson/model/View/AsynchPeople/people-resources.js diff --git a/core/src/main/resources/hudson/model/View/AsynchPeople/index.jelly b/core/src/main/resources/hudson/model/View/AsynchPeople/index.jelly index 7a8313a79cac..fb3620d99963 100644 --- a/core/src/main/resources/hudson/model/View/AsynchPeople/index.jelly +++ b/core/src/main/resources/hudson/model/View/AsynchPeople/index.jelly @@ -35,68 +35,8 @@ THE SOFTWARE. - ${it.parent.displayName} -

${%blurb}

- +

${%blurb}

+ diff --git a/core/src/main/resources/hudson/model/View/AsynchPeople/people-resources.js b/core/src/main/resources/hudson/model/View/AsynchPeople/people-resources.js new file mode 100644 index 000000000000..054748aaa716 --- /dev/null +++ b/core/src/main/resources/hudson/model/View/AsynchPeople/people-resources.js @@ -0,0 +1,61 @@ +function display(data) { + var p = document.getElementById('people'); + var rootURL = document.head.getAttribute('data-rooturl'); + var iconSize = document.getElementById("asynch-people-description").getAttribute("data-iconsize"); + for (var x = 0; data.length > x; x++) { + var e = data[x]; + var id = 'person-' + e.id; + var r = document.getElementById(id); + if (r == null) { + r = document.createElement('tr'); + r.id = id; + p.appendChild(r); + } else { + while (r.firstChild) { + r.removeChild(r.firstChild); + } + } + + var d = document.createElement('td'); + var a = document.createElement('a'); + a.href = rootURL + "/" + e.url; + a.className = 'model-link inside'; + var i = document.createElement('img'); + i.src = e.avatar; + i.className = 'icon' + iconSize; + a.appendChild(i); + d.appendChild(a); + r.appendChild(d); + + d = document.createElement('td'); + var a = document.createElement('a'); + a.href = rootURL + "/" + e.url; + a.appendChild(document.createTextNode(e.id)); + d.appendChild(a); + r.appendChild(d); + + d = document.createElement('td'); + var a = document.createElement('a'); + a.href = rootURL + "/" + e.url; + a.appendChild(document.createTextNode(e.fullName)); + d.appendChild(a); + r.appendChild(d); + + d = document.createElement('td'); + d.setAttribute('data', e.timeSortKey); + d.appendChild(document.createTextNode(e.lastChangeTimeString)); + r.appendChild(d); + + d = document.createElement('td'); + if (e.projectUrl != null) { + a = document.createElement('a'); + a.href = rootURL + "/" + e.projectUrl; + a.className = 'model-link inside'; + a.appendChild(document.createTextNode(e.projectFullDisplayName)); + d.appendChild(a); + } + r.appendChild(d); + + ts_refresh(p); + } +} \ No newline at end of file From 0accf411e93036337f2fc2f1a0872cfafa947da1 Mon Sep 17 00:00:00 2001 From: Daniel Beck <1831569+daniel-beck@users.noreply.github.com> Date: Tue, 9 Nov 2021 09:07:18 +0100 Subject: [PATCH 15/19] [JENKINS-67063] Revert canonicalization of entries when untarring (#5900) Co-authored-by: Daniel Beck --- core/src/main/java/hudson/FilePath.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/hudson/FilePath.java b/core/src/main/java/hudson/FilePath.java index 9ecbe010751b..8a71b56157e7 100644 --- a/core/src/main/java/hudson/FilePath.java +++ b/core/src/main/java/hudson/FilePath.java @@ -2831,14 +2831,13 @@ private static Integer writeToTar(File baseDir, DirScanner scanner, OutputStream * Supports large files > 10 GB since 1.627 when this was migrated to use commons-compress. */ private static void readFromTar(String name, File baseDir, InputStream in) throws IOException { - baseDir = baseDir.getCanonicalFile(); // TarInputStream t = new TarInputStream(in); try (TarArchiveInputStream t = new TarArchiveInputStream(in)) { TarArchiveEntry te; while ((te = t.getNextTarEntry()) != null) { - File f = new File(baseDir, te.getName()).getCanonicalFile(); - if (!f.toPath().startsWith(baseDir.toPath())) { + File f = new File(baseDir, te.getName()); + if (!f.toPath().normalize().startsWith(baseDir.toPath())) { throw new IOException( "Tar " + name + " contains illegal file name that breaks out of the target directory: " + te.getName()); } From 34dc42c9fe27f8543e46854fe14b1c00f27e8659 Mon Sep 17 00:00:00 2001 From: Jenkins Release Bot <66998184+jenkins-release-bot@users.noreply.github.com> Date: Tue, 9 Nov 2021 12:28:25 +0000 Subject: [PATCH 16/19] [maven-release-plugin] prepare release jenkins-2.320 --- bom/pom.xml | 2 +- cli/pom.xml | 2 +- core/pom.xml | 2 +- pom.xml | 4 ++-- test/pom.xml | 2 +- war/pom.xml | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/bom/pom.xml b/bom/pom.xml index ed78c1c28508..850fa625d825 100644 --- a/bom/pom.xml +++ b/bom/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.320 jenkins-bom diff --git a/cli/pom.xml b/cli/pom.xml index 3838594a564f..a258cb44a7e0 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -5,7 +5,7 @@ org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.320 cli diff --git a/core/pom.xml b/core/pom.xml index a1e62367dde5..8144b89d8afc 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -29,7 +29,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.320 jenkins-core diff --git a/pom.xml b/pom.xml index 9867ea55c09e..a2ea2907a0e6 100644 --- a/pom.xml +++ b/pom.xml @@ -34,7 +34,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.320 pom Jenkins main module @@ -61,7 +61,7 @@ THE SOFTWARE. scm:git:git://github.com/jenkinsci/jenkins.git scm:git:ssh://git@github.com/jenkinsci/jenkins.git https://github.com/jenkinsci/jenkins - ${scmTag} + jenkins-2.320 diff --git a/test/pom.xml b/test/pom.xml index 806fc921deb5..28def7171ea6 100644 --- a/test/pom.xml +++ b/test/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.320 jenkins-test diff --git a/war/pom.xml b/war/pom.xml index 9fbd2f1eebfa..fa074294f685 100644 --- a/war/pom.xml +++ b/war/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.320 jenkins-war From ef16ca78df35a80b0126dfe1ec0c37048b9ac646 Mon Sep 17 00:00:00 2001 From: Jenkins Release Bot <66998184+jenkins-release-bot@users.noreply.github.com> Date: Tue, 9 Nov 2021 12:28:45 +0000 Subject: [PATCH 17/19] [maven-release-plugin] prepare for next development iteration --- bom/pom.xml | 2 +- cli/pom.xml | 2 +- core/pom.xml | 2 +- pom.xml | 6 +++--- test/pom.xml | 2 +- war/pom.xml | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/bom/pom.xml b/bom/pom.xml index 850fa625d825..ed78c1c28508 100644 --- a/bom/pom.xml +++ b/bom/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.320 + ${revision}${changelist} jenkins-bom diff --git a/cli/pom.xml b/cli/pom.xml index a258cb44a7e0..3838594a564f 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -5,7 +5,7 @@ org.jenkins-ci.main jenkins-parent - 2.320 + ${revision}${changelist} cli diff --git a/core/pom.xml b/core/pom.xml index 8144b89d8afc..a1e62367dde5 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -29,7 +29,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.320 + ${revision}${changelist} jenkins-core diff --git a/pom.xml b/pom.xml index a2ea2907a0e6..0c612f0eb51a 100644 --- a/pom.xml +++ b/pom.xml @@ -34,7 +34,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.320 + ${revision}${changelist} pom Jenkins main module @@ -61,7 +61,7 @@ THE SOFTWARE. scm:git:git://github.com/jenkinsci/jenkins.git scm:git:ssh://git@github.com/jenkinsci/jenkins.git https://github.com/jenkinsci/jenkins - jenkins-2.320 + ${scmTag} @@ -70,7 +70,7 @@ THE SOFTWARE. - 2.320 + 2.321 -SNAPSHOT + @@ -85,15 +110,8 @@ THE SOFTWARE. - +
- - - +
+ + + +
- -
-
- - -
-
diff --git a/core/src/main/resources/hudson/model/Job/buildTimeTrend.jelly b/core/src/main/resources/hudson/model/Job/buildTimeTrend.jelly index 1a689c5a0ae3..5e31711bd21f 100644 --- a/core/src/main/resources/hudson/model/Job/buildTimeTrend.jelly +++ b/core/src/main/resources/hudson/model/Job/buildTimeTrend.jelly @@ -32,7 +32,6 @@ THE SOFTWARE.

${%Timeline}

-

${%Build Time Trend}

diff --git a/core/src/main/resources/hudson/model/View/AsynchPeople/index.jelly b/core/src/main/resources/hudson/model/View/AsynchPeople/index.jelly index fb3620d99963..e61154061292 100644 --- a/core/src/main/resources/hudson/model/View/AsynchPeople/index.jelly +++ b/core/src/main/resources/hudson/model/View/AsynchPeople/index.jelly @@ -28,24 +28,36 @@ THE SOFTWARE. -

- - ${%People} - - - - ${it.parent.displayName} -

-

${%blurb}

+
+
+

+ ${%People} + + + - ${it.parent.displayName} +

+
+
+

${%blurb}

- - - - - - - + + + + + + +
- ${%User ID}${%Name}${%Last Commit Activity}${%On}
+ + + + + + + + + +
${%User ID}${%Name}${%Last Commit Activity}${%On}
diff --git a/core/src/main/resources/hudson/model/View/AsynchPeople/people-resources.js b/core/src/main/resources/hudson/model/View/AsynchPeople/people-resources.js index 054748aaa716..3a90ccf9d7eb 100644 --- a/core/src/main/resources/hudson/model/View/AsynchPeople/people-resources.js +++ b/core/src/main/resources/hudson/model/View/AsynchPeople/people-resources.js @@ -1,7 +1,6 @@ function display(data) { var p = document.getElementById('people'); var rootURL = document.head.getAttribute('data-rooturl'); - var iconSize = document.getElementById("asynch-people-description").getAttribute("data-iconsize"); for (var x = 0; data.length > x; x++) { var e = data[x]; var id = 'person-' + e.id; @@ -17,14 +16,12 @@ function display(data) { } var d = document.createElement('td'); - var a = document.createElement('a'); - a.href = rootURL + "/" + e.url; - a.className = 'model-link inside'; - var i = document.createElement('img'); - i.src = e.avatar; - i.className = 'icon' + iconSize; - a.appendChild(i); - d.appendChild(a); + var wrapper = document.createElement('div'); + wrapper.className = 'jenkins-table__cell__button-wrapper'; + d.className = 'jenkins-table__cell--tight jenkins-table__icon'; + var icon = document.getElementById('person-circle-outline') + wrapper.innerHTML = icon.children[0].outerHTML; + d.appendChild(wrapper); r.appendChild(d); d = document.createElement('td'); @@ -50,7 +47,7 @@ function display(data) { if (e.projectUrl != null) { a = document.createElement('a'); a.href = rootURL + "/" + e.projectUrl; - a.className = 'model-link inside'; + a.className = 'jenkins-table__link model-link inside'; a.appendChild(document.createTextNode(e.projectFullDisplayName)); d.appendChild(a); } diff --git a/core/src/main/resources/hudson/model/View/builds.jelly b/core/src/main/resources/hudson/model/View/builds.jelly index 5e98db044aba..19149c83c413 100644 --- a/core/src/main/resources/hudson/model/View/builds.jelly +++ b/core/src/main/resources/hudson/model/View/builds.jelly @@ -28,15 +28,17 @@ THE SOFTWARE. -

- - ${%buildHistory(it.class.name=='hudson.model.AllView' ? app.displayName : it.displayName)} -

+
+
+

+ ${%buildHistory(it.class.name=='hudson.model.AllView' ? app.displayName : it.displayName)} +

+
+
-
diff --git a/core/src/main/resources/hudson/model/View/noJob.jelly b/core/src/main/resources/hudson/model/View/noJob.jelly index 5e744c21fab9..4145b1118be8 100644 --- a/core/src/main/resources/hudson/model/View/noJob.jelly +++ b/core/src/main/resources/hudson/model/View/noJob.jelly @@ -24,19 +24,8 @@ THE SOFTWARE. - -
-
${%description_1} - ${%description_2} + ${%description_2} -
-
diff --git a/core/src/main/resources/hudson/views/BuildButtonColumn/column.jelly b/core/src/main/resources/hudson/views/BuildButtonColumn/column.jelly index 110f40149bf4..d9d44ea921ff 100644 --- a/core/src/main/resources/hudson/views/BuildButtonColumn/column.jelly +++ b/core/src/main/resources/hudson/views/BuildButtonColumn/column.jelly @@ -24,11 +24,12 @@ THE SOFTWARE. - + - - - + + + diff --git a/core/src/main/resources/hudson/views/BuildButtonColumn/columnHeader.jelly b/core/src/main/resources/hudson/views/BuildButtonColumn/columnHeader.jelly index 1d7825c40c12..19fbbd1e8eec 100644 --- a/core/src/main/resources/hudson/views/BuildButtonColumn/columnHeader.jelly +++ b/core/src/main/resources/hudson/views/BuildButtonColumn/columnHeader.jelly @@ -22,8 +22,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --> - - - - + + \ No newline at end of file diff --git a/core/src/main/resources/hudson/views/JobColumn/column.jelly b/core/src/main/resources/hudson/views/JobColumn/column.jelly index ecb560cfce92..1e9811dff991 100644 --- a/core/src/main/resources/hudson/views/JobColumn/column.jelly +++ b/core/src/main/resources/hudson/views/JobColumn/column.jelly @@ -26,6 +26,6 @@ THE SOFTWARE. - + diff --git a/core/src/main/resources/hudson/views/LastFailureColumn/column.jelly b/core/src/main/resources/hudson/views/LastFailureColumn/column.jelly index 43544f10bb35..51046f5886b8 100644 --- a/core/src/main/resources/hudson/views/LastFailureColumn/column.jelly +++ b/core/src/main/resources/hudson/views/LastFailureColumn/column.jelly @@ -29,7 +29,7 @@ THE SOFTWARE. ${lfBuild.timestampString} - - ${lfBuild.displayName} + ${lfBuild.displayName} ${%N/A} diff --git a/core/src/main/resources/hudson/views/LastStableColumn/column.jelly b/core/src/main/resources/hudson/views/LastStableColumn/column.jelly index 6700bd42d65e..7bbc2dcc0868 100644 --- a/core/src/main/resources/hudson/views/LastStableColumn/column.jelly +++ b/core/src/main/resources/hudson/views/LastStableColumn/column.jelly @@ -29,7 +29,7 @@ THE SOFTWARE. ${lstBuild.timestampString} - - ${lstBuild.displayName} + ${lstBuild.displayName} ${%N/A} diff --git a/core/src/main/resources/hudson/views/LastSuccessColumn/column.jelly b/core/src/main/resources/hudson/views/LastSuccessColumn/column.jelly index bed1c1363c15..4ac61bffd584 100644 --- a/core/src/main/resources/hudson/views/LastSuccessColumn/column.jelly +++ b/core/src/main/resources/hudson/views/LastSuccessColumn/column.jelly @@ -29,7 +29,7 @@ THE SOFTWARE. ${lsBuild.timestampString} - - ${lsBuild.displayName} + ${lsBuild.displayName} ${%N/A} diff --git a/core/src/main/resources/hudson/views/StatusColumn/column.jelly b/core/src/main/resources/hudson/views/StatusColumn/column.jelly index b6a772135675..5297d99809a3 100644 --- a/core/src/main/resources/hudson/views/StatusColumn/column.jelly +++ b/core/src/main/resources/hudson/views/StatusColumn/column.jelly @@ -23,6 +23,6 @@ THE SOFTWARE. --> - - + + \ No newline at end of file diff --git a/core/src/main/resources/hudson/views/StatusColumn/columnHeader.jelly b/core/src/main/resources/hudson/views/StatusColumn/columnHeader.jelly index d33a9422b899..12d2b4bfc2ec 100644 --- a/core/src/main/resources/hudson/views/StatusColumn/columnHeader.jelly +++ b/core/src/main/resources/hudson/views/StatusColumn/columnHeader.jelly @@ -24,5 +24,5 @@ THE SOFTWARE. - ${%S} + ${%S} \ No newline at end of file diff --git a/core/src/main/resources/hudson/views/WeatherColumn/columnHeader.jelly b/core/src/main/resources/hudson/views/WeatherColumn/columnHeader.jelly index fd2224835d68..29af9277804e 100644 --- a/core/src/main/resources/hudson/views/WeatherColumn/columnHeader.jelly +++ b/core/src/main/resources/hudson/views/WeatherColumn/columnHeader.jelly @@ -24,5 +24,7 @@ THE SOFTWARE. - ${%W} + + ${%W} + \ No newline at end of file diff --git a/core/src/main/resources/hudson/widgets/HistoryWidget/index.jelly b/core/src/main/resources/hudson/widgets/HistoryWidget/index.jelly index 52f21a5a8266..40ee03ea2aaf 100644 --- a/core/src/main/resources/hudson/widgets/HistoryWidget/index.jelly +++ b/core/src/main/resources/hudson/widgets/HistoryWidget/index.jelly @@ -29,10 +29,16 @@ THE SOFTWARE. - - - - + +
+ + + + ${it.displayName} + + ${%trend} + +
@@ -66,7 +72,7 @@ THE SOFTWARE.
- +