### Eclipse Workspace Patch 1.0 #P oak-core Index: src/test/java/org/apache/jackrabbit/oak/plugins/document/RevisionVectorTest.java =================================================================== --- src/test/java/org/apache/jackrabbit/oak/plugins/document/RevisionVectorTest.java (revision 1746251) +++ src/test/java/org/apache/jackrabbit/oak/plugins/document/RevisionVectorTest.java (working copy) @@ -382,4 +382,15 @@ rv = rv.update(r12); assertEquals(new RevisionVector(br11, r12), rv.asBranchRevision(1)); } -} + + @Test + public void fromString() throws Exception{ + RevisionVector rv = new RevisionVector( + new Revision(1, 0, 1), + new Revision(2, 0, 2) + ); + + String rvstr = rv.asString(); + RevisionVector rvFromStr = RevisionVector.fromString(rvstr); + assertEquals(rv, rvFromStr); + }} Index: src/main/java/org/apache/jackrabbit/oak/plugins/document/RevisionVector.java =================================================================== --- src/main/java/org/apache/jackrabbit/oak/plugins/document/RevisionVector.java (revision 1746251) +++ src/main/java/org/apache/jackrabbit/oak/plugins/document/RevisionVector.java (working copy) @@ -56,6 +56,8 @@ private final static RevisionVector EMPTY = new RevisionVector(); private final Revision[] revisions; + + private int hash; private RevisionVector(@Nonnull Revision[] revisions, boolean checkUniqueClusterIds, @@ -320,12 +322,16 @@ * @return a string representation of this revision vector. */ public String asString() { - StringBuilder sb = new StringBuilder(); - String comma = ""; - for (Revision r : revisions) { - sb.append(comma); - comma = ","; - r.toStringBuilder(sb); + int len = revisions.length; + if (len == 0) { + return ""; + } + StringBuilder sb = new StringBuilder(len * Revision.REV_STRING_SIZE + len - 1); + for(int i=0; i 0) { + sb.append(','); + } + revisions[i].toStringBuilder(sb); } return sb.toString(); } @@ -339,8 +345,9 @@ * @throws IllegalArgumentException if the string is malformed */ public static RevisionVector fromString(String s) { - List revisions = Lists.newArrayListWithCapacity(3); - for (String str : s.split(",")) { + String[] list = s.split(","); + List revisions = Lists.newArrayListWithCapacity(list.length); + for (String str : list) { revisions.add(Revision.fromString(str)); } return new RevisionVector(revisions); @@ -446,17 +453,23 @@ } @Override - public boolean equals(Object obj) { - if (obj instanceof RevisionVector) { - RevisionVector other = (RevisionVector) obj; - return Arrays.equals(revisions, other.revisions); + public boolean equals(Object o) { + if (this == o) { + return true; } - return false; + if (o == null || getClass() != o.getClass()) { + return false; + } + RevisionVector other = (RevisionVector) o; + return Arrays.equals(revisions, other.revisions); } @Override public int hashCode() { - return Arrays.hashCode(revisions); + if (hash == 0){ + hash = Arrays.hashCode(revisions); + } + return hash; } //-------------------------< internal >-------------------------------------