Add 'depends-on' to change screen
Parse the commit message and put the depends on info on the change
screen.
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chound/client/LabelPanel.java b/src/main/java/com/googlesource/gerrit/plugins/chound/client/LabelPanel.java
index 46be76e..1fb3a28 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chound/client/LabelPanel.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chound/client/LabelPanel.java
@@ -16,9 +16,13 @@
import com.google.gerrit.client.GerritUiExtensionPoint;
import com.google.gerrit.client.info.ChangeInfo;
+import com.google.gerrit.client.info.ChangeInfo.CommitInfo;
+import com.google.gerrit.client.info.ChangeInfo.RevisionInfo;
import com.google.gerrit.client.rpc.NativeMap;
import com.google.gerrit.plugin.client.extension.Panel;
import com.google.gerrit.plugin.client.rpc.RestApi;
+import com.google.gwt.regexp.shared.MatchResult;
+import com.google.gwt.regexp.shared.RegExp;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.InlineHyperlink;
@@ -34,16 +38,34 @@
}
LabelPanel(final Panel panel) {
- ChangeInfo change =
+ final ChangeInfo change =
panel.getObject(GerritUiExtensionPoint.Key.CHANGE_INFO).cast();
- RestApi r = new RestApi("changes")
- .view("?q=message:" + change.changeId())
- .view("+NOT+change:" + change.changeId());
- r.get(new AsyncCallback<NativeMap<ChangeInfo>>() {
+ RevisionInfo rev =
+ panel.getObject(GerritUiExtensionPoint.Key.REVISION_INFO).cast();
+
+ new RestApi("changes").id(change.id()).view("revisions").id(rev.id())
+ .view("commit")
+ .get(new AsyncCallback<CommitInfo>() {
+ @Override
+ public void onSuccess(CommitInfo result) {
+ if (result != null) {
+ displayDependsOn(result);
+ }
+ }
+
+ @Override
+ public void onFailure(Throwable caught) {
+ // never invoked
+ }
+ });
+
+ new RestApi("changes").view("?q=message:" + change.changeId())
+ .view("+NOT+change:" + change.changeId())
+ .get(new AsyncCallback<NativeMap<ChangeInfo>>() {
@Override
public void onSuccess(NativeMap<ChangeInfo> result) {
if (!result.isEmpty()) {
- display(result);
+ displayNeededBy(result);
}
}
@@ -54,17 +76,29 @@
});
}
- private void display(NativeMap<ChangeInfo> result) {
- if (!result.isEmpty()) {
+ private void displayDependsOn(CommitInfo result) {
+ String message = result.message();
+ if (message.toLowerCase().contains("depends-on:")) {
HorizontalPanel p = new HorizontalPanel();
- InlineLabel il = new InlineLabel("Dependency");
- p.add(il);
- for (String key : result.keySet()) {
- InlineHyperlink ih = new InlineHyperlink(
- result.get(key).changeId(), "/c/" + result.get(key)._number());
- p.add(ih);
+ p.add(new InlineLabel("Depends-on"));
+ MatchResult matcher;
+ RegExp pattern = RegExp.compile("[Dd]epends-[Oo]n:? (I[0-9a-f]{8,40})", "g");
+ while ((matcher = pattern.exec(message)) != null) {
+ p.add(new InlineLabel(matcher.getGroup(1)));
}
add(p);
}
}
+
+ private void displayNeededBy(NativeMap<ChangeInfo> result) {
+ HorizontalPanel p = new HorizontalPanel();
+ InlineLabel il = new InlineLabel("Needed-by");
+ p.add(il);
+ for (String key : result.keySet()) {
+ InlineHyperlink ih = new InlineHyperlink(
+ result.get(key).changeId(), "/c/" + result.get(key)._number());
+ p.add(ih);
+ }
+ add(p);
+ }
}
\ No newline at end of file