summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShawn O. Pearce <sop@google.com>2010-07-26 13:06:02 -0700
committerShawn O. Pearce <sop@google.com>2010-07-26 13:28:29 -0700
commit086b7196e71b29edbb37bff93035e633e8fd752d (patch)
treedcdc0f45e3778c70be5a6d5f99155e8dbaadd421
parent7c13a58fd3a970995de738d63d273b2f6afe7a83 (diff)
Don't direct link to a change found by operators
If operators were used in the change query (e.g. "is:starred") its weird for the user if we jump to the only matching record. Instead we want to display a table of results, with the one record showing so its clear there was only one match. However we still want to direct link to a change if the user enters a legacy id number from the URL, a newer-style Change-Id, or a commit SHA-1 and only one change matched. Change-Id: I6784a1d277fa1c1a991ca338f7dfae8569c1667c Signed-off-by: Shawn O. Pearce <sop@google.com>
-rw-r--r--gerrit-gwtui/src/main/java/com/google/gerrit/client/SearchPanel.java3
-rw-r--r--gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/QueryScreen.java25
2 files changed, 26 insertions, 2 deletions
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/SearchPanel.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/SearchPanel.java
index ff9da492dd..2d3d2e8cfb 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/SearchPanel.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/SearchPanel.java
@@ -14,6 +14,7 @@
package com.google.gerrit.client;
+import com.google.gerrit.client.changes.QueryScreen;
import com.google.gerrit.common.PageLinks;
import com.google.gerrit.reviewdb.Change;
import com.google.gwt.event.dom.client.BlurEvent;
@@ -137,7 +138,7 @@ class SearchPanel extends Composite {
if (query.matches("^[1-9][0-9]*$")) {
Gerrit.display(PageLinks.toChange(Change.Id.parse(query)));
} else {
- Gerrit.display(PageLinks.toChangeQuery(query));
+ Gerrit.display(PageLinks.toChangeQuery(query), QueryScreen.forQuery(query));
}
}
}
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/QueryScreen.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/QueryScreen.java
index c600569ab7..bcd2ed22ce 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/QueryScreen.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/QueryScreen.java
@@ -19,6 +19,7 @@ import com.google.gerrit.client.rpc.GerritCallback;
import com.google.gerrit.common.PageLinks;
import com.google.gerrit.common.data.ChangeInfo;
import com.google.gerrit.common.data.SingleListChangeInfo;
+import com.google.gerrit.reviewdb.RevId;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwtorm.client.KeyUtil;
@@ -51,7 +52,7 @@ public class QueryScreen extends PagedSingleListScreen {
return new GerritCallback<SingleListChangeInfo>() {
public final void onSuccess(final SingleListChangeInfo result) {
if (isAttached()) {
- if (result.getChanges().size() == 1) {
+ if (result.getChanges().size() == 1 && isSingleQuery(query)) {
final ChangeInfo c = result.getChanges().get(0);
Gerrit.display(PageLinks.toChange(c), new ChangeScreen(c));
} else {
@@ -73,4 +74,26 @@ public class QueryScreen extends PagedSingleListScreen {
protected void loadNext() {
Util.LIST_SVC.allQueryNext(query, pos, pageSize, loadCallback());
}
+
+ private static boolean isSingleQuery(String query) {
+ if (query.matches("^[1-9][0-9]*$")) {
+ // Legacy numeric identifier.
+ //
+ return true;
+ }
+
+ if (query.matches("^[iI][0-9a-f]{4,}$")) {
+ // Newer style Change-Id.
+ //
+ return true;
+ }
+
+ if (query.matches("^([0-9a-fA-F]{4," + RevId.LEN + "})$")) {
+ // Commit SHA-1 of any change.
+ //
+ return true;
+ }
+
+ return false;
+ }
}