diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000000000000000000000000000000000000..71b25de5fede2f693026268b69839c15b95465dd --- /dev/null +++ b/.gitattributes @@ -0,0 +1,39 @@ +# Handle line endings automatically for files detected as text +# and leave all files detected as binary untouched. +* text=auto + +# +# The above will handle all files NOT found below +# +# These files are text and should be normalized (Convert crlf => lf) +*.css text +*.groovy text +*.htm text +*.html text +*.java text +*.js text +*.json text +*.jelly text +*.jellytag text +*.less text +*.properties text +*.rb text +*.sh text +*.txt text +*.xml text + +# These files are binary and should be left untouched +# (binary is a macro for -text -diff) +*.class binary +*.gz binary +*.tgz binary +*.ear binary +*.gif binary +*.hpi binary +*.ico binary +*.jar binary +*.jpg binary +*.jpeg binary +*.png binary +*.war binary +*.zip binary diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000000000000000000000000000000000000..0e47cddae6542c7463aad91efb363a5402336b3d --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,35 @@ +See [JENKINS-XXXXX](https://issues.jenkins-ci.org/browse/JENKINS-XXXXX). + + + +### Proposed changelog entries + +* Entry 1: Issue, Human-readable Text +* ... + + + +### Submitter checklist + +- [ ] JIRA issue is well described +- [ ] Changelog entry appropriate for the audience affected by the change (users or developer, depending on the change). [Examples](https://github.com/jenkins-infra/jenkins.io/blob/master/content/_data/changelogs/weekly.yml) + * Use the `Internal: ` prefix if the change has no user-visible impact (API, test frameworks, etc.) +- [ ] Appropriate autotests or explanation to why this change has no tests +- [ ] For dependency updates: links to external changelogs and, if possible, full diffs + + + +### Desired reviewers + +@mention + + diff --git a/BUILDING.TXT b/BUILDING.TXT index 09766de355e22b3f2469dc88cc0a1ba35d8aa19c..bde5cadf353210259628baa34b1813f0acddc5b1 100644 --- a/BUILDING.TXT +++ b/BUILDING.TXT @@ -4,7 +4,6 @@ execution), run: mvn clean install -pl war -am -DskipTests The WAR file will be in war/target/jenkins.war (you can play with it) -You can deactivate test-harness execution with -Dskip-test-harness For more information on building Jenkins, visit https://wiki.jenkins-ci.org/display/JENKINS/Building+Jenkins diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 7a2d5e0c53ec6c9a1dcaaedf21fada835c68ea8c..01de1fea2cc3acf1ea8e561dcb74edb6cdd64aba 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,3 +1,109 @@ # Contributing to Jenkins -For information on contributing to Jenkins, check out the https://wiki.jenkins-ci.org/display/JENKINS/Beginners+Guide+to+Contributing and https://wiki.jenkins-ci.org/display/JENKINS/Extend+Jenkins wiki pages over at the official https://wiki.jenkins-ci.org . They will help you get started with contributing to Jenkins. + +This page provides information about contributing code to the Jenkins core codebase. + +:exclamation: There's a lot more to the Jenkins project than just code. For information on contributing to the Jenkins project overall, check out https://jenkins.io/participate/. + +## Getting started + +1. Fork the repository on GitHub +2. Clone the forked repository to your machine +3. Install the development tools. In order to develop Jenkins, you need the following tools: + * Java Development Kit (JDK) 8. + - In Jenkins project we usually use [OpenJDK](http://openjdk.java.net/), + but you can use other JDKs as well. + - Java 9 is **not supported** in Jenkins. + * Maven 3.3.9 or above. You can download it [here](https://maven.apache.org/download.cgi) + * Any IDE which supports importing Maven projects +4. Setup your development environment as described in [Preparing for Plugin Development](https://jenkins.io/doc/developer/tutorial/prepare/) + +If you want to contribute to Jenkins or just learn about the project, +you can start by fixing some easier issues. +In the Jenkins issue tracker we mark such issues as `newbie-friendly`. +You can find them +using [this query](https://issues.jenkins-ci.org/issues/?jql=project%20%3D%20JENKINS%20AND%20status%20in%20(Open%2C%20%22In%20Progress%22%2C%20Reopened)%20AND%20component%20%3D%20core%20AND%20labels%20in%20(newbie-friendly)). + +## Building and Debugging + +The build flow for Jenkins core is built around Maven. +Building and debugging process is described [here](https://jenkins.io/doc/developer/building/). + +If you want simply to have the `jenkins.war` file as fast as possible without tests, run: + + mvn clean package -pl war -am -DskipTests + +The WAR file will be created in `war/target/jenkins.war`. +After that you can start Jenkins using Java CLI ([guide](https://wiki.jenkins.io/display/JENKINS/Starting+and+Accessing+Jenkins)). +If you want to debug this WAR file without using Maven plugins, +You can just start the executable with [Remote Debug Flags](https://stackoverflow.com/questions/975271/remote-debugging-a-java-application) +and then attach IDE Debugger to it. + +## Testing changes + +Jenkins core includes unit and functional tests as a part of the repository. + +Functional tests (`test` module) take a while even on server-grade machines. +Most of the tests will be launched by the continuous integration instance, +so there is no strict need to run full test suites before proposing a pull request. + +In addition to the included tests, you can also find extra integration and UI +tests in the [Acceptance Test Harness (ATH)](https://github.com/jenkinsci/acceptance-test-harness) repository. +If you propose complex UI changes, you should create new ATH tests for them. + +## Proposing Changes + +The Jenkins project source code repositories are hosted GitHub. +All proposed changes are submitted and code reviewed using the _GitHub Pull Request_ process. + +To submit a pull request: + +1. Commit changes and push them to your fork on GitHub. +It is a good practice is to create branches instead of pushing to master. +2. In GitHub Web UI click the _New Pull Request_ button +3. Select `jenkinsci` as _base fork_ and `master` as `base`, then click _Create Pull Request_ + * We integrate all changes into the master branch towards the Weekly releases + * After that the changes may be backported to the current LTS baseline by the LTS Team. + The backporting process is described [here](https://jenkins.io/download/lts/). +4. Fill in the Pull Request description according to the [proposed template](.github/PULL_REQUEST_TEMPLATE.md). +5. Click _Create Pull Request_ +6. Wait for CI results/reviews, process the feedback. + * If you do not get feedback after 3 days, feel free to ping `@jenkinsci/code-reviewers` to CC. + * Usually we merge pull requests after 2 votes from reviewers or after 1 vote and 1-week delay without extra reviews. + +Once your Pull Request is ready to be merged, +the repository maintainers will integrate it, prepare changelogs and +ensure it gets released in one of incoming Weekly releases. +There is no additional action required from pull request authors at this point. + +## Copyright + +Jenkins core is licensed under [MIT license](./LICENSE.txt), with a few exceptions in bundled classes. +We consider all contributions as MIT unless it's explicitly stated otherwise. +MIT-incompatible code contributions will be rejected. +Contributions under MIT-compatible licenses may be also rejected if they are not ultimately necessary. + +We **Do NOT** require pull request submitters to sign the [contributor agreement](https://wiki.jenkins.io/display/JENKINS/Copyright+on+source+code) +as long as the code is licensed under MIT and merged by one of the contributors with the signed agreement. + +We still encourage people to sign the contributor agreement if they intend to submit more than a few pull requests. +Signing is also a mandatory prerequisite for getting merge/push permissions to core repositories +and for joining teams like [Jenkins Security Team](https://jenkins.io/security/#team). + +## Continuous Integration + +The Jenkins project has a Continuous Integration server... powered by Jenkins, of course. +It is located at [ci.jenkins.io](https://ci.jenkins.io/). + +The Jenkins project uses [Jenkins Pipeline](https://jenkins.io/doc/book/pipeline/) to run builds. +The code for the core build flow is stored in the [Jenkinsfile](./Jenkinsfile) in the repository root. +If you want to update that build flow (e.g. "add more checks"), +just submit a pull request. + +# Links + +* [Jenkins Contribution Landing Page](https://jenkins.io/participate/) +* [Jenkins IRC Channel](https://jenkins.io/chat/) +* [Beginners Guide To Contributing](https://wiki.jenkins.io/display/JENKINS/Beginners+Guide+to+Contributing) +* [List of newbie-friendly issues in the core](https://issues.jenkins-ci.org/issues/?jql=project%20%3D%20JENKINS%20AND%20status%20in%20(Open%2C%20%22In%20Progress%22%2C%20Reopened)%20AND%20component%20%3D%20core%20AND%20labels%20in%20(newbie-friendly)) + diff --git a/Jenkinsfile b/Jenkinsfile index 0e698b9e5d4eccc3adf69685cefdb171282132a5..9c4b4efbba263b95ef4e5a76b2433ece9d4df5e7 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,7 +1,7 @@ #!/usr/bin/env groovy /* - * This Jenkinsfile is intended to run on https://ci.jenkins-ci.org and may fail anywhere else. + * This Jenkinsfile is intended to run on https://ci.jenkins.io and may fail anywhere else. * It makes assumptions about plugins being installed, labels mapping to nodes that can build what is needed, etc. * * The required labels are "java" and "docker" - "java" would be any node that can run Java builds. It doesn't need @@ -11,155 +11,63 @@ // TEST FLAG - to make it easier to turn on/off unit tests for speeding up access to later stuff. def runTests = true - -// Only keep the 10 most recent builds. -properties([[$class: 'jenkins.model.BuildDiscarderProperty', strategy: [$class: 'LogRotator', - numToKeepStr: '50', - artifactNumToKeepStr: '20']]]) - -String packagingBranch = (binding.hasVariable('packagingBranch')) ? packagingBranch : 'jenkins-2.0' - -timestampedNode('java') { - - // First stage is actually checking out the source. Since we're using Multibranch - // currently, we can use "checkout scm". - stage('Checkout') { - checkout scm - } - - // Now run the actual build. - stage("Build / Test") { - timeout(time: 180, unit: 'MINUTES') { - // See below for what this method does - we're passing an arbitrary environment - // variable to it so that JAVA_OPTS and MAVEN_OPTS are set correctly. - withMavenEnv(["JAVA_OPTS=-Xmx1536m -Xms512m -XX:MaxPermSize=1024m", - "MAVEN_OPTS=-Xmx1536m -Xms512m -XX:MaxPermSize=1024m"]) { - // Actually run Maven! - // The -Dmaven.repo.local=${pwd()}/.repository means that Maven will create a - // .repository directory at the root of the build (which it gets from the - // pwd() Workflow call) and use that for the local Maven repository. - sh "mvn -Pdebug -U clean install ${runTests ? '-Dmaven.test.failure.ignore=true' : '-DskipTests'} -V -B -Dmaven.repo.local=${pwd()}/.repository" - } - } - } - - - // Once we've built, archive the artifacts and the test results. - stage('Archive Artifacts / Test Results') { - archiveArtifacts artifacts: '**/target/*.jar, **/target/*.war, **/target/*.hpi', - fingerprint: true - if (runTests) { - junit healthScaleFactor: 20.0, testResults: '**/target/surefire-reports/*.xml' - } - } -} - -def debFileName -def rpmFileName -def suseFileName - -// Run the packaging build on a node with the "docker" label. -timestampedNode('docker') { - // First stage here is getting prepped for packaging. - stage('Packaging - Docker Prep') { - // Docker environment to build packagings - dir('packaging-docker') { - git branch: packagingBranch, url: 'https://github.com/jenkinsci/packaging.git' - sh 'docker build -t jenkins-packaging-builder:0.1 docker' - } - } - - stage('Packaging') { - // Working packaging code, separate branch with fixes - dir('packaging') { - deleteDir() - - docker.image("jenkins-packaging-builder:0.1").inside("-u root") { - git branch: packagingBranch, url: 'https://github.com/jenkinsci/packaging.git' - - try { - // Saw issues with unstashing inside a container, and not sure copy artifact plugin would work here. - // So, simple wget. - sh "wget -q ${currentBuild.absoluteUrl}/artifact/war/target/jenkins.war" - sh "make clean deb rpm suse BRAND=./branding/jenkins.mk BUILDENV=./env/test.mk CREDENTIAL=./credentials/test.mk WAR=jenkins.war" - } catch (Exception e) { - error "Packaging failed: ${e}" - } finally { - // Needed to make sure the output of the build can be deleted by later runs. - // Hackish, yes, but rpm builds as a numeric UID only user fail, so... - sh "chmod -R a+w target || true" - sh "chmod a+w jenkins.war || true" - } - dir("target/debian") { - def debFilesFound = findFiles(glob: "*.deb") - if (debFilesFound.size() > 0) { - debFileName = debFilesFound[0]?.name - } - } - - dir("target/rpm") { - def rpmFilesFound = findFiles(glob: "*.rpm") - if (rpmFilesFound.size() > 0) { - rpmFileName = rpmFilesFound[0]?.name - } +def failFast = false + +properties([buildDiscarder(logRotator(numToKeepStr: '50', artifactNumToKeepStr: '20')), durabilityHint('PERFORMANCE_OPTIMIZED')]) + +// see https://github.com/jenkins-infra/documentation/blob/master/ci.adoc for information on what node types are available +def buildTypes = ['Linux', 'Windows'] + +def builds = [:] +for(i = 0; i < buildTypes.size(); i++) { + def buildType = buildTypes[i] + builds[buildType] = { + node(buildType.toLowerCase()) { + timestamps { + // First stage is actually checking out the source. Since we're using Multibranch + // currently, we can use "checkout scm". + stage('Checkout') { + checkout scm } - dir("target/suse") { - def suseFilesFound = findFiles(glob: "*.rpm") - if (suseFilesFound.size() > 0) { - suseFileName = suseFilesFound[0]?.name + // Now run the actual build. + stage("${buildType} Build / Test") { + timeout(time: 180, unit: 'MINUTES') { + // See below for what this method does - we're passing an arbitrary environment + // variable to it so that JAVA_OPTS and MAVEN_OPTS are set correctly. + withMavenEnv(["JAVA_OPTS=-Xmx1536m -Xms512m", + "MAVEN_OPTS=-Xmx1536m -Xms512m"]) { + // Actually run Maven! + // -Dmaven.repo.local=… tells Maven to create a subdir in the temporary directory for the local Maven repository + def mvnCmd = "mvn -Pdebug -U javadoc:javadoc clean install ${runTests ? '-Dmaven.test.failure.ignore' : '-DskipTests'} -V -B -Dmaven.repo.local=${pwd tmp: true}/m2repo -s settings-azure.xml -e" + if(isUnix()) { + sh mvnCmd + sh 'test `git status --short | tee /dev/stderr | wc --bytes` -eq 0' + } else { + bat mvnCmd + } + } } } - step([$class: 'ArtifactArchiver', artifacts: 'target/**/*', fingerprint: true]) + // Once we've built, archive the artifacts and the test results. + stage("${buildType} Publishing") { + def files = findFiles(glob: '**/target/*.jar, **/target/*.war, **/target/*.hpi') + renameFiles(files, buildType.toLowerCase()) - // Fail the build if we didn't find at least one of the packages, meaning they weren't built but - // somehow make didn't error out. - if (debFileName == null || rpmFileName == null || suseFileName == null) { - error "At least one of Debian, RPM or SuSE packages are missing, so failing the build." - } - } - } - } -} - - -stage('Packaging - Testing') { - if (runTests) { - if (!env.CHANGE_ID) { - // NOTE: As of now, a lot of package tests will fail. See https://issues.jenkins-ci.org/issues/?filter=15257 for - // possible open JIRAs. - - // Basic parameters - String artifactName = (binding.hasVariable('artifactName')) ? artifactName : 'jenkins' - String jenkinsPort = (binding.hasVariable('jenkinsPort')) ? jenkinsPort : '8080' - - // Set up - String debfile = "artifact://${env.JOB_NAME}/${env.BUILD_NUMBER}#target/debian/${debFileName}" - String rpmfile = "artifact://${env.JOB_NAME}/${env.BUILD_NUMBER}#target/rpm/${rpmFileName}" - String susefile = "artifact://${env.JOB_NAME}/${env.BUILD_NUMBER}#target/suse/${suseFileName}" - - timestampedNode("docker") { - stage "Load Lib" - dir('workflowlib') { - deleteDir() - git branch: packagingBranch, url: 'https://github.com/jenkinsci/packaging.git' - flow = load 'workflow/installertest.groovy' + archiveArtifacts artifacts: '**/target/*.jar, **/target/*.war, **/target/*.hpi', + fingerprint: true + if (runTests) { + junit healthScaleFactor: 20.0, testResults: '*/target/surefire-reports/*.xml' + } } } - // Run the real tests within docker node label - flow.fetchAndRunJenkinsInstallerTest("docker", rpmfile, susefile, debfile, - packagingBranch, artifactName, jenkinsPort) } - else { - echo "Not running package testing against pull requests" - } - } - else { - echo "Skipping package tests" } } +builds.failFast = failFast +parallel builds // This method sets up the Maven and JDK tools, puts them in the environment along // with whatever other arbitrary environment variables we passed in, and runs the @@ -185,11 +93,14 @@ void withMavenEnv(List envVars = [], def body) { } } -// Runs the given body within a Timestamper wrapper on the given label. -def timestampedNode(String label, Closure body) { - node(label) { - timestamps { - body.call() +void renameFiles(def files, String prefix) { + for(i = 0; i < files.length; i++) { + def newPath = files[i].path.replace(files[i].name, "${prefix}-${files[i].name}") + def rename = "${files[i].path} ${newPath}" + if(isUnix()) { + sh "mv ${rename}" + } else { + bat "move ${rename}" } } } diff --git a/README.md b/README.md index 501778372da7f1ab5613f35365efdb50a89d5279..6dc6c47ecef715c771fcfdeb9ccd83cc45cf4962 100644 --- a/README.md +++ b/README.md @@ -59,6 +59,4 @@ Jenkins is **licensed** under the **[MIT License]**. The terms of the license ar [GitHub]: https://github.com/jenkinsci/jenkins [website]: https://jenkins.io/ [@jenkinsci]: https://twitter.com/jenkinsci -[Contributing]: https://wiki.jenkins-ci.org/display/JENKINS/contributing -[Extend Jenkins]: https://wiki.jenkins-ci.org/display/JENKINS/Extend+Jenkins [wiki]: https://wiki.jenkins-ci.org diff --git a/changelog.html b/changelog.html index 6793890cf6d80fadeb0fca48497f3e76b54c08a8..20a2db735b6fd3d3a0c137d1d5484d76c354f8d4 100644 --- a/changelog.html +++ b/changelog.html @@ -1,2840 +1,15 @@ - - - - - Changelog - - - - - -
Legend: - - major RFEmajor enhancement RFEenhancement - major bugmajor bug fix bugbug fix - xxxxx -
- - - - - -Upcoming changes -Community ratings - - - -

What's new in 2.23 (2016/09/18)

- -

What's new in 2.22 (2016/09/11)

- -

What's new in 2.21 (2016/09/04)

- -

What's new in 2.20 (2016/08/28)

- -

What's new in 2.19 (2016/08/21)

- -

What's new in 2.18 (2016/08/15)

- -

What's new in 2.17 (2016/08/05)

- -

What's new in 2.16 (2016/07/31)

- -

What's new in 2.15 (2016/07/24)

- -

What's new in 2.14 (2016/07/17)

- -

What's new in 2.13 (2016/07/10)

- -

What's new in 2.12 (2016/07/05)

- -

What's new in 2.11 (2016/06/26)

- -

What's new in 2.10 (2016/06/19)

- -

What's new in 2.9 (2016/06/13)

- -

What's new in 2.8 (2016/06/05)

- -

What's new in 2.7 (2016/05/29)

- -

What's new in 2.6 (2016/05/22)

- -

What's new in 2.5 (2016/05/16)

- -

What's new in 2.4 (2016/05/15)

- -

What's new in 2.3 (2016/05/11)

- -

What's new in 2.2 (2016/05/08)

- -

What's new in 2.1 (2016/05/01)

- - - -

What's new in 2.0 (2016/04/20)

-
- More detailed information about the new features in Jenkins 2.0 on the overview page. -
- - -

What's new in 1.656 (2016/04/03)

- -

What's new in 1.655 (2016/03/27)

- -

What's new in 1.654 (2016/03/21)

- -

What's new in 1.653 (2016/03/13)

- -

What's new in 1.652 (2016/03/06)

- -

What's new in 1.651 (2016/02/28)

- -

What's new in 1.650 (2016/02/24)

- -

What's new in 1.649 (2016/02/21)

- -

What's new in 1.648 (2016/02/17)

- -

What's new in 1.647 (2016/02/04)

- -

What's new in 1.646 (2016/01/25)

- -

What's new in 1.645 (2016/01/18)

- -

What's new in 1.644 (2016/01/10)

- -

What's new in 1.643 (2015/12/20)

- -

What's new in 1.642 (2015/12/13)

- -

What's new in 1.641 (2015/12/09)

- -

What's new in 1.640 (2015/12/07)

- -

What's new in 1.639 (2015/11/29)

- -

What's new in 1.638 (2015/11/11)

- -

What's new in 1.637 (2015/11/08)

- -

What's new in 1.636 (2015/11/01)

- -

What's new in 1.635 (2015/10/25)

- -

What's new in 1.634 (2015/10/18)

- -

What's new in 1.633 (2015/10/11)

- -

What's new in 1.632 (2015/10/05)

- -

What's new in 1.631 (2015/09/27)

- -

What's new in 1.630 (2015/09/20)

- -

What's new in 1.629 (2015/09/15)

- -

What's new in 1.628 (2015/09/06)

- -

What's new in 1.627 (2015/08/30)

- -

What's new in 1.626 (2015/08/23)

- -

What's new in 1.625 (2015/08/17)

- -

What's new in 1.624 (2015/08/09)

- -

What's new in 1.623 (2015/08/02)

-

No notable changes in this release.

-

What's new in 1.622 (2015/07/27)

- -

What's new in 1.621 (2015/07/19)

- -

What's new in 1.620 (2015/07/12)

- -

What's new in 1.619 (2015/07/05)

- -

What's new in 1.618 (2015/06/29)

- -

What's new in 1.617 (2015/06/07)

- -

What's new in 1.616 (2015/05/31)

- -

What's new in 1.615 (2015/05/25)

- -

What's new in 1.614 (2015/05/17)

- -

What's new in 1.613 (2015/05/10)

- -

What's new in 1.612 (2015/05/03)

- -

What's new in 1.611 (2015/04/26)

- -

What's new in 1.610 (2015/04/19)

- -

What's new in 1.609 (2015/04/12)

- -

What's new in 1.608 (2015/04/05)

- -

What's new in 1.607 (2015/03/30)

- -

What's new in 1.606 (2015/03/23)

- -

What's new in 1.605 (2015/03/16)

- -

What's new in 1.604 (2015/03/15)

- -

What's new in 1.602 (2015/03/08)

- -

What's new in 1.601 (2015/03/03)

- -

What's new in 1.600 (2015/02/28)

- -

What's new in 1.599 (2015/02/16)

- -

What's new in 1.598 (2015/01/25)

- -

What's new in 1.597 (2015/01/19)

- -

What's new in 1.596 (2015/01/04)

- -

What's new in 1.595 (2014/12/21)

- -

What's new in 1.594 (2014/12/14)

- -

What's new in 1.593 (2014/12/07)

- -

What's new in 1.592 (2014/11/30)

- -

What's new in 1.591 (2014/11/25)

- -

What's new in 1.590 (2014/11/16)

- -

What's new in 1.589 (2014/11/09)

- -

What's new in 1.588 (2014/11/02)

- -

What's new in 1.587 (2014/10/29)

- -

What's new in 1.586 (2014/10/26)

- -

What's new in 1.585 (2014/10/19)

- -

What's new in 1.584 (2014/10/12)

- -

What's new in 1.583 (2014/10/01)

- -

What's new in 1.582 (2014/09/28)

- -

What's new in 1.581 (2014/09/21)

- -

What's new in 1.580 (2014/09/14)

- -

What's new in 1.579 (2014/09/06)

- -

What's new in 1.578 (2014/08/31)

- -

What's new in 1.577 (2014/08/24)

- -

What's new in 1.576 (2014/08/18)

- -

What's new in 1.575 (2014/08/10)

- -

What's new in 1.574 (2014/07/27)

- -

What's new in 1.573 (2014/07/20)

- -

What's new in 1.572 (2014/07/13)

- -

What's new in 1.571 (2014/07/07)

- -

What's new in 1.570 (2014/06/29)

- -

What's new in 1.569 (2014/06/23)

- -

What's new in 1.568 (2014/06/15)

- -

What's new in 1.567 (2014/06/09)

- -

What's new in 1.566 (2014/06/01)

- -

What's new in 1.565 (2014/05/26)

- -

What's new in 1.564 (2014/05/19)

- -

What's new in 1.563 (2014/05/11)

- -

What's new in 1.562 (2014/05/03)

- -

What's new in 1.561 (2014/04/27)

- -

What's new in 1.560 (2014/04/20)

- -

What's new in 1.559 (2014/04/13)

- -

What's new in 1.558 (2014/04/06)

- -

What's new in 1.557 (2014/03/31)

- -

What's new in 1.556 (2014/03/23)

- -

What's new in 1.555 (2014/03/16)

- -

What's new in 1.554 (2014/03/09)

- -

What's new in 1.553 (2014/03/02)

- -

What's new in 1.552 (2014/02/24)

- -

What's new in 1.551 (2014/02/14)

- -

What's new in 1.550 (2014/02/09)

- -

What's new in 1.549 (2014/01/25)

- -

What's new in 1.548 (2014/01/20)

- -

What's new in 1.547 (2014/01/12)

- -

What's new in 1.546 (2014/01/06)

- - -

-Older changelogs can be found in a separate file - - - +--> \ No newline at end of file diff --git a/cli/pom.xml b/cli/pom.xml index af431a1bfc348c1f578fd80021d59e7d19330cb7..26b3089a142b33830aa12d17ea3e1bc8f9b2547f 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -4,8 +4,8 @@ org.jenkins-ci.main - pom - 2.24-SNAPSHOT + jenkins-parent + 2.111-SNAPSHOT cli @@ -24,10 +24,17 @@ powermock-api-mockito test + + org.kohsuke + access-modifier-annotation + commons-codec commons-codec - 1.4 + + + commons-io + commons-io ${project.groupId} @@ -42,9 +49,20 @@ org.jvnet.localizer localizer - 1.23 + 1.24 + org.apache.sshd + sshd-core + 1.7.0 + true + + + org.slf4j + slf4j-jdk14 + true + + org.jenkins-ci trilead-ssh2 build214-jenkins-1 @@ -59,11 +77,13 @@ - attached + single package - jar-with-dependencies + + jar-with-dependencies + hudson.cli.CLI @@ -88,6 +108,7 @@ Messages.properties target/generated-sources/localizer + true diff --git a/cli/src/main/java/hudson/cli/CLI.java b/cli/src/main/java/hudson/cli/CLI.java index 9eca2ec8efb8097ec8c42ab113d5f758570f3dc1..cbd3acd04458b6fe1416089e1660784f54bf6686 100644 --- a/cli/src/main/java/hudson/cli/CLI.java +++ b/cli/src/main/java/hudson/cli/CLI.java @@ -25,13 +25,13 @@ package hudson.cli; import hudson.cli.client.Messages; import hudson.remoting.Channel; +import hudson.remoting.NamingThreadFactory; import hudson.remoting.PingThread; import hudson.remoting.Pipe; import hudson.remoting.RemoteInputStream; import hudson.remoting.RemoteOutputStream; import hudson.remoting.SocketChannelStream; import hudson.remoting.SocketOutputStream; - import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import javax.net.ssl.HostnameVerifier; @@ -58,6 +58,7 @@ import java.net.InetSocketAddress; import java.net.Socket; import java.net.URL; import java.net.URLConnection; +import java.nio.charset.Charset; import java.security.GeneralSecurityException; import java.security.KeyPair; import java.security.PublicKey; @@ -71,16 +72,18 @@ import java.util.Locale; import java.util.Properties; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.logging.Handler; import java.util.logging.Level; import java.util.logging.Logger; import static java.util.logging.Level.*; +import org.apache.commons.io.FileUtils; /** * CLI entry point to Jenkins. * * @author Kohsuke Kawaguchi */ -public class CLI { +public class CLI implements AutoCloseable { private final ExecutorService pool; private final Channel channel; private final CliEntryPoint entryPoint; @@ -89,6 +92,11 @@ public class CLI { private final String httpsProxyTunnel; private final String authorization; + /** + * For tests only. + * @deprecated Specific to {@link Mode#REMOTING}. + */ + @Deprecated public CLI(URL jenkins) throws IOException, InterruptedException { this(jenkins,null); } @@ -110,26 +118,27 @@ public class CLI { public CLI(URL jenkins, ExecutorService exec, String httpsProxyTunnel) throws IOException, InterruptedException { this(new CLIConnectionFactory().url(jenkins).executorService(exec).httpsProxyTunnel(httpsProxyTunnel)); } - + + /** + * @deprecated Specific to {@link Mode#REMOTING}. + */ + @Deprecated /*package*/ CLI(CLIConnectionFactory factory) throws IOException, InterruptedException { URL jenkins = factory.jenkins; this.httpsProxyTunnel = factory.httpsProxyTunnel; this.authorization = factory.authorization; ExecutorService exec = factory.exec; - String url = jenkins.toExternalForm(); - if(!url.endsWith("/")) url+='/'; - ownsPool = exec==null; - pool = exec!=null ? exec : Executors.newCachedThreadPool(); + pool = exec!=null ? exec : Executors.newCachedThreadPool(new NamingThreadFactory(Executors.defaultThreadFactory(), "CLI.pool")); Channel _channel; try { - _channel = connectViaCliPort(jenkins, getCliTcpPort(url)); + _channel = connectViaCliPort(jenkins, getCliTcpPort(jenkins)); } catch (IOException e) { - LOGGER.log(Level.FINE,"Failed to connect via CLI port. Falling back to HTTP",e); + LOGGER.log(Level.FINE, "Failed to connect via CLI port. Falling back to HTTP", e); try { - _channel = connectViaHttp(url); + _channel = connectViaHttp(jenkins); } catch (IOException e2) { e.addSuppressed(e2); throw e; @@ -144,13 +153,15 @@ public class CLI { throw new IOException(Messages.CLI_VersionMismatch()); } - private Channel connectViaHttp(String url) throws IOException { - LOGGER.log(FINE, "Trying to connect to {0} via HTTP", url); - url+="cli"; - URL jenkins = new URL(url); + /** + * @deprecated Specific to {@link Mode#REMOTING}. + */ + @Deprecated + private Channel connectViaHttp(URL url) throws IOException { + LOGGER.log(FINE, "Trying to connect to {0} via Remoting over HTTP", url); - FullDuplexHttpStream con = new FullDuplexHttpStream(jenkins,authorization); - Channel ch = new Channel("Chunked connection to "+jenkins, + FullDuplexHttpStream con = new FullDuplexHttpStream(url, "cli?remoting=true", authorization); + Channel ch = new Channel("Chunked connection to " + url, pool,con.getInputStream(),con.getOutputStream()); final long interval = 15*1000; final long timeout = (interval * 3) / 4; @@ -163,8 +174,17 @@ public class CLI { return ch; } + /** + * @deprecated Specific to {@link Mode#REMOTING}. + */ + @Deprecated private Channel connectViaCliPort(URL jenkins, CliPort clip) throws IOException { - LOGGER.log(FINE, "Trying to connect directly via TCP/IP to {0}", clip.endpoint); + LOGGER.log(FINE, "Trying to connect directly via Remoting over TCP/IP to {0}", clip.endpoint); + + if (authorization != null) { + LOGGER.warning("-auth ignored when using JNLP agent port"); + } + final Socket s = new Socket(); // this prevents a connection from silently terminated by the router in between or the other peer // and that goes without unnoticed. However, the time out is often very long (for example 2 hours @@ -176,9 +196,10 @@ public class CLI { if (httpsProxyTunnel!=null) { String[] tokens = httpsProxyTunnel.split(":"); + LOGGER.log(Level.FINE, "Using HTTP proxy {0}:{1} to connect to CLI port", new Object[]{tokens[0], tokens[1]}); s.connect(new InetSocketAddress(tokens[0], Integer.parseInt(tokens[1]))); PrintStream o = new PrintStream(s.getOutputStream()); - o.print("CONNECT " + clip.endpoint.getHostName() + ":" + clip.endpoint.getPort() + " HTTP/1.0\r\n\r\n"); + o.print("CONNECT " + clip.endpoint.getHostString() + ":" + clip.endpoint.getPort() + " HTTP/1.0\r\n\r\n"); // read the response from the proxy ByteArrayOutputStream rsp = new ByteArrayOutputStream(); @@ -188,8 +209,15 @@ public class CLI { rsp.write(ch); } String head = new BufferedReader(new StringReader(rsp.toString("ISO-8859-1"))).readLine(); - if (!head.startsWith("HTTP/1.0 200 ")) - throw new IOException("Failed to establish a connection through HTTP proxy: "+rsp); + + if (head == null) { + throw new IOException("Unexpected empty response"); + } + if (!(head.startsWith("HTTP/1.0 200 ") || head.startsWith("HTTP/1.1 200 "))) { + s.close(); + LOGGER.log(Level.SEVERE, "Failed to tunnel the CLI port through the HTTP proxy. Falling back to HTTP."); + throw new IOException("Failed to establish a connection through HTTP proxy: " + rsp); + } // HTTP proxies (at least the one I tried --- squid) doesn't seem to do half-close very well. // So instead of relying on it, we'll just send the close command and then let the server @@ -254,13 +282,14 @@ public class CLI { /** * If the server advertises CLI endpoint, returns its location. + * @deprecated Specific to {@link Mode#REMOTING}. */ - protected CliPort getCliTcpPort(String url) throws IOException { - URL _url = new URL(url); - if (_url.getHost()==null || _url.getHost().length()==0) { + @Deprecated + protected CliPort getCliTcpPort(URL url) throws IOException { + if (url.getHost()==null || url.getHost().length()==0) { throw new IOException("Invalid URL: "+url); } - URLConnection head = _url.openConnection(); + URLConnection head = url.openConnection(); try { head.connect(); } catch (IOException e) { @@ -277,9 +306,7 @@ public class CLI { flushURLConnection(head); if (p1==null && p2==null) { - // we aren't finding headers we are expecting. Is this even running Jenkins? - if (head.getHeaderField("X-Hudson")==null && head.getHeaderField("X-Jenkins")==null) - throw new IOException("There's no Jenkins running at "+url); + verifyJenkinsConnection(head); throw new IOException("No X-Jenkins-CLI2-Port among " + head.getHeaderFields().keySet()); } @@ -288,6 +315,27 @@ public class CLI { else return new CliPort(new InetSocketAddress(h,Integer.parseInt(p1)),identity,1); } + /** + * Make sure the connection is open against Jenkins server. + * + * @param c The open connection. + * @throws IOException in case of communication problem. + * @throws NotTalkingToJenkinsException when connection is not made to Jenkins service. + */ + /*package*/ static void verifyJenkinsConnection(URLConnection c) throws IOException { + if (c.getHeaderField("X-Hudson")==null && c.getHeaderField("X-Jenkins")==null) + throw new NotTalkingToJenkinsException(c); + } + /*package*/ static final class NotTalkingToJenkinsException extends IOException { + public NotTalkingToJenkinsException(String s) { + super(s); + } + + public NotTalkingToJenkinsException(URLConnection c) { + super("There's no Jenkins running at " + c.getURL().toString()); + } + } + /** * Flush the supplied {@link URLConnection} input and close the * connection nicely. @@ -374,14 +422,11 @@ public class CLI { } public static void main(final String[] _args) throws Exception { -// Logger l = Logger.getLogger(Channel.class.getName()); -// l.setLevel(ALL); -// ConsoleHandler h = new ConsoleHandler(); -// h.setLevel(ALL); -// l.addHandler(h); -// try { System.exit(_main(_args)); + } catch (NotTalkingToJenkinsException ex) { + System.err.println(ex.getMessage()); + System.exit(3); } catch (Throwable t) { // if the CLI main thread die, make sure to kill the JVM. t.printStackTrace(); @@ -389,6 +434,7 @@ public class CLI { } } + private enum Mode {HTTP, SSH, REMOTING} public static int _main(String[] _args) throws Exception { List args = Arrays.asList(_args); PrivateKeyProvider provider = new PrivateKeyProvider(); @@ -402,19 +448,52 @@ public class CLI { boolean tryLoadPKey = true; + Mode mode = null; + + String user = null; + String auth = null; + boolean strictHostKey = false; + while(!args.isEmpty()) { String head = args.get(0); if (head.equals("-version")) { System.out.println("Version: "+computeVersion()); return 0; } + if (head.equals("-http")) { + if (mode != null) { + printUsage("-http clashes with previously defined mode " + mode); + return -1; + } + mode = Mode.HTTP; + args = args.subList(1, args.size()); + continue; + } + if (head.equals("-ssh")) { + if (mode != null) { + printUsage("-ssh clashes with previously defined mode " + mode); + return -1; + } + mode = Mode.SSH; + args = args.subList(1, args.size()); + continue; + } + if (head.equals("-remoting")) { + if (mode != null) { + printUsage("-remoting clashes with previously defined mode " + mode); + return -1; + } + mode = Mode.REMOTING; + args = args.subList(1, args.size()); + continue; + } if(head.equals("-s") && args.size()>=2) { url = args.get(1); args = args.subList(2,args.size()); continue; } if (head.equals("-noCertificateCheck")) { - System.out.println("Skipping HTTPS certificate checks altogether. Note that this is not secure at all."); + LOGGER.info("Skipping HTTPS certificate checks altogether. Note that this is not secure at all."); SSLContext context = SSLContext.getInstance("TLS"); context.init(null, new TrustManager[]{new NoCheckTrustManager()}, new SecureRandom()); HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory()); @@ -445,11 +524,37 @@ public class CLI { sshAuthRequestedExplicitly = true; continue; } + if (head.equals("-strictHostKey")) { + strictHostKey = true; + args = args.subList(1, args.size()); + continue; + } + if (head.equals("-user") && args.size() >= 2) { + user = args.get(1); + args = args.subList(2, args.size()); + continue; + } + if (head.equals("-auth") && args.size() >= 2) { + auth = args.get(1); + args = args.subList(2, args.size()); + continue; + } if(head.equals("-p") && args.size()>=2) { httpProxy = args.get(1); args = args.subList(2,args.size()); continue; } + if (head.equals("-logger") && args.size() >= 2) { + Level level = parse(args.get(1)); + for (Handler h : Logger.getLogger("").getHandlers()) { + h.setLevel(level); + } + for (Logger logger : new Logger[] {LOGGER, FullDuplexHttpStream.LOGGER, PlainCLIProtocol.LOGGER, Logger.getLogger("org.apache.sshd")}) { // perhaps also Channel + logger.setLevel(level); + } + args = args.subList(2, args.size()); + continue; + } break; } @@ -458,16 +563,53 @@ public class CLI { return -1; } + if (!url.endsWith("/")) { + url += '/'; + } + if(args.isEmpty()) args = Arrays.asList("help"); // default to help if (tryLoadPKey && !provider.hasKeys()) provider.readFromDefaultLocations(); + if (mode == null) { + mode = Mode.HTTP; + } + + LOGGER.log(FINE, "using connection mode {0}", mode); + + if (user != null && auth != null) { + LOGGER.warning("-user and -auth are mutually exclusive"); + } + + if (mode == Mode.SSH) { + if (user == null) { + // TODO SshCliAuthenticator already autodetects the user based on public key; why cannot AsynchronousCommand.getCurrentUser do the same? + LOGGER.warning("-user required when using -ssh"); + return -1; + } + return SSHCLI.sshConnection(url, user, args, provider, strictHostKey); + } + + if (strictHostKey) { + LOGGER.warning("-strictHostKey meaningful only with -ssh"); + } + + if (user != null) { + LOGGER.warning("Warning: -user ignored unless using -ssh"); + } + CLIConnectionFactory factory = new CLIConnectionFactory().url(url).httpsProxyTunnel(httpProxy); String userInfo = new URL(url).getUserInfo(); if (userInfo != null) { factory = factory.basicAuth(userInfo); + } else if (auth != null) { + factory = factory.basicAuth(auth.startsWith("@") ? FileUtils.readFileToString(new File(auth.substring(1))).trim() : auth); + } + + if (mode == Mode.HTTP) { + return plainHttpConnection(url, args, factory); } CLI cli = factory.connect(); @@ -478,22 +620,21 @@ public class CLI { cli.authenticate(provider.getKeys()); } catch (IllegalStateException e) { if (sshAuthRequestedExplicitly) { - System.err.println("The server doesn't support public key authentication"); + LOGGER.warning("The server doesn't support public key authentication"); return -1; } } catch (UnsupportedOperationException e) { if (sshAuthRequestedExplicitly) { - System.err.println("The server doesn't support public key authentication"); + LOGGER.warning("The server doesn't support public key authentication"); return -1; } } catch (GeneralSecurityException e) { if (sshAuthRequestedExplicitly) { - System.err.println(e.getMessage()); - LOGGER.log(FINE,e.getMessage(),e); + LOGGER.log(WARNING, null, e); return -1; } - System.err.println("[WARN] Failed to authenticate with your SSH keys. Proceeding as anonymous"); - LOGGER.log(FINE,"Failed to authenticate with your SSH keys.",e); + LOGGER.warning("Failed to authenticate with your SSH keys. Proceeding as anonymous"); + LOGGER.log(FINE, null, e); } } @@ -506,6 +647,88 @@ public class CLI { } } + private static int plainHttpConnection(String url, List args, CLIConnectionFactory factory) throws IOException, InterruptedException { + LOGGER.log(FINE, "Trying to connect to {0} via plain protocol over HTTP", url); + FullDuplexHttpStream streams = new FullDuplexHttpStream(new URL(url), "cli?remoting=false", factory.authorization); + class ClientSideImpl extends PlainCLIProtocol.ClientSide { + boolean complete; + int exit = -1; + ClientSideImpl(InputStream is, OutputStream os) throws IOException { + super(is, os); + if (is.read() != 0) { // cf. FullDuplexHttpService + throw new IOException("expected to see initial zero byte; perhaps you are connecting to an old server which does not support -http?"); + } + } + @Override + protected void onExit(int code) { + this.exit = code; + finished(); + } + @Override + protected void onStdout(byte[] chunk) throws IOException { + System.out.write(chunk); + } + @Override + protected void onStderr(byte[] chunk) throws IOException { + System.err.write(chunk); + } + @Override + protected void handleClose() { + finished(); + } + private synchronized void finished() { + complete = true; + notifyAll(); + } + } + try (final ClientSideImpl connection = new ClientSideImpl(streams.getInputStream(), streams.getOutputStream())) { + for (String arg : args) { + connection.sendArg(arg); + } + connection.sendEncoding(Charset.defaultCharset().name()); + connection.sendLocale(Locale.getDefault().toString()); + connection.sendStart(); + connection.begin(); + final OutputStream stdin = connection.streamStdin(); + new Thread("input reader") { + @Override + public void run() { + try { + int c; + while ((c = System.in.read()) != -1) { // TODO use InputStream.available + stdin.write(c); + } + connection.sendEndStdin(); + } catch (IOException x) { + LOGGER.log(Level.WARNING, null, x); + } + } + }.start(); + new Thread("ping") { // JENKINS-46659 + @Override + public void run() { + try { + Thread.sleep(10_000); + while (!connection.complete) { + LOGGER.fine("sending ping"); + connection.sendEncoding(Charset.defaultCharset().name()); // no-op at this point + Thread.sleep(10_000); + } + } catch (IOException | InterruptedException x) { + LOGGER.log(Level.WARNING, null, x); + } + } + + }.start(); + synchronized (connection) { + while (!connection.complete) { + connection.wait(); + } + } + return connection.exit; + } + } + private static String computeVersion() { Properties props = new Properties(); try { @@ -550,7 +773,9 @@ public class CLI { * * @return * identity of the server represented as a public key. + * @deprecated Specific to {@link Mode#REMOTING}. */ + @Deprecated public PublicKey authenticate(Iterable privateKeys) throws IOException, GeneralSecurityException { Pipe c2s = Pipe.createLocalToRemote(); Pipe s2c = Pipe.createRemoteToLocal(); @@ -576,6 +801,10 @@ public class CLI { } } + /** + * @deprecated Specific to {@link Mode#REMOTING}. + */ + @Deprecated public PublicKey authenticate(KeyPair key) throws IOException, GeneralSecurityException { return authenticate(Collections.singleton(key)); } @@ -585,5 +814,5 @@ public class CLI { System.err.println(Messages.CLI_Usage()); } - private static final Logger LOGGER = Logger.getLogger(CLI.class.getName()); + static final Logger LOGGER = Logger.getLogger(CLI.class.getName()); } diff --git a/cli/src/main/java/hudson/cli/CLIConnectionFactory.java b/cli/src/main/java/hudson/cli/CLIConnectionFactory.java index a2e5681039effafbb22765a249a508fe8fdb22b2..894e4c0fdac60ff446e3a67ecf68e44192d93f97 100644 --- a/cli/src/main/java/hudson/cli/CLIConnectionFactory.java +++ b/cli/src/main/java/hudson/cli/CLIConnectionFactory.java @@ -32,6 +32,7 @@ public class CLIConnectionFactory { /** * This {@link ExecutorService} is used to execute closures received from the server. + * Used only in Remoting mode. */ public CLIConnectionFactory executorService(ExecutorService es) { this.exec = es; @@ -59,15 +60,24 @@ public class CLIConnectionFactory { /** * Convenience method to call {@link #authorization} with the HTTP basic authentication. + * Currently unused. */ public CLIConnectionFactory basicAuth(String username, String password) { return basicAuth(username+':'+password); } + /** + * Convenience method to call {@link #authorization} with the HTTP basic authentication. + * Cf. {@code BasicHeaderApiTokenAuthenticator}. + */ public CLIConnectionFactory basicAuth(String userInfo) { return authorization("Basic " + new String(Base64.encodeBase64((userInfo).getBytes()))); } - + + /** + * @deprecated Specific to Remoting-based protocol. + */ + @Deprecated public CLI connect() throws IOException, InterruptedException { return new CLI(this); } diff --git a/cli/src/main/java/hudson/cli/CliEntryPoint.java b/cli/src/main/java/hudson/cli/CliEntryPoint.java index 57bd42e553b77336c2a0db0085ae4ce0474c76b2..fe1f6c835097888be71632babbe31f1b6530fab5 100644 --- a/cli/src/main/java/hudson/cli/CliEntryPoint.java +++ b/cli/src/main/java/hudson/cli/CliEntryPoint.java @@ -34,7 +34,9 @@ import java.util.Locale; * Remotable interface for CLI entry point on the server side. * * @author Kohsuke Kawaguchi + * @deprecated Specific to Remoting-based protocol. */ +@Deprecated public interface CliEntryPoint { /** * Just like the static main method. diff --git a/cli/src/main/java/hudson/cli/CliPort.java b/cli/src/main/java/hudson/cli/CliPort.java index 8faab7de41bee0c88fa90cdaa0cbb8c9599f6a97..56165e766ba6186489d4e3017b0a7a35510358ab 100644 --- a/cli/src/main/java/hudson/cli/CliPort.java +++ b/cli/src/main/java/hudson/cli/CliPort.java @@ -8,9 +8,9 @@ import java.security.KeyFactory; import java.security.PublicKey; import java.security.spec.X509EncodedKeySpec; -/** - * @author Kohsuke Kawaguchi - */ + /** + * @deprecated Specific to Remoting mode. + */ public final class CliPort { /** * The TCP endpoint to talk to. diff --git a/cli/src/main/java/hudson/cli/Connection.java b/cli/src/main/java/hudson/cli/Connection.java index 1c1ada471fdbaaded6f2203ec130a7e69a671a6f..017051a64a646a76b4ecfe81966381e3874adbca 100644 --- a/cli/src/main/java/hudson/cli/Connection.java +++ b/cli/src/main/java/hudson/cli/Connection.java @@ -56,6 +56,9 @@ import java.security.interfaces.DSAPublicKey; import java.security.interfaces.RSAPublicKey; import java.security.spec.X509EncodedKeySpec; +/** + * Used by Jenkins core only in deprecated Remoting-based CLI. + */ public class Connection { public final InputStream in; public final OutputStream out; diff --git a/cli/src/main/java/hudson/cli/DiagnosedStreamCorruptionException.java b/cli/src/main/java/hudson/cli/DiagnosedStreamCorruptionException.java new file mode 100644 index 0000000000000000000000000000000000000000..4708b425dbb77a715910ac28c67ec84aca79db0f --- /dev/null +++ b/cli/src/main/java/hudson/cli/DiagnosedStreamCorruptionException.java @@ -0,0 +1,55 @@ +package hudson.cli; + +import java.io.PrintWriter; +import java.io.StreamCorruptedException; +import java.io.StringWriter; + +// TODO COPIED FROM hudson.remoting + +/** + * Signals a {@link StreamCorruptedException} with some additional diagnostic information. + * + * @author Kohsuke Kawaguchi + */ +class DiagnosedStreamCorruptionException extends StreamCorruptedException { + private final Exception diagnoseFailure; + private final byte[] readBack; + private final byte[] readAhead; + + DiagnosedStreamCorruptionException(Exception cause, Exception diagnoseFailure, byte[] readBack, byte[] readAhead) { + initCause(cause); + this.diagnoseFailure = diagnoseFailure; + this.readBack = readBack; + this.readAhead = readAhead; + } + + public Exception getDiagnoseFailure() { + return diagnoseFailure; + } + + public byte[] getReadBack() { + return readBack; + } + + public byte[] getReadAhead() { + return readAhead; + } + + @Override + public String toString() { + StringBuilder buf = new StringBuilder(); + buf.append(super.toString()).append("\n"); + buf.append("Read back: ").append(HexDump.toHex(readBack)).append('\n'); + buf.append("Read ahead: ").append(HexDump.toHex(readAhead)); + if (diagnoseFailure!=null) { + StringWriter w = new StringWriter(); + PrintWriter p = new PrintWriter(w); + diagnoseFailure.printStackTrace(p); + p.flush(); + + buf.append("\nDiagnosis problem:\n "); + buf.append(w.toString().trim().replace("\n","\n ")); + } + return buf.toString(); + } +} diff --git a/cli/src/main/java/hudson/cli/FlightRecorderInputStream.java b/cli/src/main/java/hudson/cli/FlightRecorderInputStream.java new file mode 100644 index 0000000000000000000000000000000000000000..ebdd18a192fec4d2e29e25c85dbeb0c2679e40d6 --- /dev/null +++ b/cli/src/main/java/hudson/cli/FlightRecorderInputStream.java @@ -0,0 +1,191 @@ +package hudson.cli; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.Arrays; + +// TODO COPIED FROM hudson.remoting + +/** + * Filter input stream that records the content as it's read, so that it can be reported + * in case of a catastrophic stream corruption problem. + * + * @author Kohsuke Kawaguchi + */ +class FlightRecorderInputStream extends InputStream { + + /** + * Size (in bytes) of the flight recorder ring buffer used for debugging remoting issues. + * @since 2.41 + */ + static final int BUFFER_SIZE = Integer.getInteger("hudson.remoting.FlightRecorderInputStream.BUFFER_SIZE", 1024 * 1024); + + private final InputStream source; + private ByteArrayRingBuffer recorder = new ByteArrayRingBuffer(BUFFER_SIZE); + + FlightRecorderInputStream(InputStream source) { + this.source = source; + } + + /** + * Rewinds the record buffer and forget everything that was recorded. + */ + public void clear() { + recorder = new ByteArrayRingBuffer(BUFFER_SIZE); + } + + /** + * Gets the recorded content. + */ + public byte[] getRecord() { + return recorder.toByteArray(); + } + + /** + * Creates a {@link DiagnosedStreamCorruptionException} based on the recorded content plus read ahead. + * The caller is responsible for throwing the exception. + */ + public DiagnosedStreamCorruptionException analyzeCrash(Exception problem, String diagnosisName) { + final ByteArrayOutputStream readAhead = new ByteArrayOutputStream(); + final IOException[] error = new IOException[1]; + + Thread diagnosisThread = new Thread(diagnosisName+" stream corruption diagnosis thread") { + public void run() { + int b; + try { + // not all InputStream will look for the thread interrupt flag, so check that explicitly to be defensive + while (!Thread.interrupted() && (b=source.read())!=-1) { + readAhead.write(b); + } + } catch (IOException e) { + error[0] = e; + } + } + }; + + // wait up to 1 sec to grab as much data as possible + diagnosisThread.start(); + try { + diagnosisThread.join(1000); + } catch (InterruptedException ignored) { + // we are only waiting for a fixed amount of time, so we'll pretend like we were in a busy loop + Thread.currentThread().interrupt(); + // fall through + } + + IOException diagnosisProblem = error[0]; // capture the error, if any, before we kill the thread + if (diagnosisThread.isAlive()) + diagnosisThread.interrupt(); // if it's not dead, kill + + return new DiagnosedStreamCorruptionException(problem,diagnosisProblem,getRecord(),readAhead.toByteArray()); + + } + + @Override + public int read() throws IOException { + int i = source.read(); + if (i>=0) + recorder.write(i); + return i; + } + + @Override + public int read(byte[] b, int off, int len) throws IOException { + len = source.read(b, off, len); + if (len>0) + recorder.write(b,off,len); + return len; + } + + /** + * To record the bytes we've skipped, convert the call to read. + */ + @Override + public long skip(long n) throws IOException { + byte[] buf = new byte[(int)Math.min(n,64*1024)]; + return read(buf,0,buf.length); + } + + @Override + public int available() throws IOException { + return source.available(); + } + + @Override + public void close() throws IOException { + source.close(); + } + + @Override + public boolean markSupported() { + return false; + } + + // http://stackoverflow.com/a/3651696/12916 + private static class ByteArrayRingBuffer extends OutputStream { + + byte[] data; + + int capacity, pos = 0; + + boolean filled = false; + + public ByteArrayRingBuffer(int capacity) { + data = new byte[capacity]; + this.capacity = capacity; + } + + @Override + public synchronized void write(int b) { + if (pos == capacity) { + filled = true; + pos = 0; + } + data[pos++] = (byte) b; + } + + public synchronized byte[] toByteArray() { + if (!filled) { + return Arrays.copyOf(data, pos); + } + byte[] ret = new byte[capacity]; + System.arraycopy(data, pos, ret, 0, capacity - pos); + System.arraycopy(data, 0, ret, capacity - pos, pos); + return ret; + } + + /** @author @roadrunner2 */ + @Override public synchronized void write(byte[] buf, int off, int len) { + // no point in trying to copy more than capacity; this also simplifies logic below + if (len > capacity) { + off += (len - capacity); + len = capacity; + } + + // copy to buffer, but no farther than the end + int num = Math.min(len, capacity - pos); + if (num > 0) { + System.arraycopy(buf, off, data, pos, num); + off += num; + len -= num; + pos += num; + } + + // wrap around if necessary + if (pos == capacity) { + filled = true; + pos = 0; + } + + // copy anything still left + if (len > 0) { + System.arraycopy(buf, off, data, pos, len); + pos += len; + } + } + + } + +} diff --git a/cli/src/main/java/hudson/cli/FullDuplexHttpStream.java b/cli/src/main/java/hudson/cli/FullDuplexHttpStream.java index abde9bb2022664eda42f5b28d91e9d58fbcfe04f..9b18142b7824257af32e510e4eb99d5cc677cf69 100644 --- a/cli/src/main/java/hudson/cli/FullDuplexHttpStream.java +++ b/cli/src/main/java/hudson/cli/FullDuplexHttpStream.java @@ -1,9 +1,7 @@ package hudson.cli; -import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; -import java.io.InputStreamReader; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; @@ -16,11 +14,11 @@ import org.apache.commons.codec.binary.Base64; /** * Creates a capacity-unlimited bi-directional {@link InputStream}/{@link OutputStream} pair over * HTTP, which is a request/response protocol. - * + * {@code FullDuplexHttpService} is the counterpart on the server side. * @author Kohsuke Kawaguchi */ public class FullDuplexHttpStream { - private final URL target; + private final URL base; /** * Authorization header value needed to get through the HTTP layer. */ @@ -29,10 +27,18 @@ public class FullDuplexHttpStream { private final OutputStream output; private final InputStream input; + /** + * A way to get data from the server. + * There will be an initial zero byte used as a handshake which you should expect and ignore. + */ public InputStream getInputStream() { return input; } + /** + * A way to upload data to the server. + * You will need to write to this and {@link OutputStream#flush} it to finish establishing a connection. + */ public OutputStream getOutputStream() { return output; } @@ -49,20 +55,40 @@ public class FullDuplexHttpStream { } /** - * @param target + * @param target something like {@code http://jenkins/cli?remoting=true} + * which we then need to split into {@code http://jenkins/} + {@code cli?remoting=true} + * in order to construct a crumb issuer request + * @deprecated use {@link #FullDuplexHttpStream(URL, String, String)} instead + */ + @Deprecated + public FullDuplexHttpStream(URL target, String authorization) throws IOException { + this(new URL(target.toString().replaceFirst("/cli.*$", "/")), target.toString().replaceFirst("^.+/(cli.*)$", "$1"), authorization); + } + + /** + * @param base the base URL of Jenkins + * @param relativeTarget * The endpoint that we are making requests to. * @param authorization * The value of the authorization header, if non-null. */ - public FullDuplexHttpStream(URL target, String authorization) throws IOException { - this.target = target; + public FullDuplexHttpStream(URL base, String relativeTarget, String authorization) throws IOException { + if (!base.toString().endsWith("/")) { + throw new IllegalArgumentException(base.toString()); + } + if (relativeTarget.startsWith("/")) { + throw new IllegalArgumentException(relativeTarget); + } + + this.base = tryToResolveRedirects(base, authorization); this.authorization = authorization; - CrumbData crumbData = new CrumbData(); + URL target = new URL(this.base, relativeTarget); UUID uuid = UUID.randomUUID(); // so that the server can correlate those two connections // server->client + LOGGER.fine("establishing download side"); HttpURLConnection con = (HttpURLConnection) target.openConnection(); con.setDoOutput(true); // request POST to avoid caching con.setRequestMethod("POST"); @@ -71,16 +97,16 @@ public class FullDuplexHttpStream { if (authorization != null) { con.addRequestProperty("Authorization", authorization); } - if(crumbData.isValid) { - con.addRequestProperty(crumbData.crumbName, crumbData.crumb); - } con.getOutputStream().close(); input = con.getInputStream(); - // make sure we hit the right URL - if(con.getHeaderField("Hudson-Duplex")==null) - throw new IOException(target+" doesn't look like Jenkins"); + // make sure we hit the right URL; no need for CLI.verifyJenkinsConnection here + if (con.getHeaderField("Hudson-Duplex") == null) { + throw new CLI.NotTalkingToJenkinsException("There's no Jenkins running at " + target + ", or is not serving the HTTP Duplex transport"); + } + LOGGER.fine("established download side"); // calling getResponseCode or getHeaderFields breaks everything - // client->server uses chunked encoded POST for unlimited capacity. + // client->server uses chunked encoded POST for unlimited capacity. + LOGGER.fine("establishing upload side"); con = (HttpURLConnection) target.openConnection(); con.setDoOutput(true); // request POST con.setRequestMethod("POST"); @@ -91,69 +117,29 @@ public class FullDuplexHttpStream { if (authorization != null) { con.addRequestProperty ("Authorization", authorization); } - - if(crumbData.isValid) { - con.addRequestProperty(crumbData.crumbName, crumbData.crumb); - } output = con.getOutputStream(); + LOGGER.fine("established upload side"); } - static final int BLOCK_SIZE = 1024; - static final Logger LOGGER = Logger.getLogger(FullDuplexHttpStream.class.getName()); - - private final class CrumbData { - String crumbName; - String crumb; - boolean isValid; - - private CrumbData() { - this.crumbName = ""; - this.crumb = ""; - this.isValid = false; - getData(); - } - - private void getData() { - try { - String base = createCrumbUrlBase(); - String[] pair = readData(base + "?xpath=concat(//crumbRequestField,\":\",//crumb)").split(":", 2); - crumbName = pair[0]; - crumb = pair[1]; - isValid = true; - LOGGER.fine("Crumb data: "+crumbName+"="+crumb); - } catch (IOException e) { - // presumably this Hudson doesn't use crumb - LOGGER.log(Level.FINE,"Failed to get crumb data",e); - } - } - - private String createCrumbUrlBase() { - String url = target.toExternalForm(); - return new StringBuilder(url.substring(0, url.lastIndexOf("/cli"))).append("/crumbIssuer/api/xml/").toString(); - } - - private String readData(String dest) throws IOException { - HttpURLConnection con = (HttpURLConnection) new URL(dest).openConnection(); + // As this transport mode is using POST, it is necessary to resolve possible redirections using GET first. + private URL tryToResolveRedirects(URL base, String authorization) { + try { + HttpURLConnection con = (HttpURLConnection) base.openConnection(); if (authorization != null) { con.addRequestProperty("Authorization", authorization); } - try { - BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream())); - String line = reader.readLine(); - String nextLine = reader.readLine(); - if (nextLine != null) { - System.err.println("Warning: received junk from " + dest); - System.err.println(line); - System.err.println(nextLine); - while ((nextLine = reader.readLine()) != null) { - System.err.println(nextLine); - } - } - return line; - } - finally { - con.disconnect(); - } + con.getInputStream().close(); + base = con.getURL(); + } catch (Exception ex) { + // Do not obscure the problem propagating the exception. If the problem is real it will manifest during the + // actual exchange so will be reported properly there. If it is not real (no permission in UI but sufficient + // for CLI connection using one of its mechanisms), there is no reason to bother user about it. + LOGGER.log(Level.FINE, "Failed to resolve potential redirects", ex); } + return base; } + + static final int BLOCK_SIZE = 1024; + static final Logger LOGGER = Logger.getLogger(FullDuplexHttpStream.class.getName()); + } diff --git a/cli/src/main/java/hudson/cli/HexDump.java b/cli/src/main/java/hudson/cli/HexDump.java new file mode 100644 index 0000000000000000000000000000000000000000..ad37158bc16d0e7939a34831bd7628120eb61207 --- /dev/null +++ b/cli/src/main/java/hudson/cli/HexDump.java @@ -0,0 +1,47 @@ +package hudson.cli; + +// TODO COPIED FROM hudson.remoting + +/** + * @author Kohsuke Kawaguchi + */ +class HexDump { + private static final String CODE = "0123456789abcdef"; + + public static String toHex(byte[] buf) { + return toHex(buf,0,buf.length); + } + public static String toHex(byte[] buf, int start, int len) { + StringBuilder r = new StringBuilder(len*2); + boolean inText = false; + for (int i=0; i= 0x20 && b <= 0x7e) { + if (!inText) { + inText = true; + r.append('\''); + } + r.append((char) b); + } else { + if (inText) { + r.append("' "); + inText = false; + } + r.append("0x"); + r.append(CODE.charAt((b>>4)&15)); + r.append(CODE.charAt(b&15)); + if (i < len - 1) { + if (b == 10) { + r.append('\n'); + } else { + r.append(' '); + } + } + } + } + if (inText) { + r.append('\''); + } + return r.toString(); + } +} diff --git a/cli/src/main/java/hudson/cli/PlainCLIProtocol.java b/cli/src/main/java/hudson/cli/PlainCLIProtocol.java new file mode 100644 index 0000000000000000000000000000000000000000..ed5c453360dd2475ca7605adeee13476004b694e --- /dev/null +++ b/cli/src/main/java/hudson/cli/PlainCLIProtocol.java @@ -0,0 +1,346 @@ +/* + * The MIT License + * + * Copyright 2017 CloudBees, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package hudson.cli; + +import java.io.ByteArrayOutputStream; +import java.io.Closeable; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.EOFException; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.nio.channels.ClosedChannelException; +import java.nio.channels.ReadPendingException; +import java.util.logging.Level; +import java.util.logging.Logger; +import org.apache.commons.io.IOUtils; +import org.apache.commons.io.input.CountingInputStream; + +/** + * CLI protocol working over a plain socket-like connection, without SSH or Remoting. + * Each side consists of frames starting with an {@code int} length, + * then a {@code byte} opcode, then any opcode-specific data. + * The length does not count the length field itself nor the opcode, so it is nonnegative. + */ +class PlainCLIProtocol { + + static final Logger LOGGER = Logger.getLogger(PlainCLIProtocol.class.getName()); + + /** One-byte operation to send to the other side. */ + private enum Op { + /** UTF-8 command name or argument. */ + ARG(true), + /** UTF-8 locale identifier. */ + LOCALE(true), + /** UTF-8 client encoding. */ + ENCODING(true), + /** Start running command. */ + START(true), + /** Exit code, as int. */ + EXIT(false), + /** Chunk of stdin, as int length followed by bytes. */ + STDIN(true), + /** EOF on stdin. */ + END_STDIN(true), + /** Chunk of stdout. */ + STDOUT(false), + /** Chunk of stderr. */ + STDERR(false); + /** True if sent from the client to the server; false if sent from the server to the client. */ + final boolean clientSide; + Op(boolean clientSide) { + this.clientSide = clientSide; + } + } + + static abstract class EitherSide implements Closeable { + + private final CountingInputStream cis; + private final FlightRecorderInputStream flightRecorder; + final DataInputStream dis; + final DataOutputStream dos; + + protected EitherSide(InputStream is, OutputStream os) { + cis = new CountingInputStream(is); + flightRecorder = new FlightRecorderInputStream(cis); + dis = new DataInputStream(flightRecorder); + dos = new DataOutputStream(os); + } + + final void begin() { + new Reader().start(); + } + + private class Reader extends Thread { + + Reader() { + super("PlainCLIProtocol"); // TODO set distinctive Thread.name + } + + @Override + public void run() { + try { + while (true) { + LOGGER.finest("reading frame"); + int framelen; + try { + framelen = dis.readInt(); + } catch (EOFException x) { + handleClose(); + break; // TODO verify that we hit EOF immediately, not partway into framelen + } + if (framelen < 0) { + throw new IOException("corrupt stream: negative frame length"); + } + byte b = dis.readByte(); + if (b < 0) { // i.e., >127 + throw new IOException("corrupt stream: negative operation code"); + } + if (b >= Op.values().length) { + LOGGER.log(Level.WARNING, "unknown operation #{0}: {1}", new Object[] {b, HexDump.toHex(flightRecorder.getRecord())}); + IOUtils.skipFully(dis, framelen); + continue; + } + Op op = Op.values()[b]; + long start = cis.getByteCount(); + LOGGER.log(Level.FINEST, "handling frame with {0} of length {1}", new Object[] {op, framelen}); + boolean handled = handle(op, framelen); + if (handled) { + long actuallyRead = cis.getByteCount() - start; + if (actuallyRead != framelen) { + throw new IOException("corrupt stream: expected to read " + framelen + " bytes from " + op + " but read " + actuallyRead); + } + } else { + LOGGER.log(Level.WARNING, "unexpected {0}: {1}", new Object[] {op, HexDump.toHex(flightRecorder.getRecord())}); + IOUtils.skipFully(dis, framelen); + } + } + } catch (ClosedChannelException x) { + LOGGER.log(Level.FINE, null, x); + handleClose(); + } catch (IOException x) { + LOGGER.log(Level.WARNING, null, flightRecorder.analyzeCrash(x, "broken stream")); + } catch (ReadPendingException x) { + // in case trick in CLIAction does not work + LOGGER.log(Level.FINE, null, x); + handleClose(); + } catch (RuntimeException x) { + LOGGER.log(Level.WARNING, null, x); + handleClose(); + } + } + + } + + protected abstract void handleClose(); + + protected abstract boolean handle(Op op, int framelen) throws IOException; + + private void writeOp(Op op) throws IOException { + dos.writeByte((byte) op.ordinal()); + } + + protected final synchronized void send(Op op) throws IOException { + dos.writeInt(0); + writeOp(op); + dos.flush(); + } + + protected final synchronized void send(Op op, int number) throws IOException { + dos.writeInt(4); + writeOp(op); + dos.writeInt(number); + dos.flush(); + } + + protected final synchronized void send(Op op, byte[] chunk, int off, int len) throws IOException { + dos.writeInt(len); + writeOp(op); + dos.write(chunk, off, len); + dos.flush(); + } + + protected final void send(Op op, byte[] chunk) throws IOException { + send(op, chunk, 0, chunk.length); + } + + protected final void send(Op op, String text) throws IOException { + ByteArrayOutputStream buf = new ByteArrayOutputStream(); + new DataOutputStream(buf).writeUTF(text); + send(op, buf.toByteArray()); + } + + protected final byte[] readChunk(int framelen) throws IOException { + assert Thread.currentThread() instanceof EitherSide.Reader; + byte[] buf = new byte[framelen]; + dis.readFully(buf); + return buf; + } + + protected final OutputStream stream(final Op op) { + return new OutputStream() { + @Override + public void write(int b) throws IOException { + send(op, new byte[] {(byte) b}); + } + @Override + public void write(byte[] b, int off, int len) throws IOException { + send(op, b, off, len); + } + @Override + public void write(byte[] b) throws IOException { + send(op, b); + } + }; + } + + @Override + public synchronized void close() throws IOException { + dos.close(); + } + + } + + static abstract class ServerSide extends EitherSide { + + ServerSide(InputStream is, OutputStream os) { + super(is, os); + } + + @Override + protected final boolean handle(Op op, int framelen) throws IOException { + assert Thread.currentThread() instanceof EitherSide.Reader; + assert op.clientSide; + switch (op) { + case ARG: + onArg(dis.readUTF()); + return true; + case LOCALE: + onLocale(dis.readUTF()); + return true; + case ENCODING: + onEncoding(dis.readUTF()); + return true; + case START: + onStart(); + return true; + case STDIN: + onStdin(readChunk(framelen)); + return true; + case END_STDIN: + onEndStdin(); + return true; + default: + return false; + } + } + + protected abstract void onArg(String text); + + protected abstract void onLocale(String text); + + protected abstract void onEncoding(String text); + + protected abstract void onStart(); + + protected abstract void onStdin(byte[] chunk) throws IOException; + + protected abstract void onEndStdin() throws IOException; + + public final void sendExit(int code) throws IOException { + send(Op.EXIT, code); + } + + public final OutputStream streamStdout() { + return stream(Op.STDOUT); + } + + public final OutputStream streamStderr() { + return stream(Op.STDERR); + } + + } + + static abstract class ClientSide extends EitherSide { + + ClientSide(InputStream is, OutputStream os) { + super(is, os); + } + + @Override + protected boolean handle(Op op, int framelen) throws IOException { + assert Thread.currentThread() instanceof EitherSide.Reader; + assert !op.clientSide; + switch (op) { + case EXIT: + onExit(dis.readInt()); + return true; + case STDOUT: + onStdout(readChunk(framelen)); + return true; + case STDERR: + onStderr(readChunk(framelen)); + return true; + default: + return false; + } + } + + protected abstract void onExit(int code); + + protected abstract void onStdout(byte[] chunk) throws IOException; + + protected abstract void onStderr(byte[] chunk) throws IOException; + + public final void sendArg(String text) throws IOException { + send(Op.ARG, text); + } + + public final void sendLocale(String text) throws IOException { + send(Op.LOCALE, text); + } + + public final void sendEncoding(String text) throws IOException { + send(Op.ENCODING, text); + } + + public final void sendStart() throws IOException { + send(Op.START); + } + + public final OutputStream streamStdin() { + return stream(Op.STDIN); + } + + public final void sendEndStdin() throws IOException { + send(Op.END_STDIN); + } + + } + + private PlainCLIProtocol() {} + +} diff --git a/cli/src/main/java/hudson/cli/PrivateKeyProvider.java b/cli/src/main/java/hudson/cli/PrivateKeyProvider.java index 834bb7234250d7d7bac2bd424aba5aa670be0fda..d7753a750498aff78325fc04326eb63b7e45209d 100644 --- a/cli/src/main/java/hudson/cli/PrivateKeyProvider.java +++ b/cli/src/main/java/hudson/cli/PrivateKeyProvider.java @@ -30,6 +30,9 @@ import java.io.DataInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.InvalidPathException; import java.security.GeneralSecurityException; import java.security.KeyFactory; import java.security.KeyPair; @@ -127,15 +130,13 @@ public class PrivateKeyProvider { } private static String readPemFile(File f) throws IOException{ - FileInputStream is = new FileInputStream(f); - try { - DataInputStream dis = new DataInputStream(is); + try (InputStream is = Files.newInputStream(f.toPath()); + DataInputStream dis = new DataInputStream(is)) { byte[] bytes = new byte[(int) f.length()]; dis.readFully(bytes); - dis.close(); return new String(bytes); - } finally { - is.close(); + } catch (InvalidPathException e) { + throw new IOException(e); } } diff --git a/cli/src/main/java/hudson/cli/SSHCLI.java b/cli/src/main/java/hudson/cli/SSHCLI.java new file mode 100644 index 0000000000000000000000000000000000000000..bdd6c2beb50e5e696af3467e5bae7598f41eb5ef --- /dev/null +++ b/cli/src/main/java/hudson/cli/SSHCLI.java @@ -0,0 +1,133 @@ +/* + * The MIT License + * + * Copyright 2017 CloudBees, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package hudson.cli; + +import hudson.util.QuotedStringTokenizer; +import java.io.IOException; +import java.net.SocketAddress; +import java.net.SocketTimeoutException; +import java.net.URL; +import java.net.URLConnection; +import java.security.KeyPair; +import java.security.PublicKey; +import java.util.Collections; +import java.util.List; +import java.util.Set; +import java.util.logging.Level; +import static java.util.logging.Level.FINE; +import java.util.logging.Logger; +import org.apache.sshd.client.SshClient; +import org.apache.sshd.client.channel.ClientChannel; +import org.apache.sshd.client.channel.ClientChannelEvent; +import org.apache.sshd.client.future.ConnectFuture; +import org.apache.sshd.client.keyverifier.DefaultKnownHostsServerKeyVerifier; +import org.apache.sshd.client.keyverifier.KnownHostsServerKeyVerifier; +import org.apache.sshd.client.keyverifier.ServerKeyVerifier; +import org.apache.sshd.client.session.ClientSession; +import org.apache.sshd.common.future.WaitableFuture; +import org.apache.sshd.common.util.io.NoCloseInputStream; +import org.apache.sshd.common.util.io.NoCloseOutputStream; +import org.apache.sshd.common.util.security.SecurityUtils; + +/** + * Implements SSH connection mode of {@link CLI}. + * In a separate class to avoid any class loading of {@code sshd-core} when not using {@code -ssh} mode. + * That allows the {@code test} module to pick up a version of {@code sshd-core} from the {@code sshd} module via {@code jenkins-war} + * that may not match the version being used from the {@code cli} module and may not be compatible. + */ +class SSHCLI { + + static int sshConnection(String jenkinsUrl, String user, List args, PrivateKeyProvider provider, final boolean strictHostKey) throws IOException { + Logger.getLogger(SecurityUtils.class.getName()).setLevel(Level.WARNING); // suppress: BouncyCastle not registered, using the default JCE provider + URL url = new URL(jenkinsUrl + "login"); + URLConnection conn = url.openConnection(); + CLI.verifyJenkinsConnection(conn); + String endpointDescription = conn.getHeaderField("X-SSH-Endpoint"); + + if (endpointDescription == null) { + CLI.LOGGER.warning("No header 'X-SSH-Endpoint' returned by Jenkins"); + return -1; + } + + CLI.LOGGER.log(FINE, "Connecting via SSH to: {0}", endpointDescription); + + int sshPort = Integer.parseInt(endpointDescription.split(":")[1]); + String sshHost = endpointDescription.split(":")[0]; + + StringBuilder command = new StringBuilder(); + + for (String arg : args) { + command.append(QuotedStringTokenizer.quote(arg)); + command.append(' '); + } + + try(SshClient client = SshClient.setUpDefaultClient()) { + + KnownHostsServerKeyVerifier verifier = new DefaultKnownHostsServerKeyVerifier(new ServerKeyVerifier() { + @Override + public boolean verifyServerKey(ClientSession clientSession, SocketAddress remoteAddress, PublicKey serverKey) { + CLI.LOGGER.log(Level.WARNING, "Unknown host key for {0}", remoteAddress.toString()); + return !strictHostKey; + } + }, true); + + client.setServerKeyVerifier(verifier); + client.start(); + + ConnectFuture cf = client.connect(user, sshHost, sshPort); + cf.await(); + try (ClientSession session = cf.getSession()) { + for (KeyPair pair : provider.getKeys()) { + CLI.LOGGER.log(FINE, "Offering {0} private key", pair.getPrivate().getAlgorithm()); + session.addPublicKeyIdentity(pair); + } + session.auth().verify(10000L); + + try (ClientChannel channel = session.createExecChannel(command.toString())) { + channel.setIn(new NoCloseInputStream(System.in)); + channel.setOut(new NoCloseOutputStream(System.out)); + channel.setErr(new NoCloseOutputStream(System.err)); + WaitableFuture wf = channel.open(); + wf.await(); + + Set waitMask = channel.waitFor(Collections.singletonList(ClientChannelEvent.CLOSED), 0L); + + if(waitMask.contains(ClientChannelEvent.TIMEOUT)) { + throw new SocketTimeoutException("Failed to retrieve command result in time: " + command); + } + + Integer exitStatus = channel.getExitStatus(); + return exitStatus; + + } + } finally { + client.stop(); + } + } + } + + private SSHCLI() {} + +} diff --git a/cli/src/main/java/hudson/cli/SequenceOutputStream.java b/cli/src/main/java/hudson/cli/SequenceOutputStream.java deleted file mode 100644 index fb6c26523b47317af89a975c7bd67930095ccabc..0000000000000000000000000000000000000000 --- a/cli/src/main/java/hudson/cli/SequenceOutputStream.java +++ /dev/null @@ -1,74 +0,0 @@ -package hudson.cli; - -import java.io.OutputStream; -import java.io.IOException; -import java.io.SequenceInputStream; - -/** - * {@link OutputStream} version of {@link SequenceInputStream}. - * - * Provides a single {@link OutputStream} view over multiple {@link OutputStream}s (each of the fixed length.) - * - * @author Kohsuke Kawaguchi - */ -abstract class SequenceOutputStream extends OutputStream { - protected static class Block { - final OutputStream out; - long capacity; - - public Block(OutputStream out, long capacity) { - this.out = out; - this.capacity = capacity; - } - } - - /** - * Current block being written. - */ - private Block block; - - protected SequenceOutputStream(Block block) { - this.block = block; - } - - @Override - public void write(byte[] b, int off, int len) throws IOException { - while(len>0) { - int sz = (int)Math.min(len, block.capacity); - block.out.write(b,off,sz); - block.capacity -=sz; - len-=sz; - off+=sz; - swapIfNeeded(); - } - } - - public void write(int b) throws IOException { - block.out.write(b); - block.capacity--; - swapIfNeeded(); - } - - private void swapIfNeeded() throws IOException { - if(block.capacity >0) return; - block.out.close(); - block=next(block); - } - - @Override - public void flush() throws IOException { - block.out.flush(); - } - - @Override - public void close() throws IOException { - block.out.close(); - block=null; - } - - /** - * Fetches the next {@link OutputStream} to write to, - * along with their capacity. - */ - protected abstract Block next(Block current) throws IOException; -} diff --git a/core/src/main/java/hudson/util/QuotedStringTokenizer.java b/cli/src/main/java/hudson/util/QuotedStringTokenizer.java similarity index 100% rename from core/src/main/java/hudson/util/QuotedStringTokenizer.java rename to cli/src/main/java/hudson/util/QuotedStringTokenizer.java diff --git a/cli/src/main/resources/hudson/cli/client/Messages.properties b/cli/src/main/resources/hudson/cli/client/Messages.properties index 699b4c47381227a92f7316331cbdbc3477759213..921fe67a211da560ac75fc355179a117b3c00dc2 100644 --- a/cli/src/main/resources/hudson/cli/client/Messages.properties +++ b/cli/src/main/resources/hudson/cli/client/Messages.properties @@ -2,10 +2,18 @@ CLI.Usage=Jenkins CLI\n\ Usage: java -jar jenkins-cli.jar [-s URL] command [opts...] args...\n\ Options:\n\ -s URL : the server URL (defaults to the JENKINS_URL env var)\n\ - -i KEY : SSH private key file used for authentication\n\ - -p HOST:PORT : HTTP proxy host and port for HTTPS proxy tunneling. See http://jenkins-ci.org/https-proxy-tunnel\n\ + -http : use a plain CLI protocol over HTTP(S) (the default; mutually exclusive with -ssh and -remoting)\n\ + -ssh : use SSH protocol (requires -user; SSH port must be open on server, and user must have registered a public key)\n\ + -remoting : use deprecated Remoting channel protocol (if enabled on server; for compatibility with legacy commands or command modes only)\n\ + -i KEY : SSH private key file used for authentication (for use with -ssh or -remoting)\n\ + -p HOST:PORT : HTTP proxy host and port for HTTPS proxy tunneling. See https://jenkins.io/redirect/cli-https-proxy-tunnel\n\ -noCertificateCheck : bypass HTTPS certificate check entirely. Use with caution\n\ -noKeyAuth : don't try to load the SSH authentication private key. Conflicts with -i\n\ + -user : specify user (for use with -ssh)\n\ + -strictHostKey : request strict host key checking (for use with -ssh)\n\ + -logger FINE : enable detailed logging from the client\n\ + -auth [ USER:SECRET | @FILE ] : specify username and either password or API token (or load from them both from a file);\n\ + for use with -http, or -remoting but only when the JNLP agent port is disabled\n\ \n\ The available commands depend on the server. Run the 'help' command to\n\ see the list. diff --git a/cli/src/main/resources/hudson/cli/client/Messages_bg.properties b/cli/src/main/resources/hudson/cli/client/Messages_bg.properties index 187d7208d6bea45ac5ed62fbac8dac35cc469937..acd0191d5c8bfbf854d5344b2d29f8463f3b55e9 100644 --- a/cli/src/main/resources/hudson/cli/client/Messages_bg.properties +++ b/cli/src/main/resources/hudson/cli/client/Messages_bg.properties @@ -28,7 +28,7 @@ CLI.Usage=\ \u0441\u0440\u0435\u0434\u0430\u0442\u0430 \u201eJENKINS_URL\u201c)\n\ -i \u041a\u041b\u042e\u0427 : \u0447\u0430\u0441\u0442\u0435\u043d \u043a\u043b\u044e\u0447 \u0437\u0430 SSH \u0437\u0430 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f\n\ -p \u0425\u041e\u0421\u0422:\u041f\u041e\u0420\u0422 : \u0445\u043e\u0441\u0442 \u0438 \u043f\u043e\u0440\u0442 \u0437\u0430 \u0441\u044a\u0440\u0432\u044a\u0440-\u043f\u043e\u0441\u0440\u0435\u0434\u043d\u0438\u043a \u043f\u043e HTTP \u0437\u0430 \u0442\u0443\u043d\u0435\u043b \u043f\u043e HTTPS.\n\ - \u0417\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f: http://jenkins-ci.org/https-proxy-tunnel\n\ + \u0417\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f: https://jenkins.io/redirect/cli-https-proxy-tunnel\n\ -noCertificateCheck : \u0431\u0435\u0437 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430 \u0437\u0430 HTTPS (\u0412\u041d\u0418\u041c\u0410\u041d\u0418\u0415!)\n\ -noKeyAuth : \u0431\u0435\u0437 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0441 \u0447\u0430\u0441\u0442\u0435\u043d \u043a\u043b\u044e\u0447 \u0437\u0430 SSH, \u043e\u043f\u0446\u0438\u044f\u0442\u0430 \u0435\n\ \u043d\u0435\u0441\u044a\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u0430 \u0441 \u043e\u043f\u0446\u0438\u044f\u0442\u0430 \u201e-i\u201c\n\n\ diff --git a/cli/src/main/resources/hudson/cli/client/Messages_de.properties b/cli/src/main/resources/hudson/cli/client/Messages_de.properties index 55769d64ded51906132d5ff94ef67e36aa9c66d1..70b91e222f0240ecbd2390eb7867765e0a6c3e69 100644 --- a/cli/src/main/resources/hudson/cli/client/Messages_de.properties +++ b/cli/src/main/resources/hudson/cli/client/Messages_de.properties @@ -2,13 +2,13 @@ CLI.Usage=Jenkins Kommandozeilenschnittstelle (Jenkins CLI)\n\ Verwendung: java -jar jenkins-cli.jar [-s URL] command [opts...] args...\n\ Optionen:\n\ - -s URL : URL des Hudson-Servers (Wert der Umgebungsvariable JENKINS_URL ist der Vorgabewert)\n\ - -i KEY : Datei mit privatem SSH-Schl\u00fcssel zur Authentisierung\n\ - -p HOST\:PORT : HTTP-Proxy-Host und -Port f\u00fcr HTTPS-Proxy-Tunnel. Siehe http://jenkins-ci.org/https-proxy-tunnel\n\ - -noCertificateCheck : \u00dcberspringt die Zertifikatspr\u00fcfung bei HTTPS. Bitte mit Vorsicht einsetzen.\n\ - -noKeyAuth : \u00dcberspringt die Authentifizierung mit einem privaten SSH-Schl\u00fcssel. Nicht kombinierbar mit -i\n\ + -s URL : URL des Jenkins-Servers (Wert der Umgebungsvariable JENKINS_URL ist der Vorgabewert)\n\ + -i KEY : Datei mit privatem SSH-Schl\u00FCssel zur Authentisierung\n\ + -p HOST\:PORT : HTTP-Proxy-Host und -Port f\u00FCr HTTPS-Proxy-Tunnel. Siehe https://jenkins.io/redirect/cli-https-proxy-tunnel\n\ + -noCertificateCheck : \u00DCberspringt die Zertifikatspr\u00FCfung bei HTTPS. Bitte mit Vorsicht einsetzen.\n\ + -noKeyAuth : \u00DCberspringt die Authentifizierung mit einem privaten SSH-Schl\u00FCssel. Nicht kombinierbar mit -i\n\ \n\ - Die verf\u00fcgbaren Kommandos h\u00e4ngen vom kontaktierten Server ab. Verwenden Sie das Kommando help, um eine Liste aller verf\u00fcgbaren Kommandos anzuzeigen. + Die verf\u00FCgbaren Kommandos h\u00E4ngen vom kontaktierten Server ab. Verwenden Sie das Kommando help, um eine Liste aller verf\u00FCgbaren Kommandos anzuzeigen. CLI.NoURL=Weder die Option -s noch eine Umgebungsvariable JENKINS_URL wurde spezifiziert. CLI.NoSuchFileExists=Diese Datei existiert nicht {0} CLI.VersionMismatch=Versionskonflikt: Diese Version von Jenkins CLI ist nicht mit dem kontaktierten Jenkins-Server kompatibel. diff --git a/cli/src/main/resources/hudson/cli/client/Messages_fr.properties b/cli/src/main/resources/hudson/cli/client/Messages_fr.properties new file mode 100644 index 0000000000000000000000000000000000000000..99fe0930f0d8df074c43e5a44ee25cf212381cff --- /dev/null +++ b/cli/src/main/resources/hudson/cli/client/Messages_fr.properties @@ -0,0 +1,14 @@ +CLI.Usage=Jenkins CLI\n\ + Utilisation: java -jar jenkins-cli.jar [-s URL] command [opts...] args...\n\ + Options:\n\ + -s URL : l''URL du serveur (par d\u00e9faut : variable d environnement JENKINS_URL)\n\ + -i KEY : fichier de la cl\u00e9 priv\u00e9e SSH \u00e0 utiliser pour l''authentification\n\ + -p HOST:PORT : h\u00f4te et port des proxys HTTP et HTTPS. Voir https://jenkins.io/redirect/cli-https-proxy-tunnel\n\ + -noCertificateCheck : contourne enti\u00e9rement la v\u00e9rification des certificats HTTPS. A utiliser avec pr\u00e9caution\n\ + -noKeyAuth : ne charge pas la cl\u00e9 priv\u00e9e d''authentification SSH. En conflit avec -i\n\ + \n\ + Les commandes disponibles d\u00e9pendent du serveur. Lancer la commande 'help' pour\n\ + obtenir la liste. +CLI.NoURL=Erreur, ni -s ou la variable d''environnement JENKINS_URL ne sont renseign\u00e9es. +CLI.VersionMismatch=Conflit de versions. Cet outil ne peut fonctionner avec le serveur Jenkins renseign\u00e9. +CLI.NoSuchFileExists=Ce fichier n''existe pas: {0} diff --git a/cli/src/main/resources/hudson/cli/client/Messages_it.properties b/cli/src/main/resources/hudson/cli/client/Messages_it.properties new file mode 100644 index 0000000000000000000000000000000000000000..6236107d9c7cff3786ea619aba6097291835d6f7 --- /dev/null +++ b/cli/src/main/resources/hudson/cli/client/Messages_it.properties @@ -0,0 +1,22 @@ +CLI.NoSuchFileExists=File non esistente: {0} +CLI.NoURL=Non sono stati specificati n -s n la variabile d''ambiente JENKINS_URL. +CLI.VersionMismatch=Le versioni non corrispondono. Quest''interfaccia della riga di comando non pu funzionare con questo server Jenkins. +CLI.Usage=Interfaccia della riga di comando di Jenkins\n\ +Uso: java -jar jenkins-cli.jar [-s URL] comando [opzioni...] argomenti...\n\ +Opzioni:\n\ +-s URL : l''URL del server (impostazione predefinita: la variabile d''ambiente JENKINS_URL)\n\ +-http : utilizza un protocollo interfaccia della riga di comando in testo semplice su HTTP(S) (impostazione predefinita; mutualmente esclusiva con -ssh e -remoting)\n\ +-ssh : utilizza il protocollo SSH (richiede -user; la porta SSH deve essere aperta sul server e l''utente deve aver registrato una chiave pubblica)\n\ +-remoting : utilizza il protocollo deprecato Remoting channel (se abilitato sul server; solo per compatibilit con comandi o modalit comandi legacy)\n\ +-i KEY : file chiave privata SSH utilizzato per l''autenticazione (per l''utilizzo con -ssh o -remoting)\n\ +-p HOST:PORTA : host proxy HTTP e porta per il tunneling proxy HTTPS. Vedi https://jenkins.io/redirect/cli-https-proxy-tunnel\n\ +-noCertificateCheck : ometti completamente il controllo dei certificati HTTPS. Utilizzare con cautela\n\ +-noKeyAuth : non tentare di caricare la chiave privata per l''autenticazione SSH. In conflitto con -i\n\ +-user : specifica l''utente (per l''utilizzo con -ssh)\n\ +-strictHostKey : richiedi la modalit strict per il controllo delle chiavi host (per l''utilizzo con -ssh)\n\ +-logger FINE : abilita la registrazione dettagliata da parte del client\n\ +-auth [ UTENTE:SEGRETO | @FILE ] : specifica il nome utente e la password o il token API (o caricali entrambi da un file);\n\ +per l''utilizzo con -http, o -remoting ma solo quando la porta agente JNLP disabilitata\n\ +\n\ +I comandi disponibili dipendono dal server. Eseguire il comando ''help'' per\n\ +visualizzarne l''elenco. diff --git a/cli/src/main/resources/hudson/cli/client/Messages_pt_BR.properties b/cli/src/main/resources/hudson/cli/client/Messages_pt_BR.properties index 61e1895c4dfb7d5dd96cf0dd4723671fb60c673a..779e88f1a6ecfe5230b2e29d84e4191a8c1de443 100644 --- a/cli/src/main/resources/hudson/cli/client/Messages_pt_BR.properties +++ b/cli/src/main/resources/hudson/cli/client/Messages_pt_BR.properties @@ -26,7 +26,7 @@ CLI.Usage=Jenkins CLI\n\ Op\u00e7\u00f5es:\n\ -s URL : a URL do servidor (por padr\u00e3o a vari\u00e1vel de ambiente JENKINS_URL \u00e9 usada)\n\ -i KEY : arquivo contendo a chave SSH privada usada para autentica\u00e7\u00e3o\n\ - -p HOST:PORT : host e porta do proxy HTTP para tunelamento de proxy HTTPS. Veja http://jenkins-ci.org/https-proxy-tunnel\n\ + -p HOST:PORT : host e porta do proxy HTTP para tunelamento de proxy HTTPS. Veja https://jenkins.io/redirect/cli-https-proxy-tunnel\n\ -noCertificateCheck : ignora completamente a valida\u00e7\u00e3o dos certificados HTTPS. Use com cautela\n\ -noKeyAuth : n\u00e3o tenta carregar a chave privada para autentica\u00e7\u00e3o SSH. Conflita com -i\n\ \n\ diff --git a/cli/src/main/resources/hudson/cli/client/Messages_zh_CN.properties b/cli/src/main/resources/hudson/cli/client/Messages_zh_CN.properties new file mode 100644 index 0000000000000000000000000000000000000000..16fa41c48c9a4aad3d63e9f40e2d017b3bd9fb77 --- /dev/null +++ b/cli/src/main/resources/hudson/cli/client/Messages_zh_CN.properties @@ -0,0 +1,44 @@ +# The MIT License +# +# Copyright (c) 2013, Sun Microsystems, Inc., Kohsuke Kawaguchi, Pei-Tang Huang, +# Chunghwa Telecom Co., Ltd., and a number of other of contributers +# +# 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. + +CLI.Usage=Jenkins CLI\n\ + \u7528\u6cd5: java -jar jenkins-cli.jar [-s url] \u547d\u4ee4 [\u9009\u9879...] \u53c2\u6570...\n\ + \u9009\u9879:\n\ + -s URL : \u670d\u52a1\u5668url \uff08\u9ed8\u8ba4\u662fjenkins_url\u73af\u5883\u53d8\u91cf\uff09\n\ + -http : \u5728http%28s%29\u4e0a\u4f7f\u7528\u539f\u59cb\u7684cli\u534f\u8bae\uff08\u9ed8\u8ba4\u503c%3b \u4e0e -ssh \u548c -remoting \u4e92\u65a5\uff09\n\ + -ssh : \u4f7f\u7528ssh\u534f\u8bae\uff08\u9700\u8981 -user%3b \u670d\u52a1\u5668\u7684ssh\u7aef\u53e3\u5fc5\u987b\u6253\u5f00\uff0c\u4e14\u7528\u6237\u5fc5\u987b\u5df2\u6ce8\u518c\u516c\u94a5\u3002\uff09\n\ + -remoting : \u4f7f\u7528\u4e0d\u63a8\u8350\u7684\u8fdc\u7a0b\u4fe1\u9053\u534f\u8bae \uff08\u5982\u679c\u670d\u52a1\u5668\u4e0a\u662f\u6253\u5f00\u7684\uff1b\u4ec5\u7528\u4e8e\u517c\u5bb9\u9057\u7559\u547d\u4ee4\u6216\u547d\u4ee4\u6a21\u5f0f\uff09\n\ + -i KEY : \u7528\u4e8e\u8ba4\u8bc1\u7684ssh\u79c1\u94a5\u6587\u4ef6\uff08\u4e0e -ssh \u6216 -remoting \u4e00\u8d77\u4f7f\u7528\uff09\n\ + -p HOST:PORT : \u7528\u6237https\u4ee3\u7406\u96a7\u9053\u7684http\u4ee3\u7406\u4e3b\u673a\u548c\u7aef\u53e3\u3002\u53c2\u89c1 https://jenkins.io/redirect/cli-https-proxy-tunnel\n\ + -noCertificateCheck : \u5b8c\u5168\u5ffd\u7565https\u8bc1\u4e66\u8ba4\u8bc1\u3002\u8c28\u614e\u4f7f\u7528\n\ + -noKeyAuth : \u65e0\u9700\u5c1d\u8bd5\u52a0\u8f7dssh\u8ba4\u8bc1\u79c1\u94a5\u3002\u4e0e -i \u76f8\u53cd\n\ + -user : \u6307\u5b9a\u7528\u6237\uff08\u4e0e -ssh \u4e00\u8d77\u4f7f\u7528\uff09\n\ + -strictHostKey : \u8981\u6c42\u9a8c\u8bc1\u4e3b\u673akey\u68c0\u67e5\uff08\u4e0e -ssh \u4e00\u8d77\u4f7f\u7528\uff09\n\ + -logger FINE : \u5141\u8bb8\u5ba2\u6237\u7aef\u8be6\u7ec6\u65e5\u5fd7\u8bb0\u5f55\n\ + -auth [ USER:SECRET | @FILE ] : \u6307\u5b9a\u7528\u6237\u540d\u4e0e\u5bc6\u7801\u6216\u7528\u6237\u540d\u4e0eapi token\uff08\u6216\u8005\u4ece\u6587\u4ef6\u52a0\u8f7d\uff09\uff1b\n\ + \u4e0e -http \u4e00\u8d77\u4f7f\u7528\uff0c\u6216\u8005\u53ea\u5728jnlp\u4ee3\u7406\u7aef\u53e3\u7981\u7528\u65f6\u4e0e -remoting \u4e00\u8d77\u4f7f\u7528\n\ + \n\ + \u53ef\u7528\u7684\u547d\u4ee4\u53d6\u51b3\u4e8e\u670d\u52a1\u5668\u3002\u6267\u884c 'help' \u547d\u4ee4\u53ef\u4ee5\u67e5\u770b\u5b8c\u6574\u6e05\u5355\u3002 +CLI.NoURL=\u6c92\u6709\u6307\u5b9a -s \u53c2\u6570\u6216\u8005 jenkins_url \u73af\u5883\u53d8\u91cf\u3002 +CLI.VersionMismatch=\u7248\u672c\u4e0d\u5339\u914d\u3002cli \u65e0\u6cd5\u5728\u6b64 jenkins \u670d\u52a1\u5668\u4e0a\u8fd0\u884c\u3002 +CLI.NoSuchFileExists=\u6587\u4ef6\u4e0d\u5b58\u5728: {0} diff --git a/cli/src/main/resources/hudson/cli/client/Messages_zh_TW.properties b/cli/src/main/resources/hudson/cli/client/Messages_zh_TW.properties index af303db03487aba6d903487ef308bae13d859464..4a9068624434d8c2bd6ef77c3fefe778c5fea59e 100644 --- a/cli/src/main/resources/hudson/cli/client/Messages_zh_TW.properties +++ b/cli/src/main/resources/hudson/cli/client/Messages_zh_TW.properties @@ -28,7 +28,7 @@ CLI.Usage=Jenkins CLI\n\ \u9078\u9805:\n\ -s URL : \u4f3a\u670d\u5668 URL (\u9810\u8a2d\u503c\u70ba JENKINS_URL \u74b0\u5883\u8b8a\u6578)\n\ -i KEY : \u9a57\u8b49\u7528\u7684 SSH \u79c1\u9470\u6a94\n\ - -p HOST:PORT : \u5efa HTTPS Proxy Tunnel \u7684 HTTP \u4ee3\u7406\u4f3a\u670d\u5668\u4e3b\u6a5f\u53ca\u9023\u63a5\u57e0\u3002\u8acb\u53c3\u8003 http://jenkins-ci.org/https-proxy-tunnel\n\ + -p HOST:PORT : \u5efa HTTPS Proxy Tunnel \u7684 HTTP \u4ee3\u7406\u4f3a\u670d\u5668\u4e3b\u6a5f\u53ca\u9023\u63a5\u57e0\u3002\u8acb\u53c3\u8003 https://jenkins.io/redirect/cli-https-proxy-tunnel\n\ -noCertificateCheck : \u5b8c\u5168\u7565\u904e HTTPS \u6191\u8b49\u6aa2\u67e5\u3002\u8acb\u5c0f\u5fc3\u4f7f\u7528\n\ \n\ \u53ef\u7528\u7684\u6307\u4ee4\u53d6\u6c7a\u65bc\u4f3a\u670d\u5668\u3002\u57f7\u884c 'help' \u6307\u4ee4\u53ef\u4ee5\u67e5\u770b\u5b8c\u6574\u6e05\u55ae\u3002 diff --git a/cli/src/test/java/hudson/cli/PlainCLIProtocolTest.java b/cli/src/test/java/hudson/cli/PlainCLIProtocolTest.java new file mode 100644 index 0000000000000000000000000000000000000000..4663fbafd5e0aa1a05852562ef8c8560f3d0cac3 --- /dev/null +++ b/cli/src/test/java/hudson/cli/PlainCLIProtocolTest.java @@ -0,0 +1,132 @@ +/* + * The MIT License + * + * Copyright 2017 CloudBees, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package hudson.cli; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.PipedInputStream; +import java.io.PipedOutputStream; +import static org.junit.Assert.*; +import org.junit.Test; + +public class PlainCLIProtocolTest { + + @Test + public void ignoreUnknownOperations() throws Exception { + final PipedOutputStream upload = new PipedOutputStream(); + final PipedOutputStream download = new PipedOutputStream(); + class Client extends PlainCLIProtocol.ClientSide { + int code = -1; + final ByteArrayOutputStream stdout = new ByteArrayOutputStream(); + Client() throws IOException { + super(new PipedInputStream(download), upload); + } + @Override + protected synchronized void onExit(int code) { + this.code = code; + notifyAll(); + } + @Override + protected void onStdout(byte[] chunk) throws IOException { + stdout.write(chunk); + } + @Override + protected void onStderr(byte[] chunk) throws IOException {} + @Override + protected void handleClose() {} + void send() throws IOException { + sendArg("command"); + sendStart(); + streamStdin().write("hello".getBytes()); + } + void newop() throws IOException { + dos.writeInt(0); + dos.writeByte(99); + dos.flush(); + } + } + class Server extends PlainCLIProtocol.ServerSide { + String arg; + boolean started; + final ByteArrayOutputStream stdin = new ByteArrayOutputStream(); + Server() throws IOException { + super(new PipedInputStream(upload), download); + } + @Override + protected void onArg(String text) { + arg = text; + } + @Override + protected void onLocale(String text) {} + @Override + protected void onEncoding(String text) {} + @Override + protected synchronized void onStart() { + started = true; + notifyAll(); + } + @Override + protected void onStdin(byte[] chunk) throws IOException { + stdin.write(chunk); + } + @Override + protected void onEndStdin() throws IOException {} + @Override + protected void handleClose() {} + void send() throws IOException { + streamStdout().write("goodbye".getBytes()); + sendExit(2); + } + void newop() throws IOException { + dos.writeInt(0); + dos.writeByte(99); + dos.flush(); + } + } + Client client = new Client(); + Server server = new Server(); + client.begin(); + server.begin(); + client.send(); + client.newop(); + synchronized (server) { + while (!server.started) { + server.wait(); + } + } + server.newop(); + server.send(); + synchronized (client) { + while (client.code == -1) { + client.wait(); + } + } + assertEquals("hello", server.stdin.toString()); + assertEquals("command", server.arg); + assertEquals("goodbye", client.stdout.toString()); + assertEquals(2, client.code); + } + +} diff --git a/cli/src/test/java/hudson/cli/PrivateKeyProviderTest.java b/cli/src/test/java/hudson/cli/PrivateKeyProviderTest.java index 376b1fa815f3f62988f741c93a63f2f2d090563a..d5636f3bd74833ca4075971865647c9312d91aea 100644 --- a/cli/src/test/java/hudson/cli/PrivateKeyProviderTest.java +++ b/cli/src/test/java/hudson/cli/PrivateKeyProviderTest.java @@ -47,7 +47,7 @@ import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; @RunWith(PowerMockRunner.class) -@PrepareForTest(CLI.class) // When mocking new operator caller has to be @PreparedForTest, not class itself +@PrepareForTest({CLI.class, CLIConnectionFactory.class}) // When mocking new operator caller has to be @PreparedForTest, not class itself public class PrivateKeyProviderTest { @Test @@ -57,7 +57,7 @@ public class PrivateKeyProviderTest { final File dsaKey = keyFile(".ssh/id_dsa"); final File rsaKey = keyFile(".ssh/id_rsa"); - run("-i", dsaKey.getAbsolutePath(), "-i", rsaKey.getAbsolutePath(), "-s", "http://example.com"); + run("-remoting", "-i", dsaKey.getAbsolutePath(), "-i", rsaKey.getAbsolutePath(), "-s", "http://example.com"); verify(cli).authenticate(withKeyPairs( keyPair(dsaKey), @@ -73,7 +73,7 @@ public class PrivateKeyProviderTest { final File dsaKey = keyFile(".ssh/id_dsa"); fakeHome(); - run("-s", "http://example.com"); + run("-remoting", "-s", "http://example.com"); verify(cli).authenticate(withKeyPairs( keyPair(rsaKey), diff --git a/core/move-l10n.groovy b/core/move-l10n.groovy index d774ec50d4817573f8d4ba37a33632745a1f63b9..c52e66ae53aecf6318efc70b079e6777df580bd6 100644 --- a/core/move-l10n.groovy +++ b/core/move-l10n.groovy @@ -13,6 +13,7 @@ for (p in new File(resDir, oldview).parentFile.listFiles()) { def n = p.name; if (n == "${basename}.properties" || n.startsWith("${basename}_") && n.endsWith(".properties")) { def lines = p.readLines('ISO-8859-1'); + // TODO does not handle multiline values correctly def matches = lines.findAll({it.startsWith("${key}=")}); if (!matches.isEmpty()) { lines.removeAll(matches); @@ -24,6 +25,7 @@ for (p in new File(resDir, oldview).parentFile.listFiles()) { } else { def nue = new File(resDir, newview + n.substring(basename.length())); println("moving ${matches.size()} matches from ${n} to ${nue.name}"); + // TODO if the original lacked a trailing newline, this will corrupt previously final key nue.withWriterAppend('ISO-8859-1') {out -> matches.each {line -> out.writeLine(line)} } diff --git a/core/pom.xml b/core/pom.xml index bf7a473371b1f95edc3872c69baf18c2b2342097..17d307d07a1a8335d4f4db374e6196656c70dae4 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -28,8 +28,8 @@ THE SOFTWARE. org.jenkins-ci.main - pom - 2.24-SNAPSHOT + jenkins-parent + 2.111-SNAPSHOT jenkins-core @@ -39,9 +39,9 @@ THE SOFTWARE. true - 1.243 + 1.254 2.5.6.SEC03 - 2.4.7 + 2.4.11 true @@ -65,7 +65,7 @@ THE SOFTWARE. org.jenkins-ci version-number - 1.1 + 1.4 org.jenkins-ci @@ -95,6 +95,12 @@ THE SOFTWARE. com.google.inject guice + + + com.google.guava + guava + + @@ -105,7 +111,7 @@ THE SOFTWARE. com.github.jnr jnr-posix - 3.0.1 + 3.0.41 org.kohsuke @@ -115,7 +121,7 @@ THE SOFTWARE. org.jenkins-ci trilead-ssh2 - build217-jenkins-8 + build-217-jenkins-11 org.kohsuke.stapler @@ -159,7 +165,7 @@ THE SOFTWARE. org.kohsuke.stapler stapler-adjunct-timeline - 1.4 + 1.5 org.kohsuke.stapler @@ -173,6 +179,12 @@ THE SOFTWARE. tests test + + org.hamcrest + hamcrest-library + 1.3 + test + com.infradna.tool @@ -197,7 +209,7 @@ THE SOFTWARE. org.jenkins-ci annotation-indexer - 1.11 + 1.12 org.jenkins-ci @@ -207,12 +219,12 @@ THE SOFTWARE. org.jenkins-ci task-reactor - 1.4 + 1.5 org.jvnet.localizer localizer - 1.23 + 1.24 antlr @@ -234,6 +246,20 @@ THE SOFTWARE. + + + xpp3 + xpp3 + 1.1.4c + + + net.sf.kxml + kxml2 + 2.3.0 + jfree jfreechart @@ -440,11 +466,6 @@ THE SOFTWARE. spring-aop ${spring.version} - - xpp3 - xpp3 - 1.1.4c - junit junit @@ -466,9 +487,9 @@ THE SOFTWARE. test - javax.servlet - jstl - 1.1.0 + javax.servlet.jsp.jstl + javax.servlet.jsp.jstl-api + 1.2.1 org.slf4j @@ -491,12 +512,12 @@ THE SOFTWARE. commons-collections commons-collections - 3.2.1 + 3.2.2 org.jvnet.winp winp - 1.22 + 1.25 org.jenkins-ci @@ -529,9 +550,9 @@ THE SOFTWARE. 1.8 - org.jvnet.libzfs + org.kohsuke libzfs - 0.5 + 0.8 com.sun.solaris @@ -566,16 +587,14 @@ THE SOFTWARE. 1.1 - + commons-codec commons-codec - 1.8 org.kohsuke access-modifier-annotation - 1.4 @@ -588,13 +607,7 @@ THE SOFTWARE. commons-fileupload commons-fileupload - 1.3.1-jenkins-1 - - - - org.mindrot - jbcrypt - 0.3m + 1.3.1-jenkins-2 @@ -606,10 +619,21 @@ THE SOFTWARE. /usr/local/yjp/lib/yjp.jar - - com.google.guava - guava - + + com.google.guava + guava + + + com.google.code.findbugs + jsr305 + + + + + com.google.guava + guava-testlib + test + com.jcraft @@ -647,6 +671,7 @@ THE SOFTWARE. generate-taglib-interface + record-core-location @@ -696,6 +721,7 @@ THE SOFTWARE. Messages.properties target/generated-sources/localizer + true @@ -703,7 +729,6 @@ THE SOFTWARE. org.kohsuke access-modifier-checker - @@ -754,7 +779,7 @@ THE SOFTWARE. com.sun.winsw winsw - 1.16 + 2.1.2 bin exe ${project.build.outputDirectory}/windows-service @@ -770,7 +795,7 @@ THE SOFTWARE. 0.5C true - -XX:MaxPermSize=128m -noverify + -noverify @@ -786,25 +811,6 @@ THE SOFTWARE. - - org.codehaus.gmaven - gmaven-plugin - - - - - testCompile - - - - - - org.codehaus.groovy - groovy-all - ${groovy.version} - - - org.codehaus.mojo findbugs-maven-plugin @@ -845,21 +851,9 @@ THE SOFTWARE. release - - org.codehaus.mojo - apt-maven-plugin - - - - - process - - - - @@ -891,41 +885,5 @@ THE SOFTWARE. true - - - cobertura - - - - org.codehaus.gmaven - gmaven-plugin - - - - - test - - execute - - - - ${project.basedir}/src/build-script - - ${project.basedir}/src/build-script/unitTest.groovy - - - - - - - maven-surefire-plugin - - - true - - - - - diff --git a/core/src/build-script/Cobertura.groovy b/core/src/build-script/Cobertura.groovy deleted file mode 100644 index 073f6291b77c10c07ad948a47a264997e1c7069f..0000000000000000000000000000000000000000 --- a/core/src/build-script/Cobertura.groovy +++ /dev/null @@ -1,83 +0,0 @@ -import org.apache.maven.project.MavenProject; - -/** - * Cobertura invoker. - */ -public class Cobertura { - private final MavenProject project; - // maven helper - private def maven; - // ant builder - private def ant; - /** - * Cobertura data file. - */ - private final File ser; - - def Cobertura(project, maven, ant, ser) { - this.project = maven.project; - this.maven = maven; - this.ant = ant; - this.ser =ser; - - // define cobertura tasks - ant.taskdef(resource:"tasks.properties") - } - - // function that ensures that the given directory exists - private String dir(String dir) { - new File(project.basedir,dir).mkdirs(); - return dir; - } - - /** - * Instruments the given class dirs/jars by cobertura - * - * @param files - * List of jar files and class dirs to instrument. - */ - def instrument(files) { - ant."cobertura-instrument"(todir:dir("target/cobertura-classes"),datafile:ser) { - fileset(dir:"target/classes"); - files.each{ fileset(file:it) } - } - } - - def runTests() { - ant.junit(fork:true, forkMode:"once", failureproperty:"failed", printsummary:true) { - classpath { - junitClasspath() - } - batchtest(todir:dir("target/surefire-reports")) { - fileset(dir:"target/test-classes") { - include(name:"**/*Test.class") - } - formatter(type:"xml") - } - sysproperty(key:"net.sourceforge.cobertura.datafile",value:ser) - sysproperty(key:"hudson.ClassicPluginStrategy.useAntClassLoader",value:"true") - jvmarg(value:"-XX:MaxPermSize=128m") - } - } - - def junitClasspath() { - ant.pathelement(path: "target/cobertura-classes") // put the instrumented classes first - ant.fileset(dir:"target/cobertura-classes",includes:"*.jar") // instrumented jar files - ant.pathelement(path: maven.resolveArtifact("net.sourceforge.cobertura:cobertura:1.9")) // cobertura runtime - project.getTestClasspathElements().each { ant.pathelement(path: it) } // the rest of the dependencies - } - - def report(dirs) { - maven.attachArtifact(ser,"ser","cobertura") - ["html","xml"].each { format -> - ant."cobertura-report"(format:format,datafile:ser,destdir:dir("target/cobertura-reports"),srcdir:"src/main/java") { - dirs.each{ fileset(dir:it) } - } - } - } - - def makeBuildFailIfTestFail() { - if(ant.project.getProperty("failed")!=null && !Boolean.getBoolean("testFailureIgnore")) - throw new Exception("Some unit tests failed"); - } -} diff --git a/core/src/build-script/readme.txt b/core/src/build-script/readme.txt deleted file mode 100644 index 6c53a01026b7921e493e1c42f7463c0857c17c69..0000000000000000000000000000000000000000 --- a/core/src/build-script/readme.txt +++ /dev/null @@ -1,4 +0,0 @@ -Parts of the build scripts that are written in Groovy. - -IntelliJ needs Groovy files to be in its source directory to provide completion and such, -so we need this to be in its own directory. \ No newline at end of file diff --git a/core/src/build-script/unitTest.groovy b/core/src/build-script/unitTest.groovy deleted file mode 100644 index 653391aad7f15bbc6cdea2366f5f143bd4a0ae2b..0000000000000000000000000000000000000000 --- a/core/src/build-script/unitTest.groovy +++ /dev/null @@ -1,11 +0,0 @@ -// run unit tests - -ant.project.setBaseDir(project.basedir) -ser=new File(project.basedir,"target/cobertura.ser"); // store cobertura data file in a module-specific location - -cob = new Cobertura(project,maven,ant,ser); - -cob.instrument([]) -cob.runTests() -cob.report([]) -cob.makeBuildFailIfTestFail(); diff --git a/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_id.properties b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_id.properties deleted file mode 100644 index c28903b2ddf3ae2e9e532bb7006518699b72bf77..0000000000000000000000000000000000000000 --- a/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_id.properties +++ /dev/null @@ -1,4 +0,0 @@ -# This file is under the MIT License by authors - -NewVersionAvailable=Versi baru Jenkins ({0}) tersedia untuk diunduh (catatan perubahan). -Or\ Upgrade\ Automatically=Atau Perbarui Secara Otomatis diff --git a/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_it.properties b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_it.properties index 7378e405c76f9e21a930a2e698b8baf8f024a484..510a7f5f861f964e339da3ac0755dab0a1779d10 100644 --- a/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_it.properties +++ b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_it.properties @@ -1,27 +1,6 @@ -# The MIT License -# -# Copyright (c) 2004-2010, Sun Microsystems, Inc., Kohsuke Kawaguchi, Giulio D'Ambrosi -# -# 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. - -NewVersionAvailable=C''\u00E8 una nuova versione di Jenkins ({0}) disponibile per il download (changelog). -Or\ Upgrade\ Automatically=Oppure aggiorna automaticamente -UpgradeComplete=Aggiornamento a Jenkins {0} completato, in attesa di riavvio. -UpgradeCompleteRestartNotSupported=Aggiornamento a Jenkins {0} completato, in attesa di riavvio. -UpgradeProgress=Aggiornamento a Jenkins {0} in corso oppure fallito. +NewVersionAvailable=Una nuova versione di Jenkins ({0}) disponibile per il download \ + (log delle modifiche). +UpgradeComplete=Aggiornamento a Jenkins {0} completato, in attesa del riavvio. +UpgradeCompleteRestartNotSupported=Aggiornamento a Jenkins {0} completato, in attesa del riavvio. +UpgradeProgress=Aggiornamento a Jenkins {0} in corso. +UpgradeFailed=Aggiornamento a Jenkins {0} non riuscito: {1}. diff --git a/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_pl.properties b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_pl.properties index 6f5ff479b3092c96f38a93a2f6fb46a126fead29..18a2cbe3c311f03744e1c92f180bddd06a09461a 100644 --- a/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_pl.properties +++ b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_pl.properties @@ -1,6 +1,25 @@ -# This file is under the MIT License by authors - +# The MIT License +# +# Copyright (c) 2013-2016, Kohsuke Kawaguchi, Damian Szczepanik +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. NewVersionAvailable=Nowa wersja Jenkinsa ({0}) jest dost\u0119pna do pobrania (historia zmian). -Or\ Upgrade\ Automatically=Albo uaktualnij automatycznie +Or\ Upgrade\ Automatically=Uaktualnij automatycznie UpgradeCompleteRestartNotSupported=Aktualizacja Jenkinsa do wersji {0} zako\u0144czy\u0142a si\u0119 pomy\u015Blnie, oczekiwanie na ponowne uruchomienie. UpgradeProgress=Aktualizacja Jenkinsa do wersji {0} trwa lub nie powiod\u0142a si\u0119. diff --git a/core/src/filter/resources/jenkins/slaves/remoting-info.properties b/core/src/filter/resources/jenkins/slaves/remoting-info.properties new file mode 100644 index 0000000000000000000000000000000000000000..6ac78f4ad43e96e9f1277206b67049f098979a21 --- /dev/null +++ b/core/src/filter/resources/jenkins/slaves/remoting-info.properties @@ -0,0 +1,6 @@ +# Remoting version, which is embedded into the core +# This version MAY differ from what is really classloaded (see the "Pluggable Core Components", JENKINS-41196) +remoting.embedded.version=${remoting.version} + +# Minimum Remoting version on external agents which is supported by the core +remoting.minimum.supported.version=${remoting.minimum.supported.version} diff --git a/core/src/main/groovy/hudson/util/LoadMonitor.groovy b/core/src/main/groovy/hudson/util/LoadMonitor.groovy deleted file mode 100644 index 97d701816199c011e67c6fcc39e539563442f225..0000000000000000000000000000000000000000 --- a/core/src/main/groovy/hudson/util/LoadMonitor.groovy +++ /dev/null @@ -1,116 +0,0 @@ -/* - * The MIT License - * - * Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi - * - * 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 hudson.util - -import hudson.model.Computer -import jenkins.util.Timer -import jenkins.model.Jenkins -import hudson.model.Label -import hudson.model.Queue.BlockedItem -import hudson.model.Queue.BuildableItem -import hudson.model.Queue.WaitingItem -import hudson.triggers.SafeTimerTask -import java.text.DateFormat -import java.util.concurrent.TimeUnit - -/** - * Spits out the load information. - * - *

- * I'm using this code to design the auto scaling feature. - * In future this might be useful data to expose to the UI. - * - * @author Kohsuke Kawaguchi - */ -public class LoadMonitorImpl extends SafeTimerTask { - - private final File dataFile; - private List labels; - - public LoadMonitorImpl(File dataFile) { - this.dataFile = dataFile; - labels = Jenkins.getInstance().labels*.name; - printHeaders(); - Timer.get().scheduleAtFixedRate(this,0,10*1000, TimeUnit.MILLISECONDS); - } - - private String quote(Object s) { "\"${s}\""; } - - protected void printHeaders() { - def headers = ["# of executors","# of busy executors","BuildableItems in Q","BuildableItem avg wait time"]; - def data = ["timestamp"]; - data += headers; - data += ["WaitingItems in Q","BlockedItems in Q"]; - - for( String label : labels) - data += headers.collect { "${it} (${label}}" } - - dataFile.append(data.collect({ quote(it) }).join(",")+"\n"); - } - - @Override - protected void doRun() { - def now = new Date(); - def data = []; - data.add(quote(FORMATTER.format(now))); - - def h = Jenkins.getInstance(); - - def items = h.queue.items; - def filterByType = {Class type -> items.findAll { type.isInstance(it) } } - - def builder = {List cs, Closure itemFilter -> - // number of total executor, number of busy executor - data.add(cs.sum { it.isOffline() ? 0 : it.numExecutors }); - data.add(cs.sum {Computer c -> - c.executors.findAll { !it.isIdle() }.size() - }); - - // queue statistics - def is = filterByType(BuildableItem).findAll(itemFilter); - data.add(is.size()); - data.add(is.sum {BuildableItem bi -> now.time - bi.buildableStartMilliseconds }?:0 / Math.max(1,is.size()) ); - }; - - - // for the whole thing - builder(Arrays.asList(h.computers),{ it->true }); - - data.add(filterByType(WaitingItem).size()); - data.add(filterByType(BlockedItem).size()); - - // per label stats - for (String label : labels) { - Label l = h.getLabel(label) - builder(l.nodes.collect { it.toComputer() }) { BuildableItem bi -> bi.task.assignedLabel==l }; - } - - dataFile.append(data.join(",")+"\n"); - } - - private static final DateFormat FORMATTER = DateFormat.getDateTimeInstance(); -} - -new LoadMonitorImpl(new File("/files/hudson/load.txt")); - diff --git a/core/src/main/groovy/jenkins/util/groovy/AbstractGroovyViewModule.groovy b/core/src/main/groovy/jenkins/util/groovy/AbstractGroovyViewModule.groovy deleted file mode 100644 index 08cb1c23a3da552cc531cf3b655b0a915b43aee6..0000000000000000000000000000000000000000 --- a/core/src/main/groovy/jenkins/util/groovy/AbstractGroovyViewModule.groovy +++ /dev/null @@ -1,47 +0,0 @@ -package jenkins.util.groovy - -import lib.FormTagLib -import lib.LayoutTagLib -import org.kohsuke.stapler.jelly.groovy.JellyBuilder -import org.kohsuke.stapler.jelly.groovy.Namespace -import lib.JenkinsTagLib - -/** - * Base class for utility classes for Groovy view scripts - *

- * Usage from script of a subclass, say ViewHelper: - *

- * new ViewHelper(delegate).method(); - *

- * see ModularizeViewScript in ui-samples for an example how to use this class. - * - * @author Stefan Wolf (wolfs) - */ -abstract class AbstractGroovyViewModule { - JellyBuilder builder - FormTagLib f - LayoutTagLib l - JenkinsTagLib t - Namespace st - - public AbstractGroovyViewModule(JellyBuilder b) { - builder = b - f= builder.namespace(FormTagLib) - l=builder.namespace(LayoutTagLib) - t=builder.namespace(JenkinsTagLib) - st=builder.namespace("jelly:stapler") - - } - - def methodMissing(String name, args) { - builder.invokeMethod(name,args) - } - - def propertyMissing(String name) { - builder.getProperty(name) - } - - def propertyMissing(String name, value) { - builder.setProperty(name, value) - } -} diff --git a/core/src/main/java/hudson/AbstractMarkupText.java b/core/src/main/java/hudson/AbstractMarkupText.java index ed7e319711040b7bbb8ba657a7e1227dca85d626..1e78b3e10cfadca15f5745415141a6d4d8edf4dc 100644 --- a/core/src/main/java/hudson/AbstractMarkupText.java +++ b/core/src/main/java/hudson/AbstractMarkupText.java @@ -72,8 +72,8 @@ public abstract class AbstractMarkupText { * Adds a start tag and end tag at the specified position. * *

- * For example, if the text was "abc", then addMarkup(1,2,"<b>","</b>") - * would generate "a<b>b</b>c" + * For example, if the text was "abc", then {@code addMarkup(1,2,"","")} + * would generate {@code"abc"} */ public abstract void addMarkup( int startPos, int endPos, String startTag, String endTag ); diff --git a/core/src/main/java/hudson/BulkChange.java b/core/src/main/java/hudson/BulkChange.java index 3c7da451f6384a6f516e7e2aa45851b5ea77f846..28b9fde4261074ca2e4828534139d16e18c8f464 100644 --- a/core/src/main/java/hudson/BulkChange.java +++ b/core/src/main/java/hudson/BulkChange.java @@ -54,7 +54,7 @@ import java.io.IOException; * *

    *
  1. - * Mutater methods should invoke {@code this.save()} so that if the method is called outside + * Mutator methods should invoke {@code this.save()} so that if the method is called outside * a {@link BulkChange}, the result will be saved immediately. * *
  2. @@ -78,7 +78,7 @@ public class BulkChange implements Closeable { public BulkChange(Saveable saveable) { this.parent = current(); this.saveable = saveable; - // rememeber who allocated this object in case + // remember who allocated this object in case // someone forgot to call save() at the end. allocator = new Exception(); diff --git a/core/src/main/java/hudson/ClassicPluginStrategy.java b/core/src/main/java/hudson/ClassicPluginStrategy.java index ff933347c3beda81f7dc0c9323bf41b2ac0771c0..bc00b2a0c9a68ac9412d4d7934a4afc445a84b3d 100644 --- a/core/src/main/java/hudson/ClassicPluginStrategy.java +++ b/core/src/main/java/hudson/ClassicPluginStrategy.java @@ -23,6 +23,13 @@ */ package hudson; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.InvalidPathException; + +import jenkins.util.AntWithFindResourceClassLoader; import jenkins.util.SystemProperties; import com.google.common.collect.Lists; import hudson.Plugin.DummyImpl; @@ -53,25 +60,24 @@ import org.apache.tools.zip.ZipOutputStream; import java.io.Closeable; import java.io.File; -import java.io.FileInputStream; import java.io.FilenameFilter; import java.io.IOException; -import java.lang.reflect.Field; import java.net.URL; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; import java.util.Collections; import java.util.Enumeration; import java.util.HashSet; import java.util.List; import java.util.Set; -import java.util.Vector; import java.util.jar.Attributes; import java.util.jar.JarFile; import java.util.jar.Manifest; import java.util.logging.Level; import java.util.logging.Logger; +import java.util.stream.Collectors; +import java.util.stream.Stream; import org.jenkinsci.bytecode.Transformer; import org.kohsuke.accmod.Restricted; import org.kohsuke.accmod.restrictions.NoExternalUse; @@ -107,11 +113,8 @@ public class ClassicPluginStrategy implements PluginStrategy { if (isLinked(archive)) { manifest = loadLinkedManifest(archive); } else { - JarFile jf = new JarFile(archive, false); - try { + try (JarFile jf = new JarFile(archive, false)) { manifest = jf.getManifest(); - } finally { - jf.close(); } } return PluginWrapper.computeShortName(manifest, archive.getName()); @@ -126,11 +129,10 @@ public class ClassicPluginStrategy implements PluginStrategy { try { // Locate the manifest String firstLine; - FileInputStream manifestHeaderInput = new FileInputStream(archive); - try { + try (InputStream manifestHeaderInput = Files.newInputStream(archive.toPath())) { firstLine = IOUtils.readFirstLine(manifestHeaderInput, "UTF-8"); - } finally { - manifestHeaderInput.close(); + } catch (InvalidPathException e) { + throw new IOException(e); } if (firstLine.startsWith("Manifest-Version:")) { // this is the manifest already @@ -140,11 +142,10 @@ public class ClassicPluginStrategy implements PluginStrategy { } // Read the manifest - FileInputStream manifestInput = new FileInputStream(archive); - try { + try (InputStream manifestInput = Files.newInputStream(archive.toPath())) { return new Manifest(manifestInput); - } finally { - manifestInput.close(); + } catch (InvalidPathException e) { + throw new IOException(e); } } catch (IOException e) { throw new IOException("Failed to load " + archive, e); @@ -176,11 +177,10 @@ public class ClassicPluginStrategy implements PluginStrategy { "Plugin installation failed. No manifest at " + manifestFile); } - FileInputStream fin = new FileInputStream(manifestFile); - try { + try (InputStream fin = Files.newInputStream(manifestFile.toPath())) { manifest = new Manifest(fin); - } finally { - fin.close(); + } catch (InvalidPathException e) { + throw new IOException(e); } } @@ -197,8 +197,10 @@ public class ClassicPluginStrategy implements PluginStrategy { baseResourceURL = resolve(archive,atts.getValue("Resource-Path")).toURI().toURL(); } else { File classes = new File(expandDir, "WEB-INF/classes"); - if (classes.exists()) + if (classes.exists()) { // should not normally happen, due to createClassJarFromWebInfClasses + LOGGER.log(Level.WARNING, "Deprecated unpacked classes directory found in {0}", classes); paths.add(classes); + } File lib = new File(expandDir, "WEB-INF/lib"); File[] libs = lib.listFiles(JAR_FILTER); if (libs != null) @@ -267,7 +269,7 @@ public class ClassicPluginStrategy implements PluginStrategy { if (detached.shortName.equals(pluginName)) { continue; } - if (BREAK_CYCLES.contains(pluginName + '/' + detached.shortName)) { + if (BREAK_CYCLES.contains(pluginName + ' ' + detached.shortName)) { LOGGER.log(Level.FINE, "skipping implicit dependency {0} → {1}", new Object[] {pluginName, detached.shortName}); continue; } @@ -402,40 +404,42 @@ public class ClassicPluginStrategy implements PluginStrategy { * Gets the minimum required version for the current version of Jenkins. * * @return the minimum required version for the current version of Jenkins. - * @sice 2.16 + * @since 2.16 */ public VersionNumber getRequiredVersion() { return new VersionNumber(requiredVersion); } + + @Override + public String toString() { + return shortName + " " + splitWhen.toString().replace(".*", "") + " " + requiredVersion; + } } - private static final List DETACHED_LIST = Collections.unmodifiableList(Arrays.asList( - new DetachedPlugin("maven-plugin", "1.296", "1.296"), - new DetachedPlugin("subversion", "1.310", "1.0"), - new DetachedPlugin("cvs", "1.340", "0.1"), - new DetachedPlugin("ant", "1.430.*", "1.0"), - new DetachedPlugin("javadoc", "1.430.*", "1.0"), - new DetachedPlugin("external-monitor-job", "1.467.*", "1.0"), - new DetachedPlugin("ldap", "1.467.*", "1.0"), - new DetachedPlugin("pam-auth", "1.467.*", "1.0"), - new DetachedPlugin("mailer", "1.493.*", "1.2"), - new DetachedPlugin("matrix-auth", "1.535.*", "1.0.2"), - new DetachedPlugin("windows-slaves", "1.547.*", "1.0"), - new DetachedPlugin("antisamy-markup-formatter", "1.553.*", "1.0"), - new DetachedPlugin("matrix-project", "1.561.*", "1.0"), - new DetachedPlugin("junit", "1.577.*", "1.0"), - new DetachedPlugin("bouncycastle-api", "2.16.*", "2.16.0") - )); + /** Record of which plugins which removed from core and when. */ + private static final List DETACHED_LIST; /** Implicit dependencies that are known to be unnecessary and which must be cut out to prevent a dependency cycle among bundled plugins. */ - private static final Set BREAK_CYCLES = new HashSet(Arrays.asList( - "script-security/matrix-auth", - "script-security/windows-slaves", - "script-security/antisamy-markup-formatter", - "script-security/matrix-project", - "credentials/matrix-auth", - "credentials/windows-slaves" - )); + private static final Set BREAK_CYCLES; + + static { + try (InputStream is = ClassicPluginStrategy.class.getResourceAsStream("/jenkins/split-plugins.txt")) { + DETACHED_LIST = ImmutableList.copyOf(configLines(is).map(line -> { + String[] pieces = line.split(" "); + return new DetachedPlugin(pieces[0], pieces[1] + ".*", pieces[2]); + }).collect(Collectors.toList())); + } catch (IOException x) { + throw new ExceptionInInitializerError(x); + } + try (InputStream is = ClassicPluginStrategy.class.getResourceAsStream("/jenkins/split-plugin-cycles.txt")) { + BREAK_CYCLES = ImmutableSet.copyOf(configLines(is).collect(Collectors.toSet())); + } catch (IOException x) { + throw new ExceptionInInitializerError(x); + } + } + private static Stream configLines(InputStream is) throws IOException { + return org.apache.commons.io.IOUtils.readLines(is, StandardCharsets.UTF_8).stream().filter(line -> !line.matches("#.*|\\s*")); + } /** * Computes the classloader that takes the class masking into account. @@ -646,14 +650,13 @@ public class ClassicPluginStrategy implements PluginStrategy { final long dirTime = archive.lastModified(); // this ZipOutputStream is reused and not created for each directory - final ZipOutputStream wrappedZOut = new ZipOutputStream(new NullOutputStream()) { + try (ZipOutputStream wrappedZOut = new ZipOutputStream(new NullOutputStream()) { @Override public void putNextEntry(ZipEntry ze) throws IOException { ze.setTime(dirTime+1999); // roundup super.putNextEntry(ze); } - }; - try { + }) { Zip z = new Zip() { /** * Forces the fixed timestamp for directories to make sure @@ -672,8 +675,9 @@ public class ClassicPluginStrategy implements PluginStrategy { z.setDestFile(classesJar); z.add(mapper); z.execute(); - } finally { - wrappedZOut.close(); + } + if (classesJar.isFile()) { + LOGGER.log(Level.WARNING, "Created {0}; update plugin to a version created with a newer harness", classesJar); } } @@ -831,53 +835,11 @@ public class ClassicPluginStrategy implements PluginStrategy { /** * {@link AntClassLoader} with a few methods exposed, {@link Closeable} support, and {@link Transformer} support. */ - private final class AntClassLoader2 extends AntClassLoader implements Closeable { - private final Vector pathComponents; - + private final class AntClassLoader2 extends AntWithFindResourceClassLoader implements Closeable { private AntClassLoader2(ClassLoader parent) { - super(parent,true); - - try { - Field $pathComponents = AntClassLoader.class.getDeclaredField("pathComponents"); - $pathComponents.setAccessible(true); - pathComponents = (Vector)$pathComponents.get(this); - } catch (NoSuchFieldException | IllegalAccessException e) { - throw new Error(e); - } + super(parent, true); } - - - public void addPathFiles(Collection paths) throws IOException { - for (File f : paths) - addPathFile(f); - } - - public void close() throws IOException { - cleanup(); - } - - /** - * As of 1.8.0, {@link AntClassLoader} doesn't implement {@link #findResource(String)} - * in any meaningful way, which breaks fast lookup. Implement it properly. - */ - @Override - protected URL findResource(String name) { - URL url = null; - - // try and load from this loader if the parent either didn't find - // it or wasn't consulted. - Enumeration e = pathComponents.elements(); - while (e.hasMoreElements() && url == null) { - File pathComponent = (File) e.nextElement(); - url = getResourceURL(pathComponent, name); - if (url != null) { - log("Resource " + name + " loaded from ant loader", Project.MSG_DEBUG); - } - } - - return url; - } - + @Override protected Class defineClassFromData(File container, byte[] classData, String classname) throws IOException { if (!DISABLE_TRANSFORMER) diff --git a/core/src/main/java/hudson/DependencyRunner.java b/core/src/main/java/hudson/DependencyRunner.java index acf035676910ad3ac77f6e4b3164ed7358fc0f39..03efea55e4036a69b1b3297e083c8a3a86a351af 100644 --- a/core/src/main/java/hudson/DependencyRunner.java +++ b/core/src/main/java/hudson/DependencyRunner.java @@ -59,7 +59,7 @@ public class DependencyRunner implements Runnable { Set topLevelProjects = new HashSet(); // Get all top-level projects LOGGER.fine("assembling top level projects"); - for (AbstractProject p : Jenkins.getInstance().getAllItems(AbstractProject.class)) + for (AbstractProject p : Jenkins.getInstance().allItems(AbstractProject.class)) if (p.getUpstreamProjects().size() == 0) { LOGGER.fine("adding top level project " + p.getName()); topLevelProjects.add(p); diff --git a/core/src/main/java/hudson/DescriptorExtensionList.java b/core/src/main/java/hudson/DescriptorExtensionList.java index 16d96ae441b0ff5a7cc4a3e59e8398db0cc595a4..dd334db858be47f551cf25a897d37b11d095fae5 100644 --- a/core/src/main/java/hudson/DescriptorExtensionList.java +++ b/core/src/main/java/hudson/DescriptorExtensionList.java @@ -31,7 +31,6 @@ import jenkins.model.Jenkins; import hudson.model.ViewDescriptor; import hudson.model.Descriptor.FormException; import hudson.util.AdaptedIterator; -import hudson.util.Memoizer; import hudson.util.Iterators.FlattenIterator; import hudson.slaves.NodeDescriptor; import hudson.tasks.Publisher; @@ -41,6 +40,8 @@ import java.util.List; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import java.util.logging.Level; import java.util.logging.Logger; import java.util.concurrent.CopyOnWriteArrayList; @@ -213,14 +214,12 @@ public class DescriptorExtensionList, D extends Descrip /** * Stores manually registered Descriptor instances. Keyed by the {@link Describable} type. */ - private static final Memoizer>> legacyDescriptors = new Memoizer>>() { - public CopyOnWriteArrayList compute(Class key) { - return new CopyOnWriteArrayList(); - } - }; + @SuppressWarnings("rawtypes") + private static final Map>> legacyDescriptors = new ConcurrentHashMap<>(); + @SuppressWarnings({"unchecked", "rawtypes"}) private static > CopyOnWriteArrayList>> getLegacyDescriptors(Class type) { - return (CopyOnWriteArrayList)legacyDescriptors.get(type); + return legacyDescriptors.computeIfAbsent(type, key -> new CopyOnWriteArrayList()); } /** diff --git a/core/src/main/java/hudson/EnvVars.java b/core/src/main/java/hudson/EnvVars.java index 5cdc672bf4cd8caf70f40d045c8e10a7bb4bb49c..1849ecbf66aebaf6ca6a4df5ce197b5b825c8b36 100644 --- a/core/src/main/java/hudson/EnvVars.java +++ b/core/src/main/java/hudson/EnvVars.java @@ -43,6 +43,7 @@ import java.util.Arrays; import java.util.TreeSet; import java.util.UUID; import java.util.logging.Logger; +import javax.annotation.Nonnull; /** * Environment variables. @@ -88,7 +89,7 @@ public class EnvVars extends TreeMap { super(CaseInsensitiveComparator.INSTANCE); } - public EnvVars(Map m) { + public EnvVars(@Nonnull Map m) { this(); putAll(m); @@ -100,7 +101,7 @@ public class EnvVars extends TreeMap { } } - public EnvVars(EnvVars m) { + public EnvVars(@Nonnull EnvVars m) { // this constructor is so that in future we can get rid of the downcasting. this((Map)m); } @@ -210,13 +211,15 @@ public class EnvVars extends TreeMap { private final Comparator comparator; + @Nonnull private final EnvVars target; + @Nonnull private final Map overrides; private Map> refereeSetMap; private List orderedVariableNames; - public OverrideOrderCalculator(EnvVars target, Map overrides) { + public OverrideOrderCalculator(@Nonnull EnvVars target, @Nonnull Map overrides) { comparator = target.comparator(); this.target = target; this.overrides = overrides; @@ -323,9 +326,9 @@ public class EnvVars extends TreeMap { /** * Overrides all values in the map by the given map. Expressions in values will be expanded. * See {@link #override(String, String)}. - * @return this + * @return {@code this} */ - public EnvVars overrideExpandingAll(Map all) { + public EnvVars overrideExpandingAll(@Nonnull Map all) { for (String key : new OverrideOrderCalculator(this, all).getOrderedVariableNames()) { override(key, expand(all.get(key))); } diff --git a/core/src/main/java/hudson/Extension.java b/core/src/main/java/hudson/Extension.java index 5ad913ef6ad39a1e8f2c35168c0863e48ec31221..1ca863d2f4f5cbdf46c66ede57c9e59920e5781b 100644 --- a/core/src/main/java/hudson/Extension.java +++ b/core/src/main/java/hudson/Extension.java @@ -74,7 +74,8 @@ public @interface Extension { /** * Used for sorting extensions. * - * Extensions will be sorted in the descending order of the ordinal. + * Extensions will be sorted in the descending order of the ordinal. In other words, + * the extensions with the highest numbers will be chosen first. * This is a rather poor approach to the problem, so its use is generally discouraged. * * @since 1.306 diff --git a/core/src/main/java/hudson/ExtensionList.java b/core/src/main/java/hudson/ExtensionList.java index 397f57030dbb538a2a3f1ecb0d7712e572c6a7fa..9a4c77d2f5f5db24c736c6f58433737505f9a4c6 100644 --- a/core/src/main/java/hudson/ExtensionList.java +++ b/core/src/main/java/hudson/ExtensionList.java @@ -30,7 +30,6 @@ import jenkins.ExtensionComponentSet; import jenkins.model.Jenkins; import hudson.util.AdaptedIterator; import hudson.util.DescriptorList; -import hudson.util.Memoizer; import hudson.util.Iterators; import hudson.ExtensionPoint.LegacyInstancesAreScopedToHudson; @@ -40,12 +39,15 @@ import java.util.Collection; import java.util.Collections; import java.util.Iterator; import java.util.List; +import java.util.Map; import java.util.Vector; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CopyOnWriteArrayList; import java.util.logging.Level; import java.util.logging.Logger; import javax.annotation.CheckForNull; import javax.annotation.Nonnull; +import jenkins.util.io.OnMaster; /** * Retains the known extension instances for the given type 'T'. @@ -68,7 +70,7 @@ import javax.annotation.Nonnull; * @see jenkins.model.Jenkins#getExtensionList(Class) * @see jenkins.model.Jenkins#getDescriptorList(Class) */ -public class ExtensionList extends AbstractList { +public class ExtensionList extends AbstractList implements OnMaster { /** * @deprecated as of 1.417 * Use {@link #jenkins} @@ -203,6 +205,21 @@ public class ExtensionList extends AbstractList { } } + @Override + public boolean removeAll(Collection c) { + boolean removed = false; + try { + for (Object o : c) { + removed |= removeSync(o); + } + return removed; + } finally { + if (extensions != null && removed) { + fireOnChangeListeners(); + } + } + } + private synchronized boolean removeSync(Object o) { boolean removed = removeComponent(legacyInstances, o); if(extensions!=null) { @@ -379,11 +396,12 @@ public class ExtensionList extends AbstractList { return create((Jenkins)hudson,type); } + @SuppressWarnings({"unchecked", "rawtypes"}) public static ExtensionList create(Jenkins jenkins, Class type) { if(type.getAnnotation(LegacyInstancesAreScopedToHudson.class)!=null) return new ExtensionList(jenkins,type); else { - return new ExtensionList(jenkins,type,staticLegacyInstances.get(type)); + return new ExtensionList(jenkins, type, staticLegacyInstances.computeIfAbsent(type, key -> new CopyOnWriteArrayList())); } } @@ -402,13 +420,29 @@ public class ExtensionList extends AbstractList { } /** - * Places to store static-scope legacy instances. + * Convenience method allowing lookup of the only instance of a given type. + * Equivalent to {@code ExtensionList.lookup(Class).get(Class)} if there is one instance, + * and throws an {@code IllegalStateException} otherwise. + * + * @param type The type to look up. + * @return the singleton instance of the given type in its list. + * @throws IllegalStateException if there are no instances, or more than one + * + * @since 2.87 */ - private static final Memoizer staticLegacyInstances = new Memoizer() { - public CopyOnWriteArrayList compute(Class key) { - return new CopyOnWriteArrayList(); + public static @Nonnull U lookupSingleton(Class type) { + ExtensionList all = lookup(type); + if (all.size() != 1) { + throw new IllegalStateException("Expected 1 instance of " + type.getName() + " but got " + all.size()); } - }; + return all.get(0); + } + + /** + * Places to store static-scope legacy instances. + */ + @SuppressWarnings("rawtypes") + private static final Map staticLegacyInstances = new ConcurrentHashMap<>(); /** * Exposed for the test harness to clear all legacy extension instances. diff --git a/core/src/main/java/hudson/ExtensionListView.java b/core/src/main/java/hudson/ExtensionListView.java index 59b81ffd95869297d20ea67694b923652235812d..100dad6fb758520864230cd18157b52bc062986e 100644 --- a/core/src/main/java/hudson/ExtensionListView.java +++ b/core/src/main/java/hudson/ExtensionListView.java @@ -23,6 +23,7 @@ */ package hudson; +import hudson.tasks.UserNameResolver; import jenkins.model.Jenkins; import hudson.util.CopyOnWriteList; diff --git a/core/src/main/java/hudson/ExtensionPoint.java b/core/src/main/java/hudson/ExtensionPoint.java index f49a5a096cc7ba2b6671b3ec8a0dd5b23746f3a2..e544ed7576ad411694e868a149dbf2ee1a6971b2 100644 --- a/core/src/main/java/hudson/ExtensionPoint.java +++ b/core/src/main/java/hudson/ExtensionPoint.java @@ -29,6 +29,7 @@ import static java.lang.annotation.ElementType.TYPE; import java.lang.annotation.Retention; import static java.lang.annotation.RetentionPolicy.RUNTIME; import java.lang.annotation.Target; +import jenkins.util.io.OnMaster; /** * Marker interface that designates extensible components diff --git a/core/src/main/java/hudson/FilePath.java b/core/src/main/java/hudson/FilePath.java index 6b2529eabe6a7084cc45dce9c5e07ed0a6376731..8f09e2ebaad1eafd4dda5a6b613eed524ef75c2f 100644 --- a/core/src/main/java/hudson/FilePath.java +++ b/core/src/main/java/hudson/FilePath.java @@ -25,7 +25,6 @@ */ package hudson; -import jenkins.util.SystemProperties; import com.google.common.annotations.VisibleForTesting; import com.jcraft.jzlib.GZIPInputStream; import com.jcraft.jzlib.GZIPOutputStream; @@ -59,30 +58,9 @@ import hudson.util.IOUtils; import hudson.util.NamingThreadFactory; import hudson.util.io.Archiver; import hudson.util.io.ArchiverFactory; -import jenkins.FilePathFilter; -import jenkins.MasterToSlaveFileCallable; -import jenkins.SlaveToMasterFileCallable; -import jenkins.SoloFilePathFilter; -import jenkins.model.Jenkins; -import jenkins.util.ContextResettingExecutorService; -import jenkins.util.VirtualFile; -import org.apache.commons.fileupload.FileItem; -import org.apache.commons.io.input.CountingInputStream; -import org.apache.tools.ant.DirectoryScanner; -import org.apache.tools.ant.Project; -import org.apache.tools.ant.types.FileSet; -import org.apache.tools.zip.ZipEntry; -import org.apache.tools.zip.ZipFile; -import org.kohsuke.accmod.Restricted; -import org.kohsuke.accmod.restrictions.NoExternalUse; -import org.kohsuke.stapler.Stapler; - -import javax.annotation.CheckForNull; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileFilter; -import java.io.FileInputStream; -import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; @@ -99,9 +77,20 @@ import java.net.MalformedURLException; import java.net.URI; import java.net.URL; import java.net.URLConnection; +import java.nio.file.FileSystems; +import java.nio.file.Files; +import java.nio.file.InvalidPathException; +import java.nio.file.Path; +import java.nio.file.LinkOption; +import java.nio.file.StandardCopyOption; +import java.nio.file.attribute.FileAttribute; +import java.nio.file.attribute.PosixFilePermission; +import java.nio.file.attribute.PosixFilePermissions; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.Comparator; +import java.util.EnumSet; import java.util.Enumeration; import java.util.List; import java.util.Map; @@ -116,16 +105,40 @@ import java.util.logging.Level; import java.util.logging.Logger; import java.util.regex.Matcher; import java.util.regex.Pattern; - -import static hudson.FilePath.TarCompression.*; -import static hudson.Util.*; +import javax.annotation.CheckForNull; import javax.annotation.Nonnull; import javax.annotation.Nullable; +import jenkins.FilePathFilter; +import jenkins.MasterToSlaveFileCallable; +import jenkins.SlaveToMasterFileCallable; +import jenkins.SoloFilePathFilter; +import jenkins.model.Jenkins; import jenkins.security.MasterToSlaveCallable; +import jenkins.util.ContextResettingExecutorService; +import jenkins.util.VirtualFile; import org.apache.commons.compress.archivers.tar.TarArchiveEntry; import org.apache.commons.compress.archivers.tar.TarArchiveInputStream; +import org.apache.commons.fileupload.FileItem; +import org.apache.commons.io.input.CountingInputStream; +import org.apache.commons.lang.StringUtils; +import org.apache.tools.ant.DirectoryScanner; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.types.FileSet; +import org.apache.tools.zip.ZipEntry; +import org.apache.tools.zip.ZipFile; import org.jenkinsci.remoting.RoleChecker; import org.jenkinsci.remoting.RoleSensitive; +import org.kohsuke.accmod.Restricted; +import org.kohsuke.accmod.restrictions.NoExternalUse; +import org.kohsuke.stapler.Stapler; + +import static hudson.FilePath.TarCompression.GZIP; +import static hudson.Util.deleteFile; +import static hudson.Util.fileToPath; +import static hudson.Util.fixEmpty; +import static hudson.Util.isSymlink; + +import java.util.Collections; /** * {@link File} like object with remoting support. @@ -167,7 +180,7 @@ import org.jenkinsci.remoting.RoleSensitive; * } * // if 'file' is on a different node, this FileCallable will * // be transferred to that node and executed there. - * private static final class Freshen implements FileCallable<Void> { + * private static final class Freshen implements FileCallable<Void> { * private static final long serialVersionUID = 1; * @Override public Void invoke(File f, VirtualChannel channel) { * // f and file represent the same thing @@ -233,9 +246,9 @@ public final class FilePath implements Serializable { * * @param channel * To create a path that represents a remote path, pass in a {@link Channel} - * that's connected to that machine. If null, that means the local file path. + * that's connected to that machine. If {@code null}, that means the local file path. */ - public FilePath(VirtualChannel channel, String remote) { + public FilePath(@CheckForNull VirtualChannel channel, @Nonnull String remote) { this.channel = channel instanceof LocalChannel ? null : channel; this.remote = normalize(remote); } @@ -247,7 +260,7 @@ public final class FilePath implements Serializable { * A "local" path means a file path on the computer where the * constructor invocation happened. */ - public FilePath(File localPath) { + public FilePath(@Nonnull File localPath) { this.channel = null; this.remote = normalize(localPath.getPath()); } @@ -257,12 +270,12 @@ public final class FilePath implements Serializable { * @param base starting point for resolution, and defines channel * @param rel a path which if relative will be resolved against base */ - public FilePath(FilePath base, String rel) { + public FilePath(@Nonnull FilePath base, @Nonnull String rel) { this.channel = base.channel; this.remote = normalize(resolvePathIfRelative(base, rel)); } - private String resolvePathIfRelative(FilePath base, String rel) { + private String resolvePathIfRelative(@Nonnull FilePath base, @Nonnull String rel) { if(isAbsolute(rel)) return rel; if(base.isUnix()) { // shouldn't need this replace, but better safe than sorry @@ -277,7 +290,7 @@ public final class FilePath implements Serializable { /** * Is the given path name an absolute path? */ - private static boolean isAbsolute(String rel) { + private static boolean isAbsolute(@Nonnull String rel) { return rel.startsWith("/") || DRIVE_PATTERN.matcher(rel).matches() || UNC_PATTERN.matcher(rel).matches(); } @@ -289,7 +302,7 @@ public final class FilePath implements Serializable { * {@link File#getParent()} etc cannot handle ".." and "." in the path component very well, * so remove them. */ - private static String normalize(String path) { + private static String normalize(@Nonnull String path) { StringBuilder buf = new StringBuilder(); // Check for prefix designating absolute path Matcher m = ABSOLUTE_PREFIX_PATTERN.matcher(path); @@ -389,11 +402,8 @@ public final class FilePath implements Serializable { } public void zip(FilePath dst) throws IOException, InterruptedException { - OutputStream os = dst.write(); - try { + try (OutputStream os = dst.write()) { zip(os); - } finally { - os.close(); } } @@ -555,7 +565,7 @@ public final class FilePath implements Serializable { * @see #unzip(FilePath) */ public void unzipFrom(InputStream _in) throws IOException, InterruptedException { - final InputStream in = new RemoteInputStream(_in); + final InputStream in = new RemoteInputStream(_in, Flag.GREEDY); act(new SecureFileCallable() { public Void invoke(File dir, VirtualChannel channel) throws IOException { unzip(dir, in); @@ -594,11 +604,8 @@ public final class FilePath implements Serializable { if (p != null) { mkdirs(p); } - InputStream input = zip.getInputStream(e); - try { + try (InputStream input = zip.getInputStream(e)) { IOUtils.copy(input, writing(f)); - } finally { - input.close(); } try { FilePath target = new FilePath(f); @@ -724,7 +731,7 @@ public final class FilePath implements Serializable { */ public void untarFrom(InputStream _in, final TarCompression compression) throws IOException, InterruptedException { try { - final InputStream in = new RemoteInputStream(_in); + final InputStream in = new RemoteInputStream(_in, Flag.GREEDY); act(new SecureFileCallable() { public Void invoke(File dir, VirtualChannel channel) throws IOException { readFromTar("input stream",dir, compression.extract(in)); @@ -733,7 +740,7 @@ public final class FilePath implements Serializable { private static final long serialVersionUID = 1L; }); } finally { - org.apache.commons.io.IOUtils.closeQuietly(_in); + _in.close(); } } @@ -837,7 +844,7 @@ public final class FilePath implements Serializable { return true; } catch (IOException x) { if (listener != null) { - x.printStackTrace(listener.error("Failed to download " + archive + " from agent; will retry from master")); + Functions.printStackTrace(x, listener.error("Failed to download " + archive + " from agent; will retry from master")); } } } @@ -868,8 +875,7 @@ public final class FilePath implements Serializable { this.archive = archive; } @Override public Void invoke(File dir, VirtualChannel channel) throws IOException, InterruptedException { - InputStream in = archive.openStream(); - try { + try (InputStream in = archive.openStream()) { CountingInputStream cis = new CountingInputStream(in); try { if (archive.toExternalForm().endsWith(".zip")) { @@ -880,8 +886,6 @@ public final class FilePath implements Serializable { } catch (IOException x) { throw new IOException(String.format("Failed to unpack %s (%d bytes read)", archive, cis.getByteCount()), x); } - } finally { - in.close(); } return null; } @@ -894,11 +898,8 @@ public final class FilePath implements Serializable { * @since 1.293 */ public void copyFrom(URL url) throws IOException, InterruptedException { - InputStream in = url.openStream(); - try { + try (InputStream in = url.openStream()) { copyFrom(in); - } finally { - in.close(); } } @@ -908,11 +909,8 @@ public final class FilePath implements Serializable { * @since 1.293 */ public void copyFrom(InputStream in) throws IOException, InterruptedException { - OutputStream os = write(); - try { + try (OutputStream os = write()) { org.apache.commons.io.IOUtils.copy(in, os); - } finally { - os.close(); } } @@ -938,16 +936,9 @@ public final class FilePath implements Serializable { throw new IOException(e); } } else { - InputStream i = file.getInputStream(); - OutputStream o = write(); - try { + try (InputStream i = file.getInputStream(); + OutputStream o = write()) { org.apache.commons.io.IOUtils.copy(i,o); - } finally { - try { - o.close(); - } finally { - i.close(); - } } } } @@ -955,7 +946,7 @@ public final class FilePath implements Serializable { /** * Code that gets executed on the machine where the {@link FilePath} is local. * Used to act on {@link FilePath}. - * Warning: implementations must be serializable, so prefer a static nested class to an inner class. + * Warning: implementations must be serializable, so prefer a static nested class to an inner class. * *

    * Subtypes would likely want to extend from either {@link MasterToSlaveCallable} @@ -1176,19 +1167,22 @@ public final class FilePath implements Serializable { * Creates this directory. */ public void mkdirs() throws IOException, InterruptedException { - if(!act(new SecureFileCallable() { - private static final long serialVersionUID = 1L; - public Boolean invoke(File f, VirtualChannel channel) throws IOException, InterruptedException { - if(mkdirs(f) || f.exists()) - return true; // OK + if (!act(new Mkdirs())) { + throw new IOException("Failed to mkdirs: " + remote); + } + } + private class Mkdirs extends SecureFileCallable { + private static final long serialVersionUID = 1L; + @Override + public Boolean invoke(File f, VirtualChannel channel) throws IOException, InterruptedException { + if(mkdirs(f) || f.exists()) + return true; // OK - // following Ant task to avoid possible race condition. - Thread.sleep(10); + // following Ant task to avoid possible race condition. + Thread.sleep(10); - return f.mkdirs() || f.exists(); - } - })) - throw new IOException("Failed to mkdirs: "+remote); + return mkdirs(f) || f.exists(); + } } /** @@ -1224,7 +1218,7 @@ public final class FilePath implements Serializable { deleteFile(deleting(dir)); } catch (IOException e) { // if some of the child directories are big, it might take long enough to delete that - // it allows others to create new files, causing problemsl ike JENKINS-10113 + // it allows others to create new files, causing problems like JENKINS-10113 // so give it one more attempt before we give up. if(!isSymlink(dir)) deleteContentsRecursive(dir); @@ -1396,11 +1390,8 @@ public final class FilePath implements Serializable { throw new IOException("Failed to create a temporary directory in "+dir,e); } - Writer w = new FileWriter(writing(f)); - try { + try (Writer w = new FileWriter(writing(f))) { w.write(contents); - } finally { - w.close(); } return f.getAbsolutePath(); @@ -1423,17 +1414,35 @@ public final class FilePath implements Serializable { * @return * The new FilePath pointing to the temporary directory * @since 1.311 - * @see File#createTempFile(String, String) + * @see Files#createTempDirectory(Path, String, FileAttribute[]) */ public FilePath createTempDir(final String prefix, final String suffix) throws IOException, InterruptedException { try { + String[] s; + if (StringUtils.isBlank(suffix)) { + s = new String[]{prefix, "tmp"}; // see File.createTempFile - tmp is used if suffix is null + } else { + s = new String[]{prefix, suffix}; + } + String name = StringUtils.join(s, "."); return new FilePath(this,act(new SecureFileCallable() { private static final long serialVersionUID = 1L; public String invoke(File dir, VirtualChannel channel) throws IOException { - File f = File.createTempFile(prefix, suffix, dir); - f.delete(); - f.mkdir(); - return f.getName(); + + Path tempPath; + final boolean isPosix = FileSystems.getDefault().supportedFileAttributeViews().contains("posix"); + + if (isPosix) { + tempPath = Files.createTempDirectory(Util.fileToPath(dir), name, + PosixFilePermissions.asFileAttribute(EnumSet.allOf(PosixFilePermission.class))); + } else { + tempPath = Files.createTempDirectory(Util.fileToPath(dir), name, new FileAttribute[] {}); + } + + if (tempPath.toFile() == null) { + throw new IOException("Failed to obtain file from path " + dir + " on " + remote); + } + return tempPath.toFile().getName(); } })); } catch (IOException e) { @@ -1494,8 +1503,13 @@ public final class FilePath implements Serializable { act(new SecureFileCallable() { private static final long serialVersionUID = -5094638816500738429L; public Void invoke(File f, VirtualChannel channel) throws IOException { - if(!f.exists()) - new FileOutputStream(creating(f)).close(); + if(!f.exists()) { + try { + Files.newOutputStream(creating(f).toPath()).close(); + } catch (InvalidPathException e) { + throw new IOException(e); + } + } if(!stating(f).setLastModified(timestamp)) throw new IOException("Failed to set the timestamp of "+f+" to "+timestamp); return null; @@ -1601,6 +1615,11 @@ public final class FilePath implements Serializable { *

    * please note mask is expected to be an octal if you use chmod command line values, * so preceded by a '0' in java notation, ie chmod(0644) + *

    + * Only supports setting read, write, or execute permissions for the + * owner, group, or others, so the largest permissible value is 0777. + * Attempting to set larger values (i.e. the setgid, setuid, or sticky + * bits) will cause an IOException to be thrown. * * @since 1.303 * @see #mode() @@ -1610,7 +1629,6 @@ public final class FilePath implements Serializable { act(new SecureFileCallable() { private static final long serialVersionUID = 1L; public Void invoke(File f, VirtualChannel channel) throws IOException { - // TODO first check for Java 7+ and use PosixFileAttributeView _chmod(writing(f), mask); return null; @@ -1619,14 +1637,18 @@ public final class FilePath implements Serializable { } /** - * Run chmod via jnr-posix + * Change permissions via NIO. */ private static void _chmod(File f, int mask) throws IOException { // TODO WindowsPosix actually does something here (WindowsLibC._wchmod); should we let it? // Anyway the existing calls already skip this method if on Windows. if (File.pathSeparatorChar==';') return; // noop - PosixAPI.jnr().chmod(f.getAbsolutePath(),mask); + if (Util.NATIVE_CHMOD_MODE) { + PosixAPI.jnr().chmod(f.getAbsolutePath(), mask); + } else { + Files.setPosixFilePermissions(fileToPath(f), Util.modeToPermissions(mask)); + } } private static boolean CHMOD_WARNED = false; @@ -1655,6 +1677,7 @@ public final class FilePath implements Serializable { *

    * This method returns direct children of the directory denoted by the 'this' object. */ + @Nonnull public List list() throws IOException, InterruptedException { return list((FileFilter)null); } @@ -1664,6 +1687,7 @@ public final class FilePath implements Serializable { * * @return can be empty but never null. Doesn't contain "." and ".." */ + @Nonnull public List listDirectories() throws IOException, InterruptedException { return list(new DirectoryFilter()); } @@ -1684,6 +1708,7 @@ public final class FilePath implements Serializable { * If this {@link FilePath} represents a remote path, * the filter object will be executed on the remote machine. */ + @Nonnull public List list(final FileFilter filter) throws IOException, InterruptedException { if (filter != null && !(filter instanceof Serializable)) { throw new IllegalArgumentException("Non-serializable filter of " + filter.getClass()); @@ -1692,7 +1717,9 @@ public final class FilePath implements Serializable { private static final long serialVersionUID = 1L; public List invoke(File f, VirtualChannel channel) throws IOException { File[] children = reading(f).listFiles(filter); - if(children ==null) return null; + if (children == null) { + return Collections.emptyList(); + } ArrayList r = new ArrayList(children.length); for (File child : children) @@ -1711,6 +1738,7 @@ public final class FilePath implements Serializable { * @return * can be empty but always non-null. */ + @Nonnull public FilePath[] list(final String includes) throws IOException, InterruptedException { return list(includes, null); } @@ -1725,6 +1753,7 @@ public final class FilePath implements Serializable { * can be empty but always non-null. * @since 1.407 */ + @Nonnull public FilePath[] list(final String includes, final String excludes) throws IOException, InterruptedException { return list(includes, excludes, true); } @@ -1740,6 +1769,7 @@ public final class FilePath implements Serializable { * can be empty but always non-null. * @since 1.465 */ + @Nonnull public FilePath[] list(final String includes, final String excludes, final boolean defaultExcludes) throws IOException, InterruptedException { return act(new SecureFileCallable() { private static final long serialVersionUID = 1L; @@ -1761,6 +1791,7 @@ public final class FilePath implements Serializable { * @return * A set of relative file names from the base directory. */ + @Nonnull private static String[] glob(File dir, String includes, String excludes, boolean defaultExcludes) throws IOException { if(isAbsolute(includes)) throw new IOException("Expecting Ant GLOB pattern, but saw '"+includes+"'. See http://ant.apache.org/manual/Types/fileset.html for syntax"); @@ -1775,8 +1806,13 @@ public final class FilePath implements Serializable { * Reads this file. */ public InputStream read() throws IOException, InterruptedException { - if(channel==null) - return new FileInputStream(reading(new File(remote))); + if(channel==null) { + try { + return Files.newInputStream(reading(new File(remote)).toPath()); + } catch (InvalidPathException e) { + throw new IOException(e); + } + } final Pipe p = Pipe.createRemoteToLocal(); actAsync(new SecureFileCallable() { @@ -1784,15 +1820,13 @@ public final class FilePath implements Serializable { @Override public Void invoke(File f, VirtualChannel channel) throws IOException, InterruptedException { - FileInputStream fis = null; - try { - fis = new FileInputStream(reading(f)); - Util.copyStream(fis, p.getOut()); + try (InputStream fis = Files.newInputStream(reading(f).toPath()); + OutputStream out = p.getOut()) { + org.apache.commons.io.IOUtils.copy(fis, out); + } catch (InvalidPathException e) { + p.error(new IOException(e)); } catch (Exception x) { p.error(x); - } finally { - org.apache.commons.io.IOUtils.closeQuietly(fis); - org.apache.commons.io.IOUtils.closeQuietly(p.getOut()); } return null; } @@ -1846,10 +1880,9 @@ public final class FilePath implements Serializable { private static final long serialVersionUID = 1L; public Void invoke(File f, VirtualChannel channel) throws IOException { - final OutputStream out = new java.util.zip.GZIPOutputStream(p.getOut(), 8192); - RandomAccessFile raf = null; - try { - raf = new RandomAccessFile(reading(f), "r"); + try (OutputStream os = p.getOut(); + OutputStream out = new java.util.zip.GZIPOutputStream(os, 8192); + RandomAccessFile raf = new RandomAccessFile(reading(f), "r")) { raf.seek(offset); byte[] buf = new byte[8192]; int len; @@ -1857,15 +1890,6 @@ public final class FilePath implements Serializable { out.write(buf, 0, len); } return null; - } finally { - IOUtils.closeQuietly(out); - if (raf != null) { - try { - raf.close(); - } catch (IOException e) { - // ignore - } - } } } }); @@ -1877,11 +1901,8 @@ public final class FilePath implements Serializable { * Reads this file into a string, by using the current system encoding. */ public String readToString() throws IOException, InterruptedException { - InputStream in = read(); - try { + try (InputStream in = read()) { return org.apache.commons.io.IOUtils.toString(in); - } finally { - in.close(); } } @@ -1904,7 +1925,11 @@ public final class FilePath implements Serializable { if(channel==null) { File f = new File(remote).getAbsoluteFile(); mkdirs(f.getParentFile()); - return new FileOutputStream(writing(f)); + try { + return Files.newOutputStream(writing(f).toPath()); + } catch (InvalidPathException e) { + throw new IOException(e); + } } return act(new SecureFileCallable() { @@ -1912,8 +1937,12 @@ public final class FilePath implements Serializable { public OutputStream invoke(File f, VirtualChannel channel) throws IOException, InterruptedException { f = f.getAbsoluteFile(); mkdirs(f.getParentFile()); - FileOutputStream fos = new FileOutputStream(writing(f)); - return new RemoteOutputStream(fos); + try { + OutputStream fos = Files.newOutputStream(writing(f).toPath()); + return new RemoteOutputStream(fos); + } catch (InvalidPathException e) { + throw new IOException(e); + } } }); } @@ -1930,12 +1959,11 @@ public final class FilePath implements Serializable { private static final long serialVersionUID = 1L; public Void invoke(File f, VirtualChannel channel) throws IOException { mkdirs(f.getParentFile()); - FileOutputStream fos = new FileOutputStream(writing(f)); - Writer w = encoding != null ? new OutputStreamWriter(fos, encoding) : new OutputStreamWriter(fos); - try { + try (OutputStream fos = Files.newOutputStream(writing(f).toPath()); + Writer w = encoding != null ? new OutputStreamWriter(fos, encoding) : new OutputStreamWriter(fos)) { w.write(content); - } finally { - w.close(); + } catch (InvalidPathException e) { + throw new IOException(e); } return null; } @@ -1966,7 +1994,7 @@ public final class FilePath implements Serializable { act(new SecureFileCallable() { private static final long serialVersionUID = 1L; public Void invoke(File f, VirtualChannel channel) throws IOException { - reading(f).renameTo(creating(new File(target.remote))); + Files.move(fileToPath(reading(f)), fileToPath(creating(new File(target.remote))), LinkOption.NOFOLLOW_LINKS); return null; } }); @@ -2008,11 +2036,8 @@ public final class FilePath implements Serializable { */ public void copyTo(FilePath target) throws IOException, InterruptedException { try { - OutputStream out = target.write(); - try { + try (OutputStream out = target.write()) { copyTo(out); - } finally { - out.close(); } } catch (IOException e) { throw new IOException("Failed to copy "+this+" to "+target,e); @@ -2024,6 +2049,21 @@ public final class FilePath implements Serializable { * @since 1.311 */ public void copyToWithPermission(FilePath target) throws IOException, InterruptedException { + // Use NIO copy with StandardCopyOption.COPY_ATTRIBUTES when copying on the same machine. + if (this.channel == target.channel) { + act(new SecureFileCallable() { + public Void invoke(File f, VirtualChannel channel) throws IOException { + File targetFile = new File(target.remote); + File targetDir = targetFile.getParentFile(); + filterNonNull().mkdirs(targetDir); + Files.createDirectories(fileToPath(targetDir)); + Files.copy(fileToPath(reading(f)), fileToPath(writing(targetFile)), StandardCopyOption.COPY_ATTRIBUTES, StandardCopyOption.REPLACE_EXISTING); + return null; + } + }); + return; + } + copyTo(target); // copy file permission target.chmod(mode()); @@ -2039,14 +2079,13 @@ public final class FilePath implements Serializable { act(new SecureFileCallable() { private static final long serialVersionUID = 4088559042349254141L; public Void invoke(File f, VirtualChannel channel) throws IOException { - FileInputStream fis = null; - try { - fis = new FileInputStream(reading(f)); - Util.copyStream(fis,out); + try (InputStream fis = Files.newInputStream(reading(f).toPath())) { + org.apache.commons.io.IOUtils.copy(fis, out); return null; + } catch (InvalidPathException e) { + throw new IOException(e); } finally { - org.apache.commons.io.IOUtils.closeQuietly(fis); - org.apache.commons.io.IOUtils.closeQuietly(out); + out.close(); } } }); @@ -2058,7 +2097,7 @@ public final class FilePath implements Serializable { /** * With fix to JENKINS-11251 (remoting 2.15), this is no longer necessary. - * But I'm keeping it for a while so that users who manually deploy slave.jar has time to deploy new version + * But I'm keeping it for a while so that users who manually deploy agent.jar has time to deploy new version * before this goes away. */ private void syncIO() throws InterruptedException { @@ -2066,9 +2105,9 @@ public final class FilePath implements Serializable { if (channel!=null) channel.syncLocalIO(); } catch (AbstractMethodError e) { - // legacy slave.jar. Handle this gracefully + // legacy agent.jar. Handle this gracefully try { - LOGGER.log(Level.WARNING,"Looks like an old slave.jar. Please update "+ Which.jarFile(Channel.class)+" to the new version",e); + LOGGER.log(Level.WARNING,"Looks like an old agent.jar. Please update "+ Which.jarFile(Channel.class)+" to the new version",e); } catch (IOException _) { // really ignore this time } @@ -2182,7 +2221,7 @@ public final class FilePath implements Serializable { writing(new File(dest, target)); Util.createSymlink(dest, target, relativePath, TaskListener.NULL); } catch (InterruptedException x) { - throw (IOException) new IOException(x.toString()).initCause(x); + throw new IOException(x); } count.incrementAndGet(); } @@ -2198,11 +2237,9 @@ public final class FilePath implements Serializable { Future future = target.actAsync(new SecureFileCallable() { private static final long serialVersionUID = 1L; public Void invoke(File f, VirtualChannel channel) throws IOException { - try { - readFromTar(remote + '/' + description, f,TarCompression.GZIP.extract(pipe.getIn())); + try (InputStream in = pipe.getIn()) { + readFromTar(remote + '/' + description, f,TarCompression.GZIP.extract(in)); return null; - } finally { - pipe.getIn().close(); } } }); @@ -2217,7 +2254,12 @@ public final class FilePath implements Serializable { future.get(); return future2.get(); } catch (ExecutionException e) { - throw new IOException(e); + Throwable cause = e.getCause(); + if (cause == null) cause = e; + throw cause instanceof IOException + ? (IOException) cause + : new IOException(cause) + ; } } else { // remote -> local copy @@ -2226,10 +2268,8 @@ public final class FilePath implements Serializable { Future future = actAsync(new SecureFileCallable() { private static final long serialVersionUID = 1L; public Integer invoke(File f, VirtualChannel channel) throws IOException { - try { - return writeToTar(f, scanner, TarCompression.GZIP.compress(pipe.getOut())); - } finally { - pipe.getOut().close(); + try (OutputStream out = pipe.getOut()) { + return writeToTar(f, scanner, TarCompression.GZIP.compress(out)); } } }); @@ -2241,7 +2281,8 @@ public final class FilePath implements Serializable { throw e; // the remote side completed successfully, so the error must be local } catch (ExecutionException x) { // report both errors - throw new IOException(Functions.printThrowable(e),x); + e.addSuppressed(x); + throw e; } catch (TimeoutException _) { // remote is hanging throw e; @@ -2250,7 +2291,12 @@ public final class FilePath implements Serializable { try { return future.get(); } catch (ExecutionException e) { - throw new IOException(e); + Throwable cause = e.getCause(); + if (cause == null) cause = e; + throw cause instanceof IOException + ? (IOException) cause + : new IOException(cause) + ; } } } @@ -2295,17 +2341,16 @@ public final class FilePath implements Serializable { /** * Reads from a tar stream and stores obtained files to the base dir. - * @since TODO supports large files > 10 GB, migration to commons-compress + * Supports large files > 10 GB since 1.627 when this was migrated to use commons-compress. */ private void readFromTar(String name, File baseDir, InputStream in) throws IOException { - TarArchiveInputStream t = new TarArchiveInputStream(in); - + // TarInputStream t = new TarInputStream(in); - try { + try (TarArchiveInputStream t = new TarArchiveInputStream(in)) { TarArchiveEntry te; while ((te = t.getNextTarEntry()) != null) { - File f = new File(baseDir,te.getName()); - if(te.isDirectory()) { + File f = new File(baseDir, te.getName()); + if (te.isDirectory()) { mkdirs(f); } else { File parent = f.getParentFile(); @@ -2315,22 +2360,20 @@ public final class FilePath implements Serializable { if (te.isSymbolicLink()) { new FilePath(f).symlinkTo(te.getLinkName(), TaskListener.NULL); } else { - IOUtils.copy(t,f); + IOUtils.copy(t, f); f.setLastModified(te.getModTime().getTime()); - int mode = te.getMode()&0777; - if(mode!=0 && !Functions.isWindows()) // be defensive - _chmod(f,mode); + int mode = te.getMode() & 0777; + if (mode != 0 && !Functions.isWindows()) // be defensive + _chmod(f, mode); } } } - } catch(IOException e) { - throw new IOException("Failed to extract "+name,e); + } catch (IOException e) { + throw new IOException("Failed to extract " + name, e); } catch (InterruptedException e) { Thread.currentThread().interrupt(); // process this later - throw new IOException("Failed to extract "+name,e); - } finally { - t.close(); + throw new IOException("Failed to extract " + name, e); } } @@ -2347,6 +2390,7 @@ public final class FilePath implements Serializable { } private static final class IsUnix extends MasterToSlaveCallable { + @Nonnull public Boolean call() throws IOException { return File.pathSeparatorChar==':'; } @@ -2372,7 +2416,7 @@ public final class FilePath implements Serializable { } /** - * Same as {@link #validateFileMask(String, int, boolean)} with caseSensitive set to true + * Same as {@link #validateAntFileMask(String, int, boolean)} with caseSensitive set to true */ public String validateAntFileMask(final String fileMasks, final int bound) throws IOException, InterruptedException { return validateAntFileMask(fileMasks, bound, true); @@ -2382,7 +2426,7 @@ public final class FilePath implements Serializable { * Default bound for {@link #validateAntFileMask(String, int, boolean)}. * @since 1.592 */ - public static int VALIDATE_ANT_FILE_MASK_BOUND = SystemProperties.getInteger(FilePath.class.getName() + ".VALIDATE_ANT_FILE_MASK_BOUND", 10000); + public static int VALIDATE_ANT_FILE_MASK_BOUND = Integer.getInteger(FilePath.class.getName() + ".VALIDATE_ANT_FILE_MASK_BOUND", 10000); /** * Like {@link #validateAntFileMask(String)} but performing only a bounded number of operations. @@ -2397,7 +2441,7 @@ public final class FilePath implements Serializable { * @throws InterruptedException not only in case of a channel failure, but also if too many operations were performed without finding any matches * @since 1.484 */ - public String validateAntFileMask(final String fileMasks, final int bound, final boolean caseSensitive) throws IOException, InterruptedException { + public @CheckForNull String validateAntFileMask(final String fileMasks, final int bound, final boolean caseSensitive) throws IOException, InterruptedException { return act(new MasterToSlaveFileCallable() { private static final long serialVersionUID = 1; public String invoke(File dir, VirtualChannel channel) throws IOException, InterruptedException { @@ -2424,7 +2468,7 @@ public final class FilePath implements Serializable { for (String token : Util.tokenize(fileMask)) matched &= hasMatch(dir,token,caseSensitive); if(matched) - return Messages.FilePath_validateAntFileMask_whitespaceSeprator(); + return Messages.FilePath_validateAntFileMask_whitespaceSeparator(); } // a common mistake is to assume the wrong base dir, and there are two variations @@ -2581,7 +2625,7 @@ public final class FilePath implements Serializable { } /** - * Shortcut for {@link #validateFileMask(String,true,boolean)} as the left-hand side can be null. + * Shortcut for {@link #validateFileMask(String,boolean,boolean)} with {@code errorIfNotExist} true, as the left-hand side can be null. */ public static FormValidation validateFileMask(@CheckForNull FilePath path, String value, boolean caseSensitive) throws IOException { if(path==null) return FormValidation.ok(); @@ -2787,6 +2831,11 @@ public final class FilePath implements Serializable { return classLoader; } + @Override + public String toString() { + return callable.toString(); + } + private static final long serialVersionUID = 1L; } @@ -2853,6 +2902,11 @@ public final class FilePath implements Serializable { new NamingThreadFactory(new DaemonThreadFactory(), "FilePath.localPool")) )); + + /** + * Channel to the current instance. + */ + @Nonnull public static final LocalChannel localChannel = new LocalChannel(threadPoolForRemoting); private @Nonnull SoloFilePathFilter filterNonNull() { @@ -2940,11 +2994,12 @@ public final class FilePath implements Serializable { return f; } - private boolean mkdirs(File dir) { + private boolean mkdirs(File dir) throws IOException { if (dir.exists()) return false; filterNonNull().mkdirs(dir); - return dir.mkdirs(); + Files.createDirectories(fileToPath(dir)); + return true; } private File mkdirsE(File dir) throws IOException { diff --git a/core/src/main/java/hudson/FileSystemProvisioner.java b/core/src/main/java/hudson/FileSystemProvisioner.java index 60978a00482112d7a09d118e709051285d920751..13f55b7370028832eba66ea7e16af84cb19547aa 100644 --- a/core/src/main/java/hudson/FileSystemProvisioner.java +++ b/core/src/main/java/hudson/FileSystemProvisioner.java @@ -31,6 +31,8 @@ import hudson.model.Describable; import hudson.model.Job; import hudson.model.TaskListener; import hudson.util.io.ArchiverFactory; +import java.nio.file.Files; +import java.nio.file.InvalidPathException; import jenkins.model.Jenkins; import hudson.model.listeners.RunListener; import hudson.scm.SCM; @@ -52,7 +54,7 @@ import java.io.OutputStream; * STILL A WORK IN PROGRESS. SUBJECT TO CHANGE! DO NOT EXTEND. * * TODO: is this per {@link Computer}? Per {@link Job}? - * -> probably per agent. + * → probably per agent. * *

    Design Problems

    *
      @@ -215,11 +217,10 @@ public abstract class FileSystemProvisioner implements ExtensionPoint, Describab */ public WorkspaceSnapshot snapshot(AbstractBuild build, FilePath ws, String glob, TaskListener listener) throws IOException, InterruptedException { File wss = new File(build.getRootDir(),"workspace.tgz"); - OutputStream os = new BufferedOutputStream(new FileOutputStream(wss)); - try { - ws.archive(ArchiverFactory.TARGZ,os,glob); - } finally { - os.close(); + try (OutputStream os = new BufferedOutputStream(Files.newOutputStream(wss.toPath()))) { + ws.archive(ArchiverFactory.TARGZ, os, glob); + } catch (InvalidPathException e) { + throw new IOException(e); } return new WorkspaceSnapshotImpl(); } diff --git a/core/src/main/java/hudson/FileSystemProvisionerDescriptor.java b/core/src/main/java/hudson/FileSystemProvisionerDescriptor.java index ce0371ceec0ecf79d7c4d06061e5a558358dfa6f..1e02e11f7f4dfdbedf2f00b853535725c1d43f86 100644 --- a/core/src/main/java/hudson/FileSystemProvisionerDescriptor.java +++ b/core/src/main/java/hudson/FileSystemProvisionerDescriptor.java @@ -63,7 +63,7 @@ public abstract class FileSystemProvisionerDescriptor extends Descriptor(System.getProperties()); } + /** + * Gets the system property indicated by the specified key. + * + * Delegates to {@link SystemProperties#getString(java.lang.String)}. + */ + @Restricted(DoNotUse.class) + public static String getSystemProperty(String key) { + return SystemProperties.getString(key); + } + public static Map getEnvVars() { return new TreeMap(EnvVars.masterEnvVars); } @@ -853,7 +866,7 @@ public class Functions { if(footerURL == null) { footerURL = SystemProperties.getString("hudson.footerURL"); if(StringUtils.isBlank(footerURL)) { - footerURL = "http://jenkins-ci.org/"; + footerURL = "https://jenkins.io/"; } } return footerURL; @@ -1098,7 +1111,7 @@ public class Functions { ItemGroup ig = i.getParent(); url = i.getShortUrl()+url; - if(ig== Jenkins.getInstance() || (view != null && ig == view.getOwnerItemGroup())) { + if(ig== Jenkins.getInstance() || (view != null && ig == view.getOwner().getItemGroup())) { assert i instanceof TopLevelItem; if (view != null) { // assume p and the current page belong to the same view, so return a relative path @@ -1130,20 +1143,24 @@ public class Functions { * @since 1.512 */ public static List getAllTopLevelItems(ItemGroup root) { - return Items.getAllItems(root, TopLevelItem.class); + return root.getAllItems(TopLevelItem.class); } /** * Gets the relative name or display name to the given item from the specified group. * * @since 1.515 - * @param p the Item we want the relative display name - * @param g the ItemGroup used as point of reference for the item + * @param p the Item we want the relative display name. + * If {@code null}, a {@code null} will be returned by the method + * @param g the ItemGroup used as point of reference for the item. + * If the group is not specified, item's path will be used. * @param useDisplayName if true, returns a display name, otherwise returns a name * @return - * String like "foo » bar" + * String like "foo » bar". + * {@code null} if item is null or if one of its parents is not an {@link Item}. */ - public static String getRelativeNameFrom(Item p, ItemGroup g, boolean useDisplayName) { + @Nullable + public static String getRelativeNameFrom(@CheckForNull Item p, @CheckForNull ItemGroup g, boolean useDisplayName) { if (p == null) return null; if (g == null) return useDisplayName ? p.getFullDisplayName() : p.getFullName(); String separationString = useDisplayName ? " » " : "/"; @@ -1177,7 +1194,7 @@ public class Functions { if (gr instanceof Item) i = (Item)gr; - else + else // Parent is a group, but not an item return null; } } @@ -1187,11 +1204,14 @@ public class Functions { * * @since 1.515 * @param p the Item we want the relative display name + * If {@code null}, the method will immediately return {@code null}. * @param g the ItemGroup used as point of reference for the item * @return - * String like "foo/bar" + * String like "foo/bar". + * {@code null} if the item is {@code null} or if one of its parents is not an {@link Item}. */ - public static String getRelativeNameFrom(Item p, ItemGroup g) { + @Nullable + public static String getRelativeNameFrom(@CheckForNull Item p, @CheckForNull ItemGroup g) { return getRelativeNameFrom(p, g, false); } @@ -1200,12 +1220,15 @@ public class Functions { * Gets the relative display name to the given item from the specified group. * * @since 1.512 - * @param p the Item we want the relative display name + * @param p the Item we want the relative display name. + * If {@code null}, the method will immediately return {@code null}. * @param g the ItemGroup used as point of reference for the item * @return - * String like "Foo » Bar" + * String like "Foo » Bar". + * {@code null} if the item is {@code null} or if one of its parents is not an {@link Item}. */ - public static String getRelativeDisplayNameFrom(Item p, ItemGroup g) { + @Nullable + public static String getRelativeDisplayNameFrom(@CheckForNull Item p, @CheckForNull ItemGroup g) { return getRelativeNameFrom(p, g, true); } @@ -1389,7 +1412,7 @@ public class Functions { } /** - * Resoruce path prefix. + * Resource path prefix. */ public static String getResourcePath() { return Jenkins.RESOURCE_PATH; @@ -1438,19 +1461,87 @@ public class Functions { } /** - * Gets info about the specified {@link Throwable}. + * Prints a stack trace from an exception into a readable form. + * Unlike {@link Throwable#printStackTrace(PrintWriter)}, this implementation follows the suggestion of JDK-6507809 + * to produce a linear trace even when {@link Throwable#getCause} is used. * @param t Input {@link Throwable} - * @return If {@link Throwable} is not null, a summary info with the - * stacktrace will be returned. Otherwise, the method returns a default + * @return If {@code t} is not null, generally a multiline string ending in a (platform-specific) newline; + * otherwise, the method returns a default * "No exception details" string. */ - public static String printThrowable(@CheckForNull Throwable t) { + public static @Nonnull String printThrowable(@CheckForNull Throwable t) { if (t == null) { return Messages.Functions_NoExceptionDetails(); } - StringWriter sw = new StringWriter(); - t.printStackTrace(new PrintWriter(sw)); - return sw.toString(); + StringBuilder s = new StringBuilder(); + doPrintStackTrace(s, t, null, "", new HashSet()); + return s.toString(); + } + private static void doPrintStackTrace(@Nonnull StringBuilder s, @Nonnull Throwable t, @CheckForNull Throwable higher, @Nonnull String prefix, @Nonnull Set encountered) { + if (!encountered.add(t)) { + s.append("\n"); + return; + } + if (Util.isOverridden(Throwable.class, t.getClass(), "printStackTrace", PrintWriter.class)) { + StringWriter sw = new StringWriter(); + t.printStackTrace(new PrintWriter(sw)); + s.append(sw.toString()); + return; + } + Throwable lower = t.getCause(); + if (lower != null) { + doPrintStackTrace(s, lower, t, prefix, encountered); + } + for (Throwable suppressed : t.getSuppressed()) { + s.append(prefix).append("Also: "); + doPrintStackTrace(s, suppressed, t, prefix + "\t", encountered); + } + if (lower != null) { + s.append(prefix).append("Caused: "); + } + String summary = t.toString(); + if (lower != null) { + String suffix = ": " + lower; + if (summary.endsWith(suffix)) { + summary = summary.substring(0, summary.length() - suffix.length()); + } + } + s.append(summary).append(IOUtils.LINE_SEPARATOR); + StackTraceElement[] trace = t.getStackTrace(); + int end = trace.length; + if (higher != null) { + StackTraceElement[] higherTrace = higher.getStackTrace(); + while (end > 0) { + int higherEnd = end + higherTrace.length - trace.length; + if (higherEnd <= 0 || !higherTrace[higherEnd - 1].equals(trace[end - 1])) { + break; + } + end--; + } + } + for (int i = 0; i < end; i++) { + s.append(prefix).append("\tat ").append(trace[i]).append(IOUtils.LINE_SEPARATOR); + } + } + + /** + * Like {@link Throwable#printStackTrace(PrintWriter)} but using {@link #printThrowable} format. + * @param t an exception to print + * @param pw the log + * @since 2.43 + */ + public static void printStackTrace(@CheckForNull Throwable t, @Nonnull PrintWriter pw) { + pw.println(printThrowable(t).trim()); + } + + /** + * Like {@link Throwable#printStackTrace(PrintStream)} but using {@link #printThrowable} format. + * @param t an exception to print + * @param ps the log + * @since 2.43 + */ + public static void printStackTrace(@CheckForNull Throwable t, @Nonnull PrintStream ps) { + ps.println(printThrowable(t).trim()); } /** @@ -1498,7 +1589,7 @@ public class Functions { * Checks if the current user is anonymous. */ public static boolean isAnonymous() { - return Jenkins.getAuthentication() instanceof AnonymousAuthenticationToken; + return ACL.isAnonymous(Jenkins.getAuthentication()); } /** @@ -1725,7 +1816,7 @@ public class Functions { } /** - * Generate a series of <script> tags to include script.js + * Generate a series of {@code diff --git a/core/src/main/resources/hudson/PluginManager/installed.properties b/core/src/main/resources/hudson/PluginManager/installed.properties index 2fa0cafb8083f2b150ecd074aeb95ea0321dc2b7..0c1b07c42737b8ee2958fe7c7f1691c9eb8c56b8 100644 --- a/core/src/main/resources/hudson/PluginManager/installed.properties +++ b/core/src/main/resources/hudson/PluginManager/installed.properties @@ -19,6 +19,5 @@ # 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. -wiki.url=http://wiki.jenkins-ci.org/display/JENKINS/Pinned+Plugins downgradeTo=Downgrade to {0} -requires.restart=This Jenkins instance requires a restart. Changing the state of plugins at this time is strongly discouraged. Restart Jenkins before proceeding. \ No newline at end of file +requires.restart=This Jenkins instance requires a restart. Changing the state of plugins at this time is strongly discouraged. Restart Jenkins before proceeding. diff --git a/core/src/main/resources/hudson/PluginManager/installed_bg.properties b/core/src/main/resources/hudson/PluginManager/installed_bg.properties index c950862a63b41df6b8dedcfffb431ff6a6e94386..60dc8c4e29ac354bafffe5de51bec57b6b793d95 100644 --- a/core/src/main/resources/hudson/PluginManager/installed_bg.properties +++ b/core/src/main/resources/hudson/PluginManager/installed_bg.properties @@ -26,8 +26,6 @@ Enabled=\ \u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043d Name=\ \u0418\u043c\u0435 -Pinned=\ - \u0424\u0438\u043a\u0441\u0438\u0440\u0430\u043d\u0430 \u0432\u0435\u0440\u0441\u0438\u044f Previously\ installed\ version=\ \u041f\u0440\u0435\u0434\u0438\u0448\u043d\u043e \u0438\u043d\u0441\u0442\u0430\u043b\u0438\u0440\u0430\u043d\u0430 \u0432\u0435\u0440\u0441\u0438\u044f Restart\ Once\ No\ Jobs\ Are\ Running=\ @@ -36,8 +34,6 @@ Uncheck\ to\ disable\ the\ plugin=\ \u041c\u0430\u0445\u043d\u0435\u0442\u0435 \u043e\u0442\u043c\u0435\u0442\u043a\u0430\u0442\u0430 \u0437\u0430 \u0437\u0430\u0431\u0440\u0430\u043d\u0430 \u043d\u0430 \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0430\u0442\u0430 Uninstall=\ \u0414\u0435\u0438\u043d\u0441\u0442\u0430\u043b\u0438\u0440\u0430\u043d\u0435 -Unpin=\ - \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0430 \u0432\u0435\u0440\u0441\u0438\u044f Version=\ \u0412\u0435\u0440\u0441\u0438\u044f downgradeTo=\ @@ -62,8 +58,6 @@ This\ plugin\ cannot\ be\ enabled=\ \u0422\u0430\u0437\u0438 \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0430 \u043d\u0435 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0441\u0435 \u0432\u043a\u043b\u044e\u0447\u0438 Filter=\ \u0424\u0438\u043b\u0442\u0440\u0438\u0440\u0430\u043d\u0435 -wiki.url=\ - \u0422\u0430\u0437\u0438 \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0430 \u043d\u0435 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0441\u0435 \u0438\u0437\u043a\u043b\u044e\u0447\u0438 requires.restart=\ \u0422\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0440\u0435\u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u0442\u0435 Jenkins, \u043f\u0440\u0435\u0434\u0438 \u0434\u0430 \u043f\u0440\u0430\u0432\u0438\u0442\u0435 \u043f\u043e\u0432\u0435\u0447\u0435 \u043f\u0440\u043e\u043c\u0435\u043d\u0438 \u043f\u043e\ \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0438\u0442\u0435. \u041e\u043f\u0430\u0441\u043d\u043e \u0435 \u0434\u0430 \u043f\u0440\u043e\u0434\u044a\u043b\u0436\u0438\u0442\u0435 \u0431\u0435\u0437 \u0440\u0435\u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u043d\u0435. diff --git a/core/src/main/resources/hudson/PluginManager/installed_cs.properties b/core/src/main/resources/hudson/PluginManager/installed_cs.properties index 21847ed21d95ec27e0b955dc11f6614d8e745f13..9fb56abb6a8981744a87550484f14cb02aa68927 100644 --- a/core/src/main/resources/hudson/PluginManager/installed_cs.properties +++ b/core/src/main/resources/hudson/PluginManager/installed_cs.properties @@ -3,11 +3,9 @@ Changes\ will\ take\ effect\ when\ you\ restart\ Jenkins=Zm\u011Bny se projev\u00ED a\u017E po restartu Jenkinse Enabled=Povolen\u00E9 Name=Jm\u00E9no -Pinned=Preferovat Previously\ installed\ version=P\u0159edchoz\u00ED nainstalovan\u00E1 verze Restart\ Once\ No\ Jobs\ Are\ Running=Restartovat a\u017E po dokon\u010Den\u00ED v\u0161ech \u00FAloh. Uncheck\ to\ disable\ the\ plugin=Od\u0161krtnout pro deaktivaci modulu Uninstall=Odinstalovat Version=Verze downgradeTo=Vr\u00E1tit se k {0} -wiki.url=http://wiki.jenkins-ci.org/display/JENKINS/Pinned+Plugins diff --git a/core/src/main/resources/hudson/PluginManager/installed_da.properties b/core/src/main/resources/hudson/PluginManager/installed_da.properties index 4086d2a08ac457e4508899f2278ebd1c94b988ad..9e17d018924b1a85654c414ad1927ddc02722b72 100644 --- a/core/src/main/resources/hudson/PluginManager/installed_da.properties +++ b/core/src/main/resources/hudson/PluginManager/installed_da.properties @@ -21,15 +21,12 @@ # THE SOFTWARE. Version=Version -wiki.url=http://wiki.jenkins-ci.org/display/JENKINS/Pinned+Plugins Restart\ Once\ No\ Jobs\ Are\ Running=Genstart n\u00e5r ingen jobs k\u00f8rer Previously\ installed\ version=Forudg\u00e5ende installerede version New\ plugins\ will\ take\ effect\ once\ you\ restart\ Jenkins=Nye plugins tr\u00e6der i kraft efter du har genstartet Jenkins Uncheck\ to\ disable\ the\ plugin=Fjern flueben for at sl\u00e5 plugin''et fra No\ plugins\ installed.=Ingen installerede plugins. downgradeTo=Nedgrader til {0} -Pinned=L\u00e5st Name=Navn Changes\ will\ take\ effect\ when\ you\ restart\ Jenkins=\u00c6ndringer tr\u00e6der i kraft efter Jenkins er genstartet Enabled=Sl\u00e5et til -Unpin=L\u00e5s op diff --git a/core/src/main/resources/hudson/PluginManager/installed_de.properties b/core/src/main/resources/hudson/PluginManager/installed_de.properties index 3653a5c9e839f877ae82b4bfb8ce5761c8ec8656..442d08f12707b16915c7d46dfe698185392783ba 100644 --- a/core/src/main/resources/hudson/PluginManager/installed_de.properties +++ b/core/src/main/resources/hudson/PluginManager/installed_de.properties @@ -21,17 +21,24 @@ # THE SOFTWARE. No\ plugins\ installed.=Keine Plugins installiert. -Changes\ will\ take\ effect\ when\ you\ restart\ Jenkins=nderungen treten nach einem Neustart von Jenkins in Kraft. -Uncheck\ to\ disable\ the\ plugin=Zum Deaktivieren des Plugins Markierung lschen +Changes\ will\ take\ effect\ when\ you\ restart\ Jenkins=\u00C4nderungen treten nach einem Neustart von Jenkins in Kraft. +Uncheck\ to\ disable\ the\ plugin=Zum Deaktivieren des Plugins Markierung entfernen Enabled=Aktiviert Name=Name Version=Version Restart\ Once\ No\ Jobs\ Are\ Running=Neu starten, sobald keine Jobs mehr laufen. Previously\ installed\ version=Vorher installierte Version downgradeTo={0} wiederherstellen -Pinned=Gesperrt -Unpin=Entsperren -wiki.url=http://wiki.jenkins-ci.org/display/JENKINS/Pinned+Plugins Uninstall=Deinstallieren Uninstallation\ pending=Zur Deinstallation vorgemerkt Update\ Center=Update-Center +This\ plugin\ cannot\ be\ disabled=Dieses Plugin kann nicht deaktiviert werden. +requires.restart=Jenkins erfordert einen Neustart. Die Plugin-Konfiguration sollte nicht weiter ge\u00E4ndert werden. Starten Sie Jenkins neu, bevor Sie fortfahren. +It\ has\ one\ or\ more\ installed\ dependants=Mindestens ein Plugin ist von diesem abh\u00E4ngig +Warning=Warnung +Filter=Filter +It\ has\ one\ or\ more\ enabled\ dependants=Mindestens ein aktives Plugin ist von diesem abh\u00E4ngig +It\ has\ one\ or\ more\ disabled\ dependencies=Mindestens eine Abh\u00E4ngigkeit ist deaktiviert +This\ plugin\ cannot\ be\ uninstalled=Dieses Plugin kann nicht deinstalliert werden. +No\ description\ available.=Keine Beschreibung verf\u00FCgbar. +This\ plugin\ cannot\ be\ enabled=Dieses Plugin kann nicht aktiviert werden. diff --git a/core/src/main/resources/hudson/PluginManager/installed_es.properties b/core/src/main/resources/hudson/PluginManager/installed_es.properties index 70956f31d1b389dd4f44eef441fb8e53e1bcaa8f..34f849e78dccc253e5099bc7b453a12f3e0596ed 100644 --- a/core/src/main/resources/hudson/PluginManager/installed_es.properties +++ b/core/src/main/resources/hudson/PluginManager/installed_es.properties @@ -27,10 +27,7 @@ Name=Nombre Version=Versin Changes\ will\ take\ effect\ when\ you\ restart\ Jenkins=Los cambios no estarn disponibles hasta que Jenkins se reinicie Restart\ Once\ No\ Jobs\ Are\ Running=Reiniciar cuando no haya tareas en ejecucin -wiki.url="http://wiki.jenkins-ci.org/display/JENKINS/Pinned+Plugins" downgradeTo=Bajar a la version {0}. Previously\ installed\ version=Versin previamente instalada. -Pinned=marcado Uninstall=Desinstalar -Unpin=desmarcar Update\ Center=Centro de actualizaciones diff --git a/core/src/main/resources/hudson/PluginManager/installed_fi.properties b/core/src/main/resources/hudson/PluginManager/installed_fi.properties index c04443e10d2fe07012c6a0233fd44bf0581752dc..209c8d6e2d3903add7a171d1838baf01770f505f 100644 --- a/core/src/main/resources/hudson/PluginManager/installed_fi.properties +++ b/core/src/main/resources/hudson/PluginManager/installed_fi.properties @@ -23,10 +23,8 @@ Changes\ will\ take\ effect\ when\ you\ restart\ Jenkins=Muutokset astuvat voimaan kun Jenkins k\u00E4ynnistet\u00E4\u00E4n Enabled=Aktivoitu Name=Nimi -Pinned=Lukittu Previously\ installed\ version=Aiemmin asennettu versio Restart\ Once\ No\ Jobs\ Are\ Running=K\u00E4ynnist\u00E4 heti kun k\u00E4\u00E4nn\u00F6ksi\u00E4 ei ole ajossa Uncheck\ to\ disable\ the\ plugin=Poist ruudun rasti poistaaksesi liit\u00E4nn\u00E4inen k\u00E4yt\u00F6st\u00E4 -Unpin=Vapauta lukitus Version=Versio downgradeTo=Palaa versioon {0} diff --git a/core/src/main/resources/hudson/PluginManager/installed_fr.properties b/core/src/main/resources/hudson/PluginManager/installed_fr.properties index fde1e85e1c11cb7e8ef32524056d3193409e6fa4..b3767a6e65ecde4201c44f5c2db50a59c22e5dd2 100644 --- a/core/src/main/resources/hudson/PluginManager/installed_fr.properties +++ b/core/src/main/resources/hudson/PluginManager/installed_fr.properties @@ -28,9 +28,6 @@ Uncheck\ to\ disable\ the\ plugin=D\u00e9cochez pour d\u00e9sactiver le plugin Enabled=Activ\u00e9 Name=Nom Uninstall=D\u00E9sinstaller -Unpin=Annuler \u00E9pingler Version=Version -Pinned=\u00C9pingl\u00E9 Previously\ installed\ version=Version pr\u00E9c\u00E9dente downgradeTo=R\u00E9trograder \u00E0 {0} -wiki.url=http://wiki.jenkins-ci.org/display/JENKINS/Pinned+Plugins diff --git a/core/src/main/resources/hudson/PluginManager/installed_hu.properties b/core/src/main/resources/hudson/PluginManager/installed_hu.properties index 01d83570d004de8d58e6774dc17923350d7e5bd6..a71aafe3567e5b4b7f530dc97750319017773d7e 100644 --- a/core/src/main/resources/hudson/PluginManager/installed_hu.properties +++ b/core/src/main/resources/hudson/PluginManager/installed_hu.properties @@ -28,4 +28,3 @@ Restart\ Once\ No\ Jobs\ Are\ Running=\u00DAjraind\u00EDt\u00E1s ha m\u00E1r nin Uncheck\ to\ disable\ the\ plugin=T\u00F6r\u00F6lje a jel\u00F6l\u00E9st a be\u00E9p\u00FCl\u0151 kikapcsol\u00E1s\u00E1hoz Version=Verzi\u00F3 downgradeTo=Visszafriss\u00EDt\u00E9s {0} verzi\u00F3ra -wiki.url=http://wiki.jenkins-ci.org/display/JENKINS/Pinned+Plugins diff --git a/core/src/main/resources/hudson/PluginManager/installed_id.properties b/core/src/main/resources/hudson/PluginManager/installed_id.properties deleted file mode 100644 index 880aaa392fad34f80ba91b0b22d21709a4c848e1..0000000000000000000000000000000000000000 --- a/core/src/main/resources/hudson/PluginManager/installed_id.properties +++ /dev/null @@ -1,8 +0,0 @@ -# This file is under the MIT License by authors - -Changes\ will\ take\ effect\ when\ you\ restart\ Jenkins=Perubahan akan berefek ketika anda mengulang Jenkins -Enabled=Diaktifkan -Name=Nama -Previously\ installed\ version=Versi terpasang sebelumnya -Restart\ Once\ No\ Jobs\ Are\ Running=Restart Begitu Tidak Ada Pekerjaan Berjalan -Version=Versi diff --git a/core/src/main/resources/hudson/PluginManager/installed_it.properties b/core/src/main/resources/hudson/PluginManager/installed_it.properties index 0c30e7269d122832fc67c9585b1bffb81121b59c..a1361443e9b08becd079f771c3ad652f1aceefed 100644 --- a/core/src/main/resources/hudson/PluginManager/installed_it.properties +++ b/core/src/main/resources/hudson/PluginManager/installed_it.properties @@ -20,15 +20,25 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -Changes\ will\ take\ effect\ when\ you\ restart\ Jenkins=Le modifiche avranno effetto quando riavvierai Jenkins +Changes\ will\ take\ effect\ when\ you\ restart\ Jenkins=Le modifiche avranno effetto al riavvio di Jenkins Enabled=Attivo Name=Nome -Pinned=Bloccato Previously\ installed\ version=Versione precedente -Restart\ Once\ No\ Jobs\ Are\ Running=Riavvia quando non ci sono lavori in esecuzione -Uncheck\ to\ disable\ the\ plugin=Deseleziona per disattivare il plugin -Uninstall=Disintalla -Unpin=Sblocca +Restart\ Once\ No\ Jobs\ Are\ Running=Riavvia quando non ci sono processi in esecuzione +Uncheck\ to\ disable\ the\ plugin=Deselezionare per disattivare il plugin +Uninstall=Disinstalla Version=Versione downgradeTo=Retrocedi a -wiki.url=http://wiki.jenkins-ci.org/display/JENKINS/Pinned+Plugins +It\ has\ one\ or\ more\ disabled\ dependencies=Ha una o pi dipendenze disabilitate +Update\ Center=Centro aggiornamenti +This\ plugin\ cannot\ be\ uninstalled=Impossibile disinstallare questo plugin +requires.restart=Quest''istanza di Jenkins deve essere riavviata. La modifica dello stato dei plugin in questa condizione caldamente sconsigliata. Riavviare Jenkins prima di procedere. +No\ plugins\ installed.=Nessun plugin installato. +Filter=Filtro +It\ has\ one\ or\ more\ installed\ dependants=Ha uno o pi plugin dipendenti installati +It\ has\ one\ or\ more\ enabled\ dependants=Ha uno o pi plugin dipendenti abilitati +This\ plugin\ cannot\ be\ enabled=Questo plugin non pu essere abilitato +This\ plugin\ cannot\ be\ disabled=Questo plugin non pu essere disabilitato +No\ description\ available.=Nessuna descrizione disponibile. +Uninstallation\ pending=Disinstallazione in sospeso +Warning=Avviso diff --git a/core/src/main/resources/hudson/PluginManager/installed_ja.properties b/core/src/main/resources/hudson/PluginManager/installed_ja.properties index cca9a2797f7350e2a3c8134cd565fddc7811f0d7..8e9aaf1ef60c3fe9b450e5938855407ea3b3810d 100644 --- a/core/src/main/resources/hudson/PluginManager/installed_ja.properties +++ b/core/src/main/resources/hudson/PluginManager/installed_ja.properties @@ -27,9 +27,6 @@ Enabled=\u6709\u52b9\u5316 Name=\u540d\u524d Version=\u30d0\u30fc\u30b8\u30e7\u30f3 Restart\ Once\ No\ Jobs\ Are\ Running=\u30b8\u30e7\u30d6\u304c\u5b9f\u884c\u4e2d\u3067\u306a\u3051\u308c\u3070\u518d\u8d77\u52d5 -Pinned=\u30d4\u30f3 -Unpin=\u89e3\u9664 -wiki.url=http://wiki.jenkins-ci.org/display/JA/Pinned+Plugins Previously\ installed\ version=\u524d\u56de\u30d0\u30fc\u30b8\u30e7\u30f3 downgradeTo={0} \u306b\u30c0\u30a6\u30f3\u30b0\u30ec\u30fc\u30c9 Update\ Center=\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u30bb\u30f3\u30bf\u30fc diff --git a/core/src/main/resources/hudson/PluginManager/installed_ko.properties b/core/src/main/resources/hudson/PluginManager/installed_ko.properties index 7a6397fbf43c26b8aff2d1febbb00bca4a35f369..1d745838f474d6d7a274acca4520adbe482b0bc3 100644 --- a/core/src/main/resources/hudson/PluginManager/installed_ko.properties +++ b/core/src/main/resources/hudson/PluginManager/installed_ko.properties @@ -23,13 +23,10 @@ Changes\ will\ take\ effect\ when\ you\ restart\ Jenkins=Jenkins\uC744 \uC7AC\uC2DC\uC791\uD558\uBA74 \uBCC0\uACBD\uC0AC\uD56D\uC774 \uC801\uC6A9\uB429\uB2C8\uB2E4. Enabled=\uC0AC\uC6A9\uAC00\uB2A5 Name=\uC774\uB984 -Pinned=\uACE0\uC815\uB428 Previously\ installed\ version=\uC774\uC804 \uC124\uCE58 \uBC84\uC804 Restart\ Once\ No\ Jobs\ Are\ Running=\uB3D9\uC791\uC911\uC778 \uC791\uC5C5\uC774 \uC5C6\uC73C\uBA74 \uD55C\uBC88 \uC7AC\uAE30\uB3D9\uD569\uB2C8\uB2E4. Uncheck\ to\ disable\ the\ plugin=\uC0AC\uC6A9\uBD88\uAC00 \uD50C\uB7EC\uADF8\uC778 \uCCB4\uD06C\uD574\uC81C Uninstall=\uC124\uCE58 \uC81C\uAC70 Uninstallation\ pending=\uC0AD\uC81C \uB300\uAE30 -Unpin=\uACE0\uC815 \uD574\uC81C Version=\uBC84\uC804 downgradeTo={0}\uC73C\uB85C \uB2E4\uC6B4\uADF8\uB808\uC774\uB4DC -wiki.url=http://wiki.jenkins-ci.org/display/JENKINS/Pinned+Plugins diff --git a/core/src/main/resources/hudson/PluginManager/installed_lv.properties b/core/src/main/resources/hudson/PluginManager/installed_lv.properties index 27b7271b2c7ca80d3bf812a3945af09a2c23521a..6539b07429a8033f1f0bd1e9a25b1f4919dcec87 100644 --- a/core/src/main/resources/hudson/PluginManager/installed_lv.properties +++ b/core/src/main/resources/hudson/PluginManager/installed_lv.properties @@ -3,11 +3,8 @@ Changes\ will\ take\ effect\ when\ you\ restart\ Jenkins=Izmai\u0146as st\u0101sies sp\u0113k\u0101 p\u0113c Jenkins p\u0101rstart\u0113\u0161anas Enabled=Iespejots Name=Nosaukums -Pinned=Piesaist\u012Bts Previously\ installed\ version=Iepriek\u0161 instal\u0113t\u0101 versija Restart\ Once\ No\ Jobs\ Are\ Running=P\u0101rstart\u0113 tikl\u012Bdz neviens uzdevums nestr\u0101d\u0101 Uncheck\ to\ disable\ the\ plugin=At\u0137eks\u0113 lai atsp\u0113jotu spraudni Uninstall=Atinstal\u0113t -Unpin=Atsiet Version=Versija -wiki.url=http://wiki.jenkins-ci.org/display/JENKINS/Pinned+Plugins diff --git a/core/src/main/resources/hudson/PluginManager/installed_nl.properties b/core/src/main/resources/hudson/PluginManager/installed_nl.properties index 78c5ea28610ab25a901a9f3959b97abf820a91b1..2133f18ddc80460d606648171a860e4ed079bc1d 100644 --- a/core/src/main/resources/hudson/PluginManager/installed_nl.properties +++ b/core/src/main/resources/hudson/PluginManager/installed_nl.properties @@ -21,16 +21,13 @@ # THE SOFTWARE. No\ plugins\ installed.=Er werd nog geen enkele plugin ge\u00EFnstalleerd. -New\ plugins\ will\ take\ effect\ once\ you\ restart\ Jenkins=Neuw geregistreerde plugins worden pas actie na het herstarten van Jenkins. +New\ plugins\ will\ take\ effect\ once\ you\ restart\ Jenkins=Nieuw geregistreerde plugins worden pas actief na het herstarten van Jenkins. Changes\ will\ take\ effect\ when\ you\ restart\ Jenkins=Uw wijzigingen zullen actief worden na het herstarten van Jenkins. Restart\ Once\ No\ Jobs\ Are\ Running=Opnieuw starten -Uncheck\ to\ disable\ the\ plugin=Vink aan om de plugin te de-activeren. +Uncheck\ to\ disable\ the\ plugin=Vink aan om de plugin te deactiveren. Enabled=Actief Name=Naam -Unpin=Losmaken Version=Versie -Pinned=Vastgezet Previously\ installed\ version=Vorige ge\u00EFnstalleerde versie Restart\ Now=Nu herstarten downgradeTo=Versie {0} terugzetten -wiki.url=http://wiki.jenkins-ci.org/display/JENKINS/Pinned+Plugins diff --git a/core/src/main/resources/hudson/PluginManager/installed_pl.properties b/core/src/main/resources/hudson/PluginManager/installed_pl.properties index df5e36320154937824fc6736d73c062a9ea776cd..4fb0ab51f38e684b709ed63b14ead78d5bce3bec 100644 --- a/core/src/main/resources/hudson/PluginManager/installed_pl.properties +++ b/core/src/main/resources/hudson/PluginManager/installed_pl.properties @@ -1,6 +1,6 @@ # The MIT License # -# Copyright (c) 2004-2010, Sun Microsystems, Inc. +# Copyright (c) 2004-2017, Sun Microsystems, Damian Szczepanik # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -23,13 +23,19 @@ Changes\ will\ take\ effect\ when\ you\ restart\ Jenkins=Zmiany zostan\u0105 wprowadzone po ponownym uruchomieniu Jenkinsa Enabled=W\u0142\u0105czone wtyczki Name=Nazwa -Pinned=Przypi\u0119ta Previously\ installed\ version=Poprzednia zainstalowana wersja Restart\ Once\ No\ Jobs\ Are\ Running=Uruchom ponownie gdy \u017Cadne zadania nie s\u0105 wykonywane Uncheck\ to\ disable\ the\ plugin=Odznacz aby wy\u0142\u0105czy\u0107 wtyczk\u0119 Uninstall=Odinstaluj -Unpin=Odepnij Version=Wersja -downgradeTo=Powr\u00F3\u0107 do starszej wersji {0} +downgradeTo=Powr\u00F3\u0107 do wersji {0} requires.restart=Wymagane jest ponowne uruchomienie Jenkinsa. Zmiany wtyczek w tym momencie s\u0105 bardzo niewskazane. Uruchom ponownie Jenkinsa, zanim wprowadzisz zmiany. -wiki.url=http://wiki.jenkins-ci.org/display/JENKINS/Pinned+Plugins \ No newline at end of file +Uninstallation\ pending=Trwa odinstalowywanie +This\ plugin\ cannot\ be\ disabled=Ta wtyczka nie mo\u017Ce by\u0107 wy\u0142\u0105czona +No\ plugins\ installed.=Brak zainstalowanych wtyczek +This\ plugin\ cannot\ be\ enabled=Ta wtyczka nie mo\u017Ce by\u0107 w\u0142\u0105czona +Update\ Center=Centrum aktualizacji +Filter=Filtruj +No\ description\ available.=Opis nie jest dost\u0119pny +Warning=Ostrze\u017Cenie +New\ plugins\ will\ take\ effect\ once\ you\ restart\ Jenkins=Nowe wtyczki zostan\u0105 w\u0142\u0105czone po ponownym uruchomieniu Jenkinsa. diff --git a/core/src/main/resources/hudson/PluginManager/installed_pt_BR.properties b/core/src/main/resources/hudson/PluginManager/installed_pt_BR.properties index 492b30e39c76f80fbb68d008212cd664ef2d08fa..543c634fa81a45edad7691004e9cae6b15accbd3 100644 --- a/core/src/main/resources/hudson/PluginManager/installed_pt_BR.properties +++ b/core/src/main/resources/hudson/PluginManager/installed_pt_BR.properties @@ -24,15 +24,12 @@ No\ plugins\ installed.=Nenhum plugin instalado. Changes\ will\ take\ effect\ when\ you\ restart\ Jenkins=A mudan\u00e7as ter\u00e3o efeito quando o Jenkins for reiniciado Uncheck\ to\ disable\ the\ plugin=Desmarque para desativar o plugin Enabled=Habilitar -Pinned=Fixado Previously\ installed\ version=Vers\u00E3o anterior instalada Restart\ Once\ No\ Jobs\ Are\ Running=Reiniciar assim que nenhum job estiver rodando Uninstall=Desinstalar -Unpin=Desprender Version=Vers\u00e3o Name=Nome downgradeTo=Regredir para {0} -wiki.url=http://wiki.jenkins-ci.org/display/JENKINS/Pinned+Plugins Filter=Filtro Update\ Center=Central de atualiza\u00e7\u00e3o No\ description\ available.=Nenhuma descri\u00e7\u00e3o dispon\u00edvel diff --git a/core/src/main/resources/hudson/PluginManager/installed_pt_PT.properties b/core/src/main/resources/hudson/PluginManager/installed_pt_PT.properties index 32259b92eca3c3e50a56ec81e1a3107c2827e1ae..e4464f4900255725f2afe88835223683096d8d60 100644 --- a/core/src/main/resources/hudson/PluginManager/installed_pt_PT.properties +++ b/core/src/main/resources/hudson/PluginManager/installed_pt_PT.properties @@ -3,11 +3,9 @@ Changes\ will\ take\ effect\ when\ you\ restart\ Jenkins=As altera\u00E7\u00F5es ser\u00E3o aplicadas quando reiniciares o Jenkins Enabled=Ativado Name=Nome -Pinned=Fixo Previously\ installed\ version=\u00DAltima vers\u00E3o instalada Restart\ Once\ No\ Jobs\ Are\ Running=Reiniciar quando n\u00E3o estiverem Jobs em execu\u00E7\u00E3o Uncheck\ to\ disable\ the\ plugin=Seleccione para desactivar o plugin Uninstall=Desinstalar Version=Vers\u00E3o downgradeTo=Downgrade para {0} -wiki.url=http://wiki.jenkins-ci.org/display/JENKINS/Pinned+Plugins diff --git a/core/src/main/resources/hudson/PluginManager/installed_ro.properties b/core/src/main/resources/hudson/PluginManager/installed_ro.properties index 9d960272ae146aaa3bba204479e7ecd274637254..a0fc137d09387e6dff7b675cb0a52bca9d2de112 100644 --- a/core/src/main/resources/hudson/PluginManager/installed_ro.properties +++ b/core/src/main/resources/hudson/PluginManager/installed_ro.properties @@ -3,11 +3,8 @@ Changes\ will\ take\ effect\ when\ you\ restart\ Jenkins=Schimb\u0103rile vor avea efect c\u00E2nd ve\u021Bi reporni Jenkins Enabled=Activat Name=Denumire -Pinned=Fixat Previously\ installed\ version=Versiunea instalat\u0103 anterior Restart\ Once\ No\ Jobs\ Are\ Running=Reporne\u0219te odat\u0103 ce nu mai sunt joburi ce ruleaz\u0103 Uncheck\ to\ disable\ the\ plugin=Debifa\u021Bi pentru a dezactiva pluginul -Unpin=Defixeaz\u0103 Version=Versiune downgradeTo=Retrogradeaz\u0103 la -wiki.url=http://wiki.jenkins-ci.org/display/JENKINS/Pinned+Plugins diff --git a/core/src/main/resources/hudson/PluginManager/installed_ru.properties b/core/src/main/resources/hudson/PluginManager/installed_ru.properties index 8fd3ed203354f97eeb08bc116a5c431388a1762a..02ece9626713737dc2422ba15194ea032ea8e010 100644 --- a/core/src/main/resources/hudson/PluginManager/installed_ru.properties +++ b/core/src/main/resources/hudson/PluginManager/installed_ru.properties @@ -23,13 +23,10 @@ Changes\ will\ take\ effect\ when\ you\ restart\ Jenkins=\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432\u0441\u0442\u0443\u043f\u044f\u0442 \u0432 \u0441\u0438\u043b\u0443 \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 Jenkins Enabled=\u0410\u043a\u0442\u0438\u0432\u043d\u044b\u0439 Name=\u041d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 -Pinned=\u041f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u0451\u043d\u043d\u044b\u0435 Previously\ installed\ version=\u0420\u0430\u043d\u0435\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 Restart\ Once\ No\ Jobs\ Are\ Running=\u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 \u0432\u0441\u0435\u0445 \u0437\u0430\u0434\u0430\u0447 Uncheck\ to\ disable\ the\ plugin=\u0421\u043d\u0438\u043c\u0438\u0442\u0435 \u0444\u043b\u0430\u0436\u043e\u043a, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u043b\u0430\u0433\u0438\u043d Uninstall=\u0423\u0434\u0430\u043b\u0438\u0442\u044c Uninstallation\ pending=\u041e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f... -Unpin=\u041e\u0442\u043a\u0440\u0435\u043f\u0438\u0442\u044c Version=\u0412\u0435\u0440\u0441\u0438\u044f downgradeTo=\u0412\u0435\u0440\u043d\u0443\u0442\u044c \u043a \u0432\u0435\u0440\u0441\u0438\u0438 {0} -wiki.url=http://wiki.jenkins-ci.org/display/JENKINS/Pinned+Plugins diff --git a/core/src/main/resources/hudson/PluginManager/installed_sk.properties b/core/src/main/resources/hudson/PluginManager/installed_sk.properties index c8e910951476144131acf6f7d57f124a68bf1a0b..a8be79712009f819087e3ea9a128f30c00b12407 100644 --- a/core/src/main/resources/hudson/PluginManager/installed_sk.properties +++ b/core/src/main/resources/hudson/PluginManager/installed_sk.properties @@ -9,4 +9,3 @@ Uncheck\ to\ disable\ the\ plugin=Odzna\u010Den\u00EDm zak\u00E1\u017Eete plugin Uninstall=Odin\u0161taluj Uninstallation\ pending=Odin\u0161tal\u00E1cia \u010Dak\u00E1 Version=Verzia -wiki.url=http://wiki.jenkins-ci.org/display/JENKINS/Pinned+Plugins diff --git a/core/src/main/resources/hudson/PluginManager/installed_sr.properties b/core/src/main/resources/hudson/PluginManager/installed_sr.properties new file mode 100644 index 0000000000000000000000000000000000000000..b555a4dbe95c4f1292178ce39b49dcc2e388a2c7 --- /dev/null +++ b/core/src/main/resources/hudson/PluginManager/installed_sr.properties @@ -0,0 +1,26 @@ +# This file is under the MIT License by authors + +Update\ Center=\u0426\u0435\u043D\u0442\u0430\u0440 \u0437\u0430 \u0410\u0436\u0443\u0440\u0438\u0440\u0430\u045A\u0435 +Filter=\u041F\u0440\u043E\u0444\u0438\u043B\u0442\u0440\u0438\u0440\u0430\u0458 +Warning=\u0423\u043F\u043E\u0437\u043E\u0440\u0435\u045A\u0435 +requires.restart=\u041F\u043E\u0442\u0440\u0435\u0431\u043D\u043E \u0458\u0435 \u043F\u043E\u043D\u043E\u0432\u043E \u043F\u043E\u043A\u0440\u0435\u043D\u0443\u0442\u0438 Jenkins. \u041E\u043F\u0430\u0441\u043D\u043E \u0458\u0435 \u043C\u0435\u045A\u0430\u0442\u0438 \u043C\u043E\u0434\u0443\u043B\u0435 \u0443 \u043E\u0432\u043E \u0432\u0440\u0435\u043C\u0435 - \u043F\u043E\u043D\u043E\u0432\u043E Jenkins \u043F\u0440\u0435 \u043D\u0435\u0433\u043E \u0448\u0442\u043E \u0434\u0435\u043B\u0443\u0458\u0435\u0442\u0435 \u0434\u0430\u0459\u0435. +This\ plugin\ cannot\ be\ enabled=\u041E\u0432\u0430 \u043C\u043E\u0434\u0443\u043B\u0430 \u043D\u0435\u043C\u043E\u0436\u0435 \u0431\u0438\u0442\u0438 \u043E\u043C\u043E\u0433\u0443\u045B\u0435\u043D\u0430 +This\ plugin\ cannot\ be\ disabled=\u041E\u0432\u0430 \u043C\u043E\u0434\u0443\u043B\u0430 \u043D\u0435\u043C\u043E\u0436\u0435 \u0431\u0438\u0442\u0438 \u043E\u043D\u0435\u043C\u043E\u0433\u0443\u045B\u0435\u043D\u0430 +This\ plugin\ cannot\ be\ uninstalled=\u041E\u0432\u0430 \u043C\u043E\u0434\u0443\u043B\u0430 \u043D\u0435\u043C\u043E\u0436\u0435 \u0432\u0438\u0442\u0438 \u0434\u0435\u0438\u043D\u0441\u0442\u0430\u043B\u0438\u0440\u0430\u043D\u0430 +It\ has\ one\ or\ more\ disabled\ dependencies=\u041F\u043E\u0441\u0442\u043E\u0458\u0438 \u043D\u0430\u0458\u043C\u0430\u045A\u0435 \u0458\u0435\u0434\u043D\u0430 \u0438\u0441\u043A\u0459\u0443\u0447\u0435\u043D\u0430 \u043C\u043E\u0434\u0443\u043B\u0430 \u043E\u0434 \u043A\u043E\u0458\u0435 \u043E\u0432\u0430 \u0437\u0430\u0432\u0438\u0441\u0438 +It\ has\ one\ or\ more\ enabled\ dependants=\u041F\u043E\u0441\u0442\u043E\u0458\u0438 \u043D\u0430\u0458\u043C\u0430\u045A\u0435 \u0458\u0435\u043D\u0434\u0430 \u0434\u0440\u0443\u0433\u0430 \u043C\u043E\u0434\u0443\u043B\u0430 \u043A\u043E\u0458\u0430 \u0437\u0430\u0432\u0438\u0441\u0438 \u043E\u0434 \u045A\u0435 +It\ has\ one\ or\ more\ installed\ dependants=\u041F\u043E\u0441\u0442\u043E\u0458\u0438 \u043D\u0430\u0458\u043C\u0430\u045A\u0435 \u0458\u0435\u043D\u0434\u0430 \u0434\u0440\u0443\u0433\u0430 \u043C\u043E\u0434\u0443\u043B\u0430 \u043A\u043E\u0458\u0430 \u0437\u0430\u0432\u0438\u0441\u0438 \u043E\u0434 \u045A\u0435 +No\ plugins\ installed.=\u041D\u0435\u043C\u0430 \u0438\u043D\u0441\u0442\u0430\u043B\u0438\u0440\u0430\u043D\u0438\u0445 \u043C\u043E\u0434\u0443\u043B\u0430 +Uncheck\ to\ disable\ the\ plugin=\u0423\u043A\u043B\u043E\u043D\u0438\u0442\u0435 \u043A\u0432\u0430\u0447\u0438\u0446\u0443 \u0434\u0430 \u043E\u043D\u0435\u043C\u043E\u0433\u0443\u045B\u0438\u0442\u0435 \u043C\u043E\u0434\u0443\u043B\u0443 +Enabled=\u0410\u043A\u0442\u0438\u043D\u0432\u043E +Name=\u0418\u043C\u0435 +Version=\u0412\u0435\u0440\u0437\u0438\u0458\u0430 +Previously\ installed\ version=\u041F\u0440\u0435\u0442\u0445\u043E\u0434\u043D\u043E \u0438\u043D\u0441\u0442\u0430\u043B\u0438\u0440\u0430\u043D\u0430 \u0432\u0435\u0440\u0437\u0438\u0458\u0430 +Uninstall=\u0414\u0435\u0438\u043D\u0441\u0442\u0430\u043B\u0430\u0446\u0438\u0458\u0430 +No\ description\ available.=\u041D\u0435\u043C\u0430 \u043E\u043F\u0438\u0441\u0430 +downgradeTo=\u0412\u0440\u0430\u0442\u0438 \u0432\u0435\u0440\u0437\u0438\u0458\u0443 \u043D\u0430\u0437\u0430\u0434 \u043D\u0430 {0} +Uninstallation\ pending=\u0414\u0435\u0438\u043D\u0441\u0442\u0430\u043B\u0430\u0446\u0438\u0458\u0430 \u0458\u0435 \u0443 \u0442\u043E\u043A\u0443 +Changes\ will\ take\ effect\ when\ you\ restart\ Jenkins=\u041F\u0440\u043E\u043C\u0435\u043D\u0435 \u045B\u0435 \u0441\u0442\u0443\u043F\u0438\u0442\u0438 \u043D\u0430\u043A\u043E\u043D \u043F\u043E\u043D\u043E\u0432\u043D\u043E\u0433 \u043F\u043E\u043A\u0440\u0435\u0442\u0430\u045A\u0430 Jenkins +Restart\ Once\ No\ Jobs\ Are\ Running=\u041F\u043D\u043E\u0432\u043E \u043F\u043E\u043A\u0440\u0435\u043D\u0442\u0438 \u043A\u0430\u0434 \u043D\u0435 \u0431\u0443\u0434\u0435 \u0431\u0438\u043B\u043E \u0442\u0435\u043A\u0443\u045B\u0438\u0445 \u0437\u0430\u0434\u0430\u0442\u0430\u043A\u0430. +New\ plugins\ will\ take\ effect\ once\ you\ restart\ Jenkins=\u041D\u043E\u0432\u0435 \u043C\u043E\u0434\u0443\u043B\u0435 \u045B\u0435 \u0441\u0442\u0443\u043F\u0438\u0442\u0438 \u043D\u0430\u043A\u043E\u043D \u043F\u043E\u043D\u043E\u0432\u043E\u0433 \u043F\u043E\u043A\u0440\u0435\u0442\u0430\u045A\u0430 +Restart\ Now=\u041F\u043E\u043D\u043E\u0432\u043E \u043F\u043E\u043A\u0440\u0435\u043D\u0438 \u0441\u0430\u0434\u0430 diff --git a/core/src/main/resources/hudson/PluginManager/installed_uk.properties b/core/src/main/resources/hudson/PluginManager/installed_uk.properties deleted file mode 100644 index cdfbd4ea6110127b07f899d1dbdf51677200eddf..0000000000000000000000000000000000000000 --- a/core/src/main/resources/hudson/PluginManager/installed_uk.properties +++ /dev/null @@ -1,14 +0,0 @@ -# This file is under the MIT License by authors - -Changes\ will\ take\ effect\ when\ you\ restart\ Jenkins=\uBCC0\uACBD\uC0AC\uD56D\uC740 \uC820\uD0A8\uC2A4\uB97C \uC7AC\uC2DC\uC791\uD560\uB54C \uC801\uC6A9\uB429\uB2C8\uB2E4 -Enabled=\uD65C\uC131\uD654\uB428 -Name=\uC774\uB984 -Pinned=\uD540 \uACE0\uC815 -Previously\ installed\ version=\uC774\uC804\uC5D0 \uC124\uCE58\uD55C \uBC84\uC804 -Restart\ Once\ No\ Jobs\ Are\ Running=\uC544\uBB34\uB7F0 \uC791\uC5C5\uC774 \uC5C6\uC744 \uB54C \uC7AC\uC2DC\uC791\uD558\uAE30 -Uncheck\ to\ disable\ the\ plugin=\uD50C\uB7EC\uADF8\uC778\uC744 \uBE44\uD65C\uC131\uD654\uD558\uB824\uBA74 \uCCB4\uD06C\uB97C \uD574\uC9C0\uD558\uC2ED\uC2DC\uC624 -Uninstall=\u0412\u0438\u0434\u0430\u043B\u0438\u0442\u0438 -Unpin=\uD540 \uD574\uCCB4 -Version=\uBC84\uC804 -downgradeTo={0}\uB85C \uB2E4\uC6B4\uADF8\uB808\uC774\uB4DC -wiki.url=http://wiki.jenkins-ci.org/display/JENKINS/Pinned+Plugins diff --git a/core/src/main/resources/hudson/PluginManager/installed_zh_CN.properties b/core/src/main/resources/hudson/PluginManager/installed_zh_CN.properties index 20edd4eb6a73edac358789c094d1ca71ff907074..3ef1b371c792341317b2a226f596a927283bd428 100644 --- a/core/src/main/resources/hudson/PluginManager/installed_zh_CN.properties +++ b/core/src/main/resources/hudson/PluginManager/installed_zh_CN.properties @@ -23,12 +23,14 @@ Changes\ will\ take\ effect\ when\ you\ restart\ Jenkins=\u6240\u6709\u6539\u53D8\u4F1A\u5728\u91CD\u65B0\u542F\u52A8Jenkins\u4EE5\u540E\u751F\u6548\u3002 Enabled=\u542F\u7528 Name=\u540D\u79F0 -Pinned=\u7ED1\u5B9A Previously\ installed\ version=\u4E0A\u4E00\u4E2A\u5B89\u88C5\u7684\u7248\u672C Restart\ Once\ No\ Jobs\ Are\ Running=\u5F53\u6CA1\u6709\u4EFB\u52A1\u65F6\u91CD\u542F Uncheck\ to\ disable\ the\ plugin=\u53D6\u6D88\u9009\u62E9\u4EE5\u7981\u7528\u63D2\u4EF6 Uninstall=\u5378\u8F7D -Unpin=\u89E3\u9664\u7ED1\u5B9A Version=\u7248\u672C downgradeTo=\u964D\u5230 -wiki.url=http://wiki.jenkins-ci.org/display/JENKINS/Pinned+Plugins +No\ plugins\ installed.=\u6CA1\u6709\u5B89\u88C5\u4EFB\u52A1\u63D2\u4EF6\u3002 +Update\ Center=\u66F4\u65B0\u4E2D\u5FC3 +Warning=\u8B66\u544A +requires.restart=Jenkins\u9700\u8981\u91CD\u542F\u3002\u8FD9\u65F6\u5019\u4E0D\u5EFA\u8BAE\u4FEE\u6539\u63D2\u4EF6\u7684\u72B6\u6001\u3002\u5728\u64CD\u4F5C\u4E4B\u524D\u5148\u91CD\u542FJenkins\u3002 +Filter=\u8FC7\u6EE4 diff --git a/core/src/main/resources/hudson/PluginManager/installed_zh_TW.properties b/core/src/main/resources/hudson/PluginManager/installed_zh_TW.properties index 205f23e21971174a1f3015c5ca9368066df6d4f8..9721180a51cfad58cb54873faaed0fa82bba6b11 100644 --- a/core/src/main/resources/hudson/PluginManager/installed_zh_TW.properties +++ b/core/src/main/resources/hudson/PluginManager/installed_zh_TW.properties @@ -30,11 +30,8 @@ Enabled=\u5DF2\u555F\u7528 Name=\u540d\u7a31 Version=\u7248\u672c Previously\ installed\ version=\u524D\u4E00\u5B89\u88DD\u7248\u672C -Pinned=\u5df2\u639b\u8f09 downgradeTo=\u964d\u7248\u6210 {0} -Unpin=\u5378\u9664 -wiki.url=http://wiki.jenkins-ci.org/display/JENKINS/Pinned+Plugins Uninstallation\ pending=\u89e3\u9664\u5b89\u88dd\u4f5c\u696d\u64f1\u7f6e\u4e2d Uninstall=\u89E3\u9664\u5B89\u88DD diff --git a/core/src/main/resources/hudson/PluginManager/sidepanel_it.properties b/core/src/main/resources/hudson/PluginManager/sidepanel_it.properties index e958a8920a6662354d75c26989c7ce2fdb343bb2..c96e127302423eb5a100c094ca6157131abb07c1 100644 --- a/core/src/main/resources/hudson/PluginManager/sidepanel_it.properties +++ b/core/src/main/resources/hudson/PluginManager/sidepanel_it.properties @@ -20,5 +20,5 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -Back\ to\ Dashboard=Torna alla Dashboard +Back\ to\ Dashboard=Torna al cruscotto Manage\ Jenkins=Configura Jenkins diff --git a/core/src/main/resources/hudson/PluginManager/sidepanel_sr.properties b/core/src/main/resources/hudson/PluginManager/sidepanel_sr.properties new file mode 100644 index 0000000000000000000000000000000000000000..baba7c569c30a788802dce6a9cf9ba11f431ebc2 --- /dev/null +++ b/core/src/main/resources/hudson/PluginManager/sidepanel_sr.properties @@ -0,0 +1,5 @@ +# This file is under the MIT License by authors + +Back\ to\ Dashboard=\u041D\u0430\u0437\u0430\u0434 \u043A\u0430 \u043A\u043E\u043D\u0442\u043E\u0440\u043B\u043D\u043E\u0458 \u043F\u0430\u043D\u0435\u043B\u0438 +Manage\ Jenkins=\u0423\u043F\u0440\u0430\u0432\u0459\u0430\u045A\u0435 Jenkins-\u043E\u043C +Update\ Center=\u0426\u0435\u043D\u0442\u0430\u0440 \u0437\u0430 \u0410\u0436\u0443\u0440\u0438\u0440\u0430\u045A\u0435 \ No newline at end of file diff --git a/core/src/main/resources/hudson/PluginManager/sidepanel_zh_CN.properties b/core/src/main/resources/hudson/PluginManager/sidepanel_zh_CN.properties index c63351b31f8573e980fb54d6d1e4d3f5e3c467f3..3a25d8fbda4b454f5f1a63ef9a0fa92ad56d0758 100644 --- a/core/src/main/resources/hudson/PluginManager/sidepanel_zh_CN.properties +++ b/core/src/main/resources/hudson/PluginManager/sidepanel_zh_CN.properties @@ -19,6 +19,6 @@ # 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. - -Back\ to\ Dashboard=\u8FD4\u56DE -Manage\ Jenkins=\u7cfb\u7edf\u7ba1\u7406 +Back\ to\ Dashboard=\u8FD4\u56DE\u5230\u5DE5\u4F5C\u53F0 +Manage\ Jenkins=\u7CFB\u7EDF\u7BA1\u7406 +Update\ Center=\u66F4\u65B0\u4E2D\u5FC3 diff --git a/core/src/main/resources/hudson/PluginManager/sites_it.properties b/core/src/main/resources/hudson/PluginManager/sites_it.properties new file mode 100644 index 0000000000000000000000000000000000000000..9dc12245d206aa0643f62647168207ac3a1c8601 --- /dev/null +++ b/core/src/main/resources/hudson/PluginManager/sites_it.properties @@ -0,0 +1,25 @@ +# The MIT License +# +# Copyright (c) 2004-, Kohsuke Kawaguchi, Sun Microsystems, Inc., and a number of other of contributors +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# 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. + +Update\ Center=Centro aggiornamenti +Remove=Rimuovi +Add...=Aggiungi... diff --git a/core/src/main/resources/hudson/PluginManager/sites_sr.properties b/core/src/main/resources/hudson/PluginManager/sites_sr.properties new file mode 100644 index 0000000000000000000000000000000000000000..008225b821ad3154447f184aeb3fba9c275af713 --- /dev/null +++ b/core/src/main/resources/hudson/PluginManager/sites_sr.properties @@ -0,0 +1,5 @@ +# This file is under the MIT License by authors + +Update\ Center=\u0426\u0435\u043D\u0442\u0430\u0440 \u0437\u0430 \u0430\u0436\u0443\u0440\u0438\u0440\u0430\u045A\u0435 +Add...=\u0414\u043E\u0434\u0430\u0458... +Remove=\u0423\u043A\u043B\u043E\u043D\u0438 diff --git a/core/src/main/resources/hudson/PluginManager/sites_zh_CN.properties b/core/src/main/resources/hudson/PluginManager/sites_zh_CN.properties new file mode 100644 index 0000000000000000000000000000000000000000..bca86d11735e41a428bc714cdbacb0d1d86d350e --- /dev/null +++ b/core/src/main/resources/hudson/PluginManager/sites_zh_CN.properties @@ -0,0 +1,25 @@ +# The MIT License +# +# Copyright (c) 2017, suren +# +# 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. + +Update\ Center=\u66F4\u65B0\u4E2D\u5FC3 +Add...=\u65B0\u589E... +Remove=\u79FB\u9664 diff --git a/core/src/main/resources/hudson/PluginManager/tabBar_ca.properties b/core/src/main/resources/hudson/PluginManager/tabBar_ca.properties index 018ec6ea8aa597537866ccde6ece6b7c04cf2672..7465dffa99a8abad29aeb6525002444fe77b6f69 100644 --- a/core/src/main/resources/hudson/PluginManager/tabBar_ca.properties +++ b/core/src/main/resources/hudson/PluginManager/tabBar_ca.properties @@ -3,4 +3,4 @@ Advanced=Avan\u00E7at Available=Disponible Installed=Instal\u00B7lats -Updates=Actulitzacions +Updates=Actualitzacions diff --git a/core/src/main/resources/hudson/PluginManager/tabBar_id.properties b/core/src/main/resources/hudson/PluginManager/tabBar_id.properties deleted file mode 100644 index 3bc33faeaf1574ce11d0e553efd2a34426c8aaf1..0000000000000000000000000000000000000000 --- a/core/src/main/resources/hudson/PluginManager/tabBar_id.properties +++ /dev/null @@ -1,4 +0,0 @@ -# This file is under the MIT License by authors - -Available=Tersedia -Installed=Terpasang diff --git a/core/src/main/resources/hudson/PluginManager/tabBar_it.properties b/core/src/main/resources/hudson/PluginManager/tabBar_it.properties index 96dce41f20e5c74795974e65a1e0f7834c40cddf..9cff73b66f0b91e5d7c271654e22f92c90b6b9cd 100644 --- a/core/src/main/resources/hudson/PluginManager/tabBar_it.properties +++ b/core/src/main/resources/hudson/PluginManager/tabBar_it.properties @@ -24,3 +24,4 @@ Advanced=Avanzate Available=Disponibili Installed=Installati Updates=Aggiornamenti +Sites=Siti diff --git a/core/src/main/resources/hudson/PluginManager/tabBar_sr.properties b/core/src/main/resources/hudson/PluginManager/tabBar_sr.properties new file mode 100644 index 0000000000000000000000000000000000000000..c7e4f8cb4bab6a7ffadb29e6a162a1da3633fb29 --- /dev/null +++ b/core/src/main/resources/hudson/PluginManager/tabBar_sr.properties @@ -0,0 +1,7 @@ +# This file is under the MIT License by authors + +Updates=\u041D\u0430\u0434\u0433\u0440\u0430\u0434\u045A\u0435 +Available=\u0414\u043E\u0441\u0442\u0443\u043F\u043D\u043E +Installed=\u0418\u043D\u0441\u0442\u0430\u043B\u0438\u0440\u0430\u043D\u043E +Advanced=\u041D\u0430\u043F\u0440\u0435\u0434\u043D\u043E +Sites=\u0421\u0442\u0440\u0430\u043D\u0438\u0446\u0435 diff --git a/core/src/main/resources/hudson/PluginManager/tabBar_th.properties b/core/src/main/resources/hudson/PluginManager/tabBar_th.properties deleted file mode 100644 index 73f99e3b966497deb42e710586e87df830e6d6f6..0000000000000000000000000000000000000000 --- a/core/src/main/resources/hudson/PluginManager/tabBar_th.properties +++ /dev/null @@ -1,6 +0,0 @@ -# This file is under the MIT License by authors - -Advanced=\u0E02\u0E31\u0E49\u0E19\u0E2A\u0E39\u0E07 -Available=\u0E17\u0E35\u0E48\u0E21\u0E35\u0E2D\u0E22\u0E39\u0E48 -Installed=\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07\u0E41\u0E25\u0E49\u0E27 -Updates=\u0E1B\u0E23\u0E31\u0E1A\u0E1B\u0E23\u0E38\u0E07 diff --git a/core/src/main/resources/hudson/PluginManager/tabBar_zh_CN.properties b/core/src/main/resources/hudson/PluginManager/tabBar_zh_CN.properties index 45b2aef346df11e9c9ba89a5e78a9a1befdba46f..6465bd4b886b7c238edd2fa66ee7ebba56820253 100644 --- a/core/src/main/resources/hudson/PluginManager/tabBar_zh_CN.properties +++ b/core/src/main/resources/hudson/PluginManager/tabBar_zh_CN.properties @@ -24,3 +24,4 @@ Advanced=\u9AD8\u7EA7 Available=\u53EF\u9009\u63D2\u4EF6 Installed=\u5DF2\u5B89\u88C5 Updates=\u53EF\u66F4\u65B0 +Sites=\u7F51\u7AD9 diff --git a/core/src/main/resources/hudson/PluginManager/table.jelly b/core/src/main/resources/hudson/PluginManager/table.jelly index e8c75170b412f01cdc4ac3fa8b082801d1057be6..52fed7654972f959acec2c9943fcd857db702e40 100644 --- a/core/src/main/resources/hudson/PluginManager/table.jelly +++ b/core/src/main/resources/hudson/PluginManager/table.jelly @@ -49,12 +49,13 @@ THE SOFTWARE. -
      -
      - ${%Filter}: - -
      + +
      + ${%Filter}: + +
      +
      @@ -110,6 +111,15 @@ THE SOFTWARE.
      ${%depCoreWarning(p.getNeededDependenciesRequiredCore().toString())}
      + +
      ${%securityWarning} + +
      +
      @@ -139,18 +149,18 @@ THE SOFTWARE.
      - -
      -
      +
      +
      + - + +
      - diff --git a/core/src/main/resources/hudson/PluginManager/table.properties b/core/src/main/resources/hudson/PluginManager/table.properties index cc7af60893f49c7a3c8f67b61ab97099f922bf0b..63c161534cefcfc384899a32d6c4174d3094c1d3 100644 --- a/core/src/main/resources/hudson/PluginManager/table.properties +++ b/core/src/main/resources/hudson/PluginManager/table.properties @@ -25,13 +25,15 @@ compatWarning=\ Consult the plugin release notes for details. coreWarning=\ Warning: This plugin is built for Jenkins {0} or newer. \ - It may or may not work in your Jenkins. + Jenkins will refuse to load this plugin if installed. depCompatWarning=\ Warning: This plugin requires dependent plugins be upgraded and at least one of these dependent plugins claims to use a different settings format than the installed version. \ Jobs using that plugin may need to be reconfigured, and/or you may not be able to cleanly revert to the prior version without manually restoring old settings. \ Consult the plugin release notes for details. depCoreWarning=\ - Warning: This plugin requires dependent plugins that are \ - built for Jenkins {0} or newer. The dependent plugins may \ - or may not work in your Jenkins and consequently this \ - plugin may or may not work in your Jenkins. + Warning: This plugin requires dependent plugins that require Jenkins {0} or newer. \ + Jenkins will refuse to load the dependent plugins requiring a newer version of Jenkins, \ + and in turn loading this plugin will fail. +securityWarning=\ + Warning: This plugin version may not be safe to use. Please review the following security notices: + diff --git a/core/src/main/resources/hudson/PluginManager/table_bg.properties b/core/src/main/resources/hudson/PluginManager/table_bg.properties index 893174efce4dcc7ef700a68b8bbee745d59fe5e2..25e4b2ed410bf82cd7a902cb762ea3ffd536ab3f 100644 --- a/core/src/main/resources/hudson/PluginManager/table_bg.properties +++ b/core/src/main/resources/hudson/PluginManager/table_bg.properties @@ -1,6 +1,6 @@ # The MIT License # -# Bulgarian translation: Copyright (c) 2015, 2016, Alexander Shopov +# Bulgarian translation: Copyright (c) 2015, 2016, 2017, Alexander Shopov # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -61,3 +61,8 @@ depCompatWarning=\ \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435: \u0442\u0430\u0437\u0438 \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0430 \u0438\u0437\u0438\u0441\u043a\u0432\u0430 \u043e\u0431\u043d\u043e\u0432\u044f\u0432\u0430\u043d\u0435 \u043d\u0430 \u0437\u0430\u0432\u0438\u0441\u0435\u0449\u0438\u0442\u0435 \u043e\u0442 \u043d\u0435\u044f\ \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0438. \u0427\u0430\u0441\u0442 \u043e\u0442 \u0442\u044f\u0445 \u043d\u0435 \u0441\u0430 \u0441\u044a\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u0438 \u0441 \u0442\u0435\u043a\u0443\u0449\u0430\u0442\u0430 \u0432\u0435\u0440\u0441\u0438\u044f \u043d\u0430 Jenkins. \u0429\u0435\ \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u043f\u0440\u043e\u043c\u0435\u043d\u0438\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0438\u0442\u0435, \u043a\u043e\u0438\u0442\u043e \u0433\u0438 \u043f\u043e\u043b\u0437\u0432\u0430\u0442. +# \ +# Warning: This plugin version may not be safe to use. Please review the following security notices: +securityWarning=\ + \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435: \u0442\u0430\u0437\u0438 \u0432\u0435\u0440\u0441\u0438\u044f \u043d\u0430 \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0430\u0442\u0430 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0438\u043c\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441\u044a\u0441\ + \u0441\u0438\u0433\u0443\u0440\u043d\u043e\u0441\u0442\u0442\u0430. \u041f\u0440\u0435\u0433\u043b\u0435\u0434\u0430\u0439\u0442\u0435 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f\u0442\u0430. diff --git a/core/src/main/resources/hudson/PluginManager/table_de.properties b/core/src/main/resources/hudson/PluginManager/table_de.properties index e5f0116e1640821a22c51d54d41a9ef3f0ca4ba2..8f46aef19dfa2f267f4a7a2fcc1d461c1a775b55 100644 --- a/core/src/main/resources/hudson/PluginManager/table_de.properties +++ b/core/src/main/resources/hudson/PluginManager/table_de.properties @@ -20,7 +20,7 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -Check\ to\ install\ the\ plugin=Zum Aktualisieren anwhlen +Check\ to\ install\ the\ plugin=Zum Aktualisieren anw\u00E4hlen Install=Installieren Name=Name Version=Version @@ -31,10 +31,9 @@ Filter=Filter Update\ Center=Update-Center Install\ without\ restart=Installieren ohne Neustart Download\ now\ and\ install\ after\ restart=Jetzt herunterladen und bei Neustart installieren -compatWarning=\ - Warnung: Die neue Version ist nicht kompatibel mit der momentan installierten Version. \ - Jobs, welche dieses Plugin verwenden, mssen gegebenenfalls neu konfiguriert werden. -coreWarning=\ - Warnung: Dieses Plugin wurde fr Jenkins {0} oder neuer entwickelt. Es kann mit Ihrer \ - Jenkins-Installation funktionieren... oder auch nicht. -Click\ this\ heading\ to\ sort\ by\ category=Hier klicken, um nach der Kategorie zu sortieren \ No newline at end of file +compatWarning=Achtung: Die neue Version gibt an, mit der installierten Version inkompatibel zu sein. Projekte, welche dieses Plugin verwenden, m\u00FCssen gegebenenfalls neu konfiguriert werden. N\u00E4here Informationen finden Sie in den Versionshinweisen der Plugins. +coreWarning=Achtung: Dieses Plugin wurde f\u00FCr Jenkins {0} oder neuer entwickelt. Jenkins wird daher dieses Plugin nicht laden. +Click\ this\ heading\ to\ sort\ by\ category=Hier klicken, um nach der Kategorie zu sortieren +depCoreWarning=Achtung: Dieses Plugin hat Abh\u00E4ngigkeiten, die Jenkins {0} oder neuer erfordern. Jenkins wird diese Abh\u00E4ngigkeiten nicht laden, und dadurch kann dieses Plugin ebenfalls nicht geladen werden. +depCompatWarning=Achtung: Dieses Plugin erfordert, dass Abh\u00E3ngigkeiten aktualisiert werden und mindestens eine dieser Abh\u00E4ngigkeiten gibt an, mit der installierten Version inkompatibel zu sein. Projekte, welche dieses Plugin verwenden, m\u00FCssen gegebenenfalls neu konfiguriert werden. N\u00E4here Informationen finden Sie in den Versionshinweisen der Plugins. +securityWarning=Warnung: Dieses Plugin ist m\u00F6glicherweise unsicher. Bitte pr\u00FCfen Sie die folgenden Sicherheitshinweise: diff --git a/core/src/main/resources/hudson/PluginManager/table_hi_IN.properties b/core/src/main/resources/hudson/PluginManager/table_hi_IN.properties deleted file mode 100644 index 13587bf10dde1aa07e2507879b18cdf73a585efc..0000000000000000000000000000000000000000 --- a/core/src/main/resources/hudson/PluginManager/table_hi_IN.properties +++ /dev/null @@ -1,3 +0,0 @@ -# This file is under the MIT License by authors - -Name=\u0928\u093E\u092E diff --git a/core/src/main/resources/hudson/PluginManager/table_it.properties b/core/src/main/resources/hudson/PluginManager/table_it.properties index f33abc80bbf7f5f5739e220334c3e0168dc3e9b9..2273eb9dc9e90829318e44849a7165bdad10ba29 100644 --- a/core/src/main/resources/hudson/PluginManager/table_it.properties +++ b/core/src/main/resources/hudson/PluginManager/table_it.properties @@ -20,14 +20,31 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -Check\ to\ install\ the\ plugin=Seleziona per installare l''estensione +Check\ to\ install\ the\ plugin=Seleziona per installare il plugin Click\ this\ heading\ to\ sort\ by\ category=Clicca questa intestazione per ordinare in base alla categoria -Download\ now\ and\ install\ after\ restart=Scarica ora ed installa dopo il riavvio +Download\ now\ and\ install\ after\ restart=Scarica ora e installa dopo il riavvio Filter=Filtro -Inactive=Non attiva +Inactive=Non attivo Install=Installa Install\ without\ restart=Installa senza riavviare Installed=Installato Name=Nome No\ updates=Nessun aggiornamento Version=Versione +Update\ Center=Centro aggiornamenti +depCoreWarning=\ + Attenzione: questo plugin richiede dei plugin dipendenti che richiedono Jenkins {0} o successivo. \ + Jenkins si rifiuter di caricare i plugin dipendenti che richiedono una versione pi recente di Jenkins, \ + e il caricamento di questo plugin non riuscir a sua volta. +compatWarning=\ + Attenzione: la nuova versione di questo plugin dichiara di utilizzare un formato delle impostazioni differente da quello utilizzato dalla versione installata. \ + possibile che si debbano riconfigurare i processi che utilizzano questo plugin, e/o non si potrebbe essere in grado di ripristinare integralmente la versione precedente senza ripristinare le vecchie impostazioni manualmente. \ + Consultare le note di rilascio del plugin per i dettagli. +securityWarning=\ + Attenzione: possibile che questa versione del plugin non sia sicura da utilizzare. Si esaminino i seguenti avvisi di sicurezza: +depCompatWarning=\ + Attenzione: questo plugin richiede che dei plugin dipendenti siano aggiornati e almeno uno di questi plugin dipendente dichiara di utilizzare un formato delle impostazioni differente da quello utilizzato dalla versione installata. \ + possibile che si debbano riconfigurare i processi che utilizzano questo plugin, e/o non si potrebbe essere in grado di ripristinare integralmente la versione precedente senza ripristinare le vecchie impostazioni manualmente. \ + Consultare le note di rilascio del plugin per i dettagli. +coreWarning=Attenzione: questo plugin progettato per Jenkins {0} o una versione successiva. \ + Jenkins non si caricher se questo plugin installato. diff --git a/core/src/main/resources/hudson/PluginManager/table_pl.properties b/core/src/main/resources/hudson/PluginManager/table_pl.properties index b6b6025d9a0aacc8dbb55a0afa374bbc04479156..475890ea442175696f62afb2c774a4913f55cce2 100644 --- a/core/src/main/resources/hudson/PluginManager/table_pl.properties +++ b/core/src/main/resources/hudson/PluginManager/table_pl.properties @@ -1,6 +1,6 @@ # The MIT License # -# Copyright (c) 2004-2010, Sun Microsystems, Inc. +# Copyright (c) 2004-2017, Sun Microsystems, Inc., Damian Szczepanik # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -32,3 +32,4 @@ Name=Nazwa No\ updates=Brak dost\u0119pnych aktualizacji Version=Wersja coreWarning=UWAGA: Ten dodatek jest przygotowany dla Jenkinsa w wersji {0} lub nowszej. Mo\u017Ce nie dzia\u0142a\u0107 poprawnie z Twoj\u0105 wersj\u0105 Jenkinsa. +Update\ Center=Centrum aktualizacji \ No newline at end of file diff --git a/core/src/main/resources/hudson/PluginManager/table_sr.properties b/core/src/main/resources/hudson/PluginManager/table_sr.properties new file mode 100644 index 0000000000000000000000000000000000000000..f1517b4aa23eb508e3e2824c240d96f5aa628c1f --- /dev/null +++ b/core/src/main/resources/hudson/PluginManager/table_sr.properties @@ -0,0 +1,19 @@ +# This file is under the MIT License by authors + +Update\ Center=\u0426\u0435\u043D\u0442\u0430\u0440 \u0437\u0430 \u0410\u0436\u0443\u0440\u0438\u0440\u0430\u045A\u0435 +Filter=\u0424\u0438\u043B\u0442\u0440\u0438\u0440\u0430\u0458 +Check\ to\ install\ the\ plugin=\u0418\u0437\u0430\u0431\u0435\u0440\u0438\u0442\u0435 \u043A\u0432\u0430\u0447\u0438\u0446\u0443 \u0434\u0430 \u0438\u043D\u0441\u0442\u0430\u043B\u0438\u0440\u0430\u0442\u0435 \u043C\u043E\u0434\u0443\u043B\u0443 +Click\ this\ heading\ to\ sort\ by\ category=\u041A\u043B\u0438\u043A\u043D\u0438\u0442\u0435 \u043E\u0432\u0430\u0458 \u043D\u0430\u0441\u043B\u043E\u0432 \u0434\u0430 \u0441\u043E\u0440\u0442\u0438\u0440\u0430\u0442\u0435 \u043F\u043E \u043A\u0430\u0442\u0435\u0433\u043E\u0440\u0438\u0458\u0438 +Install=\u0418\u043D\u0441\u0442\u0430\u043B\u0438\u0440\u0430\u0458 +Name=\u0418\u043C\u0435 +Version=\u0412\u0435\u0440\u0437\u0438\u0458\u0430 +Installed=\u0418\u043D\u0441\u0442\u0430\u043B\u0438\u0440\u0430\u043D\u043E +compatWarning=\ + \u0423\u043F\u043E\u0437\u043E\u0440\u0435\u045A\u0435: \u043D\u043E\u0432\u0430 \u0432\u0435\u0440\u0437\u0438\u0458\u0430 \u043C\u043E\u0434\u0443\u043B\u0435 \u043A\u043E\u0440\u0438\u0441\u0442\u0438 \u0434\u0440\u0443\u0433\u0430 \u043F\u043E\u0434\u0435\u0448\u0430\u0432\u0430\u045A\u0430 \u043D\u0430 \u043E\u0434\u043D\u043E\u0441\u0443 \u043D\u0430 \u0438\u043D\u0441\u0442\u0430\u043B\u0438\u0440\u0430\u043D\u0435 \u0432\u0435\u0440\u0437\u0438\u0458\u0435. \u0417\u0430\u0434\u0430\u0446\u0438 \u043A\u043E\u0458\u0438 \u043A\u043E\u0440\u0438\u0441\u0442\u0435 \u043E\u0432\u0443 \u043C\u043E\u0434\u0443\u043B\u0443 \u045B\u0435 \u043C\u043E\u0436\u0434\u0430 \u043C\u043E\u0440\u0430\u0442\u0438 \u0431\u0438\u0442\u0438 \u0434\u0440\u0443\u0433\u0430\u0447\u0438\u0458\u0435 \u043F\u043E\u0434\u0435\u0448\u0435\u043D\u0438, \u0438 \u043C\u043E\u0436\u0434\u0430 \u043D\u0435\u045B\u0435\u0442\u0435 \u043C\u043E\u045B\u0438 \u0432\u0440\u0430\u0442\u0438\u0442\u0438 \u043D\u0430 \u0441\u0442\u0430\u0440\u0438\u0458\u0443 \u0432\u0435\u0440\u0437\u0438\u0458\u0443 \u0431\u0435\u0437 \u0440\u0443\u0447\u043D\u043E\u0433 \u043F\u043E\u0434\u0435\u0448\u0430\u0432\u0430\u045A\u0430. \u0417\u0430 \u0432\u0438\u0448\u0435 \u0434\u0435\u0442\u0430\u0459\u0430, \u043F\u043E\u0433\u043B\u0435\u0434\u0430\u0458\u0442\u0435 \u0431\u0435\u043B\u0435\u0448\u043A\u0435 \u043E\u0432\u0435 \u043C\u043E\u0434\u0443\u043B\u0435. +coreWarning=\u0423\u043F\u043E\u0437\u043E\u0440\u0435\u045A\u0435: \u041C\u043E\u0434\u0443\u043B\u0430 \u0458\u0435 \u043A\u043E\u043C\u043F\u0430\u0442\u0438\u0431\u0438\u043B\u043D\u0430 \u0441\u0430 Jenkins \u0432\u0435\u0440\u0437\u0438\u0458\u0435 {0} \u0438\u043B\u0438 \u043D\u043E\u0432\u0438\u0458\u0435. \u041C\u043E\u0436\u0434\u0430 \u045B\u0435 \u0440\u0430\u0434\u0438\u0442\u0438 \u0441\u0430 \u0432\u0430\u0448\u043E\u0458 \u0432\u0435\u0440\u0437\u0438\u0458\u0438. +depCompatWarning=\u0423\u043F\u043E\u0437\u043E\u0440\u0435\u045A\u0435: \u043E\u0432\u0430 \u043C\u043E\u0434\u0443\u043B\u0430 \u0437\u0430\u0445\u0442\u0435\u0432\u0430 \u0438\u0441\u043F\u0440\u0430\u0432\u0435 \u043D\u0430\u0434 \u043C\u043E\u0434\u0443\u043B\u0438\u043C\u0430 \u043E\u0434 \u043A\u043E\u0458\u0435 \u043E\u0432\u0430 \u0437\u0430\u0432\u0438\u0441\u043D\u0438. \u041D\u0435\u043A\u0438 \u043E\u0434 \u045A\u0438\u0445 \u043D\u0438\u0441\u0443 \u043A\u043E\u043C\u043F\u0430\u0442\u0438\u0431\u0438\u043B\u043D\u0438 \u0441\u0430 \u0432\u0430\u0448\u043E\u043C \u0432\u0435\u0440\u0437\u0438\u0458\u043E\u043C Jenkins-\u0430. \u041C\u043E\u0440\u0430\u0442\u0435 \u0442\u0430\u043A\u043E\u0452\u0435 \u043F\u043E\u0434\u0435\u0441\u0438\u0442\u0438 \u0437\u0430\u0434\u0430\u0442\u043A\u0435 \u043A\u043E\u0458\u0435 \u0438\u0445 \u043A\u043E\u0440\u0438\u0441\u0442\u0435. +depCoreWarning=\u0423\u043F\u043E\u0437\u043E\u0440\u0435\u045A\u0435: \u043E\u0432\u0430 \u043C\u043E\u0434\u0443\u043B\u0430 \u0437\u0430\u0445\u0442\u0435\u0432\u0430 \u0438\u043D\u0441\u0442\u0430\u043B\u0430\u0446\u0438\u0458\u0443 \u0434\u0440\u0443\u0433\u0438\u0445 \u043C\u043E\u0434\u0443\u043B\u0430 \u043A\u043E\u0458\u0435 \u0441\u0443 \u0441\u0430\u043C\u043E \u0437\u0430 Jenkins \u0432\u0435\u0440\u0437\u0438\u0458\u0443 {0} \u0438\u043B\u0438 \u043D\u043E\u0432\u0438\u0458\u0435. \u041F\u043E\u0441\u0442\u043E\u0458\u0438 \u0448\u0430\u043D\u0441\u0430 \u0434\u0430 \u043E\u043D\u0438 \u043D\u0435\u045B\u0435 \u0440\u0430\u0434\u0438\u0442\u0438 \u0441\u0430 \u0432\u0430\u0448\u043E\u043C \u0432\u0435\u0440\u0437\u0438\u0458\u043E\u043C Jenkins-\u0430, \u0442\u0430\u043A\u043E\u0452\u0435 \u0438 \u043E\u0432\u0430. +Inactive=\u041D\u0435\u0430\u043A\u0442\u0438\u0432\u043D\u0435 +No\ updates=\u041D\u0435\u043C\u0430 \u043D\u0430\u0434\u0433\u0440\u0430\u0434\u045A\u0430 +Install\ without\ restart=\u0418\u043D\u0441\u0442\u0430\u043B\u0438\u0440\u0430\u0458 \u0431\u0435\u0437 \u043F\u043E\u043D\u043E\u0432\u043E\u0433 \u043F\u043E\u043A\u0440\u0435\u0442\u0430\u045A\u0430 +Download\ now\ and\ install\ after\ restart=\u041F\u0440\u0435\u0443\u0437\u043C\u0438 \u0441\u0430\u0434\u0430 \u0438 \u0438\u043D\u0441\u0442\u0430\u043B\u0438\u0440\u0430\u0458\u0442\u0435 \u043D\u0430\u043A\u043E\u043D \u043F\u043E\u043D\u043E\u0432\u043E\u0433 \u043F\u043E\u043A\u0440\u0435\u0442\u0430\u045A\u0430 diff --git a/core/src/main/resources/hudson/PluginManager/table_zh_CN.properties b/core/src/main/resources/hudson/PluginManager/table_zh_CN.properties index 54a4c2ca6fc0d08418daac2b2de4b2704c28c1f2..ce14c758546698dd7469008656887eae628a8504 100644 --- a/core/src/main/resources/hudson/PluginManager/table_zh_CN.properties +++ b/core/src/main/resources/hudson/PluginManager/table_zh_CN.properties @@ -32,3 +32,8 @@ Name=\u540D\u79F0 No\ updates=\u6CA1\u6709\u66F4\u65B0 Version=\u7248\u672C coreWarning=\u8B66\u544A\uFF1A\u8BE5\u63D2\u4EF6\u53EA\u9002\u7528\u4E8EJenkins{0}\u6216\u66F4\u65B0\u7248\u672C\u3002\u5B83\u53EF\u80FD\u4E0D\u80FD\u6B63\u5E38\u8FD0\u884C\u4E8E\u4F60\u7684Jenkins +compatWarning=\ + \u8B66\u544A\uFF1A \u65B0\u7248\u672C\u548C\u5DF2\u7ECF\u5B89\u88C5\u7684\u63D2\u4EF6\u4F7F\u7528\u4E86\u4E0D\u540C\u683C\u5F0F\u7684\u8BBE\u7F6E\u3002 \ + \u4F7F\u7528\u4E86\u8FD9\u4E2A\u63D2\u4EF6\u7684\u4EFB\u52A1\u53EF\u80FD\u9700\u8981\u91CD\u65B0\u8BBE\u7F6E\uFF0C\u800C\u4E14\u53EF\u80FD\u9700\u8981\u624B\u52A8\u8BBE\u7F6E\u624D\u80FD\u56DE\u9000\u5230\u4E0A\u4E2A\u7248\u672C\u7684\u8BBE\u7F6E\u3002 \ + \u60A8\u53EF\u4EE5\u901A\u8FC7\u67E5\u770B\u8BE5\u63D2\u4EF6\u7684\u53D1\u5E03\u4FE1\u606F\u6765\u83B7\u53D6\u8BE6\u7EC6\u4FE1\u606F\u3002 +Update\ Center=\u66F4\u65B0\u4E2D\u5FC3 diff --git a/core/src/main/resources/hudson/PluginManager/table_zh_TW.properties b/core/src/main/resources/hudson/PluginManager/table_zh_TW.properties index 058f101ec150c70bf24b1cd82d39b771625fbe35..dfde632a79abfa80aa915ef15219ca4ac4442bf9 100644 --- a/core/src/main/resources/hudson/PluginManager/table_zh_TW.properties +++ b/core/src/main/resources/hudson/PluginManager/table_zh_TW.properties @@ -21,25 +21,24 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -Update\ Center=\u66f4\u65b0\u4e2d\u5fc3 +Update\ Center=\u66F4\u65B0\u4E2D\u5FC3 -Filter=\u904e\u6ffe\u689d\u4ef6 - -Check\ to\ install\ the\ plugin=\u5c07\u60f3\u8981\u5b89\u88dd\u7684\u5916\u639b\u7a0b\u5f0f\u6838\u53d6\u8d77\u4f86 -Click\ this\ heading\ to\ sort\ by\ category=\u5728\u6a19\u984c\u4e0a\u6309\u4e00\u4e0b\u53ef\u4ee5\u4f9d\u985e\u5225\u9032\u884c\u6392\u5e8f -Install=\u5b89\u88dd -Name=\u540d\u7a31 -Version=\u7248\u672c -Installed=\u5df2\u5b89\u88dd +Filter=\u904E\u6FFE\u689D\u4EF6 +Check\ to\ install\ the\ plugin=\u5C07\u60F3\u8981\u5B89\u88DD\u7684\u5916\u639B\u7A0B\u5F0F\u6838\u53D6\u8D77\u4F86 +Click\ this\ heading\ to\ sort\ by\ category=\u5728\u6A19\u984C\u4E0A\u6309\u4E00\u4E0B\u53EF\u4EE5\u4F9D\u985E\u5225\u9032\u884C\u6392\u5E8F +Install=\u5B89\u88DD +Name=\u540D\u7A31 +Version=\u7248\u672C +Installed=\u5DF2\u5B89\u88DD compatWarning=\ - \u8b66\u544a: \u65b0\u7248\u672c\u4e0d\u76f8\u5bb9\u65bc\u73fe\u5728\u5b89\u88dd\u7684\u7248\u672c\u3002\ - \u4f7f\u7528\u9019\u500b\u5916\u639b\u7a0b\u5f0f\u7684\u4f5c\u696d\u53ef\u80fd\u9700\u8981\u91cd\u65b0\u8a2d\u5b9a\u3002 + \u8B66\u544A: \u65B0\u7248\u672C\u4E0D\u76F8\u5BB9\u65BC\u73FE\u5728\u5B89\u88DD\u7684\u7248\u672C\u3002\ + \u4F7F\u7528\u9019\u500B\u5916\u639B\u7A0B\u5F0F\u7684\u4F5C\u696D\u53EF\u80FD\u9700\u8981\u91CD\u65B0\u8A2D\u5B9A\u3002 coreWarning=\u8B66\u544A: \u9019\u500B\u5916\u639B\u7A0B\u5F0F\u662F\u70BA Jenkins {0} \u4E4B\u5F8C\u7684\u7248\u672C\u8A2D\u8A08\u3002\u5728\u60A8\u76EE\u524D\u7684 Jenkins \u4E0D\u898B\u5F97\u53EF\u4EE5\u6B63\u5E38\u904B\u4F5C\u3002 Inactive=\u505C\u7528 -No\ updates=\u6c92\u6709\u66f4\u65b0 +No\ updates=\u6C92\u6709\u66F4\u65B0 Install\ without\ restart=\u76F4\u63A5\u5B89\u88DD Download\ now\ and\ install\ after\ restart=\u4E0B\u8F09\u4E26\u65BC\u91CD\u65B0\u555F\u52D5\u5F8C\u5B89\u88DD diff --git a/core/src/main/resources/hudson/PluginWrapper/PluginWrapperAdministrativeMonitor/message.jelly b/core/src/main/resources/hudson/PluginWrapper/PluginWrapperAdministrativeMonitor/message.jelly index 54fe0726608696b7178c3f83eaea44c6230ab679..067f0c1c973bfd0fa9712950c7ddd78113d9334f 100644 --- a/core/src/main/resources/hudson/PluginWrapper/PluginWrapperAdministrativeMonitor/message.jelly +++ b/core/src/main/resources/hudson/PluginWrapper/PluginWrapperAdministrativeMonitor/message.jelly @@ -1,22 +1,34 @@ - -
      -
      -
      - -
      -
      - There are dependency errors loading some plugins: -
        - -
      • ${plugin.longName} v${plugin.version} -
          - -
        • ${d}
        • -
          -
        -
      • + +
      -
      + + + + +
      diff --git a/core/src/main/resources/hudson/PluginWrapper/PluginWrapperAdministrativeMonitor/message.properties b/core/src/main/resources/hudson/PluginWrapper/PluginWrapperAdministrativeMonitor/message.properties new file mode 100644 index 0000000000000000000000000000000000000000..9313dac39c7199e67b9bb587246e18fc0d464cf1 --- /dev/null +++ b/core/src/main/resources/hudson/PluginWrapper/PluginWrapperAdministrativeMonitor/message.properties @@ -0,0 +1,23 @@ +# The MIT License +# +# Copyright (c) 2016, Damian Szczepanik +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +blurbOriginal=Some plugins could not be loaded due to unsatisfied dependencies. Fix these issues and restart Jenkins to restore the functionality provided by these plugins. +blurbDerived=These plugins failed to load because of one or more of the errors above. Fix those and these plugins will load again. diff --git a/core/src/main/resources/hudson/PluginWrapper/PluginWrapperAdministrativeMonitor/message_bg.properties b/core/src/main/resources/hudson/PluginWrapper/PluginWrapperAdministrativeMonitor/message_bg.properties new file mode 100644 index 0000000000000000000000000000000000000000..4c826414ea600f0d99a016cd39200c3e7fb642ca --- /dev/null +++ b/core/src/main/resources/hudson/PluginWrapper/PluginWrapperAdministrativeMonitor/message_bg.properties @@ -0,0 +1,27 @@ +# The MIT License +# +# Bulgarian translation: Copyright (c) 2016, 2017, Alexander Shopov +# +# 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. + +Correct=\ + \u041e\u0442\u0433\u043e\u0432\u0430\u0440\u044f +# There are dependency errors loading some plugins +Dependency\ errors=\ + \u0418\u043c\u0430 \u0433\u0440\u0435\u0448\u043a\u0438 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438\u0442\u0435 \u043d\u0430 \u043d\u044f\u043a\u043e\u0438 \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0438 diff --git a/core/src/main/resources/hudson/PluginWrapper/PluginWrapperAdministrativeMonitor/message_de.properties b/core/src/main/resources/hudson/PluginWrapper/PluginWrapperAdministrativeMonitor/message_de.properties new file mode 100644 index 0000000000000000000000000000000000000000..92f7e07ee1a2f44af3ff50d2cd69f53158596dcb --- /dev/null +++ b/core/src/main/resources/hudson/PluginWrapper/PluginWrapperAdministrativeMonitor/message_de.properties @@ -0,0 +1,24 @@ +# The MIT License +# +# Copyright (c) 2017 Daniel Beck and a number of other of contributors +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# 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. + +Correct=Korrigieren +Dependency\ errors=Beim Laden einiger Plugins sind Fehler aufgetreten. diff --git a/core/src/main/resources/hudson/PluginWrapper/PluginWrapperAdministrativeMonitor/message_it.properties b/core/src/main/resources/hudson/PluginWrapper/PluginWrapperAdministrativeMonitor/message_it.properties new file mode 100644 index 0000000000000000000000000000000000000000..96a114d9bdc457075824abb2d158f82293bc95dc --- /dev/null +++ b/core/src/main/resources/hudson/PluginWrapper/PluginWrapperAdministrativeMonitor/message_it.properties @@ -0,0 +1,24 @@ +# The MIT License +# +# Copyright (c) 2004-, Kohsuke Kawaguchi, Sun Microsystems, Inc., and a number of other of contributors +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# 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. + +Dependency\ errors=Si sono verificati degli errori relativi alle dipendenze durante il caricamento di alcuni plugin +Correct=Correggi diff --git a/core/src/main/resources/hudson/PluginWrapper/PluginWrapperAdministrativeMonitor/message_pl.properties b/core/src/main/resources/hudson/PluginWrapper/PluginWrapperAdministrativeMonitor/message_pl.properties new file mode 100644 index 0000000000000000000000000000000000000000..3d164add4dc87e3378b815804556207b8951a9c9 --- /dev/null +++ b/core/src/main/resources/hudson/PluginWrapper/PluginWrapperAdministrativeMonitor/message_pl.properties @@ -0,0 +1,23 @@ +# The MIT License +# +# Copyright (c) 2016, Damian Szczepanik +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +Correct=Napraw +Dependency\ errors=Wyst\u0105pi\u0142y b\u0142\u0119dy podczas \u0142adowania niekt\u00F3rych wtyczek diff --git a/core/src/main/resources/hudson/PluginWrapper/PluginWrapperAdministrativeMonitor/message_sr.properties b/core/src/main/resources/hudson/PluginWrapper/PluginWrapperAdministrativeMonitor/message_sr.properties new file mode 100644 index 0000000000000000000000000000000000000000..bca24ec7867558e5ef384bf7c5a8d354695636ab --- /dev/null +++ b/core/src/main/resources/hudson/PluginWrapper/PluginWrapperAdministrativeMonitor/message_sr.properties @@ -0,0 +1,3 @@ +# This file is under the MIT License by authors + +Correct=\u041F\u0440\u0430\u0432\u0438\u043B\u043D\u043E diff --git a/core/src/main/resources/hudson/PluginWrapper/thirdPartyLicenses_de.properties b/core/src/main/resources/hudson/PluginWrapper/thirdPartyLicenses_de.properties index 187db016889c101b211396b3098f32b672639e72..84f1c402cef454d9d3e4353ae548f0dfd662a573 100644 --- a/core/src/main/resources/hudson/PluginWrapper/thirdPartyLicenses_de.properties +++ b/core/src/main/resources/hudson/PluginWrapper/thirdPartyLicenses_de.properties @@ -1,25 +1,25 @@ -# The MIT License -# -# Copyright (c) 2004-2010, Sun Microsystems, Inc. -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. - -about=\u00DCber {0} -No\ information\ recorded=Keine Informationen verf\u00FCgbar -3rd\ Party\ Dependencies=Dritthersteller-Abh\u00E4ngigkeiten +# The MIT License +# +# Copyright (c) 2004-2010, Sun Microsystems, Inc. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +about=\u00DCber {0} +No\ information\ recorded=Keine Informationen verf\u00FCgbar +3rd\ Party\ Dependencies=Dritthersteller-Abh\u00E4ngigkeiten diff --git a/core/src/main/resources/hudson/PluginWrapper/thirdPartyLicenses_it.properties b/core/src/main/resources/hudson/PluginWrapper/thirdPartyLicenses_it.properties new file mode 100644 index 0000000000000000000000000000000000000000..fd6be0e86d81a1c410ef72baa70613bc25747bdd --- /dev/null +++ b/core/src/main/resources/hudson/PluginWrapper/thirdPartyLicenses_it.properties @@ -0,0 +1,25 @@ +# The MIT License +# +# Copyright (c) 2004-, Kohsuke Kawaguchi, Sun Microsystems, Inc., and a number of other of contributors +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# 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. + +3rd\ Party\ Dependencies=Dipendenze di terze parti +about=Informazioni su {0} +No\ information\ recorded=Nessuna informazione registrata diff --git a/core/src/main/resources/hudson/PluginWrapper/thirdPartyLicenses_pl.properties b/core/src/main/resources/hudson/PluginWrapper/thirdPartyLicenses_pl.properties new file mode 100644 index 0000000000000000000000000000000000000000..940ca0bd1742c9d095dc7a7e5f19adc8eaaa8845 --- /dev/null +++ b/core/src/main/resources/hudson/PluginWrapper/thirdPartyLicenses_pl.properties @@ -0,0 +1,24 @@ +# The MIT License +# +# Copyright (c) 2017, Damian Szczepanik +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +about=O {0} +No\ information\ recorded=Brak danych +3rd\ Party\ Dependencies=Biblioteki zale\u017Cne diff --git a/core/src/main/resources/hudson/PluginWrapper/thirdPartyLicenses_sr.properties b/core/src/main/resources/hudson/PluginWrapper/thirdPartyLicenses_sr.properties new file mode 100644 index 0000000000000000000000000000000000000000..5790695505a246d8cde4defb633382888820a43a --- /dev/null +++ b/core/src/main/resources/hudson/PluginWrapper/thirdPartyLicenses_sr.properties @@ -0,0 +1,5 @@ +# This file is under the MIT License by authors + +about=\u0418\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u0458\u0430 \u043E {0} +3rd\ Party\ Dependencies=\u0417\u0430\u0432\u0438\u0441\u043D\u043E\u0441\u0442\u0438 \u0441\u0430 \u0440\u0430\u0437\u043D\u0438\u0445 \u0441\u0442\u0440\u0430\u043D\u0430 +No\ information\ recorded=\u041D\u0438\u0458\u0435 \u043D\u0438\u0448\u0442\u0430 \u0437\u0430\u043F\u0438\u0441\u0430\u043D\u043E diff --git a/core/src/main/resources/hudson/PluginWrapper/uninstall_it.properties b/core/src/main/resources/hudson/PluginWrapper/uninstall_it.properties new file mode 100644 index 0000000000000000000000000000000000000000..c4350041b6b5d41a657bdd060ea269703da10b79 --- /dev/null +++ b/core/src/main/resources/hudson/PluginWrapper/uninstall_it.properties @@ -0,0 +1,3 @@ +msg=Si sta per disinstallare il plugin {0}. Ciò rimuoverà il binario del plugin dalla propria directory $JENKINS_HOME, \ + ma non altererà i file di configurazione del plugin. +title=Disinstallazione del plugin {0} diff --git a/core/src/main/resources/hudson/PluginWrapper/uninstall_sr.properties b/core/src/main/resources/hudson/PluginWrapper/uninstall_sr.properties new file mode 100644 index 0000000000000000000000000000000000000000..cf1a20a90ef369030e3068895180f424207f6932 --- /dev/null +++ b/core/src/main/resources/hudson/PluginWrapper/uninstall_sr.properties @@ -0,0 +1,5 @@ +# This file is under the MIT License by authors + +title=\u0414\u0435\u0438\u043D\u0441\u0442\u0430\u043B\u0430\u0446\u0438\u0458\u0430 \u043C\u043E\u0434\u0443\u043B\u0435 {0} +Yes=\u0414\u0430 +msg=\u0414\u0435\u0438\u043D\u0441\u0442\u0430\u043B\u0438\u0440\u0430\u0442\u0438 \u045B\u0435 \u0442\u0435 \u043C\u043E\u0434\u0443\u043B\u0443 {0}, \u0448\u0442\u043E \u045B\u0435 \u0458\u0435 \u0438\u0437\u0431\u0440\u0438\u0441\u0430\u0442\u0438 \u0441\u0430 \u043F\u0440\u043E\u043C\u0435\u043D\u0459\u0438\u0432\u0435 $JENKINS_HOME, \u0430\u043B\u0438 \u045B\u0435 \u043F\u0440\u0435\u043E\u0441\u0442\u0430\u0442\u0438 \u043F\u043E\u0434\u0430\u0446\u0438 \u043E \u043F\u043E\u0434\u0435\u0448\u0430\u0432\u0430\u045A\u0443. \ No newline at end of file diff --git a/core/src/main/resources/hudson/PluginWrapper/uninstall_zh_CN.properties b/core/src/main/resources/hudson/PluginWrapper/uninstall_zh_CN.properties new file mode 100644 index 0000000000000000000000000000000000000000..d9f59658a8b93b94cb4f596235683825f0b6005a --- /dev/null +++ b/core/src/main/resources/hudson/PluginWrapper/uninstall_zh_CN.properties @@ -0,0 +1,24 @@ +# The MIT License +# +# Copyright (c) 2017, suren +# +# 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. +title=\u5378\u8F7D {0} \u63D2\u4EF6 +msg=\u4F60\u6B63\u5728\u5378\u8F7D {0} \u63D2\u4EF6\u3002\u8FD9\u5C06\u4F1A\u4ECE$JENKINS_HOME\u4E2D\u5220\u9664\uFF0C\u4F46\u662F\u914D\u7F6E\u6587\u4EF6\u4F1A\u88AB\u4FDD\u7559\u3002 +Yes=\u786E\u5B9A diff --git a/core/src/main/resources/hudson/ProxyConfiguration/config_it.properties b/core/src/main/resources/hudson/ProxyConfiguration/config_it.properties index 91419ea77d2c07167df2a2675e1a111935e2d731..0e8fa5ba491a1aafa877df63f5d33ec55274822c 100644 --- a/core/src/main/resources/hudson/ProxyConfiguration/config_it.properties +++ b/core/src/main/resources/hudson/ProxyConfiguration/config_it.properties @@ -20,10 +20,10 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -Check\ now=Controlla ora -HTTP\ Proxy\ Configuration=Configurazione Proxy HTTP +Server=Server Port=Porta -Submit=Invia User\ name=Nome utente -lastUpdated=Informazioni di aggiornamento ottenute: {0} fa -uploadtext=Puoi fare l''upload di un file .hpi per installare +Password=Password +No\ Proxy\ Host=Eccezioni proxy +Test\ URL=URL di test +Validate\ Proxy=Controlla configurazione proxy diff --git a/core/src/main/resources/hudson/ProxyConfiguration/config_pl.properties b/core/src/main/resources/hudson/ProxyConfiguration/config_pl.properties index a03b5b7cb59974bed45b661ddb75f222aee4681b..fd2644805068d20c71308448f547000c5b1941ee 100644 --- a/core/src/main/resources/hudson/ProxyConfiguration/config_pl.properties +++ b/core/src/main/resources/hudson/ProxyConfiguration/config_pl.properties @@ -1,6 +1,6 @@ # The MIT License # -# Copyright (c) 2004-2010, Sun Microsystems, Inc. +# Copyright (c) 2004-2017, Sun Microsystems, Inc, Damian Szczepanik # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -23,4 +23,6 @@ Password=Has\u0142o Port=Port Server=Serwer -User\ name=Nazwa u\u017cytkownika +User\ name=Nazwa u\u017Cytkownika +No\ Proxy\ Host=Brak hosta proxy +Validate\ Proxy=Sprawd\u017A proxy diff --git a/core/src/main/resources/hudson/ProxyConfiguration/config_sr.properties b/core/src/main/resources/hudson/ProxyConfiguration/config_sr.properties new file mode 100644 index 0000000000000000000000000000000000000000..3e622e98adc7ed57d26735ae87559a3326c010ae --- /dev/null +++ b/core/src/main/resources/hudson/ProxyConfiguration/config_sr.properties @@ -0,0 +1,21 @@ +# This file is under the MIT License by authors + +Password=\u041B\u043E\u0437\u0438\u043D\u043A\u0430 +User\ name=\u041A\u043E\u0440\u0438\u0441\u043D\u0438\u0447\u043A\u043E \u0438\u043C\u0435 +Port=\u041F\u043E\u0440\u0442 +Server=\u0421\u0435\u0440\u0432\u0435\u0440 +No\ Proxy\ Host=\u041D\u0435\u043C\u0430 Proxy \u0425\u043E\u0441\u0442 +Validate\ Proxy=\u041F\u0440\u043E\u0432\u0435\u0440\u0438 Proxy +Proxy\ Needs\ Authorization=\u041F\u043E\u0442\u0440\u0435\u0431\u043D\u043E \u0430\u0443\u0442\u043E\u0440\u0438\u0437\u0430\u0446\u0438\u0458\u0430 \u0437\u0430 Proxy +No\ Proxy\ for=\u041D\u0435 \u043F\u043E\u0441\u0442\u043E\u0458\u0438 Proxy \u0437\u0430 +Check\ now=\u041F\u0440\u043E\u0432\u0435\u0440\u0438 \u0441\u0430\u0434\u0430 +HTTP\ Proxy\ Configuration=\u041F\u043E\u0434\u0435\u0448\u0430\u0432\u0430\u045A\u0430 HTTP Proxy +Submit=\u041F\u043E\u0434\u043D\u0435\u0441\u0438 +lastUpdated=\u0417\u0430\u0434\u045A\u0435 \u0430\u0436\u0443\u0440\u0438\u0440\u0430\u043D\u043E: \u043F\u0440\u0435 {0} +uploadtext=\u041C\u043E\u0436\u0435\u0442\u0435 \u043E\u0442\u043F\u0440\u0435\u043C\u0438\u0442\u0438 .hpi \u0434\u0430\u0442\u043E\u0442\u0435\u043A\u0443 \u0434\u0430 \u0438\u043D\u0441\u0442\u0430\u043B\u0438\u0440\u0430\u0442\u0435 \u043C\u043E\u0434\u0443\u043B\u0443 \u043A\u043E\u0458\u0430 \u0458\u0435 \u0432\u0430\u043D \u0433\u043B\u0430\u0432\u043D\u043E\u0433 \u0434\u0438\u0440\u0435\u043A\u0442\u043E\u0440\u0438\u0458\u0443\u043C\u0430 \u0437\u0430 \u043C\u043E\u0434\u0443\u043B\u0435. +Test\ URL=URL \u0430\u0434\u0440\u0435\u0441\u0430 \u0437\u0430 \u0442\u0435\u0441\u0442\u0438\u0440\u0430\u045A\u0435 +Upload\ Plugin=\u041E\u0442\u043F\u0440\u0435\u043C\u0438 \u043C\u043E\u0434\u0443\u043B\u0443 +File=\u0414\u0430\u0442\u043E\u0442\u0435\u043A\u0430 +Upload=\u041E\u0442\u043F\u0440\u0435\u043C\u0438 +URL=URL \u0430\u0434\u0440\u0435\u0441\u0430 +Update\ Site=\u0410\u0436\u0443\u0440\u0438\u0440\u0430\u0458 \u0441\u0442\u0440\u0430\u043D\u0443 \ No newline at end of file diff --git a/core/src/main/resources/hudson/ProxyConfiguration/config_zh_CN.properties b/core/src/main/resources/hudson/ProxyConfiguration/config_zh_CN.properties index afffdf88b25353e03b2e82ec8c85314b44822480..c4a753039147a4e67082f78bbdd7713bd297a57b 100644 --- a/core/src/main/resources/hudson/ProxyConfiguration/config_zh_CN.properties +++ b/core/src/main/resources/hudson/ProxyConfiguration/config_zh_CN.properties @@ -34,3 +34,6 @@ Upload\ Plugin=\u4E0A\u4F20\u63D2\u4EF6 User\ name=\u7528\u6237\u540D lastUpdated=\u66F4\u65B0\u4FE1\u606F\u83B7\u53D6\u4E8E{0}\u524D uploadtext=\u60A8\u53EF\u4EE5\u901A\u8FC7\u4E0A\u4F20\u4E00\u4E2A.hpi\u6587\u4EF6\u6765\u5B89\u88C5\u63D2\u4EF6\u3002 +No\ Proxy\ Host=\u4E0D\u901A\u8FC7\u4EE3\u7406\u7684\u4E3B\u673A +Validate\ Proxy=\u9A8C\u8BC1\u4EE3\u7406 +Test\ URL=\u6D4B\u8BD5 URL diff --git a/core/src/main/resources/hudson/ProxyConfiguration/help-name_bg.html b/core/src/main/resources/hudson/ProxyConfiguration/help-name_bg.html new file mode 100644 index 0000000000000000000000000000000000000000..8cc660d9cbed6028958b113b9007882edc96dc81 --- /dev/null +++ b/core/src/main/resources/hudson/ProxyConfiguration/help-name_bg.html @@ -0,0 +1,13 @@ +
      + Ако вашият Jenkins е зад защитна стена и няма пряка връзка към Интернет, а JVM на сървъра не е + настроена правилно, за да се позволи връзка с Интернет, може да укажете име на сървър-посредник + за HTTP, за да позволите на Jenkins самостоятелно да инсталира приставки. (за повече детайли: + Networking Properties) + Jenkins използва HTTPS, за да се свърже със сървъра за обновяване и изтегли приставките. + +

      + Ако полето е празно, Jenkins ще се свързва директно с Интернет. + +

      + Ако не сте сигурни, вижте какви са настройките на браузъра ви. +

      diff --git a/core/src/main/resources/hudson/ProxyConfiguration/help-name_it.html b/core/src/main/resources/hudson/ProxyConfiguration/help-name_it.html new file mode 100644 index 0000000000000000000000000000000000000000..463d4837671f519f42c5acd2c388c07b230c5a8d --- /dev/null +++ b/core/src/main/resources/hudson/ProxyConfiguration/help-name_it.html @@ -0,0 +1,13 @@ +
      + Se il proprio server Jenkins è protetto da un firewall e non ha accesso diretto a Internet, + e se la JVM del proprio server non è configurata in modo appropriato per abilitare la connessione a Internet + (si vedano le proprietà di rete JDK per ulteriori dettagli), + è possibile specificare in questo campo il nome del server proxy HTTP per consentire a Jenkins + di installare plugin per proprio conto. Si noti che Jenkins utilizza HTTPS per comunicare con il Centro aggiornamenti per scaricare i plugin. + +

      + Se si lascia questo campo vuoto, Jenkins proverà a connettersi direttamente a Internet. + +

      + Se non si è sicuri del valore da immettere, controllare la configurazione proxy del browser. +

      diff --git a/core/src/main/resources/hudson/ProxyConfiguration/help-noProxyHost.html b/core/src/main/resources/hudson/ProxyConfiguration/help-noProxyHost.html index a0421a779264427d811147690c627608acca2aed..91f8dbd8c11e1c868d506d3552a7580a12be5ede 100644 --- a/core/src/main/resources/hudson/ProxyConfiguration/help-noProxyHost.html +++ b/core/src/main/resources/hudson/ProxyConfiguration/help-noProxyHost.html @@ -1,4 +1,4 @@
      Specify host name patterns that shouldn't go through the proxy, one host per line. - "*" is the wild card host name (such as "*.cloudbees.com" or "www*.jenkins-ci.org") + "*" is the wild card host name (such as "*.jenkins.io" or "www*.jenkins-ci.org")
      \ No newline at end of file diff --git a/core/src/main/resources/hudson/ProxyConfiguration/help-noProxyHost_bg.html b/core/src/main/resources/hudson/ProxyConfiguration/help-noProxyHost_bg.html new file mode 100644 index 0000000000000000000000000000000000000000..03eeaa12cbe3f4640ef91c25a79066774c054112 --- /dev/null +++ b/core/src/main/resources/hudson/ProxyConfiguration/help-noProxyHost_bg.html @@ -0,0 +1,4 @@ +
      + Шаблони за имената на сървърите, към които да се свързва директно, а не през сървъра-посредник. + По един шаблон на ред. „*“ напасва всички имена (напр. „*.cloudbees.com“ или „w*.jenkins.io“) +
      diff --git a/core/src/main/resources/hudson/ProxyConfiguration/help-noProxyHost_de.html b/core/src/main/resources/hudson/ProxyConfiguration/help-noProxyHost_de.html index d47178d1e4a4a9f33358589873362d70e0b1d12c..73059648808f598cb1828ecfbc0e7fb1dde1b0b5 100644 --- a/core/src/main/resources/hudson/ProxyConfiguration/help-noProxyHost_de.html +++ b/core/src/main/resources/hudson/ProxyConfiguration/help-noProxyHost_de.html @@ -2,5 +2,5 @@ Geben Sie Servernamen-Muster an, die nicht über den Proxy abgerufen werden sollen. Geben Sie einen Eintrag pro Zeile ein. Verwenden Sie gegebenenfalls das Jokerzeichen "*", um Gruppen von Servern anzugeben - (wie in "*.cloudbees.com" or "www*.jenkins-ci.org") + (wie in "*.jenkins.io" or "www*.jenkins-ci.org")
      diff --git a/core/src/main/resources/hudson/ProxyConfiguration/help-noProxyHost_it.html b/core/src/main/resources/hudson/ProxyConfiguration/help-noProxyHost_it.html new file mode 100644 index 0000000000000000000000000000000000000000..41b4134959ca1571aad1784b99d7dea2c35dbc1e --- /dev/null +++ b/core/src/main/resources/hudson/ProxyConfiguration/help-noProxyHost_it.html @@ -0,0 +1,4 @@ +
      + Specificare i pattern dei nomi host a cui non si dovrebbe accedere tramite il proxy (un host per riga). + "*" è il carattere jolly per i nomi host (come "*.jenkins.io" o "www*.jenkins-ci.org") +
      diff --git a/core/src/main/resources/hudson/ProxyConfiguration/help-noProxyHost_ja.html b/core/src/main/resources/hudson/ProxyConfiguration/help-noProxyHost_ja.html index 76705e6eef7709f4cc64b7d6129da9feaa706f9f..c349cc67b5784ce0178ea62e89aa9eaa526db065 100644 --- a/core/src/main/resources/hudson/ProxyConfiguration/help-noProxyHost_ja.html +++ b/core/src/main/resources/hudson/ProxyConfiguration/help-noProxyHost_ja.html @@ -1,4 +1,4 @@
      プロキシーを使用しないホスト名のパターンを1行に1つずつ設定します。 - ホスト名には"*"(ワイルドカード)を、"*.cloudbees.com"や"www*.jenkins-ci.org"のように使用することができます。 + ホスト名には"*"(ワイルドカード)を、"*.jenkins.io"や"www*.jenkins-ci.org"のように使用することができます。
      \ No newline at end of file diff --git a/core/src/main/resources/hudson/ProxyConfiguration/help-noProxyHost_zh_CN.html b/core/src/main/resources/hudson/ProxyConfiguration/help-noProxyHost_zh_CN.html new file mode 100644 index 0000000000000000000000000000000000000000..54a7d1837a8f38190024655126a1a99aebb0df39 --- /dev/null +++ b/core/src/main/resources/hudson/ProxyConfiguration/help-noProxyHost_zh_CN.html @@ -0,0 +1,4 @@ +
      + 指定不通过代理的主机名格式,一个主机占一行。 + "*" 星号作为通配符 (例如 "*.jenkins.io" 或者 "www*.jenkins-ci.org") +
      \ No newline at end of file diff --git a/core/src/main/resources/hudson/ProxyConfiguration/help-noProxyHost_zh_TW.html b/core/src/main/resources/hudson/ProxyConfiguration/help-noProxyHost_zh_TW.html index 457b9233572244385d6a88b13d125b3f38c49906..a6df9c10ede16f45736e111fa9ae7a1cffec35dc 100644 --- a/core/src/main/resources/hudson/ProxyConfiguration/help-noProxyHost_zh_TW.html +++ b/core/src/main/resources/hudson/ProxyConfiguration/help-noProxyHost_zh_TW.html @@ -1,4 +1,4 @@
      指定不要透過代理伺服器連線的主機名稱樣式,一行一個。 - 可以使用 "*" 代表任何字串 (例如 "*.cloudbees.com" 或是 "www*.jenkins-ci.org")。 + 可以使用 "*" 代表任何字串 (例如 "*.jenkins.io" 或是 "www*.jenkins-ci.org")。
      \ No newline at end of file diff --git a/core/src/main/resources/hudson/ProxyConfiguration/help-port_bg.html b/core/src/main/resources/hudson/ProxyConfiguration/help-port_bg.html new file mode 100644 index 0000000000000000000000000000000000000000..d24f470bdae430e3163cdf8d9c0befef8751c71a --- /dev/null +++ b/core/src/main/resources/hudson/ProxyConfiguration/help-port_bg.html @@ -0,0 +1,3 @@ +
      + Това поле определя порта за сървъра-посредник по HTTP. +
      diff --git a/core/src/main/resources/hudson/ProxyConfiguration/help-port_it.html b/core/src/main/resources/hudson/ProxyConfiguration/help-port_it.html new file mode 100644 index 0000000000000000000000000000000000000000..90ca09ed13db6562e911de4d60c1bb101722c9fb --- /dev/null +++ b/core/src/main/resources/hudson/ProxyConfiguration/help-port_it.html @@ -0,0 +1,3 @@ +
      + Questo campo viene utilizzato insieme a quello del server proxy per specificare la porta del proxy HTTP. +
      diff --git a/core/src/main/resources/hudson/ProxyConfiguration/help-port_zh_CN.html b/core/src/main/resources/hudson/ProxyConfiguration/help-port_zh_CN.html new file mode 100644 index 0000000000000000000000000000000000000000..906a82452e145064f6c90a8d5ff37ace3d787161 --- /dev/null +++ b/core/src/main/resources/hudson/ProxyConfiguration/help-port_zh_CN.html @@ -0,0 +1,3 @@ +
      + 该字段和代理服务器字段一起使用,用于指定HTTP代理端口。 +
      \ No newline at end of file diff --git a/core/src/main/resources/hudson/ProxyConfiguration/help-userName_bg.html b/core/src/main/resources/hudson/ProxyConfiguration/help-userName_bg.html new file mode 100644 index 0000000000000000000000000000000000000000..d253066618dff8171ef7ad9c2478a5ac302f56bf --- /dev/null +++ b/core/src/main/resources/hudson/ProxyConfiguration/help-userName_bg.html @@ -0,0 +1,9 @@ +
      + Това поле определя името за идентификация пред сървъра-посредник . + +

      + Ако този сървър-посредник ползва схемата да идентификация на + Microsoft: NTLM, + то името за домейна се добавя пред потребителското име с + разделител „\“. Например: „ACME\John Doo“". +

      diff --git a/core/src/main/resources/hudson/ProxyConfiguration/help-userName_it.html b/core/src/main/resources/hudson/ProxyConfiguration/help-userName_it.html new file mode 100644 index 0000000000000000000000000000000000000000..b7e82675b0a1f8f5e53ec4797691c33c273f4fff --- /dev/null +++ b/core/src/main/resources/hudson/ProxyConfiguration/help-userName_it.html @@ -0,0 +1,11 @@ +
      + Questo campo viene utilizzato insieme a quello del server proxy + per specificare il nome utente da utilizzare per l'autenticazione al proxy. + +

      + Se questo proxy richiede lo schema di autenticazione Microsoft + NTLM, è possibile codificare + il nome di dominio nel nome utente premettendo il nome di dominio e facendolo + seguire da una barra invertita '\' prima del nome utente, ad esempio + "ACME\Mario Rossi". +

      diff --git a/core/src/main/resources/hudson/ProxyConfiguration/help-userName_zh_CN.html b/core/src/main/resources/hudson/ProxyConfiguration/help-userName_zh_CN.html new file mode 100644 index 0000000000000000000000000000000000000000..0d85ab4a39cbb131ff3fc57f6d76b34869a09860 --- /dev/null +++ b/core/src/main/resources/hudson/ProxyConfiguration/help-userName_zh_CN.html @@ -0,0 +1,7 @@ +
      + 该字段和代理服务器字段一起使用,用于指定代理的认证的用户名。 + +

      + 如果代理需要通过微软的 NTLM + 认证配置,那么域名和反斜杆'\'应该加到用户名前面,例如:"ACME\John Doo"。 +

      \ No newline at end of file diff --git a/core/src/main/resources/hudson/TcpSlaveAgentListener/index.jelly b/core/src/main/resources/hudson/TcpSlaveAgentListener/index.jelly index 48854e95fb91e191db00c863ddc839defae840a0..85471432ae05d33cc74ba7b338d40c9a293d85a7 100644 --- a/core/src/main/resources/hudson/TcpSlaveAgentListener/index.jelly +++ b/core/src/main/resources/hudson/TcpSlaveAgentListener/index.jelly @@ -26,13 +26,13 @@ THE SOFTWARE. diff --git a/core/src/main/resources/hudson/cli/CLIAction/index.properties b/core/src/main/resources/hudson/cli/CLIAction/index.properties index d2e768307a2f9f6c0bcb6d855d43c372e4a5705a..e4eebf4895f7df8a40581f8f41ff9fdf39f88903 100644 --- a/core/src/main/resources/hudson/cli/CLIAction/index.properties +++ b/core/src/main/resources/hudson/cli/CLIAction/index.properties @@ -1,4 +1,4 @@ Jenkins\ CLI=Jenkins CLI blurb=You can access various features in Jenkins through a command-line tool. See \ - the Wiki for more details of this feature.\ + the documentation for more details of this feature.\ To get started, download jenkins-cli.jar, and run it as follows: diff --git a/core/src/main/resources/hudson/cli/CLIAction/index_bg.properties b/core/src/main/resources/hudson/cli/CLIAction/index_bg.properties new file mode 100644 index 0000000000000000000000000000000000000000..f1abd03aaa140c73a3d8f7fec9bc21ccab5fb5d8 --- /dev/null +++ b/core/src/main/resources/hudson/cli/CLIAction/index_bg.properties @@ -0,0 +1,36 @@ +# The MIT License +# +# Bulgarian translation: Copyright (c) 2016, 2017 Alexander Shopov +# +# 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. + +Available\ Commands=\ + \u041d\u0430\u043b\u0438\u0447\u043d\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0438 +# You can access various features in Jenkins through a command-line tool. See \ +# the Wiki for more details of this feature.\ +# To get started, download jenkins-cli.jar, and run it as follows: +blurb=\ + \u0418\u043c\u0430\u0442\u0435 \u0434\u043e\u0441\u0442\u044a\u043f \u0434\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u043d\u043e\u0441\u0442\u0442\u0430 \u043d\u0430 Jenkins \u0447\u0440\u0435\u0437 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u0430 \u0437\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u0438\u044f \u0440\u0435\u0434.\ + \u0417\u0430 \u043f\u043e\u0432\u0435\u0447\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043f\u0440\u0435\u0433\u043b\u0435\u0434\u0430\u0439\u0442\u0435\ + \u0443\u0438\u043a\u0438\u0442\u043e.\ + \u0421\u0432\u0430\u043b\u0435\u0442\u0435 \u0444\u0430\u0439\u043b\u0430 jenkins-cli.jar \u0438 \u0433\u043e\ + \u0438\u0437\u043f\u044a\u043b\u043d\u0435\u0442\u0435 \u043f\u043e \u0441\u043b\u0435\u0434\u043d\u0438\u044f \u043d\u0430\u0447\u0438\u043d: +# Jenkins CLI +Jenkins\ CLI=\ + Jenkins \u043e\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u0438\u044f \u0440\u0435\u0434 diff --git a/core/src/main/resources/hudson/cli/CLIAction/index_de.properties b/core/src/main/resources/hudson/cli/CLIAction/index_de.properties index d7b0a91ed18998be6e85e5a9283999dcf601ac00..372ffd4e8a75d1a18407307a843373c29776f26f 100644 --- a/core/src/main/resources/hudson/cli/CLIAction/index_de.properties +++ b/core/src/main/resources/hudson/cli/CLIAction/index_de.properties @@ -2,6 +2,6 @@ Available\ Commands=Verf\u00FCgbare Kommandos Jenkins\ CLI=Jenkins CLI blurb=\ Sie knnen ausgewhlte Funktionen von Jenkins ber ein Kommandozeilenwerkzeug (engl.: Command Line Interface, CLI) nutzen. \ - Nheres dazu finden Sie im Wiki. \ + Nheres dazu finden Sie in der Dokumentation. \ Um Jenkins CLI einzusetzen, laden Sie jenkins-cli.jar \ lokal herunter und starten es wie folgt: diff --git a/core/src/main/resources/hudson/cli/CLIAction/index_es.properties b/core/src/main/resources/hudson/cli/CLIAction/index_es.properties index 16d664612b1f6bcc029e5f1c392fddca226ba5dc..3639ef88311f251c3bf2d80882f1c135ca6ee7c3 100644 --- a/core/src/main/resources/hudson/cli/CLIAction/index_es.properties +++ b/core/src/main/resources/hudson/cli/CLIAction/index_es.properties @@ -21,7 +21,7 @@ # THE SOFTWARE. blurb=Puedes acceder a varias funcionalidades de Jenkins utilizando la linea de comandos. \ - Echa un vistazo a esta pgina para mas detalles. \ + Echa un vistazo a esta pgina para mas detalles. \ Para comenzar, descarga a href="{0}/jnlpJars/jenkins-cli.jar">jenkins-cli.jar, y ejecuta lo siguiente: Jenkins\ CLI=Interfaz de comandos (CLI) de Jenkins Available\ Commands=Comandos disponibles diff --git a/core/src/main/resources/hudson/cli/CLIAction/index_fr.properties b/core/src/main/resources/hudson/cli/CLIAction/index_fr.properties index 5bb5e770f340c3b11b3e248fb00b83951837de53..c51c705ec8f1c2b37f650af27c2ee908b3c18c44 100644 --- a/core/src/main/resources/hudson/cli/CLIAction/index_fr.properties +++ b/core/src/main/resources/hudson/cli/CLIAction/index_fr.properties @@ -22,4 +22,4 @@ Available\ Commands=Commandes disponibles Jenkins\ CLI=Ligne de commande (CLI) Jenkins -blurb=Vous pouvez acc\u00E9der \u00E0 diverses fonctionnalit\u00E9s de Jenkins \u00E0 travers une ligne de commande. Voir le wiki pour plus d''information sur cette fonctionnalit\u00E9. Pour d\u00E9buter, t\u00E9l\u00E9chargez jenkins-cli.jar et utilisez le comme suit: +blurb=Vous pouvez acc\u00E9der \u00E0 diverses fonctionnalit\u00E9s de Jenkins \u00E0 travers une ligne de commande. Voir le wiki pour plus d''information sur cette fonctionnalit\u00E9. Pour d\u00E9buter, t\u00E9l\u00E9chargez jenkins-cli.jar et utilisez le comme suit: diff --git a/core/src/main/resources/hudson/cli/CLIAction/index_it.properties b/core/src/main/resources/hudson/cli/CLIAction/index_it.properties index fb7ef102f1af3b3951390e87d6c8e692c6155592..7d22486eeff508f3bd5a509f67bd8823c4791567 100644 --- a/core/src/main/resources/hudson/cli/CLIAction/index_it.properties +++ b/core/src/main/resources/hudson/cli/CLIAction/index_it.properties @@ -1,5 +1,5 @@ +Jenkins\ CLI=Interfaccia a riga di comando di Jenkins +blurb= possibile accedere a varie funzionalit di Jenkins tramite uno strumento a riga di comando. Si veda \ + la documentazione per ulteriori dettagli su questa funzionalit.\ + Per iniziare, scaricare jenkins-cli.jar ed eseguirlo come segue: Available\ Commands=Comandi disponibili -Jenkins\ CLI=Jenkins CLI -blurb=Puoi accede alle funzionalit\u00e0\u00a0 di Jenkins attraverso un tool da linea di comando. Per maggiori dettagli visita \ - la Wiki. \ - Per iniziare, scarica jenkins-cli.jar, e lancia il seguente comando: diff --git a/core/src/main/resources/hudson/cli/CLIAction/index_ja.properties b/core/src/main/resources/hudson/cli/CLIAction/index_ja.properties index a6522667f8976f705ef254be74139c9b1e0bd042..67bc6c6caa432fd000af3388f89a651538823976 100644 --- a/core/src/main/resources/hudson/cli/CLIAction/index_ja.properties +++ b/core/src/main/resources/hudson/cli/CLIAction/index_ja.properties @@ -21,7 +21,7 @@ # THE SOFTWARE. blurb=\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u306e\u30c4\u30fc\u30eb\u304b\u3089Jenkins\u306e\u69d8\u3005\u306a\u6a5f\u80fd\u3092\u5229\u7528\u3067\u304d\u307e\u3059\u3002\ - \u8a73\u7d30\u306fWiki\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002\ + \u8a73\u7d30\u306fWiki\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002\ \u307e\u305a\u306f\u3001jenkins-cli.jar\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u6b21\u306e\u3088\u3046\u306b\u8d77\u52d5\u3057\u3066\u304f\u3060\u3055\u3044\u3002 Jenkins\ CLI=Jenkins CLI Available\ Commands=\u5229\u7528\u53ef\u80fd\u306a\u30b3\u30de\u30f3\u30c9 diff --git a/core/src/main/resources/hudson/cli/CLIAction/index_nl.properties b/core/src/main/resources/hudson/cli/CLIAction/index_nl.properties index ee556037d30731fc4b55aee6c8c277ca42c8ca7c..da112a81401f8f3cd21ad805bb39317c029f7648 100644 --- a/core/src/main/resources/hudson/cli/CLIAction/index_nl.properties +++ b/core/src/main/resources/hudson/cli/CLIAction/index_nl.properties @@ -21,4 +21,4 @@ # THE SOFTWARE. Available\ Commands=Beschikbare commando''s -blurb=Je kan gebruik maken van verschillende mogelijkheden in Jenkins via een opdracht op de commandoregel. Zie de Wiki voor verder details hierover. Om te beginnen, download jenkins-cli.jar, en voer het uit als volgt: +blurb=Je kan gebruik maken van verschillende mogelijkheden in Jenkins via een opdracht op de commandoregel. Zie de Wiki voor verder details hierover. Om te beginnen, download jenkins-cli.jar, en voer het uit als volgt: diff --git a/core/src/main/resources/hudson/cli/CLIAction/index_pt_BR.properties b/core/src/main/resources/hudson/cli/CLIAction/index_pt_BR.properties index 2cabf24de096206d9081cf056721b7c586aa6e6c..9eb5bd486e6baba0d3a3255edc88ae178ed22f19 100644 --- a/core/src/main/resources/hudson/cli/CLIAction/index_pt_BR.properties +++ b/core/src/main/resources/hudson/cli/CLIAction/index_pt_BR.properties @@ -23,8 +23,8 @@ Available\ Commands=Comandos dispon\u00EDveis Jenkins\ CLI= # You can access various features in Jenkins through a command-line tool. See \ -# the Wiki for more details of this feature.\ +# the Wiki for more details of this feature.\ # To get started, download jenkins-cli.jar, and run it as follows: -blurb=\ Voc\u00ea pode acessar v\u00e1rias funcionalidades do Jenkins pelo prompt de comando. Veja \ +blurb=\ Voc\u00ea pode acessar v\u00e1rias funcionalidades do Jenkins pelo prompt de comando. Veja \ a Wiki diff --git a/core/src/main/resources/hudson/cli/CLIAction/index_ru.properties b/core/src/main/resources/hudson/cli/CLIAction/index_ru.properties index 2e962ae4686128ddf10b194e06590b50bffd0ec1..6af77f38a59af7b3137699bf22118e076535139f 100644 --- a/core/src/main/resources/hudson/cli/CLIAction/index_ru.properties +++ b/core/src/main/resources/hudson/cli/CLIAction/index_ru.properties @@ -22,4 +22,4 @@ Available\ Commands=\u0414\u043E\u0441\u0442\u0443\u043F\u043D\u044B\u0435 \u043A\u043E\u043C\u0430\u043D\u0434\u044B Jenkins\ CLI=\u041A\u043E\u043D\u0441\u043E\u043B\u044C\u043D\u044B\u0435 \u043A\u043E\u043C\u0430\u043D\u0434\u044B Jenkins -blurb=\u0421 \u043F\u043E\u043C\u043E\u0449\u044C\u044E \u043A\u043E\u043D\u0441\u043E\u043B\u044C\u043D\u044B\u0445 \u043A\u043E\u043C\u0430\u043D\u0434 Jenkins \u0432\u044B \u043C\u043E\u0436\u0435\u0442\u0435 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C \u0434\u043E\u0441\u0442\u0443\u043F \u043A \u0431\u043E\u043B\u044C\u0448\u043E\u043C\u0443 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u0444\u0443\u043D\u043A\u0446\u0438\u0439. \u0411\u043E\u043B\u0435\u0435 \u0434\u0435\u0442\u0430\u043B\u044C\u043D\u0430\u044F \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044F \u043D\u0430\u0445\u043E\u0434\u0438\u0442\u0441\u044F \u0432 \u0431\u0430\u0437\u0435 \u0437\u043D\u0430\u043D\u0438\u0439 Jenkins. \u0414\u043B\u044F \u0442\u043E\u0433\u043E, \u0447\u0442\u043E\u0431\u044B \u043D\u0430\u0447\u0430\u0442\u044C \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C\u0441\u044F \u043A\u043E\u043D\u0441\u043E\u043B\u044C\u043D\u044B\u043C\u0438 \u043A\u043E\u043C\u0430\u043D\u0434\u0430\u043C\u0438, \u043D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u043E \u0441\u043A\u0430\u0447\u0430\u0442\u044C jenkins-cli.jar, \u0438 \u0437\u0430\u043F\u0443\u0441\u0442\u0438\u0442\u044C \u043F\u0430\u043A\u0435\u0442 \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0438\u043C \u043E\u0431\u0440\u0430\u0437\u043E\u043C: +blurb=\u0421 \u043F\u043E\u043C\u043E\u0449\u044C\u044E \u043A\u043E\u043D\u0441\u043E\u043B\u044C\u043D\u044B\u0445 \u043A\u043E\u043C\u0430\u043D\u0434 Jenkins \u0432\u044B \u043C\u043E\u0436\u0435\u0442\u0435 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C \u0434\u043E\u0441\u0442\u0443\u043F \u043A \u0431\u043E\u043B\u044C\u0448\u043E\u043C\u0443 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u0444\u0443\u043D\u043A\u0446\u0438\u0439. \u0411\u043E\u043B\u0435\u0435 \u0434\u0435\u0442\u0430\u043B\u044C\u043D\u0430\u044F \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044F \u043D\u0430\u0445\u043E\u0434\u0438\u0442\u0441\u044F \u0432 \u0431\u0430\u0437\u0435 \u0437\u043D\u0430\u043D\u0438\u0439 Jenkins. \u0414\u043B\u044F \u0442\u043E\u0433\u043E, \u0447\u0442\u043E\u0431\u044B \u043D\u0430\u0447\u0430\u0442\u044C \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C\u0441\u044F \u043A\u043E\u043D\u0441\u043E\u043B\u044C\u043D\u044B\u043C\u0438 \u043A\u043E\u043C\u0430\u043D\u0434\u0430\u043C\u0438, \u043D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u043E \u0441\u043A\u0430\u0447\u0430\u0442\u044C jenkins-cli.jar, \u0438 \u0437\u0430\u043F\u0443\u0441\u0442\u0438\u0442\u044C \u043F\u0430\u043A\u0435\u0442 \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0438\u043C \u043E\u0431\u0440\u0430\u0437\u043E\u043C: diff --git a/core/src/main/resources/hudson/cli/CLIAction/index_sr.properties b/core/src/main/resources/hudson/cli/CLIAction/index_sr.properties new file mode 100644 index 0000000000000000000000000000000000000000..8f1eec2169e7b24d2662aee366f8f294a83eb927 --- /dev/null +++ b/core/src/main/resources/hudson/cli/CLIAction/index_sr.properties @@ -0,0 +1,5 @@ +# This file is under the MIT License by authors + +Jenkins\ CLI=Jenkins \u0441\u0430 \u043A\u043E\u043C\u0430\u043D\u0434\u043D\u0435 \u043B\u0438\u043D\u0438\u0458\u0435 +blurb=\u041F\u043E\u043C\u043E\u045B\u0443 \u043A\u043E\u043D\u0437\u043E\u043B\u0435 \u043A\u043E\u043C\u0430\u043D\u0434\u0435 Jenkins \u043C\u043E\u0436\u0435\u0442\u0435 \u0434\u043E\u0431\u0438\u0442\u0438 \u043F\u0440\u0438\u0441\u0442\u0443\u043F \u0432\u0435\u043B\u0438\u043A\u043E\u043C \u0431\u0440\u043E\u0458\u0443 \u0444\u0443\u043D\u043A\u0446\u0438\u0458\u0430. \u0414\u0435\u0442\u0430\u0459\u043D\u0435 \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u0458\u0435 \u0441\u0435 \u043D\u0430\u043B\u0430\u0437\u0435 \u043D\u0430 \u0443 Jenkins \u0432\u0438\u043A\u0438. \u0423 \u0446\u0438\u0459\u0443 \u0434\u0430 \u043F\u043E\u0447\u043D\u0435\u0442\u0435 \u0434\u0430 \u043A\u043E\u0440\u0438\u0441\u0442\u0438\u0442\u0435 \u043A\u043E\u043C\u0430\u043D\u0434\u0443, \u043F\u043E\u0442\u0440\u0435\u0431\u043D\u043E \u0458\u0435 \u0434\u0430 \u043F\u0440\u0435\u0443\u0437\u043C\u0435\u0442\u0435 jenkins-cli.jar, \u0438 \u043F\u043E\u043A\u0440\u0435\u043D\u0435\u0442\u0435 \u043F\u0430\u043A\u0435\u0442 \u043D\u0430 \u0441\u043B\u0435\u0434\u0435\u045B\u0438 \u043D\u0430\u0447\u0438\u043D: +Available\ Commands=\u0414\u043E\u0441\u0442\u0443\u043F\u043D\u0435 \u043A\u043E\u043C\u0430\u043D\u0434\u0435 diff --git a/core/src/main/resources/hudson/cli/CLIAction/index_zh_CN.properties b/core/src/main/resources/hudson/cli/CLIAction/index_zh_CN.properties index f8cf7eede7f9deedda158318c3ad24db352f74e2..bd6ca6d779ec5cf93bfab86cf1639fa22112c033 100644 --- a/core/src/main/resources/hudson/cli/CLIAction/index_zh_CN.properties +++ b/core/src/main/resources/hudson/cli/CLIAction/index_zh_CN.properties @@ -22,4 +22,4 @@ Available\ Commands=\u53EF\u7528\u7684\u547D\u4EE4 Jenkins\ CLI=Jenkins \u547d\u4ee4\u884c -blurb=\u4F60\u53EF\u4EE5\u901A\u8FC7\u547D\u4EE4\u884C\u5DE5\u5177\u64CD\u4F5CJenkins\u7684\u8BB8\u591A\u7279\u6027\u3002\u4F60\u53EF\u4EE5\u901A\u8FC7 Wiki\u83B7\u5F97\u66F4\u591A\u4FE1\u606F\u3002\u4F5C\u4E3A\u5F00\u59CB\uFF0C\u4F60\u53EF\u4EE5\u4E0B\u8F7Djenkins-cli.jar\uFF0C\u7136\u540E\u8FD0\u884C\u4E0B\u5217\u547D\u4EE4\uFF1A +blurb=\u4F60\u53EF\u4EE5\u901A\u8FC7\u547D\u4EE4\u884C\u5DE5\u5177\u64CD\u4F5CJenkins\u7684\u8BB8\u591A\u7279\u6027\u3002\u4F60\u53EF\u4EE5\u901A\u8FC7 Wiki\u83B7\u5F97\u66F4\u591A\u4FE1\u606F\u3002\u4F5C\u4E3A\u5F00\u59CB\uFF0C\u4F60\u53EF\u4EE5\u4E0B\u8F7Djenkins-cli.jar\uFF0C\u7136\u540E\u8FD0\u884C\u4E0B\u5217\u547D\u4EE4\uFF1A diff --git a/core/src/main/resources/hudson/cli/CLIAction/index_zh_TW.properties b/core/src/main/resources/hudson/cli/CLIAction/index_zh_TW.properties index aaa1f13048e6b46773f370df96af275a93410297..8b9bb390ecec0bb3bd3604f6fc5035b0c4a4e656 100644 --- a/core/src/main/resources/hudson/cli/CLIAction/index_zh_TW.properties +++ b/core/src/main/resources/hudson/cli/CLIAction/index_zh_TW.properties @@ -24,6 +24,6 @@ Jenkins\ CLI=Jenkins \u547d\u4ee4\u5217\u4ecb\u9762 blurb=\ \u60a8\u53ef\u4ee5\u900f\u904e\u547d\u4ee4\u5217\u5de5\u5177\u4f7f\u7528 Jenkins \u7684\u8af8\u591a\u529f\u80fd\u3002\ - \u5728 Wiki \u4e0a\u6709\u8a73\u7d30\u7684\u529f\u80fd\u8aaa\u660e\u3002\ + \u5728 Wiki \u4e0a\u6709\u8a73\u7d30\u7684\u529f\u80fd\u8aaa\u660e\u3002\ \u5fc3\u52d5\u4e0d\u5982\u99ac\u4e0a\u884c\u52d5\uff0c\u4e0b\u8f09 jenkins-cli.jar \u4e26\u57f7\u884c\u4ee5\u4e0b\u6307\u4ee4: Available\ Commands=\u53ef\u7528\u6307\u4ee4 diff --git a/core/src/main/resources/hudson/cli/CliProtocol/deprecationCause.jelly b/core/src/main/resources/hudson/cli/CliProtocol/deprecationCause.jelly new file mode 100644 index 0000000000000000000000000000000000000000..9704ac6557baef7e5621b790be9b34112a827ed7 --- /dev/null +++ b/core/src/main/resources/hudson/cli/CliProtocol/deprecationCause.jelly @@ -0,0 +1,4 @@ + + + ${%message} + diff --git a/core/src/main/resources/hudson/cli/CliProtocol/deprecationCause.properties b/core/src/main/resources/hudson/cli/CliProtocol/deprecationCause.properties new file mode 100644 index 0000000000000000000000000000000000000000..c46f5db25da9e86b3288605e2f98f443a5ac9155 --- /dev/null +++ b/core/src/main/resources/hudson/cli/CliProtocol/deprecationCause.properties @@ -0,0 +1,2 @@ +message=This protocol is an obsolete protocol, which has been replaced by CLI2-connect. \ + It is also not encrypted. diff --git a/core/src/main/resources/hudson/cli/CliProtocol/deprecationCause_bg.properties b/core/src/main/resources/hudson/cli/CliProtocol/deprecationCause_bg.properties new file mode 100644 index 0000000000000000000000000000000000000000..f6b2646c8a9a92f636c36abc7c0926834bd10ad8 --- /dev/null +++ b/core/src/main/resources/hudson/cli/CliProtocol/deprecationCause_bg.properties @@ -0,0 +1,26 @@ +# The MIT License +# +# Bulgarian translation: Copyright (c) 2017, Alexander Shopov +# +# 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. + +# This protocol is an obsolete protocol, which has been replaced by CLI2-connect. \ +# It is also not encrypted. +message=\ + \u0422\u043e\u0437\u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u0435 \u043e\u0441\u0442\u0430\u0440\u044f\u043b \u0438 \u0435 \u0431\u0435\u0437 \u0448\u0438\u0444\u0440\u0438\u0440\u0430\u043d\u0435. \u0417\u0430\u043c\u0435\u043d\u0435\u043d \u0435 \u043e\u0442 CLI2-connect. diff --git a/core/src/main/resources/hudson/cli/CliProtocol/deprecationCause_it.properties b/core/src/main/resources/hudson/cli/CliProtocol/deprecationCause_it.properties new file mode 100644 index 0000000000000000000000000000000000000000..54598b754e95246899d0099bdb438d344fd7558d --- /dev/null +++ b/core/src/main/resources/hudson/cli/CliProtocol/deprecationCause_it.properties @@ -0,0 +1,2 @@ +message=Questo protocollo un protocollo obsoleto sostituito da CLI2-connect. \ + anche non criptato. diff --git a/core/src/main/resources/hudson/cli/CliProtocol/description.jelly b/core/src/main/resources/hudson/cli/CliProtocol/description.jelly index e24d56912900efe6607d1b434a1ec7cf61bdeee0..55e2c974b5ba1050be718c322da2b72ff5d8cd2a 100644 --- a/core/src/main/resources/hudson/cli/CliProtocol/description.jelly +++ b/core/src/main/resources/hudson/cli/CliProtocol/description.jelly @@ -1,4 +1,4 @@ - ${%Accepts connections from CLI clients} + ${%summary} diff --git a/core/src/main/resources/hudson/cli/CliProtocol/description.properties b/core/src/main/resources/hudson/cli/CliProtocol/description.properties new file mode 100644 index 0000000000000000000000000000000000000000..76b368aed3841dd8a32e7e24d1f37ca8ed08a25d --- /dev/null +++ b/core/src/main/resources/hudson/cli/CliProtocol/description.properties @@ -0,0 +1 @@ +summary=Accepts connections from CLI clients. This protocol is unencrypted. \ No newline at end of file diff --git a/core/src/main/resources/hudson/cli/CliProtocol/description_bg.properties b/core/src/main/resources/hudson/cli/CliProtocol/description_bg.properties new file mode 100644 index 0000000000000000000000000000000000000000..95e9c0e6e1be8b7c835ae2e4afa780091d525f77 --- /dev/null +++ b/core/src/main/resources/hudson/cli/CliProtocol/description_bg.properties @@ -0,0 +1,28 @@ +# The MIT License +# +# Bulgarian translation: Copyright (c) 2016, 2017, Alexander Shopov +# +# 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. + +Accepts\ connections\ from\ CLI\ clients=\ + \u041f\u0440\u0438\u0435\u043c\u0430\u043d\u0435 \u043d\u0430 \u0432\u0440\u044a\u0437\u043a\u0438 \u043e\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0438\u0442\u0435 \u043e\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u0438\u044f \u0440\u0435\u0434. +# Accepts connections from CLI clients. This protocol is unencrypted. +summary=\ + \u041f\u0440\u0438\u0435\u043c\u0430\u043d\u0435 \u043d\u0430 \u0432\u0440\u044a\u0437\u043a\u0438 \u043e\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0438\u0442\u0435 \u043e\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u0438\u044f \u0440\u0435\u0434. \u0422\u043e\u0437\u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u043d\u0435 \u0435 \u0437\u0430\u0449\u0438\u0442\u0435\u043d\ + \u0441 \u0448\u0438\u0444\u0440\u0438\u0440\u0430\u043d\u0435. diff --git a/core/src/main/resources/hudson/cli/CliProtocol/description_de.properties b/core/src/main/resources/hudson/cli/CliProtocol/description_de.properties new file mode 100644 index 0000000000000000000000000000000000000000..471dc62eea518996bbefbd0ec1c7360304e16b3d --- /dev/null +++ b/core/src/main/resources/hudson/cli/CliProtocol/description_de.properties @@ -0,0 +1,23 @@ +# The MIT License +# +# Copyright (c) 2017 Daniel Beck and a number of other of contributors +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# 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. + +summary=Bedient Verbindungen von Jenkins-CLI-Clients. Dieses Protokoll ist unverschl\u00FCsselt. diff --git a/core/src/main/resources/hudson/cli/CliProtocol/description_it.properties b/core/src/main/resources/hudson/cli/CliProtocol/description_it.properties new file mode 100644 index 0000000000000000000000000000000000000000..5c876ca53a61ca699de2b777225af5cecc8b223b --- /dev/null +++ b/core/src/main/resources/hudson/cli/CliProtocol/description_it.properties @@ -0,0 +1 @@ +summary=Accetta connessioni da client con interfaccia da riga di comando. Questo protocollo non criptato. diff --git a/core/src/main/resources/hudson/cli/CliProtocol2/deprecationCause.jelly b/core/src/main/resources/hudson/cli/CliProtocol2/deprecationCause.jelly new file mode 100644 index 0000000000000000000000000000000000000000..9704ac6557baef7e5621b790be9b34112a827ed7 --- /dev/null +++ b/core/src/main/resources/hudson/cli/CliProtocol2/deprecationCause.jelly @@ -0,0 +1,4 @@ + + + ${%message} + diff --git a/core/src/main/resources/hudson/cli/CliProtocol2/deprecationCause.properties b/core/src/main/resources/hudson/cli/CliProtocol2/deprecationCause.properties new file mode 100644 index 0000000000000000000000000000000000000000..8effec140412e3b6e8df2f0c0f3a10abde3e6612 --- /dev/null +++ b/core/src/main/resources/hudson/cli/CliProtocol2/deprecationCause.properties @@ -0,0 +1,3 @@ +message=Remoting-based CLI is deprecated and not recommended due to the security reasons. \ + It is recommended to disable this protocol on the instance. \ + if you need Remoting CLI on your instance, this protocol has to be enabled. diff --git a/core/src/main/resources/hudson/cli/CliProtocol2/deprecationCause_bg.properties b/core/src/main/resources/hudson/cli/CliProtocol2/deprecationCause_bg.properties new file mode 100644 index 0000000000000000000000000000000000000000..976f357b3d97283271607164f67e8c429852c92f --- /dev/null +++ b/core/src/main/resources/hudson/cli/CliProtocol2/deprecationCause_bg.properties @@ -0,0 +1,29 @@ +# The MIT License +# +# Bulgarian translation: Copyright (c) 2017, Alexander Shopov +# +# 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. + +# Remoting-based CLI is deprecated and not recommended due to the security reasons. \ +# It is recommended to disable this protocol on the instance. \ +# if you need Remoting CLI on your instance, this protocol has to be enabled. +message=\ + \u041e\u0442\u0434\u0430\u043b\u0435\u0447\u0435\u043d\u0438\u0442\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0438 \u043e\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u0435\u043d \u0440\u0435\u0434 \u0441\u0430 \u043e\u0441\u0442\u0430\u0440\u0435\u043b\u0438 \u0438 \u043d\u0435 \u0441\u0435 \u043f\u0440\u0435\u043f\u043e\u0440\u044a\u0447\u0432\u0430\u0442 \u0437\u0430\u0440\u0430\u0434\u0438\ + \u043d\u0438\u0441\u043a\u0430\u0442\u0430 \u0438\u043c \u0441\u0438\u0433\u0443\u0440\u043d\u043e\u0441\u0442. \u041e\u0441\u0432\u0435\u043d \u0430\u043a\u043e \u043d\u0430\u0438\u0441\u0442\u0438\u043d\u0430 \u0441\u0435 \u043d\u0443\u0436\u0434\u0430\u0435\u0442\u0435 \u043e\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u0442\u043e\u0437\u0438\ + \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b, \u0432\u0438 \u043f\u0440\u0435\u043f\u043e\u0440\u044a\u0447\u0432\u0430\u043c\u0435 \u0434\u0430 \u0433\u043e \u0438\u0437\u043a\u043b\u044e\u0447\u0438\u0442\u0435. diff --git a/core/src/main/resources/hudson/cli/CliProtocol2/deprecationCause_it.properties b/core/src/main/resources/hudson/cli/CliProtocol2/deprecationCause_it.properties new file mode 100644 index 0000000000000000000000000000000000000000..c85eea2078adf49430f2f32cb335393be65f0c55 --- /dev/null +++ b/core/src/main/resources/hudson/cli/CliProtocol2/deprecationCause_it.properties @@ -0,0 +1,3 @@ +message=L''interfaccia da riga di comando basata su remoting deprecata e non raccomandata per motivi di sicurezza. \ + raccomandato disabilitare questo protocollo sull''istanza. \ +Se richiesto l''utilizzo dell''interfaccia da riga di comando Remoting, questo protocollo deve essere abilitato. diff --git a/core/src/main/resources/hudson/cli/CliProtocol2/description.jelly b/core/src/main/resources/hudson/cli/CliProtocol2/description.jelly index 66f27c511c1b651aa6ba9cb396d4140384750ae3..55e2c974b5ba1050be718c322da2b72ff5d8cd2a 100644 --- a/core/src/main/resources/hudson/cli/CliProtocol2/description.jelly +++ b/core/src/main/resources/hudson/cli/CliProtocol2/description.jelly @@ -1,4 +1,4 @@ - ${%Extends the version 1 protocol by adding transport encryption} + ${%summary} diff --git a/core/src/main/resources/hudson/cli/CliProtocol2/description.properties b/core/src/main/resources/hudson/cli/CliProtocol2/description.properties new file mode 100644 index 0000000000000000000000000000000000000000..609298c8b4029a3e48ce8c961cd4b433d43470fd --- /dev/null +++ b/core/src/main/resources/hudson/cli/CliProtocol2/description.properties @@ -0,0 +1 @@ +summary=Extends the version 1 protocol by adding transport encryption. diff --git a/core/src/main/resources/hudson/cli/CliProtocol2/description_bg.properties b/core/src/main/resources/hudson/cli/CliProtocol2/description_bg.properties new file mode 100644 index 0000000000000000000000000000000000000000..d738341fc2f42366e1fa87071958ac21ef41cbf5 --- /dev/null +++ b/core/src/main/resources/hudson/cli/CliProtocol2/description_bg.properties @@ -0,0 +1,27 @@ +# The MIT License +# +# Bulgarian translation: Copyright (c) 2016, 2017, Alexander Shopov +# +# 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. + +Extends\ the\ version\ 1\ protocol\ by\ adding\ transport\ encryption=\ + \u0420\u0430\u0437\u0448\u0438\u0440\u044f\u0432\u0430 \u0432\u0435\u0440\u0441\u0438\u044f 1 \u043d\u0430 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u043a\u0430\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u044f \u0448\u0438\u0444\u0440\u0438\u0440\u0430\u043d\u0435 +# Extends the version 1 protocol by adding transport encryption. +summary=\ + \u0420\u0430\u0437\u0448\u0438\u0440\u044f\u0432\u0430 \u0432\u0435\u0440\u0441\u0438\u044f 1 \u043d\u0430 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u043a\u0430\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u044f \u0448\u0438\u0444\u0440\u0438\u0440\u0430\u043d\u0435 diff --git a/core/src/main/resources/hudson/cli/CliProtocol2/description_de.properties b/core/src/main/resources/hudson/cli/CliProtocol2/description_de.properties new file mode 100644 index 0000000000000000000000000000000000000000..ad365aceafdc8783787e08025765e9c64896c4a6 --- /dev/null +++ b/core/src/main/resources/hudson/cli/CliProtocol2/description_de.properties @@ -0,0 +1,23 @@ +# The MIT License +# +# Copyright (c) 2017 Daniel Beck and a number of other of contributors +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# 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. + +summary=Erweitert das Protokoll Version 1 um Verschl\u00FCsselung der Transportschicht. diff --git a/core/src/main/resources/hudson/cli/CliProtocol2/description_it.properties b/core/src/main/resources/hudson/cli/CliProtocol2/description_it.properties new file mode 100644 index 0000000000000000000000000000000000000000..cf122422da6ab80c7dafcad0119de333ec17d0da --- /dev/null +++ b/core/src/main/resources/hudson/cli/CliProtocol2/description_it.properties @@ -0,0 +1 @@ +summary=Estende la versione 1 del protocollo aggiungendo la crittografia del trasporto. diff --git a/core/src/main/resources/hudson/cli/Messages.properties b/core/src/main/resources/hudson/cli/Messages.properties index f2cf34d4d687eed873eed4a346af0363bca94282..8b9c933e6dc90092f473b1a0cfbf71842e02acba 100644 --- a/core/src/main/resources/hudson/cli/Messages.properties +++ b/core/src/main/resources/hudson/cli/Messages.properties @@ -1,6 +1,7 @@ InstallPluginCommand.DidYouMean={0} looks like a short plugin name. Did you mean \u2018{1}\u2019? InstallPluginCommand.InstallingFromUpdateCenter=Installing {0} from update center InstallPluginCommand.InstallingPluginFromLocalFile=Installing a plugin from local file: {0} +InstallPluginCommand.InstallingPluginFromStdin=Installing a plugin from standard input InstallPluginCommand.InstallingPluginFromUrl=Installing a plugin from {0} InstallPluginCommand.NoUpdateCenterDefined=Note that no update center is defined in this Jenkins. InstallPluginCommand.NoUpdateDataRetrieved=No update center data is retrieved yet from: {0} @@ -33,7 +34,7 @@ HelpCommand.ShortDescription=\ InstallPluginCommand.ShortDescription=\ Installs a plugin either from a file, an URL, or from update center. InstallToolCommand.ShortDescription=\ - Performs automatic tool installation, and print its location to stdout. Can be only called from inside a build. + Performs automatic tool installation, and print its location to stdout. Can be only called from inside a build. [deprecated] ListChangesCommand.ShortDescription=\ Dumps the changelog for the specified build(s). ListJobsCommand.ShortDescription=\ @@ -41,16 +42,27 @@ ListJobsCommand.ShortDescription=\ ListPluginsCommand.ShortDescription=\ Outputs a list of installed plugins. LoginCommand.ShortDescription=\ - Saves the current credential to allow future commands to run without explicit credential information. + Saves the current credentials to allow future commands to run without explicit credential information. [deprecated] +LoginCommand.FullDescription=\ + Depending on the security realm, you will need to pass something like:\n\ + --username USER [ --password PASS | --password-file FILE ]\n\ + May not be supported in some security realms, such as single-sign-on.\n\ + Pair with the logout command.\n\ + The same options can be used on any other command, but unlike other generic CLI options,\n\ + these come *after* the command name.\n\ + Whether stored or not, this authentication mode will not let you refer to (e.g.) jobs as arguments\n\ + if Jenkins denies anonymous users Overall/Read and (e.g.) Job/Read.\n\ + *Deprecated* in favor of -auth. LogoutCommand.ShortDescription=\ - Deletes the credential stored with the login command. + Deletes the credentials stored with the login command. [deprecated] +LogoutCommand.FullDescription=*Deprecated* in favor of -auth. MailCommand.ShortDescription=\ Reads stdin and sends that out as an e-mail. SetBuildDescriptionCommand.ShortDescription=\ Sets the description of a build. -SetBuildParameterCommand.ShortDescription=Update/set the build parameter of the current build in progress. +SetBuildParameterCommand.ShortDescription=Update/set the build parameter of the current build in progress. [deprecated] SetBuildResultCommand.ShortDescription=\ - Sets the result of the current build. Works only if invoked from within a build. + Sets the result of the current build. Works only if invoked from within a build. [deprecated] RemoveJobFromViewCommand.ShortDescription=\ Removes jobs from view. VersionCommand.ShortDescription=\ @@ -94,5 +106,5 @@ OfflineNodeCommand.ShortDescription=Stop using a node for performing builds temp WaitNodeOnlineCommand.ShortDescription=Wait for a node to become online. WaitNodeOfflineCommand.ShortDescription=Wait for a node to become offline. -CliProtocol.displayName=Jenkins CLI Protocol/1 -CliProtocol2.displayName=Jenkins CLI Protocol/2 +CliProtocol.displayName=Jenkins CLI Protocol/1 (unencrypted) +CliProtocol2.displayName=Jenkins CLI Protocol/2 (transport encryption) diff --git a/core/src/main/resources/hudson/cli/Messages_bg.properties b/core/src/main/resources/hudson/cli/Messages_bg.properties index 3ce9a54d03d52307a3b3b8993c3b0965e43dabf7..09062a55444c30da0e791c8535caa71fb9121ecd 100644 --- a/core/src/main/resources/hudson/cli/Messages_bg.properties +++ b/core/src/main/resources/hudson/cli/Messages_bg.properties @@ -1,6 +1,6 @@ # The MIT License # -# Bulgarian translation: Copyright (c) 2015, 2016, Alexander Shopov +# Bulgarian translation: Copyright (c) 2015, 2016, 2017, Alexander Shopov # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -159,3 +159,29 @@ CliProtocol2.displayName=\ # Jenkins CLI Protocol/1 CliProtocol.displayName=\ \u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u043d\u0430 Jenkins \u0437\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0435\u043d \u0440\u0435\u0434, \u0432\u0435\u0440\u0441\u0438\u044f 1 +# \ +# Depending on the security realm, you will need to pass something like:\n\ +# --username USER [ --password PASS | --password-file FILE ]\n\ +# May not be supported in some security realms, such as single-sign-on.\n\ +# Pair with the logout command.\n\ +# The same options can be used on any other command, but unlike other generic CLI options,\n\ +# these come *after* the command name.\n\ +# Whether stored or not, this authentication mode will not let you refer to (e.g.) jobs as arguments\n\ +# if Jenkins denies anonymous users Overall/Read and (e.g.) Job/Read.\n\ +# *Deprecated* in favor of -auth. +LoginCommand.FullDescription=\ + \u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442 \u043e\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u0430\u043d\u0435\u0442\u043e \u0449\u0435 \u0441\u0435 \u043d\u0430\u043b\u043e\u0436\u0438 \u0434\u0430 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0442\u0435 \u043d\u0435\u0449\u043e \u043a\u0430\u0442\u043e:\n\ + --username \u041f\u041e\u0422\u0420\u0415\u0411\u0418\u0422\u0415\u041b [ --password \u041f\u0410\u0420\u041e\u041b\u0410 | --password-file \u0424\u0410\u0419\u041b ]\n\ + \u0412\u044a\u0437\u043c\u043e\u0436\u043d\u043e \u0435 \u0434\u0430 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0438 \u0432\u044a\u0432 \u0432\u0441\u0438\u0447\u043a\u0438 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438, \u043d\u0430\u043f\u0440. \u043f\u0440\u0438 \u0435\u0434\u043d\u043e\u043a\u0440\u0430\u0442\u043d\u043e \u0432\u043f\u0438\u0441\u0432\u0430\u043d\u0435.\n\ + \u041a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u0430\u0439\u0442\u0435 \u0441 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u0442\u0430 \u0437\u0430 \u0438\u0437\u0445\u043e\u0434.\n\ + \u0422\u0435\u0437\u0438 \u043e\u043f\u0446\u0438\u0438 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0441\u0435 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0442 \u0441 \u0432\u0441\u044f\u043a\u0430 \u0434\u0440\u0443\u0433\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430, \u043d\u043e \u0437\u0430 \u0440\u0430\u0437\u043b\u0438\u043a\u0430 \u043e\u0442\ + \u043e\u0442 \u043e\u0441\u0442\u0430\u043d\u0430\u043b\u0438\u0442\u0435 \u043e\u0431\u0449\u0438 \u043e\u043f\u0446\u0438\u0438 \u0437\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0435\u043d \u0440\u0435\u0434, \u0442\u0435 \u0441\u0435 \u043f\u043e\u0434\u0430\u0432\u0430\u0442 \u0421\u041b\u0415\u0414 \u0438\u043c\u0435\u0442\u043e \u043d\u0430\ + \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u0442\u0430. \u0422\u043e\u0437\u0438 \u0440\u0435\u0436\u0438\u043c \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0432\u0430 \u0434\u0430 \u0443\u043a\u0430\u0437\u0432\u0430\u0442\u0435 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0438\u044f\u0442\u0430 \u043a\u0430\u0442\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0438,\ + \u0430\u043a\u043e Jenkins \u043d\u0435 \u0434\u0430\u0432\u0430 \u043d\u0430 \u0430\u043d\u043e\u043d\u0438\u043c\u043d\u0438\u0442\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0438 \u043e\u0431\u0449\u043e \u043f\u0440\u0430\u0432\u043e \u0437\u0430 \u0447\u0435\u0442\u0435\u043d\u0435.\ + \u041e\u0421\u0422\u0410\u0420\u042f\u041b\u041e, \u0434\u0430 \u043d\u0435 \u0441\u0435 \u043f\u043e\u043b\u0437\u0432\u0430! \u041f\u0440\u043e\u0431\u0432\u0430\u0439\u0442\u0435 \u0441 \u201e-auth\u201c \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0432\u0430. +# Installing a plugin from standard input +InstallPluginCommand.InstallingPluginFromStdin=\ + \u0418\u043d\u0441\u0442\u0430\u043b\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0430 \u043e\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0438\u044f \u0432\u0445\u043e\u0434. +# *Deprecated* in favor of -auth. +LogoutCommand.FullDescription=\ + \u041e\u0421\u0422\u0410\u0420\u042f\u041b\u041e, \u0434\u0430 \u043d\u0435 \u0441\u0435 \u043f\u043e\u043b\u0437\u0432\u0430! \u041f\u0440\u043e\u0431\u0432\u0430\u0439\u0442\u0435 \u0441 \u201e-auth\u201c \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0432\u0430. diff --git a/core/src/main/resources/hudson/cli/Messages_de.properties b/core/src/main/resources/hudson/cli/Messages_de.properties index 287aeef5160e3994f2584ad5a287a5baf88cdc69..592f9225160bd62a4490cbcfaeeeea5d4150a86b 100644 --- a/core/src/main/resources/hudson/cli/Messages_de.properties +++ b/core/src/main/resources/hudson/cli/Messages_de.properties @@ -1,11 +1,64 @@ -DeleteNodeCommand.ShortDescription=Knoten l\u00f6schen. -DeleteJobCommand.ShortDescription=Job l\u00f6schen. -OnlineNodeCommand.ShortDescription=Knoten wird wieder f\u00fcr neue Builds verwendet. Hebt ein vorausgegangenes "offline-node"-Kommando auf. -ClearQueueCommand.ShortDescription=Build-Warteschlange l\u00f6schen. -ReloadConfigurationCommand.ShortDescription=Alle Daten im Speicher verwerfen und Konfiguration neu von Festplatte laden. Dies ist n\u00fctzlich, wenn Sie \u00c4nderungen direkt im Dateisystem vorgenommen haben. +AddJobToViewCommand.ShortDescription=F\u00FCgt Elemente zu einer Ansicht hinzu. +BuildCommand.CLICause.CannotBuildConfigNotSaved=Kann {0} nicht bauen, da dessen Konfiguration noch nicht gespeichert wurde. +BuildCommand.CLICause.CannotBuildDisabled={0} kann nicht gebaut werden, da es deaktiviert ist. +BuildCommand.CLICause.CannotBuildUnknownReasons=Kann {0} aus unbekannten Gr\u00FCnden nicht bauen. +BuildCommand.CLICause.ShortDescription=Von {0} via Befehlszeile gestartet +BuildCommand.ShortDescription=Startet einen Build, und wartet optional auf dessen Ende. +CancelQuietDownCommand.ShortDescription=Wirkung des Befehls "quiet-down" wieder aufheben. +ClearQueueCommand.ShortDescription=Build-Warteschlange leeren. +CliProtocol.displayName=Jenkins-CLI-Protokoll/1 (unverschl\u00FCsselt) +CliProtocol2.displayName=Jenkins-CLI-Protokoll/2 (Verschl\u00FCsselung der Transportschicht) ConnectNodeCommand.ShortDescription=Erneut mit Knoten verbinden. +ConsoleCommand.ShortDescription=Gibt die Konsolenausgabe eines Builds aus. +CopyJobCommand.ShortDescription=Kopiert ein Element. +CreateJobCommand.ShortDescription=Erstellt ein neues Element basierend auf der via Standardeingabe (stdin) bereitgestellten XML-Repr\u00E4sentation. +CreateNodeCommand.ShortDescription=Erstellt einen neuen Agenten basierend auf der via Standardeingabe (stdin) bereitgestellten XML-Repr\u00E4sentation. +CreateViewCommand.ShortDescription=Erstellt eine neue Ansicht basierend auf der via Standardeingabe (stdin) bereitgestellten XML-Repr\u00E4sentation. +DeleteBuildsCommand.ShortDescription=L\u00F6scht Builds. +DeleteJobCommand.ShortDescription=Element l\u00F6schen. +DeleteNodeCommand.ShortDescription=Knoten l\u00F6schen. +DeleteViewCommand.ShortDescription=Entfernt die angegebene Ansicht. DisconnectNodeCommand.ShortDescription=Knoten trennen. -QuietDownCommand.ShortDescription=Jenkins' Aktivit\u00e4t reduzieren, z.B. zur Vorbereitung eines Neustarts. Es werden keine neuen Builds mehr gestartet. -CancelQuietDownCommand.ShortDescription=Wirkung des Befehls "quiet-down" wieder aufheben. -OfflineNodeCommand.ShortDescription=Knoten wird bis zum n\u00e4chsten "online-node"-Kommando f\u00fcr keine neuen Builds verwendet. +GetJobCommand.ShortDescription=Gibt die XML-Repr\u00E4sentation des angegebenen Elements aus. +GetNodeCommand.ShortDescription=Gibt die XML-Repr\u00E4sentation des angegebenen Agenten aus. +GetViewCommand.ShortDescription=Gibt die XML-Repr\u00E4sentation der angegebenen Ansicht aus. +GroovyCommand.ShortDescription=F\u00FChrt das angegebene Groovy-Skript aus. +GroovyshCommand.ShortDescription=Startet eine interaktive Groovy-Shell. +HelpCommand.ShortDescription=Zeigt eine Auflistung aller verf\u00FCgbaren Befehle oder die detaillierte Beschreibung eines einzelnen Befehls. +InstallPluginCommand.DidYouMean={0} sieht wie ein Plugin-Kurzname aus. Meinten Sie \u2018{1}\u2019? +InstallPluginCommand.InstallingFromUpdateCenter=Installiere {0} aus dem Update-Center. +InstallPluginCommand.InstallingPluginFromLocalFile=Installiere ein Plugin von einer lokalen Datei: {0} +InstallPluginCommand.InstallingPluginFromUrl=Installiere ein Plugin von {0} +InstallPluginCommand.NotAValidSourceName={0} ist keine g\u00FCltige Datei, URL, oder ein Plugin-Name im Update-Center +InstallPluginCommand.NoUpdateCenterDefined=Kein Update-Center ist konfiguriert +InstallPluginCommand.NoUpdateDataRetrieved=Update-Center-Metadaten wurden noch nicht von {0} heruntergeladen. +InstallPluginCommand.ShortDescription=Installiert ein Plugin von einer Datei, URL, oder aus dem Update-Center +InstallToolCommand.ShortDescription=Installiert ein Hilfsprogramm und gibt das Installationsverzeichnis aus. Dieser Befehl funktioniert nur innerhalb eines Builds. +ListChangesCommand.ShortDescription=Zeigt das Changelog des angegebenen Builds. +ListJobsCommand.ShortDescription=Zeigt alle Elemente, die zu einer Ansicht oder einem Ordner geh\u00F6ren. +ListPluginsCommand.ShortDescription=Gibt eine Liste installierter Plugins aus. +LoginCommand.ShortDescription=Speichert die aktuellen Anmeldedaten, damit weitere Befehle ohne gesonderte Anmeldung ausgef\u00FChrt werden k\u00F6nnen. +LogoutCommand.ShortDescription=L\u00F6scht die zuvor mit login-Befehl gespeicherten Anmeldedaten. +MailCommand.ShortDescription=Liest eine Nachricht von der Standardeingabe (stdin) und versendet sie als E-Mail +OfflineNodeCommand.ShortDescription=Knoten wird bis zum n\u00E4chsten "online-node"-Kommando f\u00FCr keine neuen Builds verwendet. +OnlineNodeCommand.ShortDescription=Knoten wird wieder f\u00FCr neue Builds verwendet. Hebt ein vorausgegangenes "offline-node"-Kommando auf. +QuietDownCommand.ShortDescription=Keine neuen Builds mehr starten, z.B. zur Vorbereitung eines Neustarts. +ReloadConfigurationCommand.ShortDescription=Alle Daten im Speicher verwerfen und Konfiguration neu von Festplatte laden. Dies ist n\u00FCtzlich, wenn Sie \u00C4nderungen direkt im Dateisystem vorgenommen haben. +ReloadJobCommand.ShortDescription=L\u00E4dt ein Element neu. +RemoveJobFromViewCommand.ShortDescription=Entfernt Elemente aus einer Ansicht +SessionIdCommand.ShortDescription=Gibt die Session ID aus, die sich bei jedem Neustart von Jenkins \u00E4ndert. +SetBuildDescriptionCommand.ShortDescription=Setzt die Beschreibung eines Builds. +SetBuildDisplayNameCommand.ShortDescription=Setzt den Anzeigenamen eines Builds. +SetBuildParameterCommand.ShortDescription=\u00C4ndert die Parameter des aktuellen Builds. +# TODO Dieser Befehl funktioniert nur innerhalb eines Builds.? + +SetBuildResultCommand.ShortDescription=Setzt das Ergebnis des aktuellen Builds. Dieser Befehl funktioniert nur innerhalb eines Builds. +UpdateJobCommand.ShortDescription=Aktualisiert die Konfiguration eines Elements basierend auf der via Standardeingabe (stdin) bereitgestellten XML-Repr\u00E4sentation. Das Gegenst\u00FCck zum Befehl get-job. +UpdateNodeCommand.ShortDescription=Aktualisiert die Konfiguration eines Knotens basierend auf der via Standardeingabe (stdin) bereitgestellten XML-Repr\u00E4sentation. Das Gegenst\u00FCck zum Befehl get-node. +UpdateViewCommand.ShortDescription=Aktualisiert die Konfiguration einer Ansicht basierend auf der via Standardeingabe (stdin) bereitgestellten XML-Repr\u00E4sentation. Das Gegenst\u00FCck zum Befehl get-view. +VersionCommand.ShortDescription=Zeigt die aktuelle Version an. +WaitNodeOfflineCommand.ShortDescription=Wartet bis ein Knoten nicht mehr f\u00FCr neue Builds verwendet werden kann. +# TODO temporarily offline? +WaitNodeOnlineCommand.ShortDescription=Wartet bis ein Knoten wieder f\u00FCr neue Builds verwendet werden kann. +WhoAmICommand.ShortDescription=Zeigt Ihren Login und Berechtigungen an. diff --git a/core/src/main/resources/hudson/cli/Messages_it.properties b/core/src/main/resources/hudson/cli/Messages_it.properties index ca09f191dfc6093126030b35ec84e1f8dc37b0a4..ab81259761056b8beb92704373a19d93ca16af5e 100644 --- a/core/src/main/resources/hudson/cli/Messages_it.properties +++ b/core/src/main/resources/hudson/cli/Messages_it.properties @@ -1,10 +1,78 @@ -DeleteNodeCommand.ShortDescription=Cancella un nodo -DeleteJobCommand.ShortDescription=Cancella un job -OnlineNodeCommand.ShortDescription=Resume using a node for performing builds, to cancel out the earlier "offline-node" command. -ClearQueueCommand.ShortDescription=Pulisce la coda di lavoro -ReloadConfigurationCommand.ShortDescription=Discard all the loaded data in memory and reload everything from file system. Useful when you modified config files directly on disk. -ConnectNodeCommand.ShortDescription=Riconnettersi ad un nodo -OfflineNodeCommand.ShortDescription=Stop using a node for performing builds temporarily, until the next "online-node" command. -WaitNodeOnlineCommand.ShortDescription=Attende che il nodo sia attivo -WaitNodeOfflineCommand.ShortDescription=Attende che un nodo sia disattivo +InstallPluginCommand.DidYouMean=Sembra che {0} sia il nome breve di un plugin. Forse si intendeva "{1}"? +InstallPluginCommand.InstallingFromUpdateCenter=Installazione di {0} dal Centro aggiornamenti in corso +InstallPluginCommand.InstallingPluginFromLocalFile=Installazione di un plugin da un file locale in corso: {0} +InstallPluginCommand.InstallingPluginFromStdin=Installazione di un plugin dallo standard input in corso +InstallPluginCommand.InstallingPluginFromUrl=Installazione di un plugin da {0} in corso +InstallPluginCommand.NoUpdateCenterDefined=Si noti che in quest''istanza di Jenkins non definito alcun Centro aggiornamenti. +InstallPluginCommand.NoUpdateDataRetrieved=Non sono ancora stati recuperati dati del Centro aggiornamenti da {0} +InstallPluginCommand.NotAValidSourceName={0} non n un file valido, n un URL, n il nome di un artefatto di un plugin nel Centro aggiornamenti +AddJobToViewCommand.ShortDescription=Aggiunge processi alla vista. +BuildCommand.ShortDescription=Compila una build e attende facoltativamente il suo completamento. +ConsoleCommand.ShortDescription=Recupera l''output su console di una build. +CopyJobCommand.ShortDescription=Copia un processo. +CreateJobCommand.ShortDescription=Crea un nuovo processo leggendo lo standard input e interpretandolo come un file di configurazione XML. +CreateNodeCommand.ShortDescription=Crea un nuovo nodo leggendo lo standard input e interpretandolo come un file di configurazione XML. +CreateViewCommand.ShortDescription=Crea una nuova vista leggendo lo standard input e interpretandolo come un file di configurazione XML. +DeleteBuildsCommand.ShortDescription=Elimina uno o pi record relativi alle build. +DeleteViewCommand.ShortDescription=Elimina una o pi viste. +DeleteJobCommand.ShortDescription=Elimina uno o pi processi. +GroovyCommand.ShortDescription=Esegue lo script Groovy specificato. +GroovyshCommand.ShortDescription=Esegue una shell Groovy interattiva. +HelpCommand.ShortDescription=Elenca tutti i comandi disponibili o visualizza una descrizione dettagliata di un singolo comando. +InstallPluginCommand.ShortDescription=Installa un plugin da un file, un URL o dal Centro aggiornamenti. +InstallToolCommand.ShortDescription=Esegue un''installazione automatica dello strumento e stampa il suo percorso sullo standard output. Pu essere invocato solo da una build. [deprecato] +ListChangesCommand.ShortDescription=Esegue il dump del log delle modifiche per la/le build specificata/e. +ListJobsCommand.ShortDescription=Elenca tutti i processi in una specifica vista o in un gruppo di elementi. +ListPluginsCommand.ShortDescription=Visualizza un elenco di plugin installati. +LoginCommand.ShortDescription=Salva le credenziali correnti per consentire ai comandi futuri di essere eseguiti senza specificare esplicitamente le informazioni relative alle credenziali. [deprecato] +LoginCommand.FullDescription=A seconda dell''area di sicurezza sar necessario fornire argomenti come:\n\ +--username UTENTE [ --password PASSWORD | --password-file FILE ]\n\ +Pu non essere supportato in alcune aree di sicurezza come il single sign on.\n\ +Va abbinato al comando logout.\n\ +Le medesime opzioni possono essere utilizzate con qualsiasi altro comando, ma,\n\ +a differenza delle altre opzioni generiche dell''interfaccia da riga di comando,\n\ +queste devono essere specificate *dopo* il nome del comando.\n\ +Indipendentemente dal fatto che le credenziali siano salvate o meno, questa\n\ +modalit di autenticazione non consentir di fare riferimento (ad esempio)\n\ +ai processi come argomenti se Jenkins nega agli utenti anonimi i permessi\n\ +Globale/Lettura e (ad esempio) Processo/Lettura.\n\ +*Deprecato* a favore di -auth. +LogoutCommand.ShortDescription=Elimina le credenziali salvate con il comando login. [deprecato] +LogoutCommand.FullDescription=*Deprecato* a favore di -auth. +MailCommand.ShortDescription=Legge lo standard input e lo invia come messaggio di posta elettronica. +SetBuildDescriptionCommand.ShortDescription=Imposta la descrizione di una build. +SetBuildParameterCommand.ShortDescription=Aggiorna/imposta il parametro di build della build attualmente in corso. [deprecato] +SetBuildResultCommand.ShortDescription=Imposta il risultato della build corrente. Funziona solamente se invocato da una build. [deprecato] +RemoveJobFromViewCommand.ShortDescription=Rimuove dei processi dalla vista. +VersionCommand.ShortDescription=Visualizza la versione attuale. +GetJobCommand.ShortDescription=Esegue il dump dell''XML della definizione del processo sullo standard output. +GetNodeCommand.ShortDescription=Esegue il dump dell''XML della definizione del nodo sullo standard output. +GetViewCommand.ShortDescription=Esegue il dump dell''XML della definizione della vista sullo standard output. +SetBuildDisplayNameCommand.ShortDescription=Imposta il nome visualizzato di una build. +WhoAmICommand.ShortDescription=Visualizza i propri credenziali e permessi. +UpdateJobCommand.ShortDescription=Aggiorna l''XML della definizione del processo dallo standard input. il comando contrario di get-job. +UpdateNodeCommand.ShortDescription=Aggiorna l''XML della definizione del nodo dallo standard input. il comando contrario di get-node. +SessionIdCommand.ShortDescription=Visualizza l''ID di sessione che cambia a ogni riavvio di Jenkins. +UpdateViewCommand.ShortDescription=Aggiorna l''XML della definizione della vista dallo standard input. il comando contrario di get-view. + +BuildCommand.CLICause.ShortDescription=Avviato dalla riga di comando da {0} +BuildCommand.CLICause.CannotBuildDisabled=Impossibile compilare {0} perch disabilitato. +BuildCommand.CLICause.CannotBuildConfigNotSaved=Impossibile compilare {0} perch la sua configurazione non stata salvata. +BuildCommand.CLICause.CannotBuildUnknownReasons=Impossibile compilare {0} per motivi sconosciuti. + +DeleteNodeCommand.ShortDescription=Elimina nodo/i +ReloadJobCommand.ShortDescription=Aggiorna processo/i +OnlineNodeCommand.ShortDescription=Riprende ad utilizzare un nodo per eseguire le build, annullando il comando precedente "offline-node". +ClearQueueCommand.ShortDescription=Pulisce la coda di lavoro. +ReloadConfigurationCommand.ShortDescription=Scarta tutti i dati caricati in memoria e ricarica tutto dal file system. Utile quando si sono modificati file di configurazione direttamente su disco. +ConnectNodeCommand.ShortDescription=Esegue una nuova connessione al nodo/i. +DisconnectNodeCommand.ShortDescription=Si disconnette da un nodo/i. +QuietDownCommand.ShortDescription=Ferma le attivit di Jenkins in preparazione a un riavvio. Non avvia alcuna build. +CancelQuietDownCommand.ShortDescription=Annulla gli effetti del comando "quiet-down". +OfflineNodeCommand.ShortDescription=Non utilizza pi temporaneamente un nodo per eseguire le build fino al successivo comando "online-node". +WaitNodeOnlineCommand.ShortDescription=Attende che un nodo sia in linea. +WaitNodeOfflineCommand.ShortDescription=Attende che un nodo sia non in linea. + +CliProtocol.displayName=Protocollo Jenkins da interfaccia da riga di comando/1 (non criptato) +CliProtocol2.displayName=Protocollo Jenkins da interfaccia da riga di comando/1 (trasporto criptato) diff --git a/core/src/main/resources/hudson/cli/Messages_sr.properties b/core/src/main/resources/hudson/cli/Messages_sr.properties new file mode 100644 index 0000000000000000000000000000000000000000..a504742d83a470fcfbe23593087db7f45f73ac03 --- /dev/null +++ b/core/src/main/resources/hudson/cli/Messages_sr.properties @@ -0,0 +1,68 @@ +# This file is under the MIT License by authors + +InstallPluginCommand.DidYouMean={0} \u043B\u0438\u0447\u0438 \u043D\u0430 \u043A\u0440\u0430\u0442\u043A\u043E \u0438\u043C\u0435 \u0437\u0430 \u043C\u043E\u0434\u0443\u043B\u0443. \u0414\u0430 \u043B\u0438 \u0441\u0442\u0435 \u043C\u0438\u0441\u043B\u0438\u043B\u0438 \u2018{1}\u2019? +InstallPluginCommand.InstallingFromUpdateCenter=\u0418\u043D\u0441\u0442\u0430\u043B\u0438\u0440\u0430\u045A\u0435 "{0}" \u0441\u0430 \u0446\u0435\u043D\u0442\u0440\u0430 \u0437\u0430 \u0430\u0436\u0443\u0440\u0438\u0430\u045A\u0430 +InstallPluginCommand.InstallingPluginFromLocalFile=\u0418\u043D\u0441\u0442\u0430\u043B\u0430\u0446\u0438\u0458\u0430 \u043C\u043E\u0434\u0443\u043B\u0430 \u0441\u0430 \u043B\u043E\u043A\u0430\u043B\u0435 \u0434\u0430\u0442\u043E\u0442\u0435\u043A\u0435 "{0}" +InstallPluginCommand.InstallingPluginFromUrl=\u0418\u043D\u0441\u0442\u0430\u043B\u0438\u0440\u0430\u045A\u0435 \u043C\u043E\u0434\u0443\u043B\u0435 \u0441\u0430 {0} +InstallPluginCommand.NoUpdateCenterDefined=\u041D\u0438\u0458\u0435 \u043D\u0430\u0432\u0435\u0434\u0435\u043D \u0441\u0430\u0458\u0442 \u0437\u0430 \u0430\u0436\u0443\u0440\u0438\u0440\u0430\u045A\u0435 \u0443 \u043E\u0432\u043E\u0458 \u0438\u043D\u0441\u0442\u0430\u043B\u0430\u0446\u0438\u0458\u0438 Jenkins. +InstallPluginCommand.NoUpdateDataRetrieved=\ \u041D\u0438\u0441\u0443 \u0458\u043E\u0448 \u043F\u0440\u0435\u0443\u0437\u0435\u0442\u0438 \u043F\u043E\u0434\u0430\u0446\u0438 \u0438\u0437 \u0446\u0435\u043D\u0442\u0440\u0430 \u0437\u0430 \u0430\u0436\u0443\u0440\u0438\u0440\u0430\u045A\u0435: {0} +InstallPluginCommand.NotAValidSourceName="{0}" \u043D\u0438\u0458\u0435 \u043D\u0438 \u0438\u043C\u0435 \u0434\u0430\u0442\u043E\u0442\u0435\u043A\u0435, URL \u0430\u0434\u0440\u0435\u0441\u0430, \u043D\u0438\u0442\u0438 \u0438\u043C\u0435 \u043C\u043E\u0434\u0443\u043B\u0435 \u043D\u0430 \u0446\u0435\u043D\u0442\u0440\u0443 \u0437\u0430 \u0430\u0436\u0443\u0440\u0438\u0440\u0430\u045A\u0435 +AddJobToViewCommand.ShortDescription=\u041F\u0440\u0438\u043A\u0430\u0436\u0438 \u0437\u0430\u0434\u0430\u0442\u043A\u0435 \u0443 \u043F\u0440\u0435\u0433\u043B\u0435\u0434\u0443 +BuildCommand.ShortDescription=\ \u041F\u043E\u043A\u0440\u0435\u043D\u0435 \u0438\u0437\u0433\u0440\u0430\u0434\u045A\u0443 \u0437\u0430\u0434\u0430\u0442\u0430\u043A\u0430 \u0438 \u043E\u043F\u0446\u0438\u043E\u043D\u043E \u0447\u0435\u043A\u0430 \u0437\u0430 \u045A\u0435\u0433\u043E\u0432 \u0437\u0430\u0432\u0440\u0448\u0435\u0442\u0430\u043A +ConsoleCommand.ShortDescription=\u041F\u0440\u0435\u0443\u0437\u043C\u0435 \u0440\u0435\u0437\u0443\u043B\u0442\u0430\u0442 \u0438\u0437\u0433\u0440\u0430\u0434\u045A\u0435 +CopyJobCommand.ShortDescription=\u0418\u0441\u043A\u043E\u043F\u0438\u0440\u0430 \u0437\u0430\u0434\u0430\u0442\u0430\u043A +CreateJobCommand.ShortDescription=\u041A\u0440\u0435\u0438\u0440\u0430 \u043D\u043E\u0432\u0438 \u0437\u0430\u0434\u0430\u0442\u0430\u043A \u0447\u0438\u0442\u0430\u0458\u0443\u045B\u0438 stdin \u043A\u0430\u043E \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043E\u043D\u0443 XML \u0434\u0430\u0442\u043E\u0442\u0435\u043A\u0443 +CreateNodeCommand.ShortDescription=\u041A\u0440\u0435\u0438\u0440\u0430 \u043D\u043E\u0432\u0443 \u043C\u0430\u0448\u0438\u043D\u0443 \u0447\u0438\u0442\u0430\u0458\u0443\u045B\u0438 stdin \u043A\u0430\u043E \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043E\u043D\u0443 XML \u0434\u0430\u0442\u043E\u0442\u0435\u043A\u0443 +CreateViewCommand.ShortDescription=\u041A\u0440\u0435\u0438\u0440\u0430 \u043D\u043E\u0432\u0438 \u043F\u0440\u0435\u0433\u043B\u0435\u0434 \u0447\u0438\u0442\u0430\u0458\u0443\u045B\u0438 stdin \u043A\u0430\u043E \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043E\u043D\u0443 XML \u0434\u0430\u0442\u043E\u0442\u0435\u043A\u0443 +DeleteBuildsCommand.ShortDescription=\u0418\u0437\u0431\u0440\u0438\u0448\u0435 \u043F\u043E\u0434\u0430\u0442\u043A\u0435 \u043E \u0438\u0437\u0433\u0440\u0430\u0434\u045A\u0438 +DeleteViewCommand.ShortDescription=\u0418\u0437\u0431\u0440\u0438\u0448\u0435 \u043F\u0440\u0435\u0433\u043B\u0435\u0434 +DeleteJobCommand.ShortDescription=\u0418\u0437\u0431\u0440\u0438\u0448\u0435 \u0437\u0430\u0434\u0430\u0442\u0430\u043A +GroovyCommand.ShortDescription=\u0418\u0437\u0432\u0440\u0448\u0438 \u043D\u0430\u0432\u0435\u0434\u0435\u043D Groovy \u043F\u0440\u043E\u0433\u0440\u0430\u043C +GroovyshCommand.ShortDescription=\u041F\u043E\u043A\u0440\u0435\u043D\u0435 \u0438\u043D\u0442\u0435\u0440\u0430\u043A\u0442\u0438\u0432\u0430\u043D \u0438\u043D\u0442\u0435\u0440\u043F\u0440\u0435\u0442\u0430\u0442\u043E\u0440 \u0437\u0430 Groovy +HelpCommand.ShortDescription=\u0418\u0441\u043F\u0438\u0448\u0435 \u0441\u0432\u0435 \u043A\u043E\u043C\u0430\u043D\u0434\u0435 \u0438\u043B\u0438 \u0434\u0435\u0442\u0430\u0459\u043D\u0438 \u043E\u043F\u0438\u0441 \u043E\u0434\u0440\u0435\u0452\u0435\u043D\u0435 \u043A\u043E\u043C\u0430\u043D\u0434\u0435. +InstallPluginCommand.ShortDescription=\u0418\u043D\u0441\u0442\u0430\u043B\u0438\u0440\u0430 \u043C\u043E\u0434\u0443\u043B\u0443 \u0441\u0430 \u0434\u0430\u0442\u043E\u0442\u0435\u043A\u0435, URL \u0430\u0434\u0440\u0435\u0441\u0435, \u0438\u043B\u0438 \u0446\u0435\u043D\u0442\u0440\u0430 \u0437\u0430 \u0430\u0436\u0443\u0440\u0438\u0440\u0430\u045A\u0435. +InstallToolCommand.ShortDescription=\u0410\u0443\u0442\u043E\u043C\u0430\u0442\u0441\u043A\u043E \u0438\u043D\u0441\u0442\u0430\u043B\u0438\u0440\u0430 \u0430\u043B\u0430\u0442 \u0438 \u043F\u0440\u0438\u043A\u0430\u0436\u0435 \u045A\u0435\u0433\u043E\u0432\u0443 \u043B\u043E\u043A\u0430\u0446\u0438\u0458\u0438 \u043D\u0430 stdout. \u041C\u043E\u0436\u0435 \u0441\u0430\u043C\u043E \u0431\u0438\u0442\u0438 \u043F\u043E\u0437\u0432\u0430\u043D \u0443\u043D\u0443\u0442\u0430\u0440 \u0437\u0430\u0434\u0430\u0442\u043A\u043E\u043C. +ListChangesCommand.ShortDescription=\u041F\u0440\u0438\u043A\u0430\u0436\u0435 \u0434\u043D\u0435\u0432\u043D\u0438\u043A \u0438\u0437\u043C\u0435\u043D\u0430 \u0437\u0430 \u043D\u0430\u0432\u0435\u0434\u0435\u043D\u0430 \u0438\u0437\u0433\u0440\u0430\u045A\u0430. +ListJobsCommand.ShortDescription=\u041F\u0440\u0438\u043A\u0430\u0436\u0435 \u0441\u0432\u0435 \u0437\u0430\u0434\u0430\u0442\u043A\u0435 \u043E\u0434\u0440\u0435\u0452\u0435\u043D\u0435 \u0432\u0440\u0441\u0442\u0435 \u0438\u043B\u0438 \u0433\u0440\u0443\u043F\u0435. +ListPluginsCommand.ShortDescription=\u041F\u0440\u0438\u043A\u0430\u0436\u0435 \u0441\u043F\u0438\u0441\u0430\u043A \u0438\u043D\u0441\u0442\u0430\u043B\u0438\u0440\u0430\u043D\u0438\u0445 \u043C\u043E\u0434\u0443\u043B\u0430. +LoginCommand.ShortDescription=\u0421\u0430\u0447\u0443\u0432\u0430 \u0438\u0434\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u0458\u0443, \u0434\u0430 \u0431\u0438 \u043D\u0430\u043A\u043D\u0430\u0434\u043D\u0438 \u0437\u0430\u0434\u0430\u0446\u0438 \u043C\u043E\u045B\u0438 \u0438\u0437\u0432\u0440\u0448\u0438\u0442\u0438 \u0431\u0435\u0437 \u043F\u043E\u043D\u043E\u0432\u0443 \u0438\u0434\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u0458\u0443. +LogoutCommand.ShortDescription=\u0418\u0437\u0431\u0440\u0438\u0448\u0435 \u0438\u0434\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u0458\u0443 \u0441\u0430\u0447\u0443\u0432\u0430\u043D\u043E \u043F\u0440\u0438\u043B\u0438\u043A\u043E\u043C \u043F\u0440\u0438\u0458\u0430\u0432\u0435. +MailCommand.ShortDescription=\u0418\u0437\u0447\u0438\u0442\u0430 stdin \u0438 \u043F\u043E\u0448\u0430\u0459\u0435 \u0441\u0430\u0434\u0440\u0436\u0430\u0458 \u043F\u0440\u0435\u043A\u043E \u0435-\u043F\u043E\u0448\u0442\u0435. +SetBuildParameterCommand.ShortDescription=\u0423\u0440\u0435\u0452\u0438\u0432\u0430\u045A\u0435/\u043F\u043E\u0441\u0442\u0430\u0432\u0459\u0430\u045A\u0435 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0430\u0440\u0430 \u043D\u0430 \u0442\u0440\u0435\u043D\u0443\u0442\u043D\u043E\u0458 \u0438\u0437\u0433\u0440\u0430\u0434\u045A\u0438. +SetBuildDescriptionCommand.ShortDescription=\u041F\u043E\u0441\u0442\u0430\u0432\u0438 \u043E\u043F\u0438\u0441 \u0438\u0437\u0433\u0440\u0430\u0434\u045A\u0435 +SetBuildResultCommand.ShortDescription=\u041F\u043E\u0441\u0442\u0430\u0432\u0438 \u0440\u0435\u0437\u0443\u043B\u0442\u0430\u0442 \u043D\u0430 \u0442\u0440\u0435\u043D\u0443\u0442\u043D\u0443 \u0438\u0437\u0433\u0440\u0430\u0434\u045A\u0443. \u041C\u043E\u0436\u0435 \u0431\u0438\u0442\u0438 \u043F\u043E\u0437\u0432\u0430\u043D\u043E \u0441\u0430\u043C\u043E \u0443\u043D\u0443\u0442\u0430\u0440 \u0437\u0430\u0434\u0430\u0442\u0430\u043A\u0430. +RemoveJobFromViewCommand.ShortDescription=\u0423\u043A\u043B\u043E\u043D\u0438 \u0437\u0430\u0434\u0430\u0442\u043A\u0435 \u0441\u0430 \u043F\u0440\u0435\u0433\u043B\u0435\u0434\u0430 +VersionCommand.ShortDescription=\u041F\u0440\u0438\u043A\u0430\u0436\u0435 \u0432\u0435\u0440\u0437\u0438\u0458\u0443 Jenkins. +GetJobCommand.ShortDescription=\u0418\u0441\u043F\u0438\u0448\u0435 \u0434\u0435\u0444\u0438\u043D\u0438\u0446\u0438\u0458\u0443 \u0437\u0430\u0434\u0430\u0442\u043A\u0430 \u0443 XML \u0444\u043E\u0440\u043C\u0430\u0442\u0443 \u043D\u0430 stdout. +GetNodeCommand.ShortDescription=\u0418\u0441\u043F\u0438\u0448\u0435 \u0434\u0435\u0444\u0438\u043D\u0438\u0446\u0438\u0458\u0443 \u043C\u0430\u0448\u0438\u043D\u0435 \u0443 XML \u0444\u043E\u0440\u043C\u0430\u0442\u0443 \u043D\u0430 stdout. +GetViewCommand.ShortDescription=\u0418\u0441\u043F\u0438\u0448\u0435 \u0434\u0435\u0444\u0438\u043D\u0438\u0446\u0438\u0458\u0443 \u043F\u0440\u0435\u0433\u043B\u0435\u0434\u0430 \u0443 XML \u0444\u043E\u0440\u043C\u0430\u0442\u0443 \u043D\u0430 stdout. +SetBuildDisplayNameCommand.ShortDescription=\u041F\u043E\u0441\u0442\u0430\u0432\u0438 \u0438\u043C\u0435 (displayName) \u043E \u0438\u0437\u0433\u0440\u0430\u0434\u045A\u0438. +WhoAmICommand.ShortDescription=\u0418\u0437\u0432\u0435\u0448\u0442\u0430je \u0432\u0430\u0448\u0435 \u0430\u043A\u0440\u0435\u0434\u0438\u0442\u0438\u0432\u0435 \u0438 \u043F\u0440\u0430\u0432\u0430. +UpdateJobCommand.ShortDescription=\u0410\u0436\u0443\u0440\u0438\u0440\u0430 XML \u0434\u0435\u0444\u0438\u043D\u0438\u0446\u0438\u0458\u0443 \u0437\u0430\u0434\u0430\u0442\u043A\u0430 \u0438\u0437 stdin, \u0437\u0430 \u0440\u0430\u0437\u043B\u0438\u043A\u0443 \u043E\u0434 get-job \u043A\u043E\u043C\u0430\u043D\u0434\u0435. +UpdateNodeCommand.ShortDescription=\u0410\u0436\u0443\u0440\u0438\u0440\u0430 XML \u0434\u0435\u0444\u0438\u043D\u0438\u0446\u0438\u0458\u0443 \u043C\u0430\u0448\u0438\u043D\u0435 \u0438\u0437 stdin, \u0437\u0430 \u0440\u0430\u0437\u043B\u0438\u043A\u0443 \u043E\u0434 get-node \u043A\u043E\u043C\u0430\u043D\u0434\u0435. +SessionIdCommand.ShortDescription=\u0418\u0437\u0458\u0430\u0432\u0438 \u0438\u0434\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u043E\u0440\u0430 \u0441\u0435\u0441\u0438\u0458\u0435, \u0448\u0442\u043E \u0441\u0435 \u043C\u0435\u045A\u0430 \u0441\u0432\u0430\u043A\u0438 \u043F\u0443\u0442 \u043A\u0430\u0434\u0430 \u043F\u043E\u043A\u0440\u0435\u043D\u0435\u0442\u0435 Jenkins. +UpdateViewCommand.ShortDescription=\u0410\u0436\u0443\u0440\u0438\u0440\u0430 XML \u0434\u0435\u0444\u0438\u043D\u0438\u0446\u0438\u0458\u0443 \u043F\u0440\u0435\u0433\u043B\u0435\u0434\u0430 \u0438\u0437 stdin, \u0437\u0430 \u0440\u0430\u0437\u043B\u0438\u043A\u0443 \u043E\u0434 get-view \u043A\u043E\u043C\u0430\u043D\u0434\u0435. +BuildCommand.CLICause.ShortDescription=\u0417\u0430\u0434\u0430\u0442\u0430\u043A \u0458\u0435 \u043F\u043E\u043A\u0440\u0435\u043D\u0443\u0442 \u043F\u0440\u0435\u043A\u043E \u043A\u043E\u043C\u0430\u043D\u0434\u043D\u0435 \u043B\u0438\u043D\u0438\u0458\u0435 \u0441\u0430 \u043A\u043E\u043C\u0430\u043D\u0434\u043E\u043C "{0}" +BuildCommand.CLICause.CannotBuildDisabled=\ +\u041D\u0435 \u043C\u043E\u0436\u0435 \u0441\u0435 \u0438\u0437\u0433\u0440\u0430\u0434\u0438\u0442\u0438 \u0437\u0430\u0434\u0430\u0442\u0430\u043A "{0}" \u0437\u0430\u0448\u0442\u043E \u0458\u0435 \u043E\u043D\u0435\u043C\u043E\u0433\u0443\u045B\u0435\u043D\u043E. +BuildCommand.CLICause.CannotBuildConfigNotSaved=\ +\u041D\u0435 \u043C\u043E\u0436\u0435 \u0441\u0435 \u0438\u0437\u0433\u0440\u0430\u0434\u0438\u0442\u0438 \u0437\u0430\u0434\u0430\u0442\u0430\u043A "{0}" \u0437\u0430\u0448\u0442\u043E \u043F\u043E\u0434\u0435\u0448\u0430\u0432\u0430\u045A\u0430 \u043D\u0438\u0441\u0443 \u0441\u0430\u0447\u0443\u0432\u0430\u043D\u0430. +BuildCommand.CLICause.CannotBuildUnknownReasons=\ +\u041D\u0435 \u043C\u043E\u0436\u0435 \u0441\u0435 \u0438\u0437\u0433\u0440\u0430\u0434\u0438\u0442\u0438 \u0437\u0430\u0434\u0430\u0442\u0430\u043A "{0}" \u0437\u0431\u043E\u0433 \u043D\u0435\u043F\u043E\u0437\u043D\u0430\u0442\u043E\u0433 \u0440\u0430\u0437\u043B\u043E\u0433\u0430. +DeleteNodeCommand.ShortDescription=\ +\u0423\u043A\u043B\u043E\u043D\u0438 \u043C\u0430\u0448\u0438\u043D\u0443 +ReloadJobCommand.ShortDescription=\ +\u041F\u043E\u043D\u043E\u0432\u043E \u043F\u0440\u0435\u0443\u0437\u043C\u0435 \u0437\u0430\u0434\u0430\u0442\u043A\u0435 +OnlineNodeCommand.ShortDescription=\u041D\u0430\u0441\u0442\u0430\u0432\u0438 \u043A\u043E\u0440\u0438\u0448\u045B\u0435\u045A\u0435 \u043C\u0430\u0448\u0438\u043D\u0435 \u0437\u0430 \u0438\u0437\u0433\u0440\u0430\u0434\u045A\u0443, \u0448\u0442\u043E \u043F\u043E\u043D\u0438\u0448\u0442\u0430\u0432\u0430 \u043F\u0440\u0435\u0442\u0445\u043E\u0434\u043D\u0443 \u043A\u043E\u043C\u0430\u043D\u0434\u0443 "offline-node". +ClearQueueCommand.ShortDescription=\u0418\u0437\u0431\u0440\u0438\u0448\u0435 \u0437\u0430\u043A\u0430\u0437\u0430\u043D\u0435 \u0437\u0430\u0434\u0430\u0442\u0430\u043A\u0435. +ReloadConfigurationCommand.ShortDescription=\u041E\u0434\u0431\u0430\u0446\u0438 \u0441\u0432\u0435 \u043F\u043E\u0434\u0430\u0442\u043A\u0435 \u0443 \u043C\u0435\u043C\u043E\u0440\u0438\u0458\u0438, \u0438 \u043F\u043E\u043D\u043E \u0443\u0447\u0438\u0442\u0430\u0458 \u0441\u0432\u0435 \u0438\u0437 \u0434\u0430\u0442\u043E\u0442\u0435\u0447\u043D\u043E\u0433 \u0441\u0438\u0441\u0442\u0435\u043C\u0430. \u041A\u043E\u0440\u0438\u0441\u043D\u043E \u043A\u0430\u0434 \u0441\u0442\u0435 \u043C\u0435\u045A\u0430\u043B\u0438 \u043F\u043E\u0434\u0435\u0448\u0430\u0432\u0430\u045A\u0430 \u0434\u0438\u0440\u0435\u043A\u0442\u043D\u043E. +ConnectNodeCommand.ShortDescription=\u041F\u043E\u043D\u043E\u0432\u043E \u0441\u0435 \u043F\u043E\u0432\u0435\u0436\u0438\u0442\u0435 \u043D\u0430 \u043C\u0430\u0448\u0438\u043D\u0443 +QuietDownCommand.ShortDescription=\u041F\u0440\u0438\u043F\u0440\u0435\u043C\u0438 Jenkins \u0437\u0430 \u043F\u043E\u043D\u043E\u0432\u043E \u043F\u043E\u043A\u0440\u0435\u0442\u0430\u045A\u0435. \u041D\u0438\u0441\u0443 \u0434\u043E\u0437\u0432\u043E\u0459\u0435\u043D\u0430 \u043D\u043E\u0432\u0430 \u0438\u0437\u0433\u0440\u0430\u0434\u045A\u0430. +DisconnectNodeCommand.ShortDescription=\u041F\u0440\u0435\u043A\u0438\u043D\u0435 \u0432\u0435\u0437\u0443 \u0441\u0430 \u043C\u0430\u0448\u0438\u043D\u043E\u043C. +CancelQuietDownCommand.ShortDescription=\u041F\u043E\u043D\u0438\u0448\u0442\u0438 \u043C\u0435\u0440\u0435 \u043F\u043E\u0447\u0435\u0442\u0435 \u0437\u0430 \u043F\u0440\u0438\u043F\u0440\u0435\u043C\u0443 \u043F\u043E\u043D\u043E\u0432\u043E\u0433 \u043F\u043E\u043A\u0440\u0435\u0442\u0430\u045A\u0430. +OfflineNodeCommand.ShortDescription=\u0421\u0443\u0441\u043F\u0435\u043D\u0437\u0438\u0458\u0430 \u0443\u043F\u043E\u0442\u0440\u0435\u0431\u0435 \u043C\u0430\u0448\u0438\u043D\u0435 \u0437\u0430 \u0438\u0437\u0433\u0440\u0430\u0434\u045A\u0443 \u0434\u043E \u0441\u043B\u0435\u0434\u0435\u045B\u0435 "online-node" \u043A\u043E\u043C\u0430\u043D\u0434\u0435. +WaitNodeOnlineCommand.ShortDescription=\u0421\u0430\u0447\u0435\u043A\u0430\u0458 \u0434\u043E\u043A \u043D\u0435\u043A\u0430 \u043C\u0430\u0448\u0438\u043D\u0430 \u0431\u0443\u0434\u0435 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0430. +WaitNodeOfflineCommand.ShortDescription=\u0421\u0430\u0447\u0435\u043A\u0430\u0458 \u0434\u043E\u043A \u043D\u0435\u043A\u0430 \u043C\u0430\u0448\u0438\u043D\u0430 \u0431\u0443\u0434\u0435 \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0430. +CliProtocol.displayName=\u041F\u0440\u043E\u0442\u043E\u043A\u043E\u043B \u0437\u0430 Jenkins \u043F\u0440\u0435\u043A\u043E \u043A\u043E\u043C\u0430\u043D\u0434\u043D\u0435 \u043B\u0438\u043D\u0438\u0458\u0435, \u0432\u0435\u0440\u0437\u0438\u0458\u0430 1 +CliProtocol2.displayName=\u041F\u0440\u043E\u0442\u043E\u043A\u043E\u043B \u0437\u0430 Jenkins \u043F\u0440\u0435\u043A\u043E \u043A\u043E\u043C\u0430\u043D\u0434\u043D\u0435 \u043B\u0438\u043D\u0438\u0458\u0435, \u0432\u0435\u0440\u0437\u0438\u0458\u0430 2 +CLI.delete-node.shortDescription=\u0423\u043A\u043B\u043E\u043D\u0438 \u043C\u0430\u0448\u0438\u043D\u0443 \ No newline at end of file diff --git a/core/src/main/resources/hudson/cli/Messages_zh_CN.properties b/core/src/main/resources/hudson/cli/Messages_zh_CN.properties deleted file mode 100644 index c767020ed348c46f519a74942afe15d6028ea4cf..0000000000000000000000000000000000000000 --- a/core/src/main/resources/hudson/cli/Messages_zh_CN.properties +++ /dev/null @@ -1,10 +0,0 @@ -DeleteNodeCommand.ShortDescription=Deletes a node -DeleteJobCommand.ShortDescription=Deletes a job - -ClearQueueCommand.ShortDescription=Clears the build queue -ReloadConfigurationCommand.ShortDescription=Discard all the loaded data in memory and reload everything from file system. Useful when you modified config files directly on disk. -ConnectNodeCommand.ShortDescription=Reconnect to a node -QuietDownCommand.ShortDescription=Quiet down Jenkins, in preparation for a restart. Don''t start any builds. -CancelQuietDownCommand.ShortDescription=Cancel the effect of the "quiet-down" command. -OfflineNodeCommand.ShortDescription=Stop using a node for performing builds temporarily, until the next "online-node" command. - diff --git a/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index.jelly b/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index.jelly index b752609f48597957e6a3cdb25afd14537fd9ab7a..35988ba3635d6f62c94ddf2f3c7c8683659eeea8 100644 --- a/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index.jelly +++ b/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index.jelly @@ -24,7 +24,7 @@ THE SOFTWARE. - +

      diff --git a/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index.properties b/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index.properties index 5b67eef77097c1bce1f27075173aa2b3d3806f5e..60274c73652036de4dbac29797aa6aacbd2f1c42 100644 --- a/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index.properties +++ b/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index.properties @@ -28,4 +28,4 @@ description.2=To prevent that problem, you should act now. solution.1=Clean up some files from this partition to make more room. solution.2=\ Move JENKINS_HOME to a bigger partition. \ - See our Wiki for how to do this. + See our documentation for how to do this. diff --git a/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index_bg.properties b/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index_bg.properties new file mode 100644 index 0000000000000000000000000000000000000000..91faf92f5a063d6a10c4f1852e07e9572740eb9a --- /dev/null +++ b/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index_bg.properties @@ -0,0 +1,48 @@ +# The MIT License +# +# Bulgarian translation: Copyright (c) 2016, 2017, Alexander Shopov +# +# 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. + +# Clean up some files from this partition to make more room. +solution.1=\ + \u0418\u0437\u0442\u0440\u0438\u0439\u0442\u0435 \u0447\u0430\u0441\u0442 \u043e\u0442 \u0444\u0430\u0439\u043b\u043e\u0432\u0435\u0442\u0435 \u043e\u0442 \u0442\u043e\u0437\u0438 \u0434\u044f\u043b, \u0437\u0430 \u0434\u0430 \u043e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u0442\u0435 \u043f\u043e\u0432\u0435\u0447\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e. +# \ +# Move JENKINS_HOME to a bigger partition. \ +# See our Wiki for how to do this. +solution.2=\ + \u041f\u0440\u0435\u043c\u0435\u0441\u0442\u0435\u0442\u0435 JENKINS_HOME \u043d\u0430 \u043f\u043e-\u0433\u043e\u043b\u044f\u043c \u0434\u044f\u043b.\ + \u0412\u0438\u0436\u0442\u0435: \ + \u0443\u0438\u043a\u0438\u0442\u043e \u0437\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0437\u0430 \u0442\u043e\u0432\u0430. +# JENKINS_HOME is almost full +blurb=\ + \u0424\u0430\u0439\u043b\u043e\u0432\u0430\u0442\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430, \u043d\u0430 \u043a\u043e\u044f\u0442\u043e \u0435 JENKINS_HOME, \u0435 \u043f\u043e\u0447\u0442\u0438 \u043f\u044a\u043b\u043d\u0430 +JENKINS_HOME\ is\ almost\ full=\ + \u0424\u0430\u0439\u043b\u043e\u0432\u0430\u0442\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430, \u043d\u0430 \u043a\u043e\u044f\u0442\u043e \u0435 JENKINS_HOME, \u0435 \u043f\u043e\u0447\u0442\u0438 \u043f\u044a\u043b\u043d\u0430 +# \ +# Your JENKINS_HOME ({0}) is almost full. \ +# When this directory completely fills up, it\'ll wreak havoc because Jenkins can\'t store any more data. +description.1=\ + \ + \u0424\u0430\u0439\u043b\u043e\u0432\u0430\u0442\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 {0}, \u043d\u0430 \u043a\u043e\u044f\u0442\u043e \u0435 JENKINS_HOME ({0}) \u0435 \u043f\u043e\u0447\u0442\u0438 \u043f\u044a\u043b\u043d\u0430.\ + \u041a\u043e\u0433\u0430\u0442\u043e \u0434\u0438\u0441\u043a\u043e\u0432\u043e\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0441\u0432\u044a\u0440\u0448\u0438, Jenkinns \u043d\u044f\u043c\u0430 \u0434\u0430 \u0440\u0430\u0431\u043e\u0442\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u043d\u043e, \u0437\u0430\u0449\u043e\u0442\u043e\ + \u043d\u044f\u043c\u0430 \u043a\u044a\u0434\u0435 \u0434\u0430 \u0441\u044a\u0445\u0440\u0430\u043d\u044f\u0432\u0430 \u043d\u043e\u0432\u0438\u0442\u0435 \u0434\u0430\u043d\u043d\u0438. +# To prevent that problem, you should act now. +description.2=\ + \u0422\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0440\u0435\u0430\u0433\u0438\u0440\u0430\u0442\u0435 \u043d\u0435\u0437\u0430\u0431\u0430\u0432\u043d\u043e, \u0437\u0430 \u0434\u0430 \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0442\u0438\u0442\u0435 \u0442\u043e\u0437\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c. diff --git a/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index_de.properties b/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index_de.properties index 50dfd49b45e73737fa48a1fd5a665f8b98e84813..4ef1658f7e37dd4443e76757b113a578907041ae 100644 --- a/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index_de.properties +++ b/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index_de.properties @@ -5,4 +5,4 @@ description.1=Das Verzeichnis JENKINS_HOME ({0}) ist fast voll. Ist die description.2=Um dieses Problem zu vermeiden, sollten Sie jetzt handeln. solution.1=Lschen Sie Dateien dieses Laufwerks, um Speicherplatz wieder freizugeben. solution.2=Verschieben Sie JENKINS_HOME auf ein Laufwerk mit mehr freiem Platz. \ - Eine Anleitung dazu finden Sie im Wiki. + Eine Anleitung dazu finden Sie im Wiki. diff --git a/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index_es.properties b/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index_es.properties index 6415c2f555333c8e45cf710191ae37e59ccb74ba..5711590493a5a9787979bb875645d634fbffb140 100644 --- a/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index_es.properties +++ b/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index_es.properties @@ -28,6 +28,6 @@ description.2=Debes hacer algo ahora para prevenir el problema. solution.1=Borra ficheros de esta particin para liberar espacio. solution.2=\ Mueve el directorio de JENKINS_HOME a una partcin mayor. \ - Echa un vistazo a esta pgina para saber cmo hacerlo. + Echa un vistazo a esta pgina para saber cmo hacerlo. JENKINS_HOME\ is\ almost\ full=El directirio JENKINS_HOME ({0}) est casi lleno. diff --git a/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index_fr.properties b/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index_fr.properties index 8b52c71b8aa9a24d8633ff47fdda3c78dcb76a51..e09a76202386d524e321386d9b5871c726cc687c 100644 --- a/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index_fr.properties +++ b/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index_fr.properties @@ -24,5 +24,5 @@ blurb=JENKINS_HOME est presque plein description.1=Votre r\u00E9pertoire JENKINS_HOME ({0}) est presque plein. Quand il n''y aura plus d''espace disponible dans ce r\u00E9pertoire, Jenkins aura un comportement erratique, car il ne pourra plus stocker de donn\u00E9es. description.2=Pour \u00E9viter ce probl\u00E8me, vous devez agir maintenant. solution.1=Supprimez des fichiers sur cette partition afin de faire plus de place. -solution.2=D\u00E9placez JENKINS_HOME sur une partition plus grande. Consultez notre Wiki pour la d\u00E9marche \u00E0 suivre. +solution.2=D\u00E9placez JENKINS_HOME sur une partition plus grande. Consultez notre Wiki pour la d\u00E9marche \u00E0 suivre. JENKINS_HOME\ is\ almost\ full=JENKINS_HOME est presque plein diff --git a/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index_it.properties b/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index_it.properties new file mode 100644 index 0000000000000000000000000000000000000000..791261199b8ace2475c5a449dc8162cf34f0e831 --- /dev/null +++ b/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index_it.properties @@ -0,0 +1,10 @@ +blurb=JENKINS_HOME quasi piena +description.1=\ + JENKINS_HOME ({0}) quasi piena. \ + Quando questa directory sar completamente piena, ci causer scompiglio perch Jenkins non potr pi memorizzare dati. +description.2=Per prevenire tale problema, si dovrebbe agire ora. +solution.1=Eliminare alcuni file da questa partizione per creare pi spazio. +solution.2=\ + Spostare JENKINS_HOME su una partizione pi grande. \ + Si veda la nostra documentazione per scoprire come fare. +JENKINS_HOME\ is\ almost\ full=JENKINS_HOME quasi piena diff --git a/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index_ja.properties b/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index_ja.properties index bf281d21e1208d19af9bfdb14ac041390e28c4b6..e771df40e4a018c0048bcbc938b31e498b638bc2 100644 --- a/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index_ja.properties +++ b/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index_ja.properties @@ -28,5 +28,5 @@ description.2=\u554F\u984C\u304C\u8D77\u304D\u306A\u3044\u3088\u3046\u306B\u3001 solution.1=\u3053\u306E\u30D1\u30FC\u30C6\u30A3\u30B7\u30E7\u30F3\u306E\u30D5\u30A1\u30A4\u30EB\u3092\u524A\u9664\u3057\u3066\u3001\u7A7A\u304D\u3092\u4F5C\u308A\u307E\u3059\u3002 solution.2=\ JENKINS_HOME\u3092\u3082\u3063\u3068\u5BB9\u91CF\u306E\u3042\u308B\u30D1\u30FC\u30C6\u30A3\u30B7\u30E7\u30F3\u306B\u79FB\u3057\u307E\u3059\u3002\ - \u8A73\u3057\u3044\u65B9\u6CD5\u306F\u3001Wiki\u3092\u53C2\u7167\u3057\u3066\u304F\u3060\u3055\u3044\u3002 + \u8A73\u3057\u3044\u65B9\u6CD5\u306F\u3001Wiki\u3092\u53C2\u7167\u3057\u3066\u304F\u3060\u3055\u3044\u3002 JENKINS_HOME\ is\ almost\ full=JENKINS_HOME\u306E\u5BB9\u91CF\u304C\u307B\u307C\u3044\u3063\u3071\u3044\u3067\u3059\u3002 diff --git a/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index_nl.properties b/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index_nl.properties index b567d7a5ce81ab8ebd42d3986baa304cbc1b7027..c37c0bf5b5f35437aa1c224329aeb556d926e9e5 100644 --- a/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index_nl.properties +++ b/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index_nl.properties @@ -26,5 +26,5 @@ description.1=\ description.2=Om problemen te vermijden, dient U nu in te grijpen. solution.1=Gelieve ruimte vrij te maken op deze locatie. solution.2=\ - Verhuis JENKINS_HOME naar een locatie met grotere capaciteit. Op onze Wiki vind je meer informatie over hoe je dit kunt realizeren. + Verhuis JENKINS_HOME naar een locatie met grotere capaciteit. Op onze Wiki vind je meer informatie over hoe je dit kunt realizeren. JENKINS_HOME\ is\ almost\ full=Vrije ruimte in JENKINS_HOME is bijna opgebruikt! diff --git a/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index_pt.properties b/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index_pt.properties index c2ab796deee8e6642dfd390ef8927d644130f940..b1e7f81355c45789e2d08086db714389ddbdc300 100644 --- a/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index_pt.properties +++ b/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index_pt.properties @@ -25,6 +25,6 @@ description.2=Para previnir esse problema, fa\u00e7a alguma coisa agora. description.1=O seu JENKINS_HOME ({0}) est\u00e1 quase cheio. \ Quando esse diret\u00f3rio estiver lotado ocorrer\u00e3o alguns estragos, pois o Jenkins n\u00e3o pode gravar mais dado nenhum. solution.2=Mova o JENKINS_HOME para uma parti\u00e7\u00e3o maior. \ -Veja a nossa Wiki para aprender como fazer isso. +Veja a nossa Wiki para aprender como fazer isso. blurb=JENKINS_HOME est\u00e1 quase cheio solution.1=Limpe alguns arquivos dessa parti\u00e7\u00e3o para liberar mais espa\u00e7o. diff --git a/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index_pt_BR.properties b/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index_pt_BR.properties index 0e5b944a80856ffe78c86cba5aa64bf4667beeca..2f9b767f5d460f2e5c8ad1d8d0f72b6be5c35ff5 100644 --- a/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index_pt_BR.properties +++ b/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index_pt_BR.properties @@ -29,10 +29,10 @@ description.1=Seu diret\ufffdrio JENKINS_HOME ({0}) est\ufffd quase che Quando este diret\ufffdrio ficar completamente cheio, ocorrer\ufffd problemas porque o Jenkins n\ufffdo pode mais armazenar dados. # \ # Move JENKINS_HOME to a bigger partition. \ -# See our Wiki for how to do this. +# See our Wiki for how to do this. solution.2=\ Mova o diret\ufffdrio JENKINS_HOME para uma parti\ufffd\ufffdo maior. \ - Veja nosso Wiki para saber como fazer isto. + Veja nosso Wiki para saber como fazer isto. JENKINS_HOME\ is\ almost\ full=JENKINS_HOME est\ufffd quase cheio # JENKINS_HOME is almost full diff --git a/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index_sr.properties b/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index_sr.properties new file mode 100644 index 0000000000000000000000000000000000000000..82dbe60492ab1507eb48e0999ad1a3a2b9129159 --- /dev/null +++ b/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index_sr.properties @@ -0,0 +1,14 @@ +# This file is under the MIT License by authors + +JENKINS_HOME\ is\ almost\ full=JENKINS_HOME \u0458\u0435 \u0441\u043A\u043E\u0440\u043E \u043F\u0440\u0435\u043F\u0443\u043D\u043E +blurb=JENKINS_HOME \u0458\u0435 \u0441\u043A\u043E\u0440\u043E \u043F\u0440\u0435\u043F\u0443\u043D\u043E +description.1=\ \u0412\u0430\u0448 JENKINS_HOME ({0}) \u0458\u0435 \u0441\u043A\u043E\u0440\u043E \u043F\u0440\u0435\u043F\u0443\u043D. \ + \u041A\u0430\u0434 \u0441\u0435 \u0441\u043A\u0440\u043E\u0437 \u043D\u0430\u043F\u0443\u043D\u0438 \u043E\u0432\u0430\u0458 \u0434\u0438\u0440\u0435\u043A\u0442\u043E\u0440\u0438\u0443\u043C, Jenkins \u043D\u0435\u045B\u0435 \u043C\u043E\u045B\u0438 \u043F\u0438\u0441\u0430\u0442\u0438 \u0432\u0438\u0448\u0435 \u043F\u043E\u0434\u0430\u0442\u0430\u043A\u0430. +description.2=\u0414\u0430 \u0431\u0438 \u0441\u0435 \u0441\u043F\u0440\u0435\u0447\u0438\u043E \u043E\u0432\u0430\u0458 \u043F\u0440\u043E\u0431\u043B\u0435\u043C, \u043F\u043E\u0442\u0440\u0435\u0431\u043D\u043E \u0458\u0435 \u0434\u0435\u043B\u043E\u0432\u0430\u0442\u0438 \u043E\u0434\u043C\u0430\u0445. +solution.1=\u041E\u0431\u0440\u0438\u0448\u0435\u0442\u0435 \u043D\u0435\u043A\u0435 \u0434\u0430\u0442\u043E\u0442\u0435\u043A\u0435 \u0441\u0430 \u043E\u0432\u0435 \u043F\u0430\u0440\u0442\u0438\u0446\u0438\u0458\u0435 \u0434\u0430 \u0431\u0438 \u0441\u0435 \u043E\u0441\u043B\u043E\u0431\u043E\u0434\u0438\u043B\u043E \u043C\u0435\u0441\u0442\u0430. +solution.2=\ +\u041F\u0440\u0435\u0431\u0430\u0446\u0438\u0442\u0435 <\u0422\u0422>JENKINS_HOME \u0432\u0435\u045B\u043E\u0458 \u043F\u0430\u0440\u0442\u0438\u0446\u0438\u0458\u0438.\ +\u041F\u043E\u0433\u043B\u0435\u0434\u0430\u0458\u0442\u0435 <\u0430 href="https://jenkins.io/redirect/migrate-jenkins-home">\u0412\u0438\u043A\u0438 \u0442\u043E\u043C\u0435 \u043A\u0430\u043A\u043E \u0434\u0430 \u0442\u043E \u0443\u0440\u0430\u0434\u0438\u0442\u0438. +Dit= + +# TODO FIXME This file looks completely messed up? \ No newline at end of file diff --git a/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index_zh_TW.properties b/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index_zh_TW.properties index c68caa7b9afcfcab8fea37c71dc5966c73fa45ca..b02747e2a7fc389e3c88d2f56e39db0b150a343b 100644 --- a/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index_zh_TW.properties +++ b/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/index_zh_TW.properties @@ -29,5 +29,5 @@ description.2=\u70ba\u4e86\u907f\u514d\u767c\u751f\u61be\u4e8b\uff0c\u60a8\u61c9 solution.1=\u6e05\u6389\u9019\u500b\u5206\u5272\u5340\u4e0a\u7684\u67d0\u4e9b\u6a94\u6848\uff0c\u7a7a\u51fa\u4e00\u4e9b\u7a7a\u9593\u3002 solution.2=\ \u5c07 JENKINS_HOME \u79fb\u5230\u6bd4\u8f03\u5927\u7684\u5206\u5272\u5340\u88e1\u3002\ - \u5728\u6211\u5011\u7684 Wiki \u4e0a\u6709\u4f5c\u6cd5\u8aaa\u660e\u3002 + \u5728\u6211\u5011\u7684 Wiki \u4e0a\u6709\u4f5c\u6cd5\u8aaa\u660e\u3002 JENKINS_HOME\ is\ almost\ full=JENKINS_HOME \u5feb\u6eff\u4e86 diff --git a/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/message.jelly b/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/message.jelly index beefff24ce7fae5534172e68c68a38b66dc26776..1ff3673ab660c441ac16daba0abb4423c755f5d6 100644 --- a/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/message.jelly +++ b/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/message.jelly @@ -24,13 +24,11 @@ THE SOFTWARE. -
      -
      -
      - - -
      - ${%blurb(app.rootDir)} -
      -
      -
      \ No newline at end of file +
      +
      + + + + ${%blurb(app.rootDir)} +
      + diff --git a/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/message.properties b/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/message.properties index 179c3ad6461b2aca6040f8894928ce47f954dee0..b8196734b1c0070fba41a269ea1730bccd136883 100644 --- a/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/message.properties +++ b/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/message.properties @@ -1 +1 @@ -blurb=Your Jenkins data directory "{0}" (AKA JENKINS_HOME) is almost full. You should act on it before it gets completely full. \ No newline at end of file +blurb=Your Jenkins data directory {0} (AKA JENKINS_HOME) is almost full. You should act on it before it gets completely full. \ No newline at end of file diff --git a/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/message_bg.properties b/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/message_bg.properties new file mode 100644 index 0000000000000000000000000000000000000000..967bddc28aca5bd7ece915cd1b8c2eb2b2eecd56 --- /dev/null +++ b/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/message_bg.properties @@ -0,0 +1,28 @@ +# The MIT License +# +# Bulgarian translation: Copyright (c) 2016, Alexander Shopov +# +# 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. + +Dismiss= +Tell\ me\ more=\ + \u041f\u043e\u0432\u0435\u0447\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f +# Your Jenkins data directory "{0}" (AKA JENKINS_HOME) is almost full. You should act on it before it gets completely full. +blurb=\ + \u0414\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f\u0442\u0430 \u0441\u0430 \u0434\u0430\u043d\u043d\u0438 \u043d\u0430 Jenkins \u201e{0}\u201c \u2014 JENKINS_HOME) diff --git a/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/message_de.properties b/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/message_de.properties index d04a499f85f177113e0f257d51bc399481a9ddd2..ad55f0936736fd7a0660d79f48448ad2947c1426 100644 --- a/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/message_de.properties +++ b/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/message_de.properties @@ -1,5 +1,5 @@ Tell\ me\ more=Mehr Informationen dazu Dismiss=Zur Kenntnis genommen blurb=\ - Ihr Jenkins Datenverzeichnis "{0}" (alias JENKINS_HOME) ist fast voll. \ + Ihr Jenkins Datenverzeichnis \u201E{0}\u201C (alias JENKINS_HOME) ist fast voll. \ Sie sollten handeln, bevor der Speicherplatz komplett erschpft ist. diff --git a/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/message_it.properties b/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/message_it.properties new file mode 100644 index 0000000000000000000000000000000000000000..a6a78adfd17904f7b1f75d7af9fba6c391fbdd7d --- /dev/null +++ b/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/message_it.properties @@ -0,0 +1,3 @@ +blurb=La directory dati di Jenkins "{0}" (nota anche come JENKINS_HOME) quasi piena. Si dovrebbe agire prima che diventi completamente piena. +Tell\ me\ more=Dimmi di pi +Dismiss=Ignora diff --git a/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/message_sr.properties b/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/message_sr.properties new file mode 100644 index 0000000000000000000000000000000000000000..7f5e6eac953ef5209644aa251862868efe393500 --- /dev/null +++ b/core/src/main/resources/hudson/diagnosis/HudsonHomeDiskUsageMonitor/message_sr.properties @@ -0,0 +1,5 @@ +# This file is under the MIT License by authors + +Tell\ me\ more=\u041E\u0431\u0458\u0430\u0441\u043D\u0438 +Dismiss=\u041E\u0442\u043A\u0430\u0436\u0438 +blurb=\u0412\u0430\u0448 Jenkins \u0434\u0438\u0440\u0435\u043A\u0442\u043E\u0440\u0438\u0458\u0443\u043C "{0}" (<\u0422\u0422>JENKINS_HOME) \u0458\u0435 \u0441\u043A\u043E\u0440\u043E \u043F\u0440\u0435\u043F\u0443\u043D. \u0414\u0435\u043B\u0443\u0458\u0442\u0435 \u043F\u0440\u0435 \u043D\u0435\u0433\u043E \u0448\u0442\u043E \u0458\u0435 \u0441\u043A\u0440\u043E\u0437 \u043F\u0440\u0435\u043F\u0443\u043D. diff --git a/core/src/main/resources/hudson/diagnosis/MemoryUsageMonitor/index_bg.properties b/core/src/main/resources/hudson/diagnosis/MemoryUsageMonitor/index_bg.properties new file mode 100644 index 0000000000000000000000000000000000000000..17fcc9d499abb46ab867c0e7bbfdc6060e38511c --- /dev/null +++ b/core/src/main/resources/hudson/diagnosis/MemoryUsageMonitor/index_bg.properties @@ -0,0 +1,32 @@ +# The MIT License +# +# Bulgarian translation: Copyright (c) 2016, Alexander Shopov +# +# 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. + +Long=\ + \u0414\u044a\u043b\u044a\u0433 +Timespan=\ + \u041f\u0435\u0440\u0438\u043e\u0434 +Short=\ + \u041a\u0440\u0430\u0442\u044a\u043a +Medium=\ + \u0421\u0440\u0435\u0434\u0435\u043d +JVM\ Memory\ Usage=\ + \u0418\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u043d\u0435 \u043d\u0430 \u043f\u0430\u043c\u0435\u0442 \u043e\u0442 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u043d\u0430\u0442\u0430 \u043c\u0430\u0448\u0438\u043d\u0430 \u043d\u0430 Java diff --git a/core/src/main/resources/hudson/diagnosis/MemoryUsageMonitor/index_it.properties b/core/src/main/resources/hudson/diagnosis/MemoryUsageMonitor/index_it.properties new file mode 100644 index 0000000000000000000000000000000000000000..e3dd2e29e2a08a5f6ad30d00a016fb25e97b015d --- /dev/null +++ b/core/src/main/resources/hudson/diagnosis/MemoryUsageMonitor/index_it.properties @@ -0,0 +1,5 @@ +JVM\ Memory\ Usage=Utilizzo memoria JVM +Timespan=Intervallo temporale +Short=Breve +Medium=Medio +Long=Lungo diff --git a/core/src/main/resources/hudson/diagnosis/MemoryUsageMonitor/index_sr.properties b/core/src/main/resources/hudson/diagnosis/MemoryUsageMonitor/index_sr.properties new file mode 100644 index 0000000000000000000000000000000000000000..1f7374f74686531c8b44e1bb9f92c0138aef1c27 --- /dev/null +++ b/core/src/main/resources/hudson/diagnosis/MemoryUsageMonitor/index_sr.properties @@ -0,0 +1,7 @@ +# This file is under the MIT License by authors + +JVM\ Memory\ Usage=\u0423\u043F\u043E\u0442\u0440\u0435\u0431\u0430 \u043C\u0435\u043C\u043E\u0440\u0438\u0458\u0435 Java \u0432\u0438\u0440\u0442\u0443\u0435\u043B\u043D\u0435 \u043C\u0430\u0448\u0438\u043D\u0435 +Timespan=\u0412\u0440\u0435\u043C\u0435 +Short=\u041A\u0440\u0430\u0442\u043A\u043E +Medium=\u0421\u0440\u0435\u0434\u045A\u0435 +Long=\u0414\u0443\u0433\u043E diff --git a/core/src/main/resources/hudson/diagnosis/Messages_bg.properties b/core/src/main/resources/hudson/diagnosis/Messages_bg.properties index 1a3ea6cfade1dc525ce73d04cc73991dbc9ed880..25432bc2ea3f1c0cefc31c10e46a3ed420361ac9 100644 --- a/core/src/main/resources/hudson/diagnosis/Messages_bg.properties +++ b/core/src/main/resources/hudson/diagnosis/Messages_bg.properties @@ -1,6 +1,6 @@ # The MIT License # -# Bulgarian translation: Copyright (c) 2015, 2016, Alexander Shopov +# Bulgarian translation: Copyright (c) 2015, 2016, 2017, Alexander Shopov # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -31,3 +31,12 @@ OldDataMonitor.DisplayName=\ \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u0441\u0442\u0430\u0440\u0438\u0442\u0435 \u0434\u0430\u043d\u043d\u0438 HudsonHomeDiskUsageMonitor.DisplayName=\ \u0418\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u043d\u043e \u0434\u0438\u0441\u043a\u043e\u0432\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e +# Reverse Proxy Setup +ReverseProxySetupMonitor.DisplayName=\ + \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043d\u0430 \u0441\u044a\u0440\u0432\u044a\u0440\u0430-\u043e\u0431\u0440\u0430\u0442\u0435\u043d \u043f\u043e\u0441\u0440\u0435\u0434\u043d\u0438\u043a +# Too Many Jobs Not Organized in Views +TooManyJobsButNoView.DisplayName=\ + \u041f\u0440\u0435\u043a\u0430\u043b\u0435\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0437\u0430\u0434\u0430\u0447\u0438 \u043d\u0435 \u0441\u0430 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0438\u0440\u0430\u043d\u0438 \u043f\u043e \u0438\u0437\u0433\u043b\u0435\u0434\u0438 +# Missing Descriptor ID +NullIdDescriptorMonitor.DisplayName=\ + \u041b\u0438\u043f\u0441\u0432\u0430\u0449 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043d\u0430 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 diff --git a/core/src/main/resources/hudson/diagnosis/Messages_de.properties b/core/src/main/resources/hudson/diagnosis/Messages_de.properties index 894518687d8d7c2d1f211bc02e1569079364b207..39c9577a0c0fc4e0880c3fba906d44319447c2be 100644 --- a/core/src/main/resources/hudson/diagnosis/Messages_de.properties +++ b/core/src/main/resources/hudson/diagnosis/Messages_de.properties @@ -25,3 +25,6 @@ MemoryUsageMonitor.TOTAL=Total OldDataMonitor.DisplayName=Veraltete Daten verwalten OldDataMonitor.Description=Konfiguration bereinigen, um \u00DCberbleibsel alter Plugins und fr\u00FCherer Versionen zu entfernen. HudsonHomeDiskUsageMonitor.DisplayName=Speicherplatz-Monitor +NullIdDescriptorMonitor.DisplayName=Fehlende Descriptor-ID +ReverseProxySetupMonitor.DisplayName=Reverse-Proxy-Konfiguration +TooManyJobsButNoView.DisplayName=Zu viele Elemente nicht in Ansichten organisiert diff --git a/core/src/main/resources/hudson/diagnosis/Messages_it.properties b/core/src/main/resources/hudson/diagnosis/Messages_it.properties new file mode 100644 index 0000000000000000000000000000000000000000..762f9fb1fda4430243b422930663f2f8fa5578e9 --- /dev/null +++ b/core/src/main/resources/hudson/diagnosis/Messages_it.properties @@ -0,0 +1,9 @@ +MemoryUsageMonitor.USED=Utilizzata +MemoryUsageMonitor.TOTAL=Totale +OldDataMonitor.Description=Ripulisci i file di configurazione per rimuovere residui dovuti a vecchi plugin e vecchie versioni. +OldDataMonitor.DisplayName=Gestisci dati vecchi +HudsonHomeDiskUsageMonitor.DisplayName=Monitor utilizzo spazio su disco + +NullIdDescriptorMonitor.DisplayName=ID descrittore mancante +ReverseProxySetupMonitor.DisplayName=Impostazione reverse proxy +TooManyJobsButNoView.DisplayName=Troppi processi non organizzati in viste diff --git a/core/src/main/resources/hudson/diagnosis/Messages_pl.properties b/core/src/main/resources/hudson/diagnosis/Messages_pl.properties new file mode 100644 index 0000000000000000000000000000000000000000..d06325b6aebedeee28d04fb132302d2b10fbaa86 --- /dev/null +++ b/core/src/main/resources/hudson/diagnosis/Messages_pl.properties @@ -0,0 +1,23 @@ +# The MIT License +# +# Copyright (c) 2016 Damian Szczepanik +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +OldDataMonitor.DisplayName=Zarz\u0105dzanie starymi danymi +OldDataMonitor.Description=Usuwanie danych po nieu\u017Cywanych lub starszych wersjach wtyczek. diff --git a/core/src/main/resources/hudson/diagnosis/Messages_ru.properties b/core/src/main/resources/hudson/diagnosis/Messages_ru.properties new file mode 100644 index 0000000000000000000000000000000000000000..3bddb6e1be12cf333395a3961bb110fec524c57f --- /dev/null +++ b/core/src/main/resources/hudson/diagnosis/Messages_ru.properties @@ -0,0 +1,28 @@ +# The MIT License +# +# Copyright (c) 2017, Kseniia Nenasheva +# +# 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. + +MemoryUsageMonitor.TOTAL=\u0412\u0441\u0435\u0433\u043E +OldDataMonitor.Description=\u041E\u0447\u0438\u0441\u0442\u043A\u0430 \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0434\u043B\u044F \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u044F \u043E\u0441\u0442\u0430\u0442\u043A\u043E\u0432 \u0441\u0442\u0430\u0440\u044B\u0445 \u043F\u043B\u0430\u0433\u0438\u043D\u043E\u0432 \u0438 \u0431\u043E\u043B\u0435\u0435 \u0440\u0430\u043D\u043D\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u0439. +OldDataMonitor.DisplayName=\u0423\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u043C\u0438 \u0434\u0430\u043D\u043D\u044B\u043C\u0438 +HudsonHomeDiskUsageMonitor.DisplayName=\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u043C\u043E\u0435 \u0434\u0438\u0441\u043A\u043E\u0432\u043E\u0435 \u043F\u0440\u043E\u0441\u0442\u0440\u0430\u043D\u0441\u0442\u0432\u043E +NullIdDescriptorMonitor.DisplayName=\u041E\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0438\u0434\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u043E\u0440 \u0434\u0435\u0441\u043A\u0440\u0438\u043F\u0442\u043E\u0440\u0430 +ReverseProxySetupMonitor.DisplayName=\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0430 Reverse Proxy \ No newline at end of file diff --git a/core/src/main/resources/hudson/diagnosis/Messages_sr.properties b/core/src/main/resources/hudson/diagnosis/Messages_sr.properties new file mode 100644 index 0000000000000000000000000000000000000000..b070f89027135acfd4e46480f60e8b2473811c3a --- /dev/null +++ b/core/src/main/resources/hudson/diagnosis/Messages_sr.properties @@ -0,0 +1,5 @@ +# This file is under the MIT License by authorsMemoryUsageMonitor.USED=\u041A\u043E\u0440\u0438\u0441\u0442\u0438 + +MemoryUsageMonitor.TOTAL=\u0423\u043A\u0443\u043F\u043D\u043E +OldDataMonitor.Description=\u0418\u0437\u0431\u0440\u0438\u0448\u0438\u0442\u0435 \u043F\u043E\u0434\u0435\u0448\u0430\u0432\u0430\u045A\u0430 \u0434\u0430 \u0431\u0438\u0441\u0442\u0435 \u0443\u043A\u043B\u043E\u043D\u0438\u043B\u0438 \u0441\u0432\u0435 \u043E\u0441\u0442\u0430\u0442\u043A\u0435 \u043E\u0434 \u0441\u0442\u0430\u0440\u0438\u0445 \u043C\u043E\u0434\u0443\u043B\u0430 \u0438 \u0432\u0435\u0440\u0437\u0438\u0458\u0430. +OldDataMonitor.DisplayName=\u0423\u0440\u0435\u0434\u0438 \u0441\u0442\u0430\u0440\u0435 \u043F\u043E\u0434\u0430\u0442\u043A\u0435 \ No newline at end of file diff --git a/core/src/main/resources/hudson/diagnosis/NullIdDescriptorMonitor/message.jelly b/core/src/main/resources/hudson/diagnosis/NullIdDescriptorMonitor/message.jelly index d194fc95f75e9da24dcdf595cf2cb4d09435d79c..610d36a6be8b289b63c5422a7453e2de48af4b25 100644 --- a/core/src/main/resources/hudson/diagnosis/NullIdDescriptorMonitor/message.jelly +++ b/core/src/main/resources/hudson/diagnosis/NullIdDescriptorMonitor/message.jelly @@ -24,14 +24,12 @@ THE SOFTWARE. -
      - ${%blurb} -
        - -
      • - ${%problem(d, d.displayName, app.pluginManager.whichPlugin(d.getClass()))} -
      • -
        -
      -
      +
      +
      +
      ${%blurb}
      + +
      ${%problem(d, d.displayName, app.pluginManager.whichPlugin(d.getClass()))}
      +
      +
      +
      diff --git a/core/src/main/resources/hudson/diagnosis/NullIdDescriptorMonitor/message.properties b/core/src/main/resources/hudson/diagnosis/NullIdDescriptorMonitor/message.properties index 399938b97a620a2667a145542d9aa4929a60fdaf..60fb060dffd056221ac14a3ac415a910a384ac11 100644 --- a/core/src/main/resources/hudson/diagnosis/NullIdDescriptorMonitor/message.properties +++ b/core/src/main/resources/hudson/diagnosis/NullIdDescriptorMonitor/message.properties @@ -1,3 +1,3 @@ blurb=The following extensions have no ID value and therefore likely cause a problem. Please upgrade these plugins if they are not the latest, \ - and if they are the latest, please file a bug so that we can fix them. + and if they are the latest, please file a bug so that we can fix them problem=Descriptor {0} from plugin {2} with display name {1} \ No newline at end of file diff --git a/core/src/main/resources/hudson/diagnosis/NullIdDescriptorMonitor/message_bg.properties b/core/src/main/resources/hudson/diagnosis/NullIdDescriptorMonitor/message_bg.properties new file mode 100644 index 0000000000000000000000000000000000000000..82eaa1e162ffa3ce881dc4a1f2b3db46cb010841 --- /dev/null +++ b/core/src/main/resources/hudson/diagnosis/NullIdDescriptorMonitor/message_bg.properties @@ -0,0 +1,31 @@ +# The MIT License +# +# Bulgarian translation: Copyright (c) 2016, Alexander Shopov +# +# 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. + +# The following extensions have no ID value and therefore likely cause a problem. Please upgrade these plugins if they are not the latest, \ +# and if they are the latest, please file a bug so that we can fix them. +blurb=\ + \u0421\u043b\u0435\u0434\u043d\u0438\u0442\u0435 \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0438 \u0441\u0430 \u0431\u0435\u0437 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 (ID), \u043a\u043e\u0435\u0442\u043e \u043c\u043e\u0436\u0435 \u0434\u0430 \u0434\u043e\u0432\u0435\u0434\u0435 \u0434\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0438.\ + \u041e\u0431\u043d\u043e\u0432\u0435\u0442\u0435 \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0438\u0442\u0435 \u043a\u044a\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0430\u0442\u0430 \u0438\u043c \u0432\u0435\u0440\u0441\u0438\u044f. \u0410\u043a\u043e \u0432\u0435\u0447\u0435 \u0441\u0430 \u043e\u0431\u043d\u043e\u0432\u0435\u043d\u0438, \u043c\u043e\u043b\u0438\u043c \u0434\u0430\ + \u043f\u043e\u0434\u0430\u0434\u0435\u0442\u0435 \u0434\u043e\u043a\u043b\u0430\u0434 \u0437\u0430 \u0433\u0440\u0435\u0448\u043a\u0430, \u0437\u0430 \u0434\u0430 \u043a\u043e\u0440\u0438\u0433\u0438\u0440\u0430\u043c\u0435 \u0442\u043e\u0432\u0430. +# Descriptor {0} from plugin {2} with display name {1} +problem=\ + \u0414\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 {0} \u043e\u0442 \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0430\u0442\u0430 {2} \u0441 \u0438\u043c\u0435 {1} diff --git a/core/src/main/resources/hudson/diagnosis/NullIdDescriptorMonitor/message_it.properties b/core/src/main/resources/hudson/diagnosis/NullIdDescriptorMonitor/message_it.properties new file mode 100644 index 0000000000000000000000000000000000000000..d968c985079f45827261dcd2f8f1f61d5ab9f752 --- /dev/null +++ b/core/src/main/resources/hudson/diagnosis/NullIdDescriptorMonitor/message_it.properties @@ -0,0 +1,3 @@ +blurb=Le seguenti estensioni non hanno un ID e pertanto probabilmente causeranno un problema. Aggiornare questi plugin se non sono all''ultima versione, \ +e se sono l''ultima versione, segnalare l''errore in modo che possiamo correggerli. +problem=Descrittore {0} del plugin {2} con nome visualizzato {1} diff --git a/core/src/main/resources/hudson/diagnosis/NullIdDescriptorMonitor/message_sr.properties b/core/src/main/resources/hudson/diagnosis/NullIdDescriptorMonitor/message_sr.properties new file mode 100644 index 0000000000000000000000000000000000000000..352d8fc5cf003dfb6a79aaba3a2c35fe0f3ea88a --- /dev/null +++ b/core/src/main/resources/hudson/diagnosis/NullIdDescriptorMonitor/message_sr.properties @@ -0,0 +1,4 @@ +# This file is under the MIT License by authors + +blurb=\u0421\u043B\u0435\u0434\u0435\u045B\u0438 \u0434\u043E\u0434\u0430\u0446\u0438 \u043D\u0435\u043C\u0430\u0458\u0443 \u0418\u0414 \u0438 \u0442\u0430\u043A\u043E, \u0432\u0435\u0440\u043E\u0432\u0430\u0442\u043D\u043E, \u0443\u0437\u0440\u043E\u043A \u043D\u0435\u043A\u043E\u0433 \u043F\u0440\u043E\u0431\u043B\u0435\u043C\u0430. \u041C\u043E\u043B\u0438\u043C\u043E \u0432\u0430\u0441, \u0430\u0436\u0443\u0440\u0438\u0440\u0430\u0458\u0442\u0435 \u043E\u0432\u0435 \u043C\u043E\u0434\u0443\u043B\u0435 \u0430\u043A\u043E \u043D\u0438\u0441\u0443 \u043F\u043E\u0441\u043B\u0435\u0434\u045A\u0435 \u0432\u0435\u0440\u0437\u0438\u0458\u0435. \u0410\u043A\u043E \u0432\u0435\u045B \u0458\u0435\u0441\u0443 \u043F\u043E\u0441\u043B\u0435\u0434\u045A\u0435, \u0434\u0430\u0458\u0442\u0435 \u0438\u0437\u0432\u0435\u0448\u0442\u0430\u0458 \u043E \u0433\u0440\u0435\u0448\u043A\u0430\u043C\u0430 \u0434\u0430 \u043C\u043E\u0436\u0435\u043C\u043E \u0434\u0430 \u0438\u0445 \u0438\u0441\u043F\u0440\u0430\u0432\u0438\u043C\u043E. +problem=\u0414\u0435\u0441\u043A\u0440\u0438\u043F\u0442\u043E\u0440 {0} \u0438\u0437 \u043C\u043E\u0434\u0443\u043B\u0435 {2} \u0441\u0430 \u0438\u043C\u0435\u043D\u043E\u043C {1} diff --git a/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage.jelly b/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage.jelly index 06c28d21ceef3f24d419be98f554f0910dd69a0f..56587c3092ecad6a9c7c4b110869e8db9e19dd02 100644 --- a/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage.jelly +++ b/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage.jelly @@ -24,7 +24,7 @@ THE SOFTWARE. - +

      ${%Manage Old Data}

      @@ -34,15 +34,22 @@ THE SOFTWARE. ${%Type}${%Name}${%Version} - - - ${range} + ${obj.class.name} ${obj.fullName?:obj.fullDisplayName?:obj.displayName?:obj.name} - ${range} + + + + ${item.value} + + + ${item.value} + + + ${item.value.extra} diff --git a/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_bg.properties b/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_bg.properties new file mode 100644 index 0000000000000000000000000000000000000000..ab631fc123448b2757c692d1831c1fd8789a5cd4 --- /dev/null +++ b/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_bg.properties @@ -0,0 +1,105 @@ +# The MIT License +# +# Bulgarian translation: Copyright (c) 2016, Alexander Shopov +# +# 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. + +Name=\ + \u0418\u043c\u0435 +# \ +# 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.=\ + \u041d\u0435 \u0441\u0430 \u043e\u0442\u043a\u0440\u0438\u0442\u0438 \u0441\u0442\u0430\u0440\u0438 \u0434\u0430\u043d\u043d\u0438. +Version=\ + \u0412\u0435\u0440\u0441\u0438\u044f +Resave\ data\ files\ with\ structure\ changes\ no\ newer\ than\ Jenkins=\ + \u041f\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u0432\u0430\u043d\u0435 \u043d\u0430 \u0444\u0430\u0439\u043b\u043e\u0432\u0435\u0442\u0435 \u0441 \u043f\u0440\u043e\u043c\u0435\u043d\u0438 \u043f\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u0442\u0430 \u043d\u0435 \u043f\u043e \u043d\u043e\u0432\u0438, \u043e\u0442 \u0442\u0435\u043a\u0443\u0449\u0430\u0442\u0430\ + \u0432\u0435\u0440\u0441\u0438\u044f \u043d\u0430 Jenkins. +Error=\ + \u0413\u0440\u0435\u0448\u043a\u0430 +Type=\ + \u0412\u0438\u0434 +# \ +# 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=\ + \u0412 \u043d\u044f\u043a\u043e\u0438 \u0441\u043b\u0443\u0447\u0430\u0438 \u0432\u044a\u0437\u043d\u0438\u043a\u0432\u0430\u0442 \u0433\u0440\u0435\u0448\u043a\u0438 \u043f\u0440\u0438 \u0447\u0435\u0442\u0435\u043d\u0435\u0442\u043e \u043d\u0430 \u0434\u0430\u043d\u043d\u0438\u0442\u0435 (\u043d\u0430\u043f\u0440. \u0430\u043a\u043e \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0430\ + \u0434\u043e\u0431\u0430\u0432\u0438 \u0434\u0430\u043d\u043d\u0438, \u043d\u043e \u0441\u043b\u0435\u0434 \u0442\u043e\u0432\u0430 \u0431\u0438\u0432\u0430 \u0438\u0437\u043a\u043b\u044e\u0447\u0435\u043d\u0430, \u0430\u043a\u043e \u043e\u0449\u0435 \u043d\u0435 \u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043a\u043e\u0434 \u0437\u0430\ + \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044f \u0438\u043b\u0438 \u0430\u043a\u043e Jenkins \u0431\u0438\u0432\u0430 \u0441\u043c\u0435\u043d\u0435\u043d \u0441 \u043f\u043e-\u0441\u0442\u0430\u0440\u0430 \u0432\u0435\u0440\u0441\u0438\u044f, \u043d\u043e \u043d\u043e\u0432\u0430\u0442\u0430 \u0432\u0435\u0447\u0435 \u0435\ + \u0437\u0430\u043f\u0438\u0441\u0430\u043b\u0430 \u0434\u0430\u043d\u043d\u0438). \u0422\u0435\u0437\u0438 \u0433\u0440\u0435\u0448\u043a\u0438 \u0441\u0435 \u0432\u043f\u0438\u0441\u0432\u0430\u0442 \u0432 \u0436\u0443\u0440\u043d\u0430\u043b\u0438\u0442\u0435, \u043d\u043e \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, \u0441\u0435 \u043f\u0440\u0435\u0441\u043a\u0430\u0447\u0430\u0442, \u0437\u0430 \u0434\u0430 \u043c\u043e\u0436\u0435 Jenkins \u0434\u0430 \u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430 \u043d\u043e\u0440\u043c\u0430\u043b\u043d\u043e. 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 9834cb21d567d8e20ad2696d53cb2445c00942d2..80bca0260a836da232ec2ced7a55d7024b9665f1 100644 --- a/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_de.properties +++ b/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_de.properties @@ -1,66 +1,66 @@ -# The MIT License -# -# Copyright (c) 2004-2010, Sun Microsystems, Inc., Alan Harder, Simon Wiest -# -# 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. - -Error=Fehler -Manage\ Old\ Data=Veraltete Daten verwalten -Name=Name -No\ old\ data\ was\ found.=Keine veralteten Daten gefunden. -Resave\ data\ files\ with\ structure\ changes\ no\ newer\ than\ Jenkins=\ - Aktualisiere Dateien mit Strukturnderungen nicht aktueller als Jenkins -Type=Typ -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 folgendermaen vor: \ - Dateien werden beim Einlesen in den Speicher in das neue Datenformat migriert, aber \ - nicht automatisch auf Festplatte zurckgeschrieben. Die Konfigurationsdateien bleiben also \ - unverndert. Dies ermglicht bei Problemen ein Jenkins-Downgrade zu einer frheren \ - Version. Auf der anderen Seite knnen dadurch Dateien endlos in lngst veralteten \ - Formaten verbleiben. Die folgende Tabelle zeigt Dateien, die veraltete Strukturen verwenden, \ - sowie die Jenkins-Version(en), in denen die Datenstruktur verndert wurde. -blurb.2=\ - Beim Einlesen von Konfigurationsdateien knnen Fehler auftreten, z.B. wenn ein Plugin \ - Daten hinzufgt und spter deaktiviert wird, wenn kein Migrationscode fr Strukturnderungen \ - geschrieben wurde oder Jenkins auf eine ltere Version zurckgesetzt wird, nachdem die neuere \ - 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 knnen Sie diese Datein im aktuellen Format neu abspeichern. \ - Damit entfllt die Mglichzeit, auf eine ltere als die ausgewhlte Jenkins-Version zurckzukehren. \ - Auch wenn Sie Konfigurationen bestehender Jobs ndern, werden diese Daten im neuen \ - Format gespeichert, was ein spteres Downgrade ausschliet. 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 Kompatibilitt wird mindestens 150 Releases nach nderung des Datenformates gewhrleistet. \ - Versionen, die noch lter sind, werden fett dargestellt. Es wird emfohlen, diese Dateien neu \ - abzuspeichern. -blurb.5=\ - (ein Downgrade bis zur ausgewhlten Version knnte immer noch mglich sein) -blurb.6=\ - Nicht-lesbare Daten stellen kein Problem dar, da Jenkins sie einfach ignoriert. \ - Um jedoch lange Protokolle mit zahlreichen Warnungen whrend des Hochfahrens von Jenkins zu \ - vermeiden, knnen Sie nicht-lesbare Daten dauerhaft entfernen, indem Sie diese ber die \ +# The MIT License +# +# Copyright (c) 2004-2010, Sun Microsystems, Inc., Alan Harder, Simon Wiest +# +# 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. + +Error=Fehler +Manage\ Old\ Data=Veraltete Daten verwalten +Name=Name +No\ old\ data\ was\ found.=Keine veralteten Daten gefunden. +Resave\ data\ files\ with\ structure\ changes\ no\ newer\ than\ Jenkins=\ + Aktualisiere Dateien mit Strukturnderungen nicht aktueller als Jenkins +Type=Typ +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 folgendermaen vor: \ + Dateien werden beim Einlesen in den Speicher in das neue Datenformat migriert, aber \ + nicht automatisch auf Festplatte zurckgeschrieben. Die Konfigurationsdateien bleiben also \ + unverndert. Dies ermglicht bei Problemen ein Jenkins-Downgrade zu einer frheren \ + Version. Auf der anderen Seite knnen dadurch Dateien endlos in lngst veralteten \ + Formaten verbleiben. Die folgende Tabelle zeigt Dateien, die veraltete Strukturen verwenden, \ + sowie die Jenkins-Version(en), in denen die Datenstruktur verndert wurde. +blurb.2=\ + Beim Einlesen von Konfigurationsdateien knnen Fehler auftreten, z.B. wenn ein Plugin \ + Daten hinzufgt und spter deaktiviert wird, wenn kein Migrationscode fr Strukturnderungen \ + geschrieben wurde oder Jenkins auf eine ltere Version zurckgesetzt wird, nachdem die neuere \ + 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 knnen Sie diese Datein im aktuellen Format neu abspeichern. \ + Damit entfllt die Mglichzeit, auf eine ltere als die ausgewhlte Jenkins-Version zurckzukehren. \ + Auch wenn Sie Konfigurationen bestehender Elemente ndern, werden diese Daten im neuen \ + Format gespeichert, was ein spteres Downgrade ausschliet. 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 Kompatibilitt wird mindestens 150 Releases nach nderung des Datenformates gewhrleistet. \ + Versionen, die noch lter sind, werden fett dargestellt. Es wird emfohlen, diese Dateien neu \ + abzuspeichern. +blurb.5=\ + (ein Downgrade bis zur ausgewhlten Version knnte immer noch mglich sein) +blurb.6=\ + Nicht-lesbare Daten stellen kein Problem dar, da Jenkins sie einfach ignoriert. \ + Um jedoch lange Protokolle mit zahlreichen Warnungen whrend des Hochfahrens von Jenkins zu \ + vermeiden, knnen 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_it.properties b/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_it.properties index b995623eab7c9d6d6a4f109c19765e5ac594c7c7..a92c6c8caf48420a20e3fb17358e4114fe205018 100644 --- a/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_it.properties +++ b/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_it.properties @@ -1,9 +1,47 @@ -# This file is under the MIT License by authors - -Manage\ Old\ Data=Gestici dati vecchi -Name=Nome -No\ old\ data\ was\ found.=Nessun vecchio dato trovato. +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 \ + gestire la migrazione quando vengono modificate le strutture dati, o se si esegue il \ + 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 Version=Versione -blurb.1=Quando ci sono cambiamenti nel modo in cui i dati sono salvati sul disco, Jenkins usa la seguente strategia: i dati sono migrati nella nuova struttura quando caricati, ma i file non sono salvati nel nuovo formato. Questo consente di fare il downgrade di Jenkins se necessario. Comunque, lascia anche i dati sul disco nel vecchio formato indefinitamente. La tabella sotto mostra la lista dei file contenenti tali dati, e le versioni di Jenkins dove la struttura dei dati \u00E8 stata cambiata. -blurb.2=Qualche volta capitano degli errori durante la lettura dei dati (se un plugin aggiunge alcuni dati e quel plugin viene successivamente disabilitato, se il codice di migrazione non \u00E8 scritto per cambiamenti strutturali o se a Jenkins \u00E8 fatto il downgrade dopo che ha gi\u00E0 scritto dati non leggibili nella vecchia versione). Questi errori sono inseriti nel log, ma i dati non leggibili vengono saltati, permettendo a Jenkins di partire e funzionare correttamente. +Resave\ data\ files\ with\ structure\ changes\ no\ newer\ than\ Jenkins=Salva nuovamente file dati con modifiche strutturali non introdotte in una versione di Jenkins superiore alla +Upgrade=Aggiorna +No\ old\ data\ was\ found.=Nessun dato vecchio trovato. +Unreadable\ Data=Dati illeggibili +Error=Errore +Discard\ Unreadable\ Data=Elimina dati illeggibili diff --git a/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_sr.properties b/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_sr.properties new file mode 100644 index 0000000000000000000000000000000000000000..501dad149a2887ac1b77e2c4fef2dd701b5dbb88 --- /dev/null +++ b/core/src/main/resources/hudson/diagnosis/OldDataMonitor/manage_sr.properties @@ -0,0 +1,18 @@ +# 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/message.jelly b/core/src/main/resources/hudson/diagnosis/OldDataMonitor/message.jelly index 89d38c592e5033a930880788ac2fefa43913212b..c213f7ac2251257473f00400291638c440c6c3a4 100644 --- a/core/src/main/resources/hudson/diagnosis/OldDataMonitor/message.jelly +++ b/core/src/main/resources/hudson/diagnosis/OldDataMonitor/message.jelly @@ -24,13 +24,11 @@ THE SOFTWARE. -
      +
      - ${%You have data stored in an older format and/or unreadable data.} - - + ${%You have data stored in an older format and/or unreadable data.}
      diff --git a/core/src/main/resources/hudson/diagnosis/OldDataMonitor/message_bg.properties b/core/src/main/resources/hudson/diagnosis/OldDataMonitor/message_bg.properties new file mode 100644 index 0000000000000000000000000000000000000000..b8566357e90efa45431a6675581180e717558b56 --- /dev/null +++ b/core/src/main/resources/hudson/diagnosis/OldDataMonitor/message_bg.properties @@ -0,0 +1,29 @@ +# The MIT License +# +# Bulgarian translation: Copyright (c) 2016, Alexander Shopov +# +# 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. + +Dismiss=\ + \u041e\u0442\u043a\u0430\u0437 +Manage=\ + \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 +You\ have\ data\ stored\ in\ an\ older\ format\ and/or\ unreadable\ data.=\ + \u0427\u0430\u0441\u0442 \u043e\u0442 \u0434\u0430\u043d\u043d\u0438\u0442\u0435 \u043d\u0435 \u043c\u043e\u0433\u0430\u0442 \u0434\u0430 \u0431\u044a\u0434\u0430\u0442 \u043f\u0440\u043e\u0447\u0435\u0442\u0435\u043d\u0438, \u0444\u043e\u0440\u043c\u0430\u0442\u044a\u0442 \u0438\u043c \u0435 \u043f\u0440\u0435\u043a\u0430\u043b\u0435\u043d\u043e \u0441\u0442\u0430\u0440 \u0438\u043b\u0438\ + \u0435 \u0441\u0433\u0440\u0435\u0448\u0435\u043d. diff --git a/core/src/main/resources/hudson/diagnosis/OldDataMonitor/message_de.properties b/core/src/main/resources/hudson/diagnosis/OldDataMonitor/message_de.properties index bb93c60a8e499878f2daf2e4ddd17bc6e3932d3d..6406a4c1145032aad50cf18a96d0ec69316345b2 100644 --- a/core/src/main/resources/hudson/diagnosis/OldDataMonitor/message_de.properties +++ b/core/src/main/resources/hudson/diagnosis/OldDataMonitor/message_de.properties @@ -1,27 +1,27 @@ -# The MIT License -# -# Copyright (c) 2004-2010, Sun Microsystems, Inc., Alan Harder, Simon Wiest -# -# 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. - - -Dismiss=Ignorieren -Manage=Verwalten -You\ have\ data\ stored\ in\ an\ older\ format\ and/or\ unreadable\ data.=\ +# The MIT License +# +# Copyright (c) 2004-2010, Sun Microsystems, Inc., Alan Harder, Simon Wiest +# +# 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. + + +Dismiss=Ignorieren +Manage=Verwalten +You\ have\ data\ stored\ in\ an\ older\ format\ and/or\ unreadable\ data.=\ Es liegen Daten in einem veralteten Format und/oder nicht lesbare Daten vor. \ No newline at end of file diff --git a/core/src/main/resources/hudson/diagnosis/OldDataMonitor/message_it.properties b/core/src/main/resources/hudson/diagnosis/OldDataMonitor/message_it.properties index 219dc22daf36d42c2627103342f2d823081d5db2..5ce17631a4d8391040fb7dc19b539f4f5c8a1dd1 100644 --- a/core/src/main/resources/hudson/diagnosis/OldDataMonitor/message_it.properties +++ b/core/src/main/resources/hudson/diagnosis/OldDataMonitor/message_it.properties @@ -1,25 +1,4 @@ -# The MIT License -# -# Copyright (c) 2004-2010, Sun Microsystems, Inc. -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. - -Dismiss=Chiudi +Dismiss=Ignora Manage=Gestisci -You\ have\ data\ stored\ in\ an\ older\ format\ and/or\ unreadable\ data.=Sono presenti dati salvati in un formato precedente o dati illeggibili. +You\ have\ data\ stored\ in\ an\ older\ format\ and/or\ unreadable\ data.=\ + Alcuni dati sono salvati in un vecchio formato e/o sono illeggibili. diff --git a/core/src/main/resources/hudson/diagnosis/OldDataMonitor/message_sr.properties b/core/src/main/resources/hudson/diagnosis/OldDataMonitor/message_sr.properties new file mode 100644 index 0000000000000000000000000000000000000000..9575d0a32398524af4e5e9cfb0ddf13f6225f5ea --- /dev/null +++ b/core/src/main/resources/hudson/diagnosis/OldDataMonitor/message_sr.properties @@ -0,0 +1,5 @@ +# This file is under the MIT License by authors + +Manage=\u041F\u043E\u0434\u0435\u0441\u0438 +Dismiss=\u041E\u0442\u043A\u0430\u0436\u0438 +You\ have\ data\ stored\ in\ an\ older\ format\ and/or\ unreadable\ data.=\u0418\u043C\u0430\u0442\u0435 \u043F\u043E\u0434\u0430\u0442\u043A\u0435 \u0441\u0430\u0447\u0443\u0432\u0430\u043D\u0435 \u043F\u043E \u0441\u0442\u0430\u0440\u0438\u0458\u0435\u043C \u0444\u043E\u0440\u043C\u0430\u0442\u0443, \u0438\u043B\u0438 \u043D\u0435\u0443\u0447\u0438\u0442\u0459\u0438\u0432\u0435 \u043F\u043E\u0434\u0430\u0442\u043A\u0435. diff --git a/core/src/main/resources/hudson/diagnosis/ReverseProxySetupMonitor/message.jelly b/core/src/main/resources/hudson/diagnosis/ReverseProxySetupMonitor/message.jelly index a39c1238b0d4244169ed8bad6b5fa89f23f6bdf2..e2aee20effddbdf421dbbd66cc2830eb512fc55b 100644 --- a/core/src/main/resources/hudson/diagnosis/ReverseProxySetupMonitor/message.jelly +++ b/core/src/main/resources/hudson/diagnosis/ReverseProxySetupMonitor/message.jelly @@ -27,7 +27,9 @@ THE SOFTWARE. -