Fix change id double encoded issue
RestApi#id will url encode id, so we should pass in a decoded one,
otherwise for project names with special url character will be encoded
twice and cause a 404. I.e. "xx/yy" will become "xx%252F/yy" while we
want "xx%2Fyy".
Change-Id: Ia0c39522d5631e4631f06b0b0cdf7d03c0767f9f
diff --git a/src/main/java/com/googlesource/gerrit/plugins/verifystatus/client/JobsDropDownPanel.java b/src/main/java/com/googlesource/gerrit/plugins/verifystatus/client/JobsDropDownPanel.java
index 23017f0..787d757 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/verifystatus/client/JobsDropDownPanel.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/verifystatus/client/JobsDropDownPanel.java
@@ -22,6 +22,7 @@
import com.google.gerrit.plugin.client.Plugin;
import com.google.gerrit.plugin.client.extension.Panel;
import com.google.gerrit.plugin.client.rpc.RestApi;
+import com.google.gwt.http.client.URL;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.Grid;
@@ -44,9 +45,10 @@
JobsDropDownPanel(Panel panel) {
ChangeInfo change =
panel.getObject(GerritUiExtensionPoint.Key.CHANGE_INFO).cast();
+ String decodedChangeId = URL.decodePathSegment(change.id());
RevisionInfo rev =
panel.getObject(GerritUiExtensionPoint.Key.REVISION_INFO).cast();
- new RestApi("changes").id(change.id()).view("revisions").id(rev.id())
+ new RestApi("changes").id(decodedChangeId).view("revisions").id(rev.id())
.view(Plugin.get().getPluginName(), "verifications")
.addParameter("sort", "REPORTER")
.addParameter("filter", "CURRENT")
diff --git a/src/main/java/com/googlesource/gerrit/plugins/verifystatus/client/JobsPanel.java b/src/main/java/com/googlesource/gerrit/plugins/verifystatus/client/JobsPanel.java
index 7ace329..f9d3603 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/verifystatus/client/JobsPanel.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/verifystatus/client/JobsPanel.java
@@ -21,6 +21,7 @@
import com.google.gerrit.plugin.client.Plugin;
import com.google.gerrit.plugin.client.extension.Panel;
import com.google.gerrit.plugin.client.rpc.RestApi;
+import com.google.gwt.http.client.URL;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.Grid;
@@ -41,18 +42,19 @@
}
JobsPanel(Panel panel) {
- ChangeInfo change =
+ final ChangeInfo change =
panel.getObject(GerritUiExtensionPoint.Key.CHANGE_INFO).cast();
- RevisionInfo rev =
+ String decodedChangeId = URL.decodePathSegment(change.id());
+ final RevisionInfo rev =
panel.getObject(GerritUiExtensionPoint.Key.REVISION_INFO).cast();
- final String patchsetId = change.id() + "," + rev.id();
- new RestApi("changes").id(change.id()).view("revisions").id(rev.id())
+ new RestApi("changes").id(decodedChangeId).view("revisions").id(rev.id())
.view(Plugin.get().getPluginName(), "verifications")
.addParameter("sort", "REPORTER").addParameter("filter", "CURRENT")
.get(new AsyncCallback<NativeMap<VerificationInfo>>() {
@Override
public void onSuccess(NativeMap<VerificationInfo> result) {
if (!result.isEmpty()) {
+ final String patchsetId = change.id() + "," + rev.id();
display(patchsetId, result);
}
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/verifystatus/client/JobsScreen.java b/src/main/java/com/googlesource/gerrit/plugins/verifystatus/client/JobsScreen.java
index abaeab0..8e482ab 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/verifystatus/client/JobsScreen.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/verifystatus/client/JobsScreen.java
@@ -19,6 +19,7 @@
import com.google.gerrit.plugin.client.Plugin;
import com.google.gerrit.plugin.client.rpc.RestApi;
import com.google.gerrit.plugin.client.screen.Screen;
+import com.google.gwt.http.client.URL;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.Image;
@@ -38,10 +39,10 @@
JobsScreen(final String patchsetId) {
setStyleName("verifystatus-panel");
String[] id = patchsetId.split(",");
- String chagneId = id[0];
+ String decodedChagneId = URL.decodePathSegment(id[0]);
String revId = id[1];
- new RestApi("changes").id(chagneId).view("revisions").id(revId)
+ new RestApi("changes").id(decodedChagneId).view("revisions").id(revId)
.view(Plugin.get().getPluginName(), "verifications")
.addParameter("sort", "REPORTER")
.get(new AsyncCallback<NativeMap<VerificationInfo>>() {