From 454280916329a48372e16000a4a4f25da8b12c85 Mon Sep 17 00:00:00 2001 From: Dave Borowitz Date: Wed, 10 Sep 2014 12:23:27 +0200 Subject: [PATCH] Parse Account.Ids out of ref names Change-Id: I8391ff4cf9c99947f9c50e881df7a30c5a1304aa --- .../gerrit/reviewdb/client/Account.java | 12 ++++++++ .../gerrit/reviewdb/client/AccountTest.java | 28 +++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/Account.java b/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/Account.java index 3d156f9528..d4fb3114c5 100644 --- a/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/Account.java +++ b/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/Account.java @@ -14,6 +14,8 @@ package com.google.gerrit.reviewdb.client; +import static com.google.gerrit.reviewdb.client.RefNames.REFS_USER; + import com.google.gwtorm.client.Column; import com.google.gwtorm.client.IntKey; @@ -105,6 +107,16 @@ public final class Account { return r; } + public static Id fromRef(String name) { + if (name == null) { + return null; + } + if (name.startsWith(REFS_USER)) { + return fromRefPart(name.substring(REFS_USER.length())); + } + return null; + } + /** * Parse an Account.Id out of a part of a ref-name. * diff --git a/gerrit-reviewdb/src/test/java/com/google/gerrit/reviewdb/client/AccountTest.java b/gerrit-reviewdb/src/test/java/com/google/gerrit/reviewdb/client/AccountTest.java index f5c75f0a61..eaf17437f9 100644 --- a/gerrit-reviewdb/src/test/java/com/google/gerrit/reviewdb/client/AccountTest.java +++ b/gerrit-reviewdb/src/test/java/com/google/gerrit/reviewdb/client/AccountTest.java @@ -20,6 +20,26 @@ import static org.junit.Assert.assertNull; import org.junit.Test; public class AccountTest { + @Test + public void parseRefName() { + assertRef(1, "refs/users/01/1"); + assertRef(1, "refs/users/01/1-drafts"); + assertRef(1, "refs/users/01/1-drafts/2"); + + assertNotRef(null); + assertNotRef(""); + + // Invalid characters. + assertNotRef("refs/users/01a/1"); + assertNotRef("refs/users/01/a1"); + + // Mismatched shard. + assertNotRef("refs/users/01/23"); + + // Shard too short. + assertNotRef("refs/users/1/1"); + } + @Test public void parseRefNameParts() { assertRefPart(1, "01/1"); @@ -43,6 +63,14 @@ public class AccountTest { assertNotRefPart("1/1"); } + private static void assertRef(int accountId, String refName) { + assertEquals(new Account.Id(accountId), Account.Id.fromRef(refName)); + } + + private static void assertNotRef(String refName) { + assertNull(Account.Id.fromRef(refName)); + } + private static void assertRefPart(int accountId, String refName) { assertEquals(new Account.Id(accountId), Account.Id.fromRefPart(refName)); }