Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
LinuxSuRen
jenkins
提交
e3e6d570
J
jenkins
项目概览
LinuxSuRen
/
jenkins
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
J
jenkins
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
e3e6d570
编写于
2月 21, 2018
作者:
J
Jesse Glick
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
VirtualFile.readLink
上级
4911c5c0
变更
3
显示空白变更内容
内联
并排
Showing
3 changed file
with
44 addition
and
2 deletion
+44
-2
core/src/main/java/hudson/Util.java
core/src/main/java/hudson/Util.java
+2
-2
core/src/main/java/jenkins/util/VirtualFile.java
core/src/main/java/jenkins/util/VirtualFile.java
+25
-0
core/src/test/java/jenkins/util/VirtualFileTest.java
core/src/test/java/jenkins/util/VirtualFileTest.java
+17
-0
未找到文件。
core/src/main/java/hudson/Util.java
浏览文件 @
e3e6d570
...
...
@@ -1403,7 +1403,7 @@ public class Util {
* The relative path is meant to be resolved from the location of the symlink.
*/
@CheckForNull
public
static
String
resolveSymlink
(
@Nonnull
File
link
)
throws
I
nterruptedException
,
I
OException
{
public
static
String
resolveSymlink
(
@Nonnull
File
link
)
throws
IOException
{
try
{
Path
path
=
link
.
toPath
();
return
Files
.
readSymbolicLink
(
path
).
toString
();
...
...
@@ -1415,7 +1415,7 @@ public class Util {
}
catch
(
IOException
x
)
{
throw
x
;
}
catch
(
Exception
x
)
{
throw
(
IOException
)
new
IOException
(
x
.
toString
()).
initCause
(
x
);
throw
new
IOException
(
x
);
}
}
...
...
core/src/main/java/jenkins/util/VirtualFile.java
浏览文件 @
e3e6d570
...
...
@@ -139,8 +139,20 @@ public abstract class VirtualFile implements Comparable<VirtualFile>, Serializab
*/
public
abstract
boolean
isFile
()
throws
IOException
;
/**
* If this file is a symlink, returns the link target.
* <p>The default implementation always returns null.
* Some implementations may not support symlinks under any conditions.
* @return a target (typically a relative path in some format), or null if this is not a link
* @throws IOException if reading the link, or even determining whether this file is a link, failed
*/
public
@CheckForNull
String
readLink
()
throws
IOException
{
return
null
;
}
/**
* Checks whether this file exists.
* The behavior is undefined for symlinks; if in doubt, check {@link #readLink} first.
* @return true if it is a plain file or directory, false if nonexistent
* @throws IOException in case checking status failed
*/
...
...
@@ -378,6 +390,12 @@ public abstract class VirtualFile implements Comparable<VirtualFile>, Serializab
}
return
f
.
exists
();
}
@Override
public
String
readLink
()
throws
IOException
{
if
(
isIllegalSymlink
())
{
return
null
;
// best to just ignore link -> ../whatever
}
return
Util
.
resolveSymlink
(
f
);
}
@Override
public
VirtualFile
[]
list
()
throws
IOException
{
if
(
isIllegalSymlink
())
{
return
new
VirtualFile
[
0
];
...
...
@@ -497,6 +515,13 @@ public abstract class VirtualFile implements Comparable<VirtualFile>, Serializab
throw
new
IOException
(
x
);
}
}
@Override
public
String
readLink
()
throws
IOException
{
try
{
return
f
.
readLink
();
}
catch
(
InterruptedException
x
)
{
throw
new
IOException
(
x
);
}
}
@Override
public
VirtualFile
[]
list
()
throws
IOException
{
try
{
List
<
FilePath
>
kids
=
f
.
list
();
...
...
core/src/test/java/jenkins/util/VirtualFileTest.java
浏览文件 @
e3e6d570
...
...
@@ -175,4 +175,21 @@ public class VirtualFileTest {
}
}
@Issue
(
"JENKINS-26810"
)
@Test
public
void
readLink
()
throws
Exception
{
assumeFalse
(
"Symlinks do not work well on Windows"
,
Functions
.
isWindows
());
File
root
=
tmp
.
getRoot
();
FilePath
rootF
=
new
FilePath
(
root
);
rootF
.
child
(
"plain"
).
write
(
""
,
null
);
rootF
.
child
(
"link"
).
symlinkTo
(
"physical"
,
TaskListener
.
NULL
);
for
(
VirtualFile
vf
:
new
VirtualFile
[]
{
VirtualFile
.
forFile
(
root
),
VirtualFile
.
forFilePath
(
rootF
)})
{
assertNull
(
vf
.
readLink
());
assertNull
(
vf
.
child
(
"plain"
).
readLink
());
VirtualFile
link
=
vf
.
child
(
"link"
);
assertEquals
(
"physical"
,
link
.
readLink
());
assertFalse
(
link
.
isFile
());
assertFalse
(
link
.
isDirectory
());
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录