Show whether a related change is merged or old.

Include a colored circle at the end of the related change line to
indicate the state. Use a black circle when the change is a link to
gitweb and a orange circle when the link to the change is not the
current patch set. Expose the current_revision_number on the
ChangeAndCommit object.

Change-Id: I5c629ecac61a4b9c6fc709f328a290313e3d6093
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/GerritCss.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/GerritCss.java
index 5bb207d..0020647 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/GerritCss.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/GerritCss.java
@@ -199,8 +199,10 @@
   String projectFilterPanel();
   String projectNameColumn();
   String publishCommentsScreen();
-  String relatedChangesTabPanel();
+  String relatedChangesGitweb();
+  String relatedChangesNotCurrent();
   String relatedChangesSubject();
+  String relatedChangesTabPanel();
   String registerScreenExplain();
   String registerScreenNextLinks();
   String registerScreenSection();
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/RelatedChanges.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/RelatedChanges.java
index f98e8b4..0d46f8f 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/RelatedChanges.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/RelatedChanges.java
@@ -330,18 +330,27 @@
     final native boolean has_revision_number()
     /*-{ return this.hasOwnProperty('_revision_number') }-*/;
 
+    final native boolean has_current_revision_number()
+    /*-{ return this.hasOwnProperty('_current_revision_number') }-*/;
+
     final native int _change_number()
     /*-{ return this._change_number }-*/;
 
     final native int _revision_number()
     /*-{ return this._revision_number }-*/;
 
+    final native int _current_revision_number()
+    /*-{ return this._current_revision_number }-*/;
+
     final native void set_change_number(int n)
     /*-{ this._change_number=n; }-*/;
 
     final native void set_revision_number(int n)
     /*-{ this._revision_number=n; }-*/;
 
+    final native void set_current_revision_number(int n)
+    /*-{ this._current_revision_number=n; }-*/;
+
     protected ChangeAndCommit() {
     }
   }
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/RelatedChangesTab.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/RelatedChangesTab.java
index 162471e..5e3cb03 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/RelatedChangesTab.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/RelatedChangesTab.java
@@ -17,6 +17,7 @@
 import com.google.gerrit.client.Gerrit;
 import com.google.gerrit.client.GitwebLink;
 import com.google.gerrit.client.change.RelatedChanges.ChangeAndCommit;
+import com.google.gerrit.client.changes.Util;
 import com.google.gerrit.client.ui.NavigationTable;
 import com.google.gerrit.common.PageLinks;
 import com.google.gerrit.reviewdb.client.PatchSet;
@@ -278,6 +279,18 @@
       }
       sb.closeTd();
 
+      sb.openTd();
+      GitwebLink gw = Gerrit.getGitwebLink();
+      if (gw != null && (!info.has_change_number() || !info.has_revision_number())) {
+        sb.addStyleName(Gerrit.RESOURCES.css().relatedChangesGitweb());
+        sb.setAttribute("title", gw.getLinkName());
+      } else if (info.has_current_revision_number() && info.has_revision_number()
+          && info._current_revision_number() != info._revision_number()) {
+        sb.addStyleName(Gerrit.RESOURCES.css().relatedChangesNotCurrent());
+        sb.setAttribute("title", Util.C.notCurrent());
+      }
+      sb.closeTd();
+
       sb.closeTr();
     }
 
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/gerrit.css b/gerrit-gwtui/src/main/java/com/google/gerrit/client/gerrit.css
index 9c8ec57..029dd3b 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/gerrit.css
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/gerrit.css
@@ -1642,3 +1642,11 @@
 .relatedChangesTabPanel .gwt-TabBarItem-disabled {
   display: none;
 }
+.relatedChangesNotCurrent:after {
+  content: '\25CF'; /* circle */
+  color: #FFA62F;   /* orange */
+}
+.relatedChangesGitweb:after {
+  content: '\25CF'; /* circle */
+  color: #000;
+}
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/GetRelated.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/GetRelated.java
index d804f38..7ac872d 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/change/GetRelated.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/GetRelated.java
@@ -287,12 +287,15 @@
     CommitInfo commit;
     Integer _changeNumber;
     Integer _revisionNumber;
+    Integer _currentRevisionNumber;
 
     ChangeAndCommit(@Nullable Change change, @Nullable PatchSet ps, RevCommit c) {
       if (change != null) {
         changeId = change.getKey().get();
         _changeNumber = change.getChangeId();
         _revisionNumber = ps != null ? ps.getPatchSetId() : null;
+        PatchSet.Id curr = change.currentPatchSetId();
+        _currentRevisionNumber = curr != null ? curr.get() : null;
       }
 
       commit = new CommitInfo();