Commit Graph
17332 Commits
Author SHA1 Message Date
Baptiste Mathus 1191bb0ef0 New flag to FileChannel.force() on each Writer.flush() or not
And disable FileChannel.force() in the case of AtomicFileWriter.
See the committed javadoc for the full why.
2017-12-03 23:33:44 +01:00
Baptiste Mathus 9fb07a2c1a Use FileChannelWriter behind AtomicFileWriter 2017-12-02 10:28:49 +01:00
Baptiste Mathus 22efbad945 [JENKINS-34855] Create a FileChannelWriter 2017-12-02 10:28:49 +01:00
Baptiste Mathus 616a62aab4 Merge pull request #3165 from batmat/JENKINS-34855-more-AtomicFileWriter-harnessing
[JENKINS-34855] more AtomicFileWriter test harnessing
2017-12-01 23:49:38 +01:00
Devin Nusbaum fdccc0e838 [JENKINS-36088] Use NIO implementations of chmod and mode by default (#3135)
* Use NIO for FilePath#chmod and IOUtils#mode

* Add tests for NIO mode and chmod implementations

* Add test, remove new method, and update JavaDoc

* Provide system property to use native implementations of chmod and mode

* Revert unrelated whitespace modification

* Don't remove exception from throws and put imports in original location

* Fix broken JavaDoc links

* Ignore file type bits (above 0o7777) in Util#modeToPermission

* Use octal for constants and don't include file type bits

* Revert unnecessary changes to TarArchiverTest

* Add assertion that non-permission bits are ignored by chmod

* Use NIO copy with StandardCopyOption.COPY_ATTRIBUTES in copyToWithPermissions where possible

* Catch InvalidPathException and convert it to IOException

* Create utility method for File#toPath and use File#createDirectories after review

* Remove useless calls to toAbsolutePath and getAbsoluteFile

* Fix typos and use octal for constant after review

* Add test for behavior of copyToWithPermission with special bits
2017-12-01 10:01:34 +03:00
Oleg Nenashev 8824857752 Add default implementations of deprecated methods of BuilableItem and Item. (#3142)
* Add default implementations to deprecated methods of BuilableItem and Item.

Currently the interface requires the API user to implement already deprecated methods.
It does not make much sense, and the API could be simplified.

* Address comments from @jglick
2017-12-01 10:00:49 +03:00
Baptiste Mathus b32bc8d277 Merge pull request #2548 from christ66/JENKINS-34855
[JENKINS-34855] AtomicFileWriter is not Atomic
2017-11-29 15:45:57 +01:00
Baptiste Mathus 0437c31a6d More coverage around AtomicFileWriter behaviour 2017-11-29 15:04:52 +01:00
Baptiste Mathus 4f2e261505 Be more defensive if provided destPath is wrong
The path could already exist, *but* not be a directory.
Nice catch James.

Associated tests.
2017-11-28 23:18:18 +01:00
Baptiste Mathus 04641a3da1 Reduce Log levels
Not that critical, but still can keep them as we should
generally be on FS that support atomic moves. Hence not
enter that catch.

If proved otherwise, we'll reconsider adjusting this verbosity.
2017-11-28 18:01:43 +01:00
Oleg Nenashev 53a320afd8 Merge pull request #3150 from jglick/User-JENKINS-47429
[JENKINS-47429] User.getLegacyConfigFilesFor no longer seems to be necessary
2017-11-28 13:41:09 +03:00
Jesse Glick 5f8f42624e Introducing ItemGroup.allItems and similar default methods (#3148)
* Introducing ItemGroup.allItems and similar default methods.

* Do not get me started.
2017-11-28 12:28:50 +03:00
Oleg Nenashev 80b515e9b0 Merge pull request #3157 from Jimilian/optimise_start_of_workflow_job
If task can be run only on master, use shortcut
2017-11-27 18:58:18 +03:00
Kohsuke Kawaguchi 2e920c7d5a [maven-release-plugin] prepare for next development iteration 2017-11-26 19:04:19 -08:00
Kohsuke Kawaguchi 35b6213249 [maven-release-plugin] prepare release jenkins-2.92 2017-11-26 19:04:19 -08:00
Baptiste Mathus 465f85e34d Do not force SYNC
It might be preferrable from a consistency standpoint,
but many CLI tests start failing when you force this.

So, as the previous behaviour was not forcing the sync, this seems
to show there could be unintended behavioural changes in effect.

Possibly, we'll want to address this later, but as the main goal
here was to make commit() atomic as much as possible, fixing
this is probably another story anyway.

Note: I was *never* able to reproduce those failures on my machine in
a normal env dev. It was only visible in CI.
I finally managed to make it reproducible (but still a bit randomly) by
using Docker resource constraints, using something like this:

* cd to jenkins local clone
* `docker run -ti -v m2repo:/root/.m2/repository -v $PWD:/work -v ~/.m2/settings.xml:/root/.m2/settings.xml:ro -v ~/.m2/settings-security.xml:/root/.m2/settings-security.xml:ro --device-write-iops /dev/mapper/fedora-home:40 --device-read-iops /dev/mapper/fedora-home:40  --device-write-bps /dev/mapper/fedora-home:10m --device-read-bps /dev/mapper/fedora-home:10m maven:3.5.2-jdk-8 bash`
* cd /work
* `mvn clean install -Dtest=WaitNodeOfflineCommandTest,RunRangeCommandTest -Dfindbugs.skip=true  -DfailIfNoTests=false -Dskip.npm=true`

Failure example:

```
ERROR] Tests run: 6, Failures: 2, Errors: 0, Skipped: 0, Time elapsed: 55.68OfflineCommandTest
[ERROR] waitNodeOfflineShouldSucceedOnDisconnectingNode(hudson.cli.WaitNodeOf  <<< FAILURE!
java.lang.AssertionError:

Expected: <true>
     but: was <false>
        at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:20)
        at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:8)
        at hudson.cli.WaitNodeOfflineCommandTest.waitNodeOfflineShouldSucceedndTest.java:128)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorIm
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAc
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(Framew
        at org.junit.internal.runners.model.ReflectiveCallable.run(Reflective
        at org.junit.runners.model.FrameworkMethod.invokeExplosively(Framewor
        at org.junit.internal.runners.statements.InvokeMethod.evaluate(Invoke
        at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefor
        at org.jvnet.hudson.test.JenkinsRule$1.evaluate(JenkinsRule.java:542)
        at org.junit.internal.runners.statements.FailOnTimeout$CallableStatem
        at org.junit.internal.runners.statements.FailOnTimeout$CallableStatem
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.lang.Thread.run(Thread.java:748)

[ERROR] waitNodeOfflineShouldSucceedOnDisconnectedNode(hudson.cli.WaitNodeOff <<< FAILURE!
java.lang.AssertionError
```
2017-11-26 18:41:39 +01:00
Oleg Nenashev 211b57e8b0 [JENKINS-48157] - Risk of NPE when migrating MyViewProperty without PrimaryView (#3156)
* [JENKINS-48157] - Reproduce the issue in test

* [JENKINS-48157] - Annotate and document nullness conditions in MyViewsProperty and ViewGroupMixIn

* [FIXED JENKINS-48157] - Prevent NPEs when using public API and when using null primaryViewName

* [JENKINS-48157] - Fix typo in Javadoc
2017-11-26 15:51:46 +03:00
Oleg Nenashev b3cd925a69 Merge pull request #3149 from jglick/AccessControlled
Introducing AccessControlled.hasPermission(Authentication, Permission)
2017-11-26 12:33:27 +03:00
Oleg Nenashev f33506f4f6 Merge pull request #3154 from oleg-nenashev/bug/JENKINS-48116
[JENKINS-48116] - Restore AbstractTaskListener binary compatibility in the core.
2017-11-26 12:32:33 +03:00
Oleg Nenashev b431eb422a Merge pull request #3155 from Jimilian/cache_permission_id
Cache permission id to avoid allocating of new strings
2017-11-26 12:32:06 +03:00
Baptiste Mathus 4c50c7a9ae Log exception in case of failure
I see we enter that catch, and the `else` in a failing test.
But I'm somewhat stuck since I miss both the stack, and even at
least the exception being thrown and not being an
`AtomicMoveNotSupportedException`.

It's possibly an `IOException` or some subclass. But still having the
stack could help understand why the test fails, and provide more
data for diagnosis in the future in production use.

```
=== Starting hudson.cli.RunRangeCommandTest
   0.007 [id=96]	WARNING	o.jvnet.hudson.test.JenkinsRule#before: Jenkins.theInstance was not cleared by a previous test, doing that now
   0.018 [id=96]	INFO	o.jvnet.hudson.test.JenkinsRule#createWebServer: Running on http://localhost:45833/jenkins/
   0.037 [id=15]	WARNING	jenkins.model.Jenkins#cleanUp: This instance is no longer the singleton, ignoring cleanUp()
   0.345 [id=96]	WARNING	hudson.util.AtomicFileWriter#commit: Unable to move atomically, falling back to non-atomic move.
   0.345 [id=96]	SEVERE	hudson.util.AtomicFileWriter#commit: Unable to move /home/jenkins/workspace/Core_jenkins_PR-2548-5VRJ4BBBSEGVOZEA7OVAL2YLTLCBL55RB4LDQIZN56WJZD4M6ZKA/test/target/jenkinsTests.tmp/jenkins333129509690162870test/atomic9184049448662376708tmp to /home/jenkins/workspace/Core_jenkins_PR-2548-5VRJ4BBBSEGVOZEA7OVAL2YLTLCBL55RB4LDQIZN56WJZD4M6ZKA/test/target/jenkinsTests.tmp/jenkins333129509690162870test/secret.key. Attempting to delete /home/jenkins/workspace/Core_jenkins_PR-2548-5VRJ4BBBSEGVOZEA7OVAL2YLTLCBL55RB4LDQIZN56WJZD4M6ZKA/test/target/jenkinsTests.tmp/jenkins333129509690162870test/atomic9184049448662376708tmp and abandoning.
```
2017-11-23 17:36:20 +01:00
Daniel Beck e3b695fe58 Merge pull request #3153 from jsoref/help
misc UX changes
2017-11-23 16:37:12 +01:00
Alexander Akbashev 00ccd23f64 If task can be run only on master, use shortcut
Currently Jenkins to fire WorkflowJob re-calculates the ConstistentHash
for entire cluster even if there is no nodes were updated. If cluster is
big enough (>100 nodes), it becomes a problem, because MD5 is quite
expensive itself plus all this logic comes with high memory footprint.

Using the knowledge that WorkflowJob can be executed only on Jenkins master,
we can create a shortcut that does not do expensive calculation and just
returns Runnable or `null`.
2017-11-23 09:10:50 +01:00
Baptiste Mathus 1396c7f774 Add an if to avoid crashing on symlinks to dirs
Files.createDirectories(dir) is said to not fail if directory already
exists.
*But* this will still fail if `dir` is actually a symlink to a
directory...
This is documented in the Javadoc indeed, even if probably not really
one would expect...

See https://bugs.openjdk.java.net/browse/JDK-8130464

Without this fix:
```
[INFO] Running hudson.util.SecretRewriterTest
Cycle detected: /home/tiste/dev/JENKINS/jenkins/core/target/junit7537647214741745549/t/c/symlink
Scanning /home/tiste/dev/JENKINS/jenkins/core/target/junit7537647214741745549/t/c/foo.xml
Rewritten /home/tiste/dev/JENKINS/jenkins/core/target/junit7537647214741745549/t/c/foo.xml
Rewritten /home/tiste/dev/JENKINS/jenkins/core/target/junit7537647214741745549/t/c/d/foo.xml
Rewritten /home/tiste/dev/JENKINS/jenkins/core/target/junit7537647214741745549/t/c/d/e/foo.xml
ERROR: Failed to rewrite /home/tiste/dev/JENKINS/jenkins/core/target/junit7537647214741745549/t/a/symlink/foo.xml
java.nio.file.FileAlreadyExistsException: /home/tiste/dev/JENKINS/jenkins/core/target/junit7537647214741745549/t/a/symlink
        at sun.nio.fs.UnixException.translateToIOException(UnixException.java:88)
        at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
        at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
        at sun.nio.fs.UnixFileSystemProvider.createDirectory(UnixFileSystemProvider.java:384)
        at java.nio.file.Files.createDirectory(Files.java:674)
        at java.nio.file.Files.createAndCheckIsDirectory(Files.java:781)
        at java.nio.file.Files.createDirectories(Files.java:727)
        at hudson.util.AtomicFileWriter.<init>(AtomicFileWriter.java:103)
Caused: java.io.IOException: Failed to create a temporary file in /home/tiste/dev/JENKINS/jenkins/core/target/junit7537647214741745549/t/a/symlink
        at hudson.util.AtomicFileWriter.<init>(AtomicFileWriter.java:106)
        at hudson.util.AtomicFileWriter.<init>(AtomicFileWriter.java:73)
        at hudson.util.SecretRewriter.rewrite(SecretRewriter.java:85)
        at hudson.util.SecretRewriter.rewriteRecursive(SecretRewriter.java:166)
        at hudson.util.SecretRewriter.rewriteRecursive(SecretRewriter.java:176)
        at hudson.util.SecretRewriter.rewriteRecursive(SecretRewriter.java:176)
        at hudson.util.SecretRewriter.rewriteRecursive(SecretRewriter.java:141)
        at hudson.util.SecretRewriter$rewriteRecursive$0.call(Unknown Source)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:133)
        at hudson.util.SecretRewriterTest.recursionDetection(SecretRewriterTest.groovy:110)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
        at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
        at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
        at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
        at org.junit.rules.ExternalResource$1.evaluate(ExternalResource.java:48)
        at org.junit.rules.ExternalResource$1.evaluate(ExternalResource.java:48)
        at org.junit.rules.ExternalResource$1.evaluate(ExternalResource.java:48)
        at org.junit.rules.RunRules.evaluate(RunRules.java:20)
        at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
        at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
        at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
        at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
        at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:365)
        at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:272)
        at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:236)
        at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:159)
        at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:386)
        at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:323)
        at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:143)
Rewritten /home/tiste/dev/JENKINS/jenkins/core/target/junit7537647214741745549/t/a/foo.xml
Cycle detected: /home/tiste/dev/JENKINS/jenkins/core/target/junit7537647214741745549/t/b/symlink
Rewritten /home/tiste/dev/JENKINS/jenkins/core/target/junit7537647214741745549/t/b/foo.xml
[ERROR] Tests run: 2, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 1.097 s <<< FAILURE! - in hudson.util.SecretRewriterTest
[ERROR] recursionDetection(hudson.util.SecretRewriterTest)  Time elapsed: 0.176 s  <<< FAILURE!
Assertion failed:

assert 6==sw.rewriteRecursive(t, st)
        | |  |                |  |
        | |  5                |  hudson.util.StreamTaskListener@34a2d6e0
        | |                   /home/tiste/dev/JENKINS/jenkins/core/target/junit7537647214741745549/t
        | hudson.util.SecretRewriter@2525a5b8
        false

        at org.codehaus.groovy.runtime.InvokerHelper.assertFailed(InvokerHelper.java:404)
        at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.assertFailed(ScriptBytecodeAdapter.java:650)
        at hudson.util.SecretRewriterTest.recursionDetection(SecretRewriterTest.groovy:110)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
        at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
        at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
        at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
        at org.junit.rules.ExternalResource$1.evaluate(ExternalResource.java:48)
        at org.junit.rules.ExternalResource$1.evaluate(ExternalResource.java:48)
        at org.junit.rules.ExternalResource$1.evaluate(ExternalResource.java:48)
        at org.junit.rules.RunRules.evaluate(RunRules.java:20)
        at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
        at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
        at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
        at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
        at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:365)
        at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:272)
        at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:236)
        at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:159)
        at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:386)
        at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:323)
        at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:143)

[INFO]
[INFO] Results:
[INFO]
[ERROR] Failures:
[ERROR]   SecretRewriterTest.recursionDetection:110 assert 6==sw.rewriteRecursive(t, st)
        | |  |                |  |
        | |  5                |  hudson.util.StreamTaskListener@34a2d6e0
        | |                   /home/tiste/dev/JENKINS/jenkins/core/target/junit7537647214741745549/t
        | hudson.util.SecretRewriter@2525a5b8
        false
[INFO]
[ERROR] Tests run: 2, Failures: 1, Errors: 0, Skipped: 0
```
2017-11-22 21:27:51 +01:00
Alexander Akbashev b2c40cb9e0 Cache permission id to avoid allocating of new strings
Every request that comes from Jelly is checked against Permissions.
As result it leads to a call of `getId` method that produces the new string.
Usually it's not a problem, but in case of stop-the-world pause user requests are accumulated.
So, once pause is finished, we forcibly allocated tons of strings for
every request. That leads to new stop-the-world pause. (And this cycle
can repeat multiple times)
2017-11-22 09:02:28 +01:00
Oleg Nenashev db46521c04 Merge pull request #3143 from Jimilian/cache_estimated_duration
Cache estimated duration for execution
2017-11-22 07:08:14 +01:00
Baptiste Mathus ce58dd0572 Moar diagnostics in case atomic move fails 2017-11-21 12:08:23 +01:00
Baptiste Mathus ece2e39c12 Wraps InvalidPathException in IOException if thrown
To keep backward compatibility and avoid potentially killing
threads that would be using this code.
2017-11-21 12:04:24 +01:00
Baptiste Mathus af63365149 Fix wrong log parameter index 2017-11-21 11:50:04 +01:00
Oleg Nenashev 60085a0f10 [JENKINS-48116] - Restrore AbstractTaskListener binary compatibility in the core.
Since we have the confirmed regression due to the binary compatibility change, I think we need to restore the compatibility.
OTOH, I restricted the class, so all users will be forced to stop using it when they updgrade the core.
2017-11-21 10:45:40 +01:00
Baptiste Mathus 5c767c324a Delete the temp file even if close() throws an exception 2017-11-21 00:44:19 +01:00
Baptiste Mathus 3e7d4ea978 Merge remote-tracking branch 'upstream/master' into JENKINS-34855
# Conflicts:
#	core/src/main/java/hudson/util/AtomicFileWriter.java
2017-11-21 00:41:37 +01:00
Josh Soref 32ed86db8a grammar: does-not-make 2017-11-20 18:13:01 -05:00
Josh Soref e7494091ce grammar: timed-out/X attempts 2017-11-20 18:12:50 -05:00
Baptiste Mathus ced3dc4159 catch IOException and do a best effort to fall back
And if things go wrong, we try to spit logs to help diagnostics.
2017-11-21 00:11:16 +01:00
Baptiste Mathus 7458cb617c Do not allow null charset on the new constructor 2017-11-20 22:47:33 +01:00
Baptiste Mathus d5e68b6c5d Rename tmpFile and destFile to *Path now they are Path 2017-11-20 22:40:47 +01:00
Baptiste Mathus a3b4419461 Jenkins being now Java 8+: no need to warn about 7+ 2017-11-20 22:39:07 +01:00
Baptiste Mathus 1013eea1a2 Fix excessive indentation 2017-11-20 17:59:52 +01:00
Baptiste Mathus 54b7dee295 Also annotate with @Deprecated 2017-11-20 17:58:30 +01:00
Baptiste Mathus dcd800f256 Force line break 2017-11-20 15:55:44 +01:00
Baptiste Mathus 65a2375e6e Wrap if block with brackets
Because brackets should always be there :-)
2017-11-20 15:39:11 +01:00
Baptiste Mathus d454de2bc8 Remove unnecessary if 2017-11-20 15:38:34 +01:00
Baptiste Mathus aebcbb6f6c Add @since TODO on new method 2017-11-20 15:24:37 +01:00
Kohsuke Kawaguchi d4419b5125 [maven-release-plugin] prepare for next development iteration 2017-11-19 23:03:18 -08:00
Kohsuke Kawaguchi ec541fe582 [maven-release-plugin] prepare release jenkins-2.91 2017-11-19 23:03:18 -08:00
Oleg Nenashev 5b9ad6475d Merge pull request #3122 from jglick/TaskListener
Implement default methods in TaskListener and BuildListener
2017-11-19 13:26:02 +01:00
Oleg Nenashev 8cb3351319 [JENKINS-47718] - Deprecate User#getUser(String) (#3114)
* [JENKINS-47718] - Deprecate User#getUser(String)

`User#getUser(String)` method causes lots of confusion for plugin developers. It implicitly creates a user if it cannot be found, and in many cases this is actually a not-expected behavior. This change deprecates the method and to creates a new `User#getOrCreate()` which is more explicit

* [JENKINS-47718] - Address comments from @jglick
2017-11-19 13:25:15 +01:00
Jesse Glick 3853b38139 [JENKINS-47429] User.getLegacyConfigFilesFor no longer seems to be necessary. 2017-11-16 22:10:57 -05:00
Jesse Glick 7dee930f33 Introducing AccessController.hasPermission(Authentication, Permission). 2017-11-16 20:43:07 -05:00