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
@@ -58,6 +58,15 @@ public class PageLinks {
|
|||||||
return "/c/" + c + "/" + p;
|
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) {
|
public static String toChange(final PatchSet.Id ps) {
|
||||||
return "/c/" + ps.getParentKey() + "/" + ps.get();
|
return "/c/" + ps.getParentKey() + "/" + ps.get();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -482,7 +482,7 @@ public class Dispatcher {
|
|||||||
if (rest.isEmpty()) {
|
if (rest.isEmpty()) {
|
||||||
Gerrit.display(token, panel== null
|
Gerrit.display(token, panel== null
|
||||||
? (isChangeScreen2()
|
? (isChangeScreen2()
|
||||||
? new ChangeScreen2(id, null, false)
|
? new ChangeScreen2(id, null, null, false)
|
||||||
: new ChangeScreen(id))
|
: new ChangeScreen(id))
|
||||||
: new NotFoundScreen());
|
: new NotFoundScreen());
|
||||||
return;
|
return;
|
||||||
@@ -515,7 +515,11 @@ public class Dispatcher {
|
|||||||
} else {
|
} else {
|
||||||
if (panel == null) {
|
if (panel == null) {
|
||||||
Gerrit.display(token, isChangeScreen2()
|
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));
|
: new ChangeScreen(id));
|
||||||
} else if ("publish".equals(panel)) {
|
} else if ("publish".equals(panel)) {
|
||||||
publish(ps);
|
publish(ps);
|
||||||
|
|||||||
@@ -116,6 +116,7 @@ public class ChangeScreen2 extends Screen {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private final Change.Id changeId;
|
private final Change.Id changeId;
|
||||||
|
private String base;
|
||||||
private String revision;
|
private String revision;
|
||||||
private ChangeInfo changeInfo;
|
private ChangeInfo changeInfo;
|
||||||
private CommentLinkProcessor commentLinkProcessor;
|
private CommentLinkProcessor commentLinkProcessor;
|
||||||
@@ -172,9 +173,10 @@ public class ChangeScreen2 extends Screen {
|
|||||||
private RevisionsAction revisionsAction;
|
private RevisionsAction revisionsAction;
|
||||||
private DownloadAction downloadAction;
|
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.changeId = changeId;
|
||||||
this.revision = revision != null && !revision.isEmpty() ? revision : null;
|
this.base = normalize(base);
|
||||||
|
this.revision = normalize(revision);
|
||||||
this.openReplyBox = openReplyBox;
|
this.openReplyBox = openReplyBox;
|
||||||
add(uiBinder.createAndBindUi(this));
|
add(uiBinder.createAndBindUi(this));
|
||||||
}
|
}
|
||||||
@@ -190,7 +192,7 @@ public class ChangeScreen2 extends Screen {
|
|||||||
@Override
|
@Override
|
||||||
public void onSuccess(ChangeInfo info) {
|
public void onSuccess(ChangeInfo info) {
|
||||||
info.init();
|
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) {
|
private void loadConfigInfo(final ChangeInfo info, final String base) {
|
||||||
info.revisions().copyKeysIntoChildren("name");
|
info.revisions().copyKeysIntoChildren("name");
|
||||||
final RevisionInfo rev = resolveRevisionToDisplay(info);
|
final RevisionInfo rev = resolveRevisionToDisplay(info);
|
||||||
|
final RevisionInfo b = resolveRevisionOrPatchSetId(info, base, null);
|
||||||
|
|
||||||
CallbackGroup group = new CallbackGroup();
|
CallbackGroup group = new CallbackGroup();
|
||||||
loadDiff(info.revisions().get(base), rev, myLastReply(info), group);
|
loadDiff(b, rev, myLastReply(info), group);
|
||||||
loadCommit(rev, group);
|
loadCommit(rev, group);
|
||||||
|
|
||||||
if (loaded) {
|
if (loaded) {
|
||||||
@@ -644,19 +647,57 @@ public class ChangeScreen2 extends Screen {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private RevisionInfo resolveRevisionToDisplay(ChangeInfo info) {
|
private RevisionInfo resolveRevisionToDisplay(ChangeInfo info) {
|
||||||
if (revision == null) {
|
RevisionInfo rev = resolveRevisionOrPatchSetId(info, revision,
|
||||||
revision = info.current_revision();
|
info.current_revision());
|
||||||
} else if (!info.revisions().containsKey(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();
|
JsArray<RevisionInfo> list = info.revisions().values();
|
||||||
for (int i = 0; i < list.length(); i++) {
|
for (int i = 0; i < list.length(); i++) {
|
||||||
RevisionInfo r = list.get(i);
|
RevisionInfo r = list.get(i);
|
||||||
if (revision.equals(String.valueOf(r._number()))) {
|
if (revOrId.equals(String.valueOf(r._number()))) {
|
||||||
revision = r.name();
|
revOrId = r.name();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return info.revision(revision);
|
return revOrId != null ? info.revision(revOrId) : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void renderChangeInfo(ChangeInfo info) {
|
private void renderChangeInfo(ChangeInfo info) {
|
||||||
@@ -753,6 +794,7 @@ public class ChangeScreen2 extends Screen {
|
|||||||
private void renderDiffBaseListBox(ChangeInfo info) {
|
private void renderDiffBaseListBox(ChangeInfo info) {
|
||||||
JsArray<RevisionInfo> list = info.revisions().values();
|
JsArray<RevisionInfo> list = info.revisions().values();
|
||||||
RevisionInfo.sortRevisionInfoByNumber(list);
|
RevisionInfo.sortRevisionInfoByNumber(list);
|
||||||
|
int selectedIdx = list.length();
|
||||||
for (int i = list.length() - 1; i >= 0; i--) {
|
for (int i = list.length() - 1; i >= 0; i--) {
|
||||||
RevisionInfo r = list.get(i);
|
RevisionInfo r = list.get(i);
|
||||||
diffBase.addItem(
|
diffBase.addItem(
|
||||||
@@ -762,6 +804,9 @@ public class ChangeScreen2 extends Screen {
|
|||||||
SelectElement.as(diffBase.getElement()).getOptions()
|
SelectElement.as(diffBase.getElement()).getOptions()
|
||||||
.getItem(diffBase.getItemCount() - 1).setDisabled(true);
|
.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);
|
RevisionInfo rev = info.revisions().get(revision);
|
||||||
@@ -769,7 +814,8 @@ public class ChangeScreen2 extends Screen {
|
|||||||
diffBase.addItem(
|
diffBase.addItem(
|
||||||
parents.length() > 1 ? Util.C.autoMerge() : Util.C.baseDiffItem(),
|
parents.length() > 1 ? Util.C.autoMerge() : Util.C.baseDiffItem(),
|
||||||
"");
|
"");
|
||||||
diffBase.setSelectedIndex(diffBase.getItemCount() - 1);
|
|
||||||
|
diffBase.setSelectedIndex(selectedIdx);
|
||||||
}
|
}
|
||||||
|
|
||||||
void showUpdates(ChangeInfo newInfo) {
|
void showUpdates(ChangeInfo newInfo) {
|
||||||
@@ -814,4 +860,8 @@ public class ChangeScreen2 extends Screen {
|
|||||||
handlers.add(UserActivityMonitor.addValueChangeHandler(updateCheck));
|
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));
|
SafeHtml.setInnerHTML(filePath, formatPath(path));
|
||||||
up.setTargetHistoryToken(PageLinks.toChange(
|
up.setTargetHistoryToken(PageLinks.toChange(
|
||||||
patchSetId.getParentKey(),
|
patchSetId.getParentKey(),
|
||||||
|
base != null ? String.valueOf(base.get()) : null,
|
||||||
String.valueOf(patchSetId.get())));
|
String.valueOf(patchSetId.get())));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1054,10 +1054,11 @@ public class SideBySide2 extends Screen {
|
|||||||
private Runnable upToChange(final boolean openReplyBox) {
|
private Runnable upToChange(final boolean openReplyBox) {
|
||||||
return new Runnable() {
|
return new Runnable() {
|
||||||
public void run() {
|
public void run() {
|
||||||
|
String b = base != null ? String.valueOf(base.get()) : null;
|
||||||
String rev = String.valueOf(revision.get());
|
String rev = String.valueOf(revision.get());
|
||||||
Gerrit.display(
|
Gerrit.display(
|
||||||
PageLinks.toChange(changeId, rev),
|
PageLinks.toChange(changeId, rev),
|
||||||
new ChangeScreen2(changeId, rev, openReplyBox));
|
new ChangeScreen2(changeId, b, rev, openReplyBox));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user