提交 99f14f72 编写于 作者: V Vojtech Juranek

Merge remote-tracking branch 'jenkins/master'

...@@ -58,6 +58,9 @@ Upcoming changes</a> ...@@ -58,6 +58,9 @@ Upcoming changes</a>
<li class=bug> <li class=bug>
Reduced size of memory leak in render-on-demand functionality used e.g. in configuration pages. Reduced size of memory leak in render-on-demand functionality used e.g. in configuration pages.
(<a href="https://issues.jenkins-ci.org/browse/JENKINS-16341">issue 16341</a>) (<a href="https://issues.jenkins-ci.org/browse/JENKINS-16341">issue 16341</a>)
<li class=bug>
Improving responsiveness of <b>People</b> page when using Gravatar plugin.
(<a href="https://issues.jenkins-ci.org/browse/JENKINS-16342">issue 16342</a>)
<li class=bug> <li class=bug>
Improved logging and error output from SSHD in Jenkins. Improved logging and error output from SSHD in Jenkins.
<li class=bug> <li class=bug>
......
...@@ -578,6 +578,9 @@ public abstract class View extends AbstractModelObject implements AccessControll ...@@ -578,6 +578,9 @@ public abstract class View extends AbstractModelObject implements AccessControll
*/ */
private AbstractProject project; private AbstractProject project;
/** @see UserAvatarResolver */
String avatar;
UserInfo(User user, AbstractProject p, Calendar lastChange) { UserInfo(User user, AbstractProject p, Calendar lastChange) {
this.user = user; this.user = user;
this.project = p; this.project = p;
...@@ -779,12 +782,16 @@ public abstract class View extends AbstractModelObject implements AccessControll ...@@ -779,12 +782,16 @@ public abstract class View extends AbstractModelObject implements AccessControll
} }
for (ChangeLogSet.Entry entry : build.getChangeSet()) { for (ChangeLogSet.Entry entry : build.getChangeSet()) {
User user = entry.getAuthor(); User user = entry.getAuthor();
synchronized (this) { UserInfo info = users.get(user);
UserInfo info = users.get(user); if (info == null) {
if (info == null) { UserInfo userInfo = new UserInfo(user, p, build.getTimestamp());
users.put(user, new UserInfo(user, p, build.getTimestamp())); userInfo.avatar = UserAvatarResolver.resolve(user, iconSize);
synchronized (this) {
users.put(user, userInfo);
modified.add(user); modified.add(user);
} else if (info.getLastChange().before(build.getTimestamp())) { }
} else if (info.getLastChange().before(build.getTimestamp())) {
synchronized (this) {
info.project = p; info.project = p;
info.lastChange = build.getTimestamp(); info.lastChange = build.getTimestamp();
modified.add(user); modified.add(user);
...@@ -809,8 +816,10 @@ public abstract class View extends AbstractModelObject implements AccessControll ...@@ -809,8 +816,10 @@ public abstract class View extends AbstractModelObject implements AccessControll
continue; continue;
} }
if (!users.containsKey(u)) { if (!users.containsKey(u)) {
UserInfo userInfo = new UserInfo(u, null, null);
userInfo.avatar = UserAvatarResolver.resolve(u, iconSize);
synchronized (this) { synchronized (this) {
users.put(u, new UserInfo(u, null, null)); users.put(u, userInfo);
modified.add(u); modified.add(u);
} }
} }
...@@ -826,7 +835,7 @@ public abstract class View extends AbstractModelObject implements AccessControll ...@@ -826,7 +835,7 @@ public abstract class View extends AbstractModelObject implements AccessControll
accumulate("id", u.getId()). accumulate("id", u.getId()).
accumulate("fullName", u.getFullName()). accumulate("fullName", u.getFullName()).
accumulate("url", u.getUrl()). accumulate("url", u.getUrl()).
accumulate("avatar", UserAvatarResolver.resolve(u, iconSize)). accumulate("avatar", i.avatar).
accumulate("timeSortKey", i.getTimeSortKey()). accumulate("timeSortKey", i.getTimeSortKey()).
accumulate("lastChangeTimeString", i.getLastChangeTimeString()); accumulate("lastChangeTimeString", i.getLastChangeTimeString());
AbstractProject<?,?> p = i.getProject(); AbstractProject<?,?> p = i.getProject();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册