A user reports that Pipeline stash does not preserve the executable bit on 64-bit AIX, apparently due to a missing JNR port. Probably the same applies to any use of TarArchiver.
Since we now assume Java 7, we can use java.nio.file calls. In particular, making IOUtils.mode and FilePath._chmod use PosixFilePermission rather than JNR would be appropriate.
is blocked by
JENKINS-48453java.nio.file.NoSuchFileException when materializing ServerKey
Code changed in jenkins
User: Devin Nusbaum
Path:
core/src/main/java/hudson/Util.java
core/src/main/java/hudson/util/jna/Kernel32Utils.java
core/src/test/java/hudson/FilePathTest.java
core/src/test/java/hudson/UtilTest.java http://jenkins-ci.org/commit/jenkins/52fa4d90b938243ccc273955caa7262154b9f688
Log: JENKINS-39179JENKINS-36088 Always use NIO to create and detect symbolic links and Windows junctions (#3133)
Always use NIO to detect symlinks
Make assertion failure message consistent
Catch NoSuchFileException to keep tests passing
Make method name more specific and simlify assumption
Remove obsolete comment and reword the main comment in isSymlink
Deprecate Kernel32Util#isJunctionOrSymlink
Use assumptions for junction creation and add messages to assumptions
Replace deprecated code with recommended alternative
Add comment explaining call to DosFileAttributes#isOther
Do not fall back to native code when creating symlinks
Log FileSystemExceptions when creating symbolic links
Catch InvalidPathException and rethrow as IOException
Deprecate Kernel32Utils#createSymbolicLink and #getWin32FileAttributes
Preserve original logging behavior on Windows and remove useless call to Util#displayIOException
SCM/JIRA link daemon
added a comment - Code changed in jenkins
User: Devin Nusbaum
Path:
core/src/main/java/hudson/Util.java
core/src/main/java/hudson/util/jna/Kernel32Utils.java
core/src/test/java/hudson/FilePathTest.java
core/src/test/java/hudson/UtilTest.java
http://jenkins-ci.org/commit/jenkins/52fa4d90b938243ccc273955caa7262154b9f688
Log:
JENKINS-39179 JENKINS-36088 Always use NIO to create and detect symbolic links and Windows junctions (#3133)
Always use NIO to detect symlinks
Make assertion failure message consistent
Catch NoSuchFileException to keep tests passing
Make method name more specific and simlify assumption
Remove obsolete comment and reword the main comment in isSymlink
Deprecate Kernel32Util#isJunctionOrSymlink
Use assumptions for junction creation and add messages to assumptions
Replace deprecated code with recommended alternative
Add comment explaining call to DosFileAttributes#isOther
Do not fall back to native code when creating symlinks
Log FileSystemExceptions when creating symbolic links
Catch InvalidPathException and rethrow as IOException
Deprecate Kernel32Utils#createSymbolicLink and #getWin32FileAttributes
Preserve original logging behavior on Windows and remove useless call to Util#displayIOException
The change by dnusbaum has been integrated towards 2.91. dnusbaum is it enough to close this issue? I am not sure about that
Oleg Nenashev
added a comment - The change by dnusbaum has been integrated towards 2.91.
dnusbaum is it enough to close this issue? I am not sure about that
oleg_nenashev No, I don't think this issue should be closed yet. There is at least one more PR that should be finalized.
Devin Nusbaum
added a comment - oleg_nenashev No, I don't think this issue should be closed yet. There is at least one more PR that should be finalized.
Code changed in jenkins
User: Devin Nusbaum
Path:
core/src/main/java/hudson/FilePath.java
core/src/main/java/hudson/Util.java
core/src/main/java/hudson/util/IOUtils.java
core/src/test/java/hudson/FilePathTest.java
core/src/test/java/hudson/UtilTest.java
core/src/test/java/hudson/util/io/TarArchiverTest.java http://jenkins-ci.org/commit/jenkins/fdccc0e8384370684e25063e95f4a704773c53dd
Log: 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
SCM/JIRA link daemon
added a comment - Code changed in jenkins
User: Devin Nusbaum
Path:
core/src/main/java/hudson/FilePath.java
core/src/main/java/hudson/Util.java
core/src/main/java/hudson/util/IOUtils.java
core/src/test/java/hudson/FilePathTest.java
core/src/test/java/hudson/UtilTest.java
core/src/test/java/hudson/util/io/TarArchiverTest.java
http://jenkins-ci.org/commit/jenkins/fdccc0e8384370684e25063e95f4a704773c53dd
Log:
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
The fix has been integrated towards 2.93. I doubt it is backportable, but feel free to add the label if you feel it's reasonable
Oleg Nenashev
added a comment - The fix has been integrated towards 2.93. I doubt it is backportable, but feel free to add the label if you feel it's reasonable
This actually breaks the docker-commons plugin: when it tries to 'materialize' the credentials, it relies on a chmod() call to create a folder (seems this is the behavior of native API), which now leads to an exception:
15:38:55 java.nio.file.NoSuchFileException: /var/lib/jenkins/.docker/7d36d1a6-4917-4dc8-97b6-2babbb2ae3d7 15:38:55 at sun.nio.fs.UnixException.translateToIOException(UnixException.java:86) 15:38:55 at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102) 15:38:55 at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107) 15:38:55 at sun.nio.fs.UnixFileAttributeViews$Posix.setMode(UnixFileAttributeViews.java:238) 15:38:55 at sun.nio.fs.UnixFileAttributeViews$Posix.setPermissions(UnixFileAttributeViews.java:260) 15:38:55 at java.nio.file.Files.setPosixFilePermissions(Files.java:2045) 15:38:55 at hudson.FilePath._chmod(FilePath.java:1618) 15:38:55 at hudson.FilePath.access$1500(FilePath.java:197) 15:38:55 at hudson.FilePath$29.invoke(FilePath.java:1600) 15:38:55 at hudson.FilePath$29.invoke(FilePath.java:1597) 15:38:55 at hudson.FilePath.act(FilePath.java:998) 15:38:55 at hudson.FilePath.act(FilePath.java:976) 15:38:55 at hudson.FilePath.chmod(FilePath.java:1597) 15:38:55 at org.jenkinsci.plugins.docker.commons.impl.ServerKeyMaterialFactory.materialize(ServerKeyMaterialFactory.java:86) 15:38:55 at org.jenkinsci.plugins.docker.commons.impl.CompositeKeyMaterialFactory.materialize(CompositeKeyMaterialFactory.java:69) 15:38:55 at org.jenkinsci.plugins.docker.commons.impl.CompositeKeyMaterialFactory.materialize(CompositeKeyMaterialFactory.java:69) 15:38:55 at com.cloudbees.dockerpublish.DockerBuilder$Perform.executeCmd(DockerBuilder.java:459) 15:38:55 at com.cloudbees.dockerpublish.DockerBuilder$Perform.executeCmd(DockerBuilder.java:431) 15:38:55 at com.cloudbees.dockerpublish.DockerBuilder$Perform.buildAndTag(DockerBuilder.java:373) 15:38:55 at com.cloudbees.dockerpublish.DockerBuilder$Perform.exec(DockerBuilder.java:311) 15:38:55 at com.cloudbees.dockerpublish.DockerBuilder$Perform.access$100(DockerBuilder.java:291) 15:38:55 at com.cloudbees.dockerpublish.DockerBuilder.perform(DockerBuilder.java:262) 15:38:55 at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20) 15:38:55 at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:744) 15:38:55 at hudson.model.Build$BuildExecution.build(Build.java:206) 15:38:55 at hudson.model.Build$BuildExecution.doRun(Build.java:163) 15:38:55 at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:504) 15:38:55 at hudson.model.Run.execute(Run.java:1727) 15:38:55 at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43) 15:38:55 at hudson.model.ResourceController.execute(ResourceController.java:97) 15:38:55 at hudson.model.Executor.run(Executor.java:429) 15:38:55 Build step 'Docker Build and Publish' marked build as failure
Francois Ferrand
added a comment - This actually breaks the docker-commons plugin: when it tries to 'materialize' the credentials, it relies on a chmod() call to create a folder (seems this is the behavior of native API), which now leads to an exception:
15:38:55 java.nio.file.NoSuchFileException: /var/lib/jenkins/.docker/7d36d1a6-4917-4dc8-97b6-2babbb2ae3d7
15:38:55 at sun.nio.fs.UnixException.translateToIOException(UnixException.java:86)
15:38:55 at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
15:38:55 at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
15:38:55 at sun.nio.fs.UnixFileAttributeViews$Posix.setMode(UnixFileAttributeViews.java:238)
15:38:55 at sun.nio.fs.UnixFileAttributeViews$Posix.setPermissions(UnixFileAttributeViews.java:260) 15:38:55 at java.nio.file.Files.setPosixFilePermissions(Files.java:2045)
15:38:55 at hudson.FilePath._chmod(FilePath.java:1618) 15:38:55 at hudson.FilePath.access$1500(FilePath.java:197)
15:38:55 at hudson.FilePath$29.invoke(FilePath.java:1600)
15:38:55 at hudson.FilePath$29.invoke(FilePath.java:1597)
15:38:55 at hudson.FilePath.act(FilePath.java:998)
15:38:55 at hudson.FilePath.act(FilePath.java:976)
15:38:55 at hudson.FilePath.chmod(FilePath.java:1597)
15:38:55 at org.jenkinsci.plugins.docker.commons.impl.ServerKeyMaterialFactory.materialize(ServerKeyMaterialFactory.java:86)
15:38:55 at org.jenkinsci.plugins.docker.commons.impl.CompositeKeyMaterialFactory.materialize(CompositeKeyMaterialFactory.java:69)
15:38:55 at org.jenkinsci.plugins.docker.commons.impl.CompositeKeyMaterialFactory.materialize(CompositeKeyMaterialFactory.java:69)
15:38:55 at com.cloudbees.dockerpublish.DockerBuilder$Perform.executeCmd(DockerBuilder.java:459)
15:38:55 at com.cloudbees.dockerpublish.DockerBuilder$Perform.executeCmd(DockerBuilder.java:431)
15:38:55 at com.cloudbees.dockerpublish.DockerBuilder$Perform.buildAndTag(DockerBuilder.java:373)
15:38:55 at com.cloudbees.dockerpublish.DockerBuilder$Perform.exec(DockerBuilder.java:311)
15:38:55 at com.cloudbees.dockerpublish.DockerBuilder$Perform.access$100(DockerBuilder.java:291)
15:38:55 at com.cloudbees.dockerpublish.DockerBuilder.perform(DockerBuilder.java:262)
15:38:55 at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20)
15:38:55 at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:744)
15:38:55 at hudson.model.Build$BuildExecution.build(Build.java:206)
15:38:55 at hudson.model.Build$BuildExecution.doRun(Build.java:163)
15:38:55 at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:504)
15:38:55 at hudson.model.Run.execute(Run.java:1727)
15:38:55 at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
15:38:55 at hudson.model.ResourceController.execute(ResourceController.java:97)
15:38:55 at hudson.model.Executor.run(Executor.java:429)
15:38:55 Build step 'Docker Build and Publish' marked build as failure
typz Thanks for reporting the bug. My guess is that previously the call to `FilePath#chmod` failed, but the return value was not checked and so no exception was thrown, and it went unnoticed because ServerKeyMaterialFactory#copyInto calls FilePath#write which created parent directories if they don't already exist.
I will test to see what happens when the native chmod is used on a non-existent file or directory. If it fails silently before this change, I will file a PR against docker-commons to create the file before changing permissions. If it succeeds, I will change the new code to create the file or directory first if necessary.
Devin Nusbaum
added a comment - typz Thanks for reporting the bug. My guess is that previously the call to `FilePath#chmod` failed, but the return value was not checked and so no exception was thrown, and it went unnoticed because ServerKeyMaterialFactory#copyInto calls FilePath#write which created parent directories if they don't already exist.
I will test to see what happens when the native chmod is used on a non-existent file or directory. If it fails silently before this change, I will file a PR against docker-commons to create the file before changing permissions. If it succeeds, I will change the new code to create the file or directory first if necessary.
The following test passes against master, which implies that before PR #3135, FilePath#chmod on a non-existent file or directory would fail silently:
@Test
public void chmodFileDoesNotExist() throws Exception {
assumeFalse(Functions.isWindows());
Util.NATIVE_CHMOD_MODE = true; // Use native chmod
File f = File.createTempFile("chmod-test", ".tmp");
f.delete();
FilePath fp = new FilePath(f);
fp.chmod(0666);
assertFalse(f.exists());
}
Changing Util.NATIVE_CHMOD_MODE to false (to use NIO) causes the test to throw NoSuchFileException as noted by typz. The native implementation of IOUtils#mode threw an exception if the file did not exist, so it seems only the behavior of FilePath#chmod has changed.
I searched through the jenkinsci org for chmod to see if any other uses were likely to break after this change.
Almost all uses call one of mkdirs, touch, exists, write, or createTempFile/Dir immediately before chmod which should prevent them from seeing a NoSuchFileException.There are a few uses such as android-emulator-plugin and copy-data-to-workspace-plugin that could hit new exceptions if files are deleted while the directories are being traversed.
I think there is value in throwing NoSuchFileException to catch legitimate bugs as in docker-commons, and it doesn't appear that there will be widespread issues with the exception being thrown in plugins where it wouldn't have been before, so I will file a PR against docker-commons to create the directory before calling chmod. If anyone feels strongly that that we should preserve the old behavior I am also happy to catch NoSuchFileException in FilePath#chmod.
Devin Nusbaum
added a comment - The following test passes against master, which implies that before PR #3135, FilePath#chmod on a non-existent file or directory would fail silently:
@Test
public void chmodFileDoesNotExist() throws Exception {
assumeFalse(Functions.isWindows());
Util.NATIVE_CHMOD_MODE = true ; // Use native chmod
File f = File.createTempFile( "chmod-test" , ".tmp" );
f.delete();
FilePath fp = new FilePath(f);
fp.chmod(0666);
assertFalse(f.exists());
}
Changing Util.NATIVE_CHMOD_MODE to false (to use NIO) causes the test to throw NoSuchFileException as noted by typz . The native implementation of IOUtils#mode threw an exception if the file did not exist, so it seems only the behavior of FilePath#chmod has changed.
I searched through the jenkinsci org for chmod to see if any other uses were likely to break after this change.
Almost all uses call one of mkdirs , touch , exists , write , or createTempFile/Dir immediately before chmod which should prevent them from seeing a NoSuchFileException .There are a few uses such as android-emulator-plugin and copy-data-to-workspace-plugin that could hit new exceptions if files are deleted while the directories are being traversed.
I think there is value in throwing NoSuchFileException to catch legitimate bugs as in docker-commons, and it doesn't appear that there will be widespread issues with the exception being thrown in plugins where it wouldn't have been before, so I will file a PR against docker-commons to create the directory before calling chmod. If anyone feels strongly that that we should preserve the old behavior I am also happy to catch NoSuchFileException in FilePath#chmod .
dnusbaum I linked the PR with this JIRA number in title in the Core, and assigned it to you to clarify.
Please update/clarify if you shouldn't be the assignee. Thanks!
Baptiste Mathus
added a comment - dnusbaum I linked the PR with this JIRA number in title in the Core, and assigned it to you to clarify.
Please update/clarify if you shouldn't be the assignee. Thanks!
Devin Nusbaum
Jesse Glick
Votes:
1Vote for this issue
Watchers:
9Start watching this issue
Created:
Updated:
Resolved:
{"searchers":{"groups":[{"searchers":[{"name":"Project","id":"project","key":"issue.field.project","isShown":true,"lastViewed":1740376812812},{"name":"Summary","id":"summary","key":"issue.field.summary","isShown":true},{"name":"Type","id":"issuetype","key":"issue.field.issuetype","isShown":true,"lastViewed":1740376812812},{"name":"Status","id":"status","key":"issue.field.status","isShown":true,"lastViewed":1740376812816},{"name":"Priority","id":"priority","key":"issue.field.priority","isShown":true},{"name":"Resolution","id":"resolution","key":"issue.field.resolution","isShown":true},{"name":"Creator","id":"creator","key":"issue.field.creator","isShown":true},{"name":"Component","id":"component","key":"issue.field.components","isShown":true},{"name":"% Limits","id":"workratio","key":"issue.field.workratio","isShown":true},{"name":"Link types","id":"issue_link_type","key":"issue.field.issuelinks","isShown":true},{"name":"Environment","id":"environment","key":"issue.field.environment","isShown":true},{"name":"Description","id":"description","key":"issue.field.description","isShown":true},{"name":"Comment","id":"comment","key":"issue.field.comment","isShown":true},{"name":"Label","id":"labels","key":"issue.field.labels","isShown":true,"lastViewed":1740376812821},{"name":"Query","id":"text","key":"text","isShown":true},{"name":"Bonfire Browser","id":"customfield_10229","key":"com.atlassian.bonfire.plugin:bonfire-text","isShown":true},{"name":"Bonfire Operating System","id":"customfield_10231","key":"com.atlassian.bonfire.plugin:bonfire-text","isShown":true},{"name":"Bonfire Screen Resolution","id":"customfield_10244","key":"com.atlassian.bonfire.plugin:bonfire-text","isShown":true},{"name":"Bonfire URL","id":"customfield_10237","key":"com.atlassian.bonfire.plugin:bonfire-text","isShown":true},{"name":"Bonfire User Agent","id":"customfield_10226","key":"com.atlassian.bonfire.plugin:bonfire-text","isShown":true},{"name":"Bonfire jQuery Version","id":"customfield_10252","key":"com.atlassian.bonfire.plugin:bonfire-text","isShown":true},{"name":"Business Value","id":"customfield_10333","key":"com.atlassian.jira.plugin.system.customfieldtypes:float","isShown":false},{"name":"Development","id":"customfield_10720","key":"com.atlassian.jira.plugins.jira-development-integration-plugin:devsummary","isShown":true},{"name":"Epic Color","id":"customfield_10328","key":"com.pyxis.greenhopper.jira:gh-epic-color","isShown":false},{"name":"Epic Link","id":"customfield_10325","key":"com.pyxis.greenhopper.jira:gh-epic-link","isShown":true},{"name":"Epic Name","id":"customfield_10327","key":"com.pyxis.greenhopper.jira:gh-epic-label","isShown":true},{"name":"Epic Status","id":"customfield_10326","key":"com.pyxis.greenhopper.jira:gh-epic-status","isShown":false},{"name":"Epic/Theme","id":"customfield_10331","key":"com.atlassian.jira.plugin.system.customfieldtypes:labels","isShown":true},{"name":"Flagged","id":"customfield_10330","key":"com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes","isShown":true},{"name":"GitHub Users to Authorize as Committers","id":"customfield_10323","key":"com.atlassian.jira.plugin.system.customfieldtypes:textarea","isShown":true},{"name":"Issue Tracker","id":"customfield_11320","key":"com.atlassian.jira.plugin.system.customfieldtypes:select","isShown":true},{"name":"JIRA Capture Browser","id":"customfield_10228","key":"com.atlassian.bonfire.plugin:bonfire-text","isShown":true},{"name":"JIRA Capture Browser","id":"customfield_10230","key":"com.atlassian.bonfire.plugin:bonfire-text","isShown":true},{"name":"JIRA Capture Document Mode","id":"customfield_10258","key":"com.atlassian.bonfire.plugin:bonfire-text","isShown":true},{"name":"JIRA Capture Operating System","id":"customfield_10232","key":"com.atlassian.bonfire.plugin:bonfire-text","isShown":true},{"name":"JIRA Capture Operating System","id":"customfield_10233","key":"com.atlassian.bonfire.plugin:bonfire-text","isShown":true},{"name":"JIRA Capture Operating System","id":"customfield_10234","key":"com.atlassian.bonfire.plugin:bonfire-text","isShown":true},{"name":"JIRA Capture Operating System","id":"customfield_10236","key":"com.atlassian.bonfire.plugin:bonfire-text","isShown":true},{"name":"JIRA Capture Operating System","id":"customfield_10238","key":"com.atlassian.bonfire.plugin:bonfire-text","isShown":true},{"name":"JIRA Capture Operating System","id":"customfield_10239","key":"com.atlassian.bonfire.plugin:bonfire-text","isShown":true},{"name":"JIRA Capture Screen Resolution","id":"customfield_10245","key":"com.atlassian.bonfire.plugin:bonfire-text","isShown":true},{"name":"JIRA Capture Screen Resolution","id":"customfield_10246","key":"com.atlassian.bonfire.plugin:bonfire-text","isShown":true},{"name":"JIRA Capture Screen Resolution","id":"customfield_10247","key":"com.atlassian.bonfire.plugin:bonfire-text","isShown":true},{"name":"JIRA Capture Screen Resolution","id":"customfield_10248","key":"com.atlassian.bonfire.plugin:bonfire-text","isShown":true},{"name":"JIRA Capture Screen Resolution","id":"customfield_10249","key":"com.atlassian.bonfire.plugin:bonfire-text","isShown":true},{"name":"JIRA Capture Screen Resolution","id":"customfield_10250","key":"com.atlassian.bonfire.plugin:bonfire-text","isShown":true},{"name":"JIRA Capture URL","id":"customfield_10240","key":"com.atlassian.bonfire.plugin:bonfire-text","isShown":true},{"name":"JIRA Capture URL","id":"customfield_10241","key":"com.atlassian.bonfire.plugin:bonfire-text","isShown":true},{"name":"JIRA Capture URL","id":"customfield_10242","key":"com.atlassian.bonfire.plugin:bonfire-text","isShown":true},{"name":"JIRA Capture URL","id":"customfield_10243","key":"com.atlassian.bonfire.plugin:bonfire-text","isShown":true},{"name":"JIRA Capture User Agent","id":"customfield_10225","key":"com.atlassian.bonfire.plugin:bonfire-text","isShown":true},{"name":"JIRA Capture User Agent","id":"customfield_10227","key":"com.atlassian.bonfire.plugin:bonfire-text","isShown":true},{"name":"JIRA Capture jQuery Version","id":"customfield_10251","key":"com.atlassian.bonfire.plugin:bonfire-text","isShown":true},{"name":"JIRA Capture jQuery Version","id":"customfield_10253","key":"com.atlassian.bonfire.plugin:bonfire-text","isShown":true},{"name":"JIRA Capture jQuery Version","id":"customfield_10254","key":"com.atlassian.bonfire.plugin:bonfire-text","isShown":true},{"name":"JIRA Capture jQuery Version","id":"customfield_10255","key":"com.atlassian.bonfire.plugin:bonfire-text","isShown":true},{"name":"JIRA Capture jQuery Version","id":"customfield_10256","key":"com.atlassian.bonfire.plugin:bonfire-text","isShown":true},{"name":"JIRA Capture jQuery Version","id":"customfield_10257","key":"com.atlassian.bonfire.plugin:bonfire-text","isShown":true},{"name":"Meeting minutes URL","id":"customfield_10020","key":"com.atlassian.jira.plugin.system.customfieldtypes:url","isShown":false},{"name":"New Repository Name","id":"customfield_10321","key":"com.atlassian.jira.plugin.system.customfieldtypes:textfield","isShown":true},{"name":"Original story points","id":"customfield_11423","key":"com.atlassian.jpo:jpo-custom-field-original-story-points","isShown":true},{"name":"Parent Link","id":"customfield_11420","key":"com.atlassian.jpo:jpo-custom-field-parent","isShown":false},{"name":"Plugin Description","id":"customfield_10322","key":"com.atlassian.jira.plugin.system.customfieldtypes:textarea","isShown":true},{"name":"Raised During","id":"customfield_10220","key":"com.atlassian.bonfire.plugin:bonfire-session-cft","isShown":false},{"name":"Raised During","id":"customfield_10221","key":"com.atlassian.bonfire.plugin:bonfire-session-cft","isShown":false},{"name":"Rank","id":"customfield_10324","key":"com.pyxis.greenhopper.jira:gh-lexo-rank","isShown":true},{"name":"Released As","id":"customfield_10620","key":"com.atlassian.jira.plugin.system.customfieldtypes:textfield","isShown":true},{"name":"Repository URL","id":"customfield_10320","key":"com.atlassian.jira.plugin.system.customfieldtypes:url","isShown":true},{"name":"Similar Issues","id":"customfield_10520","key":"com.suggestimate:similar-issues-custom-field","isShown":true},{"name":"Sprint","id":"customfield_10329","key":"com.pyxis.greenhopper.jira:gh-sprint","isShown":true},{"name":"Story Points","id":"customfield_10332","key":"com.atlassian.jira.plugin.system.customfieldtypes:float","isShown":false},{"name":"Team","id":"customfield_11424","key":"com.atlassian.teams:rm-teams-custom-field-team","isShown":true},{"name":"Test Sessions","id":"customfield_10222","key":"com.atlassian.bonfire.plugin:bonfire-multi-session-cft","isShown":false},{"name":"Test Sessions","id":"customfield_10223","key":"com.atlassian.bonfire.plugin:bonfire-multi-session-cft","isShown":false},{"name":"Test Sessions","id":"customfield_10224","key":"com.atlassian.bonfire.plugin:bonfire-multi-session-cft","isShown":false},{"name":"Testing Status","id":"customfield_10259","key":"com.atlassian.bonfire.plugin:bonfire-testing-status-cft","isShown":false},{"name":"URL","id":"customfield_10000","key":"com.atlassian.jira.plugin.system.customfieldtypes:url","isShown":true}],"type":"DETAILS","title":"Details"},{"searchers":[{"name":"Created Date","id":"created","key":"issue.field.created","isShown":true},{"name":"Updated Date","id":"updated","key":"issue.field.updated","isShown":true},{"name":"Resolution Date","id":"resolutiondate","key":"issue.field.resolution.date","isShown":true},{"name":"Target end","id":"customfield_11422","key":"com.atlassian.jpo:jpo-custom-field-baseline-end","isShown":true},{"name":"Target start","id":"customfield_11421","key":"com.atlassian.jpo:jpo-custom-field-baseline-start","isShown":true}],"type":"DATES","title":"Dates"},{"searchers":[{"name":"Assignee","id":"assignee","key":"issue.field.assignee","isShown":true,"lastViewed":1740376812817},{"name":"Reporter","id":"reporter","key":"issue.field.reporter","isShown":true}],"type":"PEOPLE","title":"People"}]},"values":{"issuetype":{"name":"Type","editHtml":"\n\n\n\n <div class=\"field-group aui-field-issuetype\" >\n <label for=\"searcher-type\">Type</label> <select class=\"select js-default-checkboxmultiselect\"\n id=\"searcher-type\"\n multiple=\"multiple\"\n name=\"type\"\n data-max-inline-results-displayed=\"100\"\n data-placeholder-text=\"Find Issue Types...\">\n <optgroup>\n \n <option class=\" \"\n id=\"type_-2\"\n title=\"All Standard Issue Types\"\n value=\"-2\">All Standard Issue Types</option>\n </optgroup>\n\n <optgroup label=\"Standard Issue Types\">\n \n <option class=\" imagebacked 10730 \"\n data-icon=\"/secure/viewavatar?size=xsmall&avatarId=14673&avatarType=issuetype\"\n data-fallback-icon=\"/images/icons/issuetypes/blank.png\"\n id=\"type_1\"\n title=\"Bug\"\n value=\"1\">Bug</option>\n \n <option class=\" imagebacked 10730 \"\n data-icon=\"/images/icons/issuetypes/epic.png\"\n data-fallback-icon=\"/images/icons/issuetypes/blank.png\"\n id=\"type_10001\"\n title=\"Epic\"\n value=\"10001\">Epic</option>\n \n <option class=\" imagebacked 10730 \"\n data-icon=\"/secure/viewavatar?size=xsmall&avatarId=14680&avatarType=issuetype\"\n data-fallback-icon=\"/images/icons/issuetypes/blank.png\"\n id=\"type_4\"\n title=\"Improvement\"\n value=\"4\">Improvement</option>\n \n <option class=\" imagebacked 10730 \"\n data-icon=\"/secure/viewavatar?size=xsmall&avatarId=14681&avatarType=issuetype\"\n data-fallback-icon=\"/images/icons/issuetypes/blank.png\"\n id=\"type_2\"\n title=\"New Feature\"\n value=\"2\">New Feature</option>\n \n <option class=\" imagebacked 10730 \"\n data-icon=\"/secure/viewavatar?size=xsmall&avatarId=14670&avatarType=issuetype\"\n data-fallback-icon=\"/images/icons/issuetypes/blank.png\"\n id=\"type_5\"\n title=\"Patch\"\n value=\"5\">Patch</option>\n \n <option class=\" imagebacked 10730 \"\n data-icon=\"/secure/viewavatar?size=xsmall&avatarId=14685&avatarType=issuetype\"\n data-fallback-icon=\"/images/icons/issuetypes/blank.png\"\n id=\"type_10002\"\n title=\"Story\"\n value=\"10002\">Story</option>\n \n <option class=\" imagebacked 10730 \"\n data-icon=\"/secure/viewavatar?size=xsmall&avatarId=14688&avatarType=issuetype\"\n data-fallback-icon=\"/images/icons/issuetypes/blank.png\"\n id=\"type_3\"\n title=\"Task\"\n value=\"3\">Task</option>\n </optgroup>\n\n <optgroup label=\"Sub-Task Issue Types\">\n </optgroup>\n </select>\n </div>\n ","validSearcher":true,"isShown":true},"project":{"name":"Project","editHtml":" \n <div class=\"field-group aui-field-project\" >\n <label for=\"searcher-pid\">Project</label> <select class=\"js-project-checkboxmultiselect\"\n data-placeholder-text=\"Find Projects...\"\n id=\"searcher-pid\"\n multiple=\"multiple\"\n name=\"pid\">\n <optgroup label=\"Recent Projects\">\n </optgroup>\n <optgroup label=\"All Projects\" >\n \n <option data-icon=\"/secure/projectavatar?pid=10172&size=small\"\n title=\"Jenkins\"\n value=\"10172\">\n Jenkins (JENKINS)\n </option>\n <option data-icon=\"/secure/projectavatar?pid=10050&size=small\"\n title=\"test\"\n value=\"10050\">\n test (TEST)\n </option>\n </optgroup>\n </select>\n </div>\n \n\n","validSearcher":true,"isShown":true},"assignee":{"name":"Assignee","editHtml":"\n \n <div class=\"field-group aui-field-userlist\" >\n <label for=\"searcher-assigneeSelect\">Assignee</label> <fieldset rel=\"assignee\" class=\"hidden user-group-searcher-params\">\n </fieldset>\n <select class=\"js-usergroup-checkboxmultiselect\" multiple=\"multiple\" id=\"assignee\" name=\"assignee\" data-placeholder-text=\"Enter username or group\">\n <optgroup>\n <option class=\"headerOption\" data-icon=\"https://issues.jenkins.io/secure/useravatar?size=xsmall&avatarId=10293\" value=\"empty\" title=\"Unassigned\">Unassigned</option>\n </optgroup>\n <optgroup>\n </optgroup>\n </select>\n <input type=\"hidden\" name=\"check_prev_assignee\" value=\"true\">\n </div>\n \n","validSearcher":true,"isShown":true},"status":{"name":"Status","editHtml":"\n <div class=\"field-group aui-field-constants\" >\n <label for=\"searcher-status\">Status</label> <select class=\"select js-default-checkboxmultiselectstatuslozenge\"\n data-placeholder-text=\"Find Statuses...\"\n id=\"searcher-status\"\n multiple=\"multiple\"\n name=\"status\"\n data-max-inline-results-displayed=\"100\"\n data-footer-text=\"-88 more options. Continue typing to refine further.\" data-status-lozenge=\"true\">\n <optgroup >\n <option class=\"imagebacked\" data-icon=\"/images/icons/statuses/needinfo.png\" value=\"10001\" title=\"Untriaged\" data-simple-status=\"{"id":"10001","name":"Untriaged","description":"New issue sits in this state until a developer agrees that this is a security issue","iconUrl":"/images/icons/statuses/needinfo.png","statusCategory":{"id":2,"key":"new","colorName":"default"}}\">Untriaged</option>\n <option class=\"imagebacked\" data-icon=\"/images/icons/statuses/open.png\" value=\"1\" title=\"Open\" data-simple-status=\"{"id":"1","name":"Open","description":"The issue is open and ready for the assignee to start work on it.","iconUrl":"/images/icons/statuses/open.png","statusCategory":{"id":2,"key":"new","colorName":"default"}}\">Open</option>\n <option class=\"imagebacked\" data-icon=\"/images/icons/statuses/inprogress.png\" value=\"3\" title=\"In Progress\" data-simple-status=\"{"id":"3","name":"In Progress","description":"This issue is being actively worked on at the moment by the assignee.","iconUrl":"/images/icons/statuses/inprogress.png","statusCategory":{"id":4,"key":"indeterminate","colorName":"inprogress"}}\">In Progress</option>\n <option class=\"imagebacked\" data-icon=\"/images/icons/statuses/reopened.png\" value=\"4\" title=\"Reopened\" data-simple-status=\"{"id":"4","name":"Reopened","description":"This issue was once resolved, but the resolution was deemed incorrect. From here issues are either marked assigned or resolved.","iconUrl":"/images/icons/statuses/reopened.png","statusCategory":{"id":4,"key":"indeterminate","colorName":"inprogress"}}\">Reopened</option>\n <option class=\"imagebacked\" data-icon=\"/images/icons/statuses/information.png\" value=\"10005\" title=\"In Review\" data-simple-status=\"{"id":"10005","name":"In Review","description":"","iconUrl":"/images/icons/statuses/information.png","statusCategory":{"id":4,"key":"indeterminate","colorName":"inprogress"}}\">In Review</option>\n <option class=\"imagebacked\" data-icon=\"/images/icons/statuses/resolved.png\" value=\"10002\" title=\"Fix Prepared\" data-simple-status=\"{"id":"10002","name":"Fix Prepared","description":"A fix is implemented and is waiting for the next security release","iconUrl":"/images/icons/statuses/resolved.png","statusCategory":{"id":4,"key":"indeterminate","colorName":"inprogress"}}\">Fix Prepared</option>\n <option class=\"imagebacked\" data-icon=\"/images/icons/statuses/generic.png\" value=\"10000\" title=\"Verified\" data-simple-status=\"{"id":"10000","name":"Verified","description":"Verified","iconUrl":"/images/icons/statuses/generic.png","statusCategory":{"id":4,"key":"indeterminate","colorName":"inprogress"}}\">Verified</option>\n <option class=\"imagebacked\" data-icon=\"/images/icons/statuses/generic.png\" value=\"10203\" title=\"Fixed but Unreleased\" data-simple-status=\"{"id":"10203","name":"Fixed but Unreleased","description":"This change has been implemented and merged, but not yet released.","iconUrl":"/images/icons/statuses/generic.png","statusCategory":{"id":3,"key":"done","colorName":"success"}}\">Fixed but Unreleased</option>\n <option class=\"imagebacked\" data-icon=\"/images/icons/statuses/resolved.png\" value=\"5\" title=\"Resolved\" data-simple-status=\"{"id":"5","name":"Resolved","description":"A developer had implemented a fix and is waiting for a feedback from the reporter.","iconUrl":"/images/icons/statuses/resolved.png","statusCategory":{"id":3,"key":"done","colorName":"success"}}\">Resolved</option>\n <option class=\"imagebacked\" data-icon=\"/images/icons/statuses/closed.png\" value=\"6\" title=\"Closed\" data-simple-status=\"{"id":"6","name":"Closed","description":"The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.","iconUrl":"/images/icons/statuses/closed.png","statusCategory":{"id":3,"key":"done","colorName":"success"}}\">Closed</option>\n <option class=\"imagebacked\" data-icon=\"/images/icons/statuses/open.png\" value=\"10003\" title=\"To Do\" data-simple-status=\"{"id":"10003","name":"To Do","description":"","iconUrl":"/images/icons/statuses/open.png","statusCategory":{"id":2,"key":"new","colorName":"default"}}\">To Do</option>\n <option class=\"imagebacked\" data-icon=\"/images/icons/statuses/closed.png\" value=\"10004\" title=\"Done\" data-simple-status=\"{"id":"10004","name":"Done","description":"","iconUrl":"/images/icons/statuses/closed.png","statusCategory":{"id":3,"key":"done","colorName":"success"}}\">Done</option>\n </optgroup>\n</select>\n </div>\n \n","validSearcher":true,"isShown":true},"labels":{"name":"Label","viewHtml":" <div class=\"searcherValue\">\n \n <label class=\"fieldLabel\" for=\"fieldlabels\">Label:</label><span id=\"fieldlabels\" class=\"fieldValue\">\n \n jnr\n</span></div>\n","editHtml":"\n <div class=\"field-group aui-field-labels\" >\n <label for=\"searcher-labels\">Labels</label> <select class=\"js-label-checkboxmultiselect\" multiple=\"multiple\" id=\"searcher-labels\" name=\"labels\" data-placeholder-text=\"Find Labels...\">\n <option value=\"jnr\" title=\"jnr\" selected=\"selected\">jnr</option>\n </select>\n </div>\n \n","jql":"labels = jnr","validSearcher":true,"isShown":true}}}
[{"id":-1,"name":"My open issues","jql":"assignee = currentUser() AND resolution = Unresolved order by updated DESC","isSystem":true,"sharePermissions":[],"requiresLogin":true},{"id":-2,"name":"Reported by me","jql":"reporter = currentUser() order by created DESC","isSystem":true,"sharePermissions":[],"requiresLogin":true},{"id":-4,"name":"All issues","jql":"order by created DESC","isSystem":true,"sharePermissions":[],"requiresLogin":false},{"id":-5,"name":"Open issues","jql":"resolution = Unresolved order by priority DESC,updated DESC","isSystem":true,"sharePermissions":[],"requiresLogin":false},{"id":-9,"name":"Done issues","jql":"statusCategory = Done order by updated DESC","isSystem":true,"sharePermissions":[],"requiresLogin":false},{"id":-3,"name":"Viewed recently","jql":"issuekey in issueHistory() order by lastViewed DESC","isSystem":true,"sharePermissions":[],"requiresLogin":false},{"id":-6,"name":"Created recently","jql":"created >= -1w order by created DESC","isSystem":true,"sharePermissions":[],"requiresLogin":false},{"id":-7,"name":"Resolved recently","jql":"resolutiondate >= -1w order by updated DESC","isSystem":true,"sharePermissions":[],"requiresLogin":false},{"id":-8,"name":"Updated recently","jql":"updated >= -1w order by updated DESC","isSystem":true,"sharePermissions":[],"requiresLogin":false}]
Code changed in jenkins
User: Devin Nusbaum
Path:
core/src/main/java/hudson/Util.java
core/src/main/java/hudson/util/jna/Kernel32Utils.java
core/src/test/java/hudson/FilePathTest.java
core/src/test/java/hudson/UtilTest.java
http://jenkins-ci.org/commit/jenkins/52fa4d90b938243ccc273955caa7262154b9f688
Log:
JENKINS-39179
JENKINS-36088Always use NIO to create and detect symbolic links and Windows junctions (#3133)