[Mercurial] IDEA-55953: fixed NumberFormatException when comparing revisions.
authorKirill Likhodedov <kirill.likhodedov@jetbrains.com>
Fri, 25 Jun 2010 09:02:09 +0000 (13:02 +0400)
committerKirill Likhodedov <kirill.likhodedov@jetbrains.com>
Fri, 25 Jun 2010 09:02:09 +0000 (13:02 +0400)
plugins/hg4idea/src/org/zmlx/hg4idea/HgRevisionNumber.java

index 5316051435a4b093252c59db360fc95085489410..2a62c1b8a3aa7141281bc54a509287e50cf4f880 100644 (file)
@@ -86,19 +86,39 @@ public final class HgRevisionNumber implements VcsRevisionNumber {
   }
 
   public int compareTo(VcsRevisionNumber o) {
+    // boundary cases
     if (this == o) {
       return 0;
     }
-
     if (!(o instanceof HgRevisionNumber)) {
       return -1;
     }
-
-    HgRevisionNumber hgRevisionNumber = (HgRevisionNumber) o;
-    if (changeset.equals(hgRevisionNumber.changeset)) {
+    final HgRevisionNumber other = (HgRevisionNumber) o;
+    if (changeset.equals(other.changeset)) {
       return 0;
     }
-    return java.lang.Long.valueOf(revision).compareTo(java.lang.Long.valueOf(hgRevisionNumber.revision));
+
+    // compare revision numbers.
+    final int revCompare = java.lang.Long.valueOf(getRevisionNumber()).compareTo(java.lang.Long.valueOf(other.getRevisionNumber()));
+    if (revCompare != 0) {
+      return revCompare;
+    }
+    // If they are equal, the working revision is greater.
+    if (isWorkingVersion) {
+      return other.isWorkingVersion ? 0 : 1;
+    } else {
+      return other.isWorkingVersion ? -1 : 0;
+    }
+  }
+
+  /**
+   * Returns the numeric part of the revision, i. e. the revision without trailing '+' if one exists. 
+   */
+  private String getRevisionNumber() {
+    if (isWorkingVersion) {
+      return revision.substring(0, revision.length()-1);
+    }
+    return revision;
   }
 
   @Override