diff options
author | Shawn O. Pearce <sop@google.com> | 2010-07-26 13:06:02 -0700 |
---|---|---|
committer | Shawn O. Pearce <sop@google.com> | 2010-07-26 13:28:29 -0700 |
commit | 086b7196e71b29edbb37bff93035e633e8fd752d (patch) | |
tree | dcdc0f45e3778c70be5a6d5f99155e8dbaadd421 | |
parent | 7c13a58fd3a970995de738d63d273b2f6afe7a83 (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.java | 3 | ||||
-rw-r--r-- | gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/QueryScreen.java | 25 |
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; + } } |