Skip to content

Commit 5344a5c

Browse files
committed
Continue to improve pull request and issue notification
1 parent 9b32661 commit 5344a5c

6 files changed

Lines changed: 112 additions & 44 deletions

File tree

server-core/src/main/java/io/onedev/server/entitymanager/impl/DefaultIssueManager.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
import io.onedev.server.model.support.administration.GlobalIssueSetting;
5656
import io.onedev.server.model.support.issue.NamedIssueQuery;
5757
import io.onedev.server.model.support.issue.changedata.IssueChangeData;
58+
import io.onedev.server.model.support.issue.changedata.IssueCommittedData;
5859
import io.onedev.server.model.support.issue.changedata.IssueReferencedFromCodeCommentData;
5960
import io.onedev.server.model.support.issue.changedata.IssueReferencedFromIssueData;
6061
import io.onedev.server.model.support.issue.changedata.IssueReferencedFromPullRequestData;
@@ -265,16 +266,27 @@ public List<Issue> query(@Nullable Project project, EntityQuery<Issue> issueQuer
265266
@Listen
266267
public void on(IssueEvent event) {
267268
boolean minorChange = false;
269+
LastUpdate lastUpdate = null;
268270
if (event instanceof IssueChangeEvent) {
269271
IssueChangeData changeData = ((IssueChangeEvent)event).getChange().getData();
270-
if (changeData instanceof IssueReferencedFromCodeCommentData
272+
if (changeData instanceof IssueCommittedData) {
273+
User committer = ((IssueCommittedData) changeData).getCommitter(event.getIssue());
274+
if (committer != null) {
275+
lastUpdate = new LastUpdate();
276+
lastUpdate.setUser(committer);
277+
lastUpdate.setDate(event.getDate());
278+
lastUpdate.setActivity("committed code");
279+
}
280+
} else if (changeData instanceof IssueReferencedFromCodeCommentData
271281
|| changeData instanceof IssueReferencedFromIssueData
272282
|| changeData instanceof IssueReferencedFromPullRequestData) {
273283
minorChange = true;
274284
}
275285
}
276-
277-
if (!(event instanceof IssueOpened || minorChange))
286+
287+
if (lastUpdate != null)
288+
event.getIssue().setLastUpdate(lastUpdate);
289+
else if (!(event instanceof IssueOpened || minorChange))
278290
event.getIssue().setLastUpdate(event.getLastUpdate());
279291
}
280292

server-core/src/main/java/io/onedev/server/entitymanager/impl/DefaultPullRequestManager.java

Lines changed: 35 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@
8484
import io.onedev.server.event.pullrequest.PullRequestEvent;
8585
import io.onedev.server.event.pullrequest.PullRequestMergePreviewCalculated;
8686
import io.onedev.server.event.pullrequest.PullRequestOpened;
87+
import io.onedev.server.event.pullrequest.PullRequestUpdated;
8788
import io.onedev.server.git.GitUtils;
8889
import io.onedev.server.infomanager.CommitInfoManager;
8990
import io.onedev.server.model.Build;
@@ -669,24 +670,41 @@ public void on(PullRequestChangeEvent event) {
669670
@Transactional
670671
@Listen
671672
public void on(PullRequestEvent event) {
672-
boolean minorChange = false;
673-
if (event instanceof PullRequestChangeEvent) {
674-
PullRequestChangeData changeData = ((PullRequestChangeEvent)event).getChange().getData();
675-
if (changeData instanceof PullRequestReviewerAddData
676-
|| changeData instanceof PullRequestReviewerRemoveData
677-
|| changeData instanceof PullRequestSourceBranchDeleteData
678-
|| changeData instanceof PullRequestSourceBranchRestoreData
679-
|| changeData instanceof PullRequestReferencedFromCodeCommentData
680-
|| changeData instanceof PullRequestReferencedFromIssueData
681-
|| changeData instanceof PullRequestReferencedFromPullRequestData) {
682-
minorChange = true;
673+
if (event instanceof PullRequestUpdated) {
674+
Collection<User> committers = ((PullRequestUpdated) event).getCommitters();
675+
if (committers.size() == 1) {
676+
LastUpdate lastUpdate = new LastUpdate();
677+
lastUpdate.setUser(committers.iterator().next());
678+
lastUpdate.setActivity("added commits");
679+
lastUpdate.setDate(event.getDate());
680+
event.getRequest().setLastUpdate(lastUpdate);
681+
} else {
682+
LastUpdate lastUpdate = new LastUpdate();
683+
lastUpdate.setUser(committers.iterator().next());
684+
lastUpdate.setActivity("Commits added");
685+
lastUpdate.setDate(event.getDate());
686+
event.getRequest().setLastUpdate(lastUpdate);
687+
}
688+
} else {
689+
boolean minorChange = false;
690+
if (event instanceof PullRequestChangeEvent) {
691+
PullRequestChangeData changeData = ((PullRequestChangeEvent)event).getChange().getData();
692+
if (changeData instanceof PullRequestReviewerAddData
693+
|| changeData instanceof PullRequestReviewerRemoveData
694+
|| changeData instanceof PullRequestSourceBranchDeleteData
695+
|| changeData instanceof PullRequestSourceBranchRestoreData
696+
|| changeData instanceof PullRequestReferencedFromCodeCommentData
697+
|| changeData instanceof PullRequestReferencedFromIssueData
698+
|| changeData instanceof PullRequestReferencedFromPullRequestData) {
699+
minorChange = true;
700+
}
701+
}
702+
if (!(event instanceof PullRequestOpened
703+
|| event instanceof PullRequestMergePreviewCalculated
704+
|| event instanceof PullRequestBuildEvent
705+
|| minorChange)) {
706+
event.getRequest().setLastUpdate(event.getLastUpdate());
683707
}
684-
}
685-
if (!(event instanceof PullRequestOpened
686-
|| event instanceof PullRequestMergePreviewCalculated
687-
|| event instanceof PullRequestBuildEvent
688-
|| minorChange)) {
689-
event.getRequest().setLastUpdate(event.getLastUpdate());
690708
}
691709
}
692710

server-core/src/main/java/io/onedev/server/event/pullrequest/PullRequestUpdated.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,19 @@
11
package io.onedev.server.event.pullrequest;
22

3+
import java.util.Collection;
4+
import java.util.stream.Collectors;
5+
6+
import io.onedev.server.OneDev;
7+
import io.onedev.server.entitymanager.UserManager;
38
import io.onedev.server.model.PullRequestUpdate;
9+
import io.onedev.server.model.User;
410

511
public class PullRequestUpdated extends PullRequestEvent {
612

713
private final PullRequestUpdate update;
814

15+
private transient Collection<User> committers;
16+
917
public PullRequestUpdated(PullRequestUpdate update) {
1018
super(null, update.getDate(), update.getRequest());
1119
this.update = update;
@@ -23,4 +31,14 @@ public String getActivity(boolean withEntity) {
2331
return activity;
2432
}
2533

34+
public Collection<User> getCommitters() {
35+
if (committers == null) {
36+
committers = getUpdate().getCommits()
37+
.stream()
38+
.map(it->OneDev.getInstance(UserManager.class).find(it.getCommitterIdent()))
39+
.filter(it->it!=null)
40+
.collect(Collectors.toSet());
41+
}
42+
return committers;
43+
}
2644
}

server-core/src/main/java/io/onedev/server/model/support/issue/changedata/IssueCommittedData.java

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,15 @@
33
import java.util.Collection;
44
import java.util.HashMap;
55
import java.util.Map;
6+
import java.util.Optional;
7+
8+
import javax.annotation.Nullable;
69

710
import org.apache.wicket.Component;
11+
import org.eclipse.jgit.revwalk.RevCommit;
812

13+
import io.onedev.server.OneDev;
14+
import io.onedev.server.entitymanager.UserManager;
915
import io.onedev.server.model.Group;
1016
import io.onedev.server.model.Issue;
1117
import io.onedev.server.model.IssueChange;
@@ -19,6 +25,8 @@ public class IssueCommittedData implements IssueChangeData {
1925

2026
private final String commitHash;
2127

28+
private transient Optional<User> committer;
29+
2230
public IssueCommittedData(String commitHash) {
2331
this.commitHash = commitHash;
2432
}
@@ -43,9 +51,9 @@ protected Issue getIssue() {
4351
@Override
4452
public String getActivity(Issue withIssue) {
4553
if (withIssue != null)
46-
return "Code committed to fix issue " + withIssue.describe();
54+
return "Code committed for issue " + withIssue.describe();
4755
else
48-
return "Code committed to fix issue";
56+
return "Code committed";
4957
}
5058

5159
@Override
@@ -63,6 +71,18 @@ public Map<String, Group> getNewGroups() {
6371
return new HashMap<>();
6472
}
6573

74+
@Nullable
75+
public User getCommitter(Issue issue) {
76+
if (committer == null) {
77+
RevCommit commit = issue.getProject().getRevCommit(getCommitHash(), false);
78+
if (commit != null)
79+
committer = Optional.ofNullable(OneDev.getInstance(UserManager.class).find(commit.getCommitterIdent()));
80+
else
81+
committer = Optional.empty();
82+
}
83+
return committer.orElse(null);
84+
}
85+
6686
@Override
6787
public boolean affectsBoards() {
6888
return false;

server-core/src/main/java/io/onedev/server/notification/IssueNotificationManager.java

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@
1010
import javax.inject.Inject;
1111
import javax.inject.Singleton;
1212

13-
import org.eclipse.jgit.revwalk.RevCommit;
14-
1513
import com.google.common.collect.Sets;
1614

1715
import io.onedev.commons.launcher.loader.Listen;
@@ -137,18 +135,17 @@ protected Collection<? extends NamedQuery> getNamedQueries() {
137135
if (!user.isSystem())
138136
issueWatchManager.watch(issue, user, true);
139137
}
138+
139+
User committer = null;
140140
if (event instanceof IssueChangeEvent) {
141141
IssueChangeData changeData = ((IssueChangeEvent) event).getChange().getData();
142142
if (changeData instanceof IssueCommittedData) {
143143
IssueCommittedData committedData = (IssueCommittedData) changeData;
144-
RevCommit commit = issue.getProject().getRevCommit(committedData.getCommitHash(), false);
145-
if (commit != null) {
146-
User committer = userManager.find(commit.getCommitterIdent());
147-
if (committer != null) {
148-
notifiedUsers.add(committer);
149-
if (!committer.isSystem())
150-
issueWatchManager.watch(issue, committer, true);
151-
}
144+
committer = committedData.getCommitter(issue);
145+
if (committer != null) {
146+
notifiedUsers.add(committer);
147+
if (!committer.isSystem())
148+
issueWatchManager.watch(issue, committer, true);
152149
}
153150
}
154151
}
@@ -251,6 +248,8 @@ else if (event instanceof IssueChangeEvent)
251248
String subject;
252249
if (user != null)
253250
subject = String.format("%s %s", user.getDisplayName(), event.getActivity(true));
251+
else if (committer != null)
252+
subject = String.format("%s committed code for issue %s", committer.getDisplayName(), issue.describe());
254253
else
255254
subject = event.getActivity(true);
256255
String body = String.format("Visit <a href='%s'>%s</a> for details", url, url);

server-core/src/main/java/io/onedev/server/notification/PullRequestNotificationManager.java

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import java.util.Date;
55
import java.util.HashSet;
66
import java.util.Map;
7-
import java.util.Set;
87
import java.util.stream.Collectors;
98

109
import javax.inject.Inject;
@@ -145,18 +144,18 @@ protected Collection<? extends NamedQuery> getNamedQueries() {
145144
if (!user.isSystem())
146145
pullRequestWatchManager.watch(request, user, true);
147146
}
147+
148+
User committer = null;
148149
if (event instanceof PullRequestUpdated) {
149150
PullRequestUpdated pullRequestUpdated = (PullRequestUpdated) event;
150-
Set<User> committers = pullRequestUpdated.getUpdate().getCommits()
151-
.stream()
152-
.map(it->userManager.find(it.getCommitterIdent()))
153-
.filter(it->it!=null)
154-
.collect(Collectors.toSet());
155-
if (committers.size() == 1)
156-
notifiedUsers.add(committers.iterator().next());
157-
for (User committer: committers) {
158-
if (!committer.isSystem())
159-
pullRequestWatchManager.watch(request, committer, true);
151+
Collection<User> committers = pullRequestUpdated.getCommitters();
152+
if (committers.size() == 1) {
153+
committer = committers.iterator().next();
154+
notifiedUsers.add(committer);
155+
}
156+
for (User each: committers) {
157+
if (!each.isSystem())
158+
pullRequestWatchManager.watch(request, each, true);
160159
}
161160
}
162161

@@ -258,7 +257,9 @@ else if (event instanceof PullRequestCodeCommentReplied)
258257
String subject;
259258
if (user != null)
260259
subject = String.format("%s %s", user.getDisplayName(), event.getActivity(true));
261-
else
260+
else if (committer != null)
261+
subject = String.format("%s added commits to pull request %s", committer.getDisplayName(), request.describe());
262+
else
262263
subject = event.getActivity(true);
263264
String body = String.format("Visit <a href='%s'>%s</a> for details", url, url);
264265
mailManager.sendMailAsync(usersToNotify.stream().map(User::getEmail).collect(Collectors.toList()), subject, body);

0 commit comments

Comments
 (0)