ChangeScreen2: Display cherry-picked changes

Under related changes cherry-picked changes are now shown in an own
tab. The tab is only visible if the change has cherry-picked changes.

Change-Id: I54057dda8f40bcbfd04d19df06e6fb41c0273859
Signed-off-by: Edwin Kempin <edwin.kempin@sap.com>
This commit is contained in:
Edwin Kempin
2013-10-11 14:59:06 +02:00
parent db035ceda9
commit 1f3bf3e1e3
6 changed files with 71 additions and 14 deletions

View File

@@ -32,5 +32,7 @@ interface Constants extends com.google.gwt.i18n.client.Constants {
String relatedChangesTooltip();
String conflictingChanges();
String conflictingChangesTooltip();
String cherryPicks();
String cherryPicksTooltip();
String noChanges();
}

View File

@@ -15,4 +15,6 @@ relatedChanges = Related Changes
relatedChangesTooltip = Same branch changes connected by Git history
conflictingChanges = Conflicts With
conflictingChangesTooltip = Open changes that conflict with this change
cherryPicks = Cherry-Picks
cherryPicksTooltip = Changes with the same Change-Id
noChanges = No Changes

View File

@@ -19,4 +19,6 @@ public interface Messages extends com.google.gwt.i18n.client.Messages {
String relatedChanges(String count);
String conflictingChanges(int count);
String conflictingChanges(String count);
String cherryPicks(int count);
String cherryPicks(String count);
}

View File

@@ -1,2 +1,3 @@
relatedChanges = Related Changes ({0})
conflictingChanges = Conflicts With ({0})
cherryPicks = Cherry-Picks ({0})

View File

@@ -40,19 +40,22 @@ import java.util.EnumSet;
import java.util.List;
class RelatedChanges extends TabPanel {
private static final int RELATED_CHANGES = 0;
private List<RelatedChangesTab> tabs;
private RelatedChangesTab relatedChangesTab;
private RelatedChangesTab conflictingChangesTab;
private RelatedChangesTab cherryPicksTab;
private int maxHeight;
private int selectedTab;
RelatedChanges() {
setVisible(false);
tabs = new ArrayList<RelatedChangesTab>();
addStyleName(Gerrit.RESOURCES.css().relatedChangesTabPanel());
}
private RelatedChangesTab createTab(String title, String tooltip) {
setVisible(true);
FlowPanel panel = new FlowPanel();
add(panel, title);
selectedTab = -1;
@@ -77,6 +80,9 @@ class RelatedChanges extends TabPanel {
new RelatedChangesTab(this, index, panel);
tabs.add(relatedChangesTab);
relatedChangesTab.setMaxHeight(maxHeight);
if (index == 0) {
selectTab(0);
}
return relatedChangesTab;
}
@@ -85,29 +91,62 @@ class RelatedChanges extends TabPanel {
}
void set(final ChangeInfo info, final String revision) {
if (info.status().isClosed()) {
setVisible(false);
return;
if (info.status().isOpen()) {
setForOpenChange(info, revision);
}
createTab(Resources.C.relatedChanges(),
StringBuilder cherryPicksQuery = new StringBuilder();
cherryPicksQuery.append(" project:").append(info.project());
cherryPicksQuery.append(" change:").append(info.change_id());
cherryPicksQuery.append(" -change:").append(info.legacy_id().get());
ChangeList.query(cherryPicksQuery.toString(),
EnumSet.of(ListChangesOption.CURRENT_REVISION, ListChangesOption.CURRENT_COMMIT),
new AsyncCallback<ChangeList>() {
@Override
public void onSuccess(ChangeList result) {
if (result.length() > 0) {
getTab().setTitle(Resources.M.cherryPicks(result.length()));
getTab().setChanges(info.project(), revision,
convertChangeList(result));
}
}
@Override
public void onFailure(Throwable err) {
getTab().setTitle(
Resources.M.cherryPicks(Resources.C.notAvailable()));
getTab().setError(err.getMessage());
}
private RelatedChangesTab getTab() {
if (cherryPicksTab == null) {
cherryPicksTab =
createTab(Resources.C.cherryPicks(),
Resources.C.cherryPicksTooltip());
cherryPicksTab.setShowBranches(true);
}
return cherryPicksTab;
}
});
}
private void setForOpenChange(final ChangeInfo info, final String revision) {
relatedChangesTab = createTab(Resources.C.relatedChanges(),
Resources.C.relatedChangesTooltip());
selectTab(RELATED_CHANGES);
ChangeApi.revision(info.legacy_id().get(), revision).view("related")
.get(new AsyncCallback<RelatedInfo>() {
@Override
public void onSuccess(RelatedInfo result) {
RelatedChangesTab tab = tabs.get(RELATED_CHANGES);
tab.setTitle(Resources.M.relatedChanges(result.changes().length()));
tab.setChanges(info.project(), revision, result.changes());
relatedChangesTab.setTitle(Resources.M.relatedChanges(result.changes().length()));
relatedChangesTab.setChanges(info.project(), revision, result.changes());
}
@Override
public void onFailure(Throwable err) {
RelatedChangesTab tab = tabs.get(RELATED_CHANGES);
tab.setTitle(Resources.M.relatedChanges(Resources.C.notAvailable()));
tab.setError(err.getMessage());
relatedChangesTab.setTitle(
Resources.M.relatedChanges(Resources.C.notAvailable()));
relatedChangesTab.setError(err.getMessage());
}
});
@@ -160,6 +199,7 @@ class RelatedChanges extends TabPanel {
c.set_commit(currentRevision.commit());
c.set_change_number(i.legacy_id().get());
c.set_revision_number(currentRevision._number());
c.set_branch(i.branch());
arr.push(c);
}
return arr;
@@ -178,6 +218,7 @@ class RelatedChanges extends TabPanel {
final native String id() /*-{ return this.change_id }-*/;
final native CommitInfo commit() /*-{ return this.commit }-*/;
final native String branch() /*-{ return this.branch }-*/;
final native void set_id(String i)
/*-{ if(i)this.change_id=i; }-*/;
@@ -185,6 +226,9 @@ class RelatedChanges extends TabPanel {
final native void set_commit(CommitInfo c)
/*-{ if(c)this.commit=c; }-*/;
final native void set_branch(String b)
/*-{ if(b)this.branch=b; }-*/;
final Change.Id legacy_id() {
return has_change_number() ? new Change.Id(_change_number()) : null;
}

View File

@@ -81,6 +81,7 @@ class RelatedChangesTab {
private final ProgressBar progress;
private String project;
private boolean showBranches;
private MyTable table;
private boolean register;
@@ -101,6 +102,10 @@ class RelatedChangesTab {
parent.setTabTitle(index, title);
}
void setShowBranches(boolean showBranches) {
this.showBranches = showBranches;
}
void setChanges(String project, String revision, JsArray<ChangeAndCommit> changes) {
this.project = project;
render(revision, changes);
@@ -264,7 +269,8 @@ class RelatedChangesTab {
if (url.startsWith("#")) {
sb.setAttribute("onclick", OPEN + "(event," + row + ")");
}
sb.append(info.commit().subject());
sb.append(info.commit().subject()
+ (showBranches ? " (" + info.branch() + ")" : ""));
sb.closeAnchor();
} else {
sb.append(info.commit().subject());