ChangesCollection: Return different text on multiple changes
Users are often confused when looking up a change just says "Not found" when they are sure a change exists, but weren't aware that a search returned multiple changes. Distinguish between these two cases by changing the human-readable text in the response. Change-Id: I87f6cd231be026e2bb48f26e18f11a5485aeb0e9
This commit is contained in:
@@ -39,6 +39,7 @@ import com.google.gerrit.extensions.api.changes.AddReviewerInput;
|
|||||||
import com.google.gerrit.extensions.api.changes.RebaseInput;
|
import com.google.gerrit.extensions.api.changes.RebaseInput;
|
||||||
import com.google.gerrit.extensions.api.changes.ReviewInput;
|
import com.google.gerrit.extensions.api.changes.ReviewInput;
|
||||||
import com.google.gerrit.extensions.api.changes.RevisionApi;
|
import com.google.gerrit.extensions.api.changes.RevisionApi;
|
||||||
|
import com.google.gerrit.extensions.api.projects.BranchInput;
|
||||||
import com.google.gerrit.extensions.client.ChangeStatus;
|
import com.google.gerrit.extensions.client.ChangeStatus;
|
||||||
import com.google.gerrit.extensions.client.ListChangesOption;
|
import com.google.gerrit.extensions.client.ListChangesOption;
|
||||||
import com.google.gerrit.extensions.common.AccountInfo;
|
import com.google.gerrit.extensions.common.AccountInfo;
|
||||||
@@ -50,6 +51,7 @@ import com.google.gerrit.extensions.common.LabelInfo;
|
|||||||
import com.google.gerrit.extensions.common.RevisionInfo;
|
import com.google.gerrit.extensions.common.RevisionInfo;
|
||||||
import com.google.gerrit.extensions.restapi.AuthException;
|
import com.google.gerrit.extensions.restapi.AuthException;
|
||||||
import com.google.gerrit.extensions.restapi.ResourceConflictException;
|
import com.google.gerrit.extensions.restapi.ResourceConflictException;
|
||||||
|
import com.google.gerrit.extensions.restapi.ResourceNotFoundException;
|
||||||
import com.google.gerrit.reviewdb.client.Account;
|
import com.google.gerrit.reviewdb.client.Account;
|
||||||
import com.google.gerrit.reviewdb.client.AccountGroup;
|
import com.google.gerrit.reviewdb.client.AccountGroup;
|
||||||
import com.google.gerrit.reviewdb.client.Change;
|
import com.google.gerrit.reviewdb.client.Change;
|
||||||
@@ -94,6 +96,30 @@ public class ChangeIT extends AbstractDaemonTest {
|
|||||||
assertThat(c.owner.avatars).isNull();
|
assertThat(c.owner.avatars).isNull();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getAmbiguous() throws Exception {
|
||||||
|
PushOneCommit.Result r1 = createChange();
|
||||||
|
String changeId = r1.getChangeId();
|
||||||
|
gApi.changes().id(changeId).get();
|
||||||
|
|
||||||
|
BranchInput b = new BranchInput();
|
||||||
|
b.revision = repo().getRef("HEAD").getObjectId().name();
|
||||||
|
gApi.projects()
|
||||||
|
.name(project.get())
|
||||||
|
.branch("other")
|
||||||
|
.create(b);
|
||||||
|
|
||||||
|
PushOneCommit push2 = pushFactory.create(db, admin.getIdent(), testRepo,
|
||||||
|
PushOneCommit.SUBJECT, PushOneCommit.FILE_NAME,
|
||||||
|
PushOneCommit.FILE_CONTENT, changeId);
|
||||||
|
PushOneCommit.Result r2 = push2.to("refs/for/other");
|
||||||
|
assertThat(r2.getChangeId()).isEqualTo(changeId);
|
||||||
|
|
||||||
|
exception.expect(ResourceNotFoundException.class);
|
||||||
|
exception.expectMessage("Multiple changes found for " + changeId);
|
||||||
|
gApi.changes().id(changeId).get();
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void abandon() throws Exception {
|
public void abandon() throws Exception {
|
||||||
PushOneCommit.Result r = createChange();
|
PushOneCommit.Result r = createChange();
|
||||||
|
|||||||
@@ -92,9 +92,12 @@ public class ChangesCollection implements
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (ctls.size() != 1) {
|
if (ctls.isEmpty()) {
|
||||||
throw new ResourceNotFoundException(id);
|
throw new ResourceNotFoundException(id);
|
||||||
}
|
}
|
||||||
|
if (ctls.size() != 1) {
|
||||||
|
throw new ResourceNotFoundException("Multiple changes found for " + id);
|
||||||
|
}
|
||||||
|
|
||||||
ChangeControl ctl = ctls.get(0);
|
ChangeControl ctl = ctls.get(0);
|
||||||
if (!ctl.isVisible(db.get())) {
|
if (!ctl.isVisible(db.get())) {
|
||||||
|
|||||||
Reference in New Issue
Block a user