diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/account/AccountResolver.java b/gerrit-server/src/main/java/com/google/gerrit/server/account/AccountResolver.java index 3a2ac56d87..abdf29ead5 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/account/AccountResolver.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/account/AccountResolver.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.account; +import com.google.common.collect.Sets; import com.google.gerrit.reviewdb.client.Account; import com.google.gerrit.reviewdb.client.AccountExternalId; import com.google.gerrit.reviewdb.server.ReviewDb; @@ -115,7 +116,21 @@ public class AccountResolver { final int lt = nameOrEmail.indexOf('<'); final int gt = nameOrEmail.indexOf('>'); if (lt >= 0 && gt > lt && nameOrEmail.contains("@")) { - return byEmail.get(nameOrEmail.substring(lt + 1, gt)); + Set ids = byEmail.get(nameOrEmail.substring(lt + 1, gt)); + if (ids.isEmpty() || ids.size() == 1) { + return ids; + } + + // more than one match, try to return the best one + String name = nameOrEmail.substring(0, lt - 1); + Set nameMatches = Sets.newHashSet(); + for (Account.Id id : ids) { + Account a = byId.get(id).getAccount(); + if (name.equals(a.getFullName())) { + nameMatches.add(id); + } + } + return nameMatches.isEmpty() ? ids : nameMatches; } if (nameOrEmail.contains("@")) {