Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
jenkins
提交
8f62901e
J
jenkins
项目概览
xxadev
/
jenkins
与 Fork 源项目一致
从无法访问的项目Fork
通知
3
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,发现更多精彩内容 >>
提交
8f62901e
编写于
2月 07, 2013
作者:
J
Johno Crawford
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'tsartarzan/JENKINS-15156' into JENKINS-15156
上级
92d87f06
2feb19ef
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
55 addition
and
2 deletion
+55
-2
core/src/main/java/hudson/model/AbstractProject.java
core/src/main/java/hudson/model/AbstractProject.java
+7
-1
core/src/main/java/jenkins/model/lazy/AbstractLazyLoadRunMap.java
.../main/java/jenkins/model/lazy/AbstractLazyLoadRunMap.java
+2
-1
test/src/test/java/hudson/model/AbstractProjectTest.java
test/src/test/java/hudson/model/AbstractProjectTest.java
+46
-0
未找到文件。
core/src/main/java/hudson/model/AbstractProject.java
浏览文件 @
8f62901e
...
@@ -162,7 +162,7 @@ public abstract class AbstractProject<P extends AbstractProject<P,R>,R extends A
...
@@ -162,7 +162,7 @@ public abstract class AbstractProject<P extends AbstractProject<P,R>,R extends A
* {@link Run#getPreviousBuild()}
* {@link Run#getPreviousBuild()}
*/
*/
@Restricted
(
NoExternalUse
.
class
)
@Restricted
(
NoExternalUse
.
class
)
protected
transient
RunMap
<
R
>
builds
=
new
RunMap
<
R
>()
;
protected
transient
RunMap
<
R
>
builds
;
/**
/**
* The quiet period. Null to delegate to the system default.
* The quiet period. Null to delegate to the system default.
...
@@ -271,6 +271,12 @@ public abstract class AbstractProject<P extends AbstractProject<P,R>,R extends A
...
@@ -271,6 +271,12 @@ public abstract class AbstractProject<P extends AbstractProject<P,R>,R extends A
super
.
onCreatedFromScratch
();
super
.
onCreatedFromScratch
();
// solicit initial contributions, especially from TransientProjectActionFactory
// solicit initial contributions, especially from TransientProjectActionFactory
updateTransientActions
();
updateTransientActions
();
assert
builds
==
null
;
builds
=
new
RunMap
<
R
>(
getBuildDir
(),
new
Constructor
<
R
>()
{
public
R
create
(
File
dir
)
throws
IOException
{
return
loadBuild
(
dir
);
}
});
}
}
@Override
@Override
...
...
core/src/main/java/jenkins/model/lazy/AbstractLazyLoadRunMap.java
浏览文件 @
8f62901e
...
@@ -203,8 +203,8 @@ public abstract class AbstractLazyLoadRunMap<R> extends AbstractMap<Integer,R> i
...
@@ -203,8 +203,8 @@ public abstract class AbstractLazyLoadRunMap<R> extends AbstractMap<Integer,R> i
private
void
loadIdOnDisk
()
{
private
void
loadIdOnDisk
()
{
String
[]
buildDirs
=
dir
.
list
(
createDirectoryFilter
());
String
[]
buildDirs
=
dir
.
list
(
createDirectoryFilter
());
if
(
buildDirs
==
null
)
{
if
(
buildDirs
==
null
)
{
// the job may just have been created
buildDirs
=
EMPTY_STRING_ARRAY
;
buildDirs
=
EMPTY_STRING_ARRAY
;
LOGGER
.
log
(
Level
.
WARNING
,
"failed to load list of builds from {0}"
,
dir
);
}
}
// wrap into ArrayList to enable mutation
// wrap into ArrayList to enable mutation
Arrays
.
sort
(
buildDirs
);
Arrays
.
sort
(
buildDirs
);
...
@@ -625,6 +625,7 @@ public abstract class AbstractLazyLoadRunMap<R> extends AbstractMap<Integer,R> i
...
@@ -625,6 +625,7 @@ public abstract class AbstractLazyLoadRunMap<R> extends AbstractMap<Integer,R> i
protected
R
load
(
String
id
,
Index
editInPlace
)
{
protected
R
load
(
String
id
,
Index
editInPlace
)
{
assert
dir
!=
null
;
R
v
=
load
(
new
File
(
dir
,
id
),
editInPlace
);
R
v
=
load
(
new
File
(
dir
,
id
),
editInPlace
);
if
(
v
==
null
&&
editInPlace
!=
null
)
{
if
(
v
==
null
&&
editInPlace
!=
null
)
{
// remember the failure.
// remember the failure.
...
...
test/src/test/java/hudson/model/AbstractProjectTest.java
浏览文件 @
8f62901e
...
@@ -47,6 +47,9 @@ import org.jvnet.hudson.test.recipes.PresetData.DataSet;
...
@@ -47,6 +47,9 @@ import org.jvnet.hudson.test.recipes.PresetData.DataSet;
import
java.io.File
;
import
java.io.File
;
import
java.util.concurrent.Future
;
import
java.util.concurrent.Future
;
import
org.apache.commons.io.FileUtils
;
import
org.apache.commons.io.FileUtils
;
import
java.lang.ref.Reference
;
import
java.lang.ref.WeakReference
;
import
java.util.ArrayList
;
/**
/**
* @author Kohsuke Kawaguchi
* @author Kohsuke Kawaguchi
...
@@ -280,4 +283,47 @@ public class AbstractProjectTest extends HudsonTestCase {
...
@@ -280,4 +283,47 @@ public class AbstractProjectTest extends HudsonTestCase {
assertSymlinkForBuild
(
lastSuccessful
,
1
);
assertSymlinkForBuild
(
lastSuccessful
,
1
);
assertSymlinkForBuild
(
lastStable
,
1
);
assertSymlinkForBuild
(
lastStable
,
1
);
}
}
// Force garbage collection of ref's referent. Taken from NetBeans code.
public
static
void
forceGc
(
final
Reference
<?>
ref
)
{
ArrayList
<
byte
[]>
alloc
=
new
ArrayList
<
byte
[]>();
int
size
=
100000
;
System
.
out
.
print
(
"forcing garbage collection..."
);
for
(
int
i
=
0
;
i
<
50
;
i
++)
{
if
(
ref
.
get
()
==
null
)
{
System
.
out
.
println
(
"succeeded"
);
return
;
}
try
{
System
.
gc
();
System
.
runFinalization
();
}
catch
(
OutOfMemoryError
error
)
{
// OK
}
try
{
alloc
.
add
(
new
byte
[
size
]);
size
=
(
int
)(((
double
)
size
)
*
1.3
);
}
catch
(
OutOfMemoryError
error
)
{
size
=
size
/
2
;
}
try
{
if
(
i
%
3
==
0
)
{
Thread
.
sleep
(
321
);
}
}
catch
(
InterruptedException
t
)
{
// ignore
}
}
System
.
out
.
println
(
"failed"
);
}
@Bug
(
15156
)
public
void
testGetBuildAfterGc
()
throws
Exception
{
FreeStyleProject
job
=
createFreeStyleProject
();
job
.
scheduleBuild2
(
0
,
new
Cause
.
UserCause
()).
get
();
// If this fails to garbage-collect, the test run will not have any value, but it will
// at least not fail.
forceGc
(
new
WeakReference
(
job
.
getLastBuild
()));
assertTrue
(
job
.
getLastBuild
()
!=
null
);
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录