Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
FIY695
jenkins
提交
fff90c10
J
jenkins
项目概览
FIY695
/
jenkins
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
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,发现更多精彩内容 >>
提交
fff90c10
编写于
5月 28, 2013
作者:
J
Jesse Glick
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[FIXED JENKINS-16301] Optimized Fingerprint.save.
上级
f6178f4b
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
59 addition
and
3 deletion
+59
-3
changelog.html
changelog.html
+3
-0
core/src/main/java/hudson/model/Fingerprint.java
core/src/main/java/hudson/model/Fingerprint.java
+56
-3
未找到文件。
changelog.html
浏览文件 @
fff90c10
...
...
@@ -58,6 +58,9 @@ Upcoming changes</a>
<li
class=
bug
>
NPE in
<code>
DefaultMatrixExecutionStrategyImpl.waitForCompletion
</code>
.
(
<a
href=
"https://issues.jenkins-ci.org/browse/JENKINS-18024"
>
issue 18024
</a>
)
<li
class=
bug
>
Optimizations in fingerprint recording.
(
<a
href=
"https://issues.jenkins-ci.org/browse/JENKINS-16301"
>
issue 16301
</a>
)
<li
class=
bug
>
User icon in People broken if Jenkins root URL unconfigured.
(
<a
href=
"https://issues.jenkins-ci.org/browse/JENKINS-18118"
>
issue 18118
</a>
)
...
...
core/src/main/java/hudson/model/Fingerprint.java
浏览文件 @
fff90c10
...
...
@@ -51,6 +51,7 @@ import org.kohsuke.stapler.export.ExportedBean;
import
java.io.File
;
import
java.io.IOException
;
import
java.io.PrintWriter
;
import
java.util.AbstractCollection
;
import
java.util.ArrayList
;
import
java.util.Collection
;
...
...
@@ -60,6 +61,7 @@ import java.util.Date;
import
java.util.Hashtable
;
import
java.util.Iterator
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Map.Entry
;
import
java.util.TreeMap
;
import
java.util.logging.Level
;
...
...
@@ -508,7 +510,10 @@ public class Fingerprint implements ModelObject, Saveable {
public
void
marshal
(
Object
source
,
HierarchicalStreamWriter
writer
,
MarshallingContext
context
)
{
RangeSet
src
=
(
RangeSet
)
source
;
writer
.
setValue
(
serialize
(
src
));
}
static
String
serialize
(
RangeSet
src
)
{
StringBuilder
buf
=
new
StringBuilder
(
src
.
ranges
.
size
()*
10
);
for
(
Range
r
:
src
.
ranges
)
{
if
(
buf
.
length
()>
0
)
buf
.
append
(
','
);
...
...
@@ -517,7 +522,7 @@ public class Fingerprint implements ModelObject, Saveable {
else
buf
.
append
(
r
.
start
).
append
(
'-'
).
append
(
r
.
end
-
1
);
}
writer
.
setValue
(
buf
.
toString
()
);
return
buf
.
toString
(
);
}
public
Object
unmarshal
(
HierarchicalStreamReader
reader
,
final
UnmarshallingContext
context
)
{
...
...
@@ -560,6 +565,8 @@ public class Fingerprint implements ModelObject, Saveable {
}
}
}
private
static
final
DateConverter
DATE_CONVERTER
=
new
DateConverter
();
private
final
Date
timestamp
;
...
...
@@ -859,7 +866,53 @@ public class Fingerprint implements ModelObject, Saveable {
}
void
save
(
File
file
)
throws
IOException
{
getConfigFile
(
file
).
write
(
this
);
if
(
facets
.
isEmpty
())
{
// JENKINS-16301: fast path for the common case.
PrintWriter
w
=
new
PrintWriter
(
file
,
"UTF-8"
);
try
{
w
.
println
(
"<?xml version='1.0' encoding='UTF-8'?>"
);
w
.
println
(
"<fingerprint>"
);
w
.
print
(
" <timestamp>"
);
w
.
print
(
DATE_CONVERTER
.
toString
(
timestamp
));
w
.
println
(
"</timestamp>"
);
if
(
original
!=
null
)
{
w
.
println
(
" <original>"
);
w
.
print
(
" <name>"
);
w
.
print
(
original
.
name
);
w
.
println
(
"</name>"
);
w
.
print
(
" <number>"
);
w
.
print
(
original
.
number
);
w
.
println
(
"</number>"
);
w
.
println
(
" </original>"
);
}
w
.
print
(
" <md5sum>"
);
w
.
print
(
Util
.
toHexString
(
md5sum
));
w
.
println
(
"</md5sum>"
);
w
.
print
(
" <fileName>"
);
w
.
print
(
fileName
);
w
.
println
(
"</fileName>"
);
w
.
println
(
" <usages>"
);
for
(
Map
.
Entry
<
String
,
RangeSet
>
e
:
usages
.
entrySet
())
{
w
.
println
(
" <entry>"
);
w
.
print
(
" <string>"
);
w
.
print
(
e
.
getKey
());
w
.
println
(
"</string>"
);
w
.
print
(
" <ranges>"
);
w
.
print
(
RangeSet
.
ConverterImpl
.
serialize
(
e
.
getValue
()));
w
.
println
(
"</ranges>"
);
w
.
println
(
" </entry>"
);
}
w
.
println
(
" </usages>"
);
w
.
println
(
" <facets/>"
);
w
.
print
(
"</fingerprint>"
);
w
.
flush
();
}
finally
{
w
.
close
();
}
}
else
{
// Slower fallback that can persist facets.
getConfigFile
(
file
).
write
(
this
);
}
}
/**
...
...
@@ -950,7 +1003,7 @@ public class Fingerprint implements ModelObject, Saveable {
}
@Override
public
String
toString
()
{
return
"Fingerprint[original="
+
original
+
",hash="
+
getHashString
()
+
",fileName="
+
fileName
+
",timestamp="
+
new
DateConverter
()
.
toString
(
timestamp
)
+
",usages="
+
new
TreeMap
<
String
,
RangeSet
>(
usages
)
+
",facets="
+
facets
+
"]"
;
return
"Fingerprint[original="
+
original
+
",hash="
+
getHashString
()
+
",fileName="
+
fileName
+
",timestamp="
+
DATE_CONVERTER
.
toString
(
timestamp
)
+
",usages="
+
new
TreeMap
<
String
,
RangeSet
>(
usages
)
+
",facets="
+
facets
+
"]"
;
}
private
static
final
XStream
XSTREAM
=
new
XStream2
();
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录