ChangeScreen2: Make diff against revision persistent
2d2a3c405e added diff against to the change
screen2. However base revision is lost when side by side view is closed.
This change fixes that.
Change-Id: I7f74760fde96469a60556f657923a3936d6516c7
			
			
This commit is contained in:
		
				
					committed by
					
						
						Shawn Pearce
					
				
			
			
				
	
			
			
			
						parent
						
							b572c146b2
						
					
				
				
					commit
					eaeb9ad104
				
			@@ -58,6 +58,15 @@ public class PageLinks {
 | 
			
		||||
    return "/c/" + c + "/" + p;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public static String toChange(Change.Id c, String b, String p) {
 | 
			
		||||
    String u = "/c/" + c + "/";
 | 
			
		||||
    if (b != null) {
 | 
			
		||||
      u += b + "..";
 | 
			
		||||
    }
 | 
			
		||||
    u += p;
 | 
			
		||||
    return u;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public static String toChange(final PatchSet.Id ps) {
 | 
			
		||||
    return "/c/" + ps.getParentKey() + "/" + ps.get();
 | 
			
		||||
  }
 | 
			
		||||
 
 | 
			
		||||
@@ -491,7 +491,7 @@ public class Dispatcher {
 | 
			
		||||
    if (rest.isEmpty()) {
 | 
			
		||||
      Gerrit.display(token, panel== null
 | 
			
		||||
          ? (isChangeScreen2()
 | 
			
		||||
              ? new ChangeScreen2(id, null, false)
 | 
			
		||||
              ? new ChangeScreen2(id, null, null, false)
 | 
			
		||||
              : new ChangeScreen(id))
 | 
			
		||||
          : new NotFoundScreen());
 | 
			
		||||
      return;
 | 
			
		||||
@@ -524,7 +524,11 @@ public class Dispatcher {
 | 
			
		||||
    } else {
 | 
			
		||||
      if (panel == null) {
 | 
			
		||||
        Gerrit.display(token, isChangeScreen2()
 | 
			
		||||
            ? new ChangeScreen2(id, String.valueOf(ps.get()), false)
 | 
			
		||||
            ? new ChangeScreen2(id,
 | 
			
		||||
                base != null
 | 
			
		||||
                    ? String.valueOf(base.get())
 | 
			
		||||
                    : null,
 | 
			
		||||
                String.valueOf(ps.get()), false)
 | 
			
		||||
            : new ChangeScreen(id));
 | 
			
		||||
      } else if ("publish".equals(panel)) {
 | 
			
		||||
        publish(ps);
 | 
			
		||||
 
 | 
			
		||||
@@ -116,6 +116,7 @@ public class ChangeScreen2 extends Screen {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private final Change.Id changeId;
 | 
			
		||||
  private String base;
 | 
			
		||||
  private String revision;
 | 
			
		||||
  private ChangeInfo changeInfo;
 | 
			
		||||
  private CommentLinkProcessor commentLinkProcessor;
 | 
			
		||||
@@ -170,9 +171,10 @@ public class ChangeScreen2 extends Screen {
 | 
			
		||||
  private RevisionsAction revisionsAction;
 | 
			
		||||
  private DownloadAction downloadAction;
 | 
			
		||||
 | 
			
		||||
  public ChangeScreen2(Change.Id changeId, String revision, boolean openReplyBox) {
 | 
			
		||||
  public ChangeScreen2(Change.Id changeId, String base, String revision, boolean openReplyBox) {
 | 
			
		||||
    this.changeId = changeId;
 | 
			
		||||
    this.revision = revision != null && !revision.isEmpty() ? revision : null;
 | 
			
		||||
    this.base = normalize(base);
 | 
			
		||||
    this.revision = normalize(revision);
 | 
			
		||||
    this.openReplyBox = openReplyBox;
 | 
			
		||||
    add(uiBinder.createAndBindUi(this));
 | 
			
		||||
  }
 | 
			
		||||
@@ -188,7 +190,7 @@ public class ChangeScreen2 extends Screen {
 | 
			
		||||
      @Override
 | 
			
		||||
      public void onSuccess(ChangeInfo info) {
 | 
			
		||||
        info.init();
 | 
			
		||||
        loadConfigInfo(info, null);
 | 
			
		||||
        loadConfigInfo(info, base);
 | 
			
		||||
      }
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
@@ -509,9 +511,10 @@ public class ChangeScreen2 extends Screen {
 | 
			
		||||
  private void loadConfigInfo(final ChangeInfo info, final String base) {
 | 
			
		||||
    info.revisions().copyKeysIntoChildren("name");
 | 
			
		||||
    final RevisionInfo rev = resolveRevisionToDisplay(info);
 | 
			
		||||
    final RevisionInfo b = resolveRevisionOrPatchSetId(info, base, null);
 | 
			
		||||
 | 
			
		||||
    CallbackGroup group = new CallbackGroup();
 | 
			
		||||
    loadDiff(info.revisions().get(base), rev, myLastReply(info), group);
 | 
			
		||||
    loadDiff(b, rev, myLastReply(info), group);
 | 
			
		||||
    loadCommit(rev, group);
 | 
			
		||||
 | 
			
		||||
    if (loaded) {
 | 
			
		||||
@@ -677,20 +680,10 @@ public class ChangeScreen2 extends Screen {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private RevisionInfo resolveRevisionToDisplay(ChangeInfo info) {
 | 
			
		||||
    if (revision == null) {
 | 
			
		||||
      revision = info.current_revision();
 | 
			
		||||
    } else if (!info.revisions().containsKey(revision)) {
 | 
			
		||||
      JsArray<RevisionInfo> list = info.revisions().values();
 | 
			
		||||
      for (int i = 0; i < list.length(); i++) {
 | 
			
		||||
        RevisionInfo r = list.get(i);
 | 
			
		||||
        if (revision.equals(String.valueOf(r._number()))) {
 | 
			
		||||
          revision = r.name();
 | 
			
		||||
          break;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    RevisionInfo rev = revision != null ? info.revision(revision) : null;
 | 
			
		||||
    RevisionInfo rev = resolveRevisionOrPatchSetId(info, revision,
 | 
			
		||||
        info.current_revision());
 | 
			
		||||
    if (rev != null) {
 | 
			
		||||
      revision = rev.name();
 | 
			
		||||
      return rev;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -710,6 +703,36 @@ public class ChangeScreen2 extends Screen {
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   *
 | 
			
		||||
   * Resolve a revision or patch set id string to RevisionInfo.
 | 
			
		||||
   * When this view is created from the changes table, revision
 | 
			
		||||
   * is passed as a real revision.
 | 
			
		||||
   * When this view is created from side by side (by closing it with 'u')
 | 
			
		||||
   * patch set id is passed.
 | 
			
		||||
   *
 | 
			
		||||
   * @param info change info
 | 
			
		||||
   * @param revOrId revision or patch set id
 | 
			
		||||
   * @param defaultValue value returned when rev is null
 | 
			
		||||
   * @return resolved revision or default value
 | 
			
		||||
   */
 | 
			
		||||
  private RevisionInfo resolveRevisionOrPatchSetId(ChangeInfo info,
 | 
			
		||||
      String revOrId, String defaultValue) {
 | 
			
		||||
    if (revOrId == null) {
 | 
			
		||||
      revOrId = defaultValue;
 | 
			
		||||
    } else if (!info.revisions().containsKey(revOrId)) {
 | 
			
		||||
      JsArray<RevisionInfo> list = info.revisions().values();
 | 
			
		||||
      for (int i = 0; i < list.length(); i++) {
 | 
			
		||||
        RevisionInfo r = list.get(i);
 | 
			
		||||
        if (revOrId.equals(String.valueOf(r._number()))) {
 | 
			
		||||
          revOrId = r.name();
 | 
			
		||||
          break;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    return revOrId != null ? info.revision(revOrId) : null;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private void renderChangeInfo(ChangeInfo info) {
 | 
			
		||||
    changeInfo = info;
 | 
			
		||||
    lastDisplayedUpdate = info.updated();
 | 
			
		||||
@@ -811,6 +834,7 @@ public class ChangeScreen2 extends Screen {
 | 
			
		||||
  private void renderDiffBaseListBox(ChangeInfo info) {
 | 
			
		||||
    JsArray<RevisionInfo> list = info.revisions().values();
 | 
			
		||||
    RevisionInfo.sortRevisionInfoByNumber(list);
 | 
			
		||||
    int selectedIdx = list.length();
 | 
			
		||||
    for (int i = list.length() - 1; i >= 0; i--) {
 | 
			
		||||
      RevisionInfo r = list.get(i);
 | 
			
		||||
      diffBase.addItem(
 | 
			
		||||
@@ -820,6 +844,9 @@ public class ChangeScreen2 extends Screen {
 | 
			
		||||
        SelectElement.as(diffBase.getElement()).getOptions()
 | 
			
		||||
            .getItem(diffBase.getItemCount() - 1).setDisabled(true);
 | 
			
		||||
      }
 | 
			
		||||
      if (base != null && base.equals(String.valueOf(r._number()))) {
 | 
			
		||||
        selectedIdx = diffBase.getItemCount() - 1;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    RevisionInfo rev = info.revisions().get(revision);
 | 
			
		||||
@@ -827,7 +854,8 @@ public class ChangeScreen2 extends Screen {
 | 
			
		||||
    diffBase.addItem(
 | 
			
		||||
      parents.length() > 1 ? Util.C.autoMerge() : Util.C.baseDiffItem(),
 | 
			
		||||
      "");
 | 
			
		||||
    diffBase.setSelectedIndex(diffBase.getItemCount() - 1);
 | 
			
		||||
 | 
			
		||||
    diffBase.setSelectedIndex(selectedIdx);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  void showUpdates(ChangeInfo newInfo) {
 | 
			
		||||
@@ -872,4 +900,8 @@ public class ChangeScreen2 extends Screen {
 | 
			
		||||
      handlers.add(UserActivityMonitor.addValueChangeHandler(updateCheck));
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private static String normalize(String r) {
 | 
			
		||||
    return r != null && !r.isEmpty() ? r : null;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -81,6 +81,7 @@ class Header extends Composite {
 | 
			
		||||
    SafeHtml.setInnerHTML(filePath, formatPath(path));
 | 
			
		||||
    up.setTargetHistoryToken(PageLinks.toChange(
 | 
			
		||||
        patchSetId.getParentKey(),
 | 
			
		||||
        base != null ? String.valueOf(base.get()) : null,
 | 
			
		||||
        String.valueOf(patchSetId.get())));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1057,10 +1057,11 @@ public class SideBySide2 extends Screen {
 | 
			
		||||
  private Runnable upToChange(final boolean openReplyBox) {
 | 
			
		||||
    return new Runnable() {
 | 
			
		||||
      public void run() {
 | 
			
		||||
        String b = base != null ? String.valueOf(base.get()) : null;
 | 
			
		||||
        String rev = String.valueOf(revision.get());
 | 
			
		||||
        Gerrit.display(
 | 
			
		||||
          PageLinks.toChange(changeId, rev),
 | 
			
		||||
          new ChangeScreen2(changeId, rev, openReplyBox));
 | 
			
		||||
          new ChangeScreen2(changeId, b, rev, openReplyBox));
 | 
			
		||||
      }
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user