diff --git a/java/com/google/gerrit/server/notedb/ChangeNoteUtil.java b/java/com/google/gerrit/server/notedb/ChangeNoteUtil.java index b23c1defb5..89326c89ff 100644 --- a/java/com/google/gerrit/server/notedb/ChangeNoteUtil.java +++ b/java/com/google/gerrit/server/notedb/ChangeNoteUtil.java @@ -23,7 +23,6 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.base.CharMatcher; import com.google.common.collect.ImmutableList; import com.google.common.collect.ListMultimap; -import com.google.common.primitives.Ints; import com.google.gerrit.reviewdb.client.Account; import com.google.gerrit.reviewdb.client.Change; import com.google.gerrit.reviewdb.client.Comment; @@ -158,18 +157,14 @@ public class ChangeNoteUtil { public Account.Id parseIdent(PersonIdent ident, Change.Id changeId) throws ConfigInvalidException { - String email = ident.getEmailAddress(); - int at = email.indexOf('@'); - if (at >= 0) { - String host = email.substring(at + 1, email.length()); - if (host.equals(serverId)) { - Integer id = Ints.tryParse(email.substring(0, at)); - if (id != null) { - return new Account.Id(id); - } - } - } - throw parseException(changeId, "invalid identity, expected @%s: %s", serverId, email); + return NoteDbUtil.parseIdent(ident, serverId) + .orElseThrow( + () -> + parseException( + changeId, + "invalid identity, expected @%s: %s", + serverId, + ident.getEmailAddress())); } private static boolean match(byte[] note, MutableInteger p, byte[] expected) { diff --git a/java/com/google/gerrit/server/notedb/NoteDbUtil.java b/java/com/google/gerrit/server/notedb/NoteDbUtil.java new file mode 100644 index 0000000000..59c4c62dd3 --- /dev/null +++ b/java/com/google/gerrit/server/notedb/NoteDbUtil.java @@ -0,0 +1,39 @@ +// Copyright (C) 2017 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.google.gerrit.server.notedb; + +import com.google.common.primitives.Ints; +import com.google.gerrit.reviewdb.client.Account; +import java.util.Optional; +import org.eclipse.jgit.lib.PersonIdent; + +public class NoteDbUtil { + public static Optional parseIdent(PersonIdent ident, String serverId) { + String email = ident.getEmailAddress(); + int at = email.indexOf('@'); + if (at >= 0) { + String host = email.substring(at + 1, email.length()); + if (host.equals(serverId)) { + Integer id = Ints.tryParse(email.substring(0, at)); + if (id != null) { + return Optional.of(new Account.Id(id)); + } + } + } + return Optional.empty(); + } + + private NoteDbUtil() {} +}