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
@@ -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