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.
Conflicts:
gerrit-gwtui/src/main/java/com/google/gerrit/client/change/ChangeScreen2.java
Change-Id: I7f74760fde96469a60556f657923a3936d6516c7
This commit is contained in:
committed by
Michael Zhou
parent
bdcb9cff23
commit
e786675f23
@@ -482,7 +482,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;
|
||||
@@ -515,7 +515,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;
|
||||
@@ -172,9 +173,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));
|
||||
}
|
||||
@@ -190,7 +192,7 @@ public class ChangeScreen2 extends Screen {
|
||||
@Override
|
||||
public void onSuccess(ChangeInfo info) {
|
||||
info.init();
|
||||
loadConfigInfo(info, null);
|
||||
loadConfigInfo(info, base);
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -459,9 +461,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) {
|
||||
@@ -644,19 +647,57 @@ public class ChangeScreen2 extends Screen {
|
||||
}
|
||||
|
||||
private RevisionInfo resolveRevisionToDisplay(ChangeInfo info) {
|
||||
if (revision == null) {
|
||||
revision = info.current_revision();
|
||||
} else if (!info.revisions().containsKey(revision)) {
|
||||
RevisionInfo rev = resolveRevisionOrPatchSetId(info, revision,
|
||||
info.current_revision());
|
||||
if (rev != null) {
|
||||
revision = rev.name();
|
||||
return rev;
|
||||
}
|
||||
|
||||
// the revision is not visible to the calling user (maybe it is a draft?)
|
||||
// or the change is corrupt, take the last revision that was returned,
|
||||
// if no revision was returned display an error
|
||||
JsArray<RevisionInfo> revisions = info.revisions().values();
|
||||
if (revisions.length() > 0) {
|
||||
RevisionInfo.sortRevisionInfoByNumber(revisions);
|
||||
rev = revisions.get(revisions.length() - 1);
|
||||
revision = rev.name();
|
||||
return rev;
|
||||
} else {
|
||||
new ErrorDialog(
|
||||
Resources.M.changeWithNoRevisions(info.legacy_id().get())).center();
|
||||
throw new IllegalStateException("no revision, cannot proceed");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* 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 (revision.equals(String.valueOf(r._number()))) {
|
||||
revision = r.name();
|
||||
if (revOrId.equals(String.valueOf(r._number()))) {
|
||||
revOrId = r.name();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return info.revision(revision);
|
||||
return revOrId != null ? info.revision(revOrId) : null;
|
||||
}
|
||||
|
||||
private void renderChangeInfo(ChangeInfo info) {
|
||||
@@ -753,6 +794,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(
|
||||
@@ -762,6 +804,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);
|
||||
@@ -769,7 +814,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) {
|
||||
@@ -814,4 +860,8 @@ public class ChangeScreen2 extends Screen {
|
||||
handlers.add(UserActivityMonitor.addValueChangeHandler(updateCheck));
|
||||
}
|
||||
}
|
||||
|
||||
private static String normalize(String r) {
|
||||
return r != null && !r.isEmpty() ? r : null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -80,6 +80,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())));
|
||||
}
|
||||
|
||||
|
||||
@@ -1054,10 +1054,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