Skip to content

Commit 03f7e01

Browse files
authored
CHE-5335: Add Git branch/revision link to project name (eclipse-che#5817)
1 parent 4a1f5ac commit 03f7e01

13 files changed

Lines changed: 99 additions & 36 deletions

File tree

ide/che-core-ide-api/src/main/java/org/eclipse/che/ide/api/theme/Theme.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1520,6 +1520,8 @@ public interface Theme {
15201520

15211521
String projectExplorerHoverRowBorder();
15221522

1523+
String projectExplorerVcsHead();
1524+
15231525
/********************************************************************************************
15241526
*
15251527
* Loader

ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/part/explorer/project/ProjectExplorerViewImpl.java

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
1010
*******************************************************************************/
1111
package org.eclipse.che.ide.part.explorer.project;
1212

13-
import com.google.common.base.Optional;
13+
import com.google.gwt.dom.client.DivElement;
14+
import com.google.gwt.dom.client.Document;
1415
import com.google.gwt.dom.client.Element;
1516
import com.google.gwt.event.dom.client.ClickEvent;
1617
import com.google.gwt.event.dom.client.ClickHandler;
@@ -29,14 +30,15 @@
2930
import org.eclipse.che.ide.api.data.tree.HasAttributes;
3031
import org.eclipse.che.ide.api.data.tree.Node;
3132
import org.eclipse.che.ide.api.data.tree.NodeInterceptor;
32-
import org.eclipse.che.ide.api.data.tree.settings.HasSettings;
3333
import org.eclipse.che.ide.api.parts.PerspectiveManager;
3434
import org.eclipse.che.ide.api.parts.base.BaseView;
3535
import org.eclipse.che.ide.api.parts.base.ToolButton;
36+
import org.eclipse.che.ide.api.resources.Container;
3637
import org.eclipse.che.ide.api.resources.Project;
3738
import org.eclipse.che.ide.api.resources.Resource;
3839
import org.eclipse.che.ide.menu.ContextMenu;
3940
import org.eclipse.che.ide.project.node.SyntheticNode;
41+
import org.eclipse.che.ide.resources.tree.ContainerNode;
4042
import org.eclipse.che.ide.resources.tree.ResourceNode;
4143
import org.eclipse.che.ide.resources.tree.SkipHiddenNodesInterceptor;
4244
import org.eclipse.che.ide.FontAwesome;
@@ -331,10 +333,8 @@ public Element render(Node node, String domID, Tree.Joint joint, int depth) {
331333
final Resource resource = ((ResourceNode)node).getData();
332334
element.setAttribute("path", resource.getLocation().toString());
333335

334-
final Optional<Project> project = resource.getRelatedProject();
335-
if (project.isPresent()) {
336-
element.setAttribute("project", project.get().getLocation().toString());
337-
}
336+
Project project = resource.getProject();
337+
element.setAttribute("project", project.getLocation().toString());
338338
}
339339

340340
if (node instanceof HasAction) {
@@ -351,6 +351,19 @@ public Element render(Node node, String domID, Tree.Joint joint, int depth) {
351351
.setBackgroundColor(((HasAttributes)node).getAttributes().get(CUSTOM_BACKGROUND_FILL).get(0));
352352
}
353353

354+
if (node instanceof ContainerNode) {
355+
Container container = ((ContainerNode)node).getData();
356+
if (container instanceof Project) {
357+
String head = container.getProject().getAttribute("git.current.head.name");
358+
if (head != null) {
359+
Element nodeContainer = element.getFirstChildElement();
360+
DivElement divElement = Document.get().createDivElement();
361+
divElement.setInnerText("(" + head + ")");
362+
divElement.setClassName(treeStyles.styles().vcsHeadContainer());
363+
nodeContainer.insertBefore(divElement, nodeContainer.getLastChild());
364+
}
365+
}
366+
}
354367
return element;
355368
}
356369
}

ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/resources/impl/ResourceManager.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@
7474
import static com.google.common.base.Strings.isNullOrEmpty;
7575
import static java.lang.System.arraycopy;
7676
import static java.util.Arrays.copyOf;
77+
import static java.util.Arrays.stream;
7778
import static org.eclipse.che.ide.api.resources.Resource.FILE;
7879
import static org.eclipse.che.ide.api.resources.ResourceDelta.ADDED;
7980
import static org.eclipse.che.ide.api.resources.ResourceDelta.COPIED_FROM;
@@ -84,6 +85,7 @@
8485
import static org.eclipse.che.ide.api.resources.ResourceDelta.SYNCHRONIZED;
8586
import static org.eclipse.che.ide.api.resources.ResourceDelta.UPDATED;
8687
import static org.eclipse.che.ide.util.Arrays.add;
88+
import static org.eclipse.che.ide.util.Arrays.contains;
8789
import static org.eclipse.che.ide.util.Arrays.removeAll;
8890
import static org.eclipse.che.ide.util.NameUtils.checkFileName;
8991
import static org.eclipse.che.ide.util.NameUtils.checkFolderName;
@@ -681,7 +683,7 @@ public void visit(Resource resource) {
681683
eventBus.fireEvent(new ResourceChangedEvent(new ResourceDeltaImpl(resource, REMOVED)));
682684
}
683685

684-
final Resource[] updated = removeAll(outdated, reloaded, true);
686+
final Resource[] updated = stream(reloaded).filter(resource -> contains(outdated, resource)).toArray(Resource[]::new);
685687
for (Resource resource : updated) {
686688
store.register(resource);
687689

ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/theme/DarkTheme.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1381,6 +1381,11 @@ public String projectExplorerHoverRowBorder() {
13811381
return "#dbdbdb";
13821382
}
13831383

1384+
@Override
1385+
public String projectExplorerVcsHead() {
1386+
return "#c3bfbf";
1387+
}
1388+
13841389
@Override
13851390
public String loaderExpanderColor() {
13861391
return "#e3e3e3";

ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/theme/LightTheme.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1357,6 +1357,11 @@ public String projectExplorerHoverRowBorder() {
13571357
return "#7b7b7b";
13581358
}
13591359

1360+
@Override
1361+
public String projectExplorerVcsHead() {
1362+
return "#7A8088";
1363+
}
1364+
13601365
@Override
13611366
public String loaderExpanderColor() {
13621367
return "#555555";

ide/che-core-ide-ui/src/main/java/org/eclipse/che/ide/ui/smartTree/TreeStyles.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ interface CSS extends CssResource {
3636

3737
String infoTextContainer();
3838

39+
String vcsHeadContainer();
40+
3941
String descendantsContainer();
4042

4143
String selected();

ide/che-core-ide-ui/src/main/resources/org/eclipse/che/ide/ui/smartTree/TreeStyles.css

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
@eval projectExplorerSelectedRowBorder org.eclipse.che.ide.api.theme.Style.theme.projectExplorerSelectedRowBorder();
1717
@eval projectExplorerHoverRowBackground org.eclipse.che.ide.api.theme.Style.theme.projectExplorerHoverRowBackground();
1818
@eval projectExplorerHoverRowBorder org.eclipse.che.ide.api.theme.Style.theme.projectExplorerHoverRowBorder();
19+
@eval projectExplorerVcsHead org.eclipse.che.ide.api.theme.Style.theme.projectExplorerVcsHead();
1920

2021

2122
.noFocusOutline {
@@ -62,6 +63,18 @@
6263
text-shadow: projectExplorerInfoTextShadow;
6364
}
6465

66+
.vcsHeadContainer {
67+
white-space: nowrap;
68+
vertical-align: middle;
69+
display: inline-block;
70+
margin-top: -10px;
71+
font-size: 1em;
72+
font-style: italic;
73+
padding-left: 2px;
74+
text-shadow: projectExplorerPresentableTextShadow;
75+
color: projectExplorerVcsHead;
76+
}
77+
6578
.nodeContainer {
6679
white-space: nowrap;
6780
height: 20px;
@@ -73,13 +86,6 @@
7386

7487
.selected {
7588
background-color: projectExplorerSelectedRowBackground !important;
76-
/* Set default text color to selected item */
77-
color: projectExplorerJointContainerFill !important;
78-
}
79-
80-
/* Set default text color to nested elements of selected item */
81-
.selected * {
82-
color: projectExplorerJointContainerFill !important;
8389
}
8490

8591
.hover {

plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/GitCheckoutStatusNotificationHandler.java renamed to plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/GitCheckoutHandler.java

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@
1414
import org.eclipse.che.api.core.jsonrpc.commons.RequestHandlerConfigurator;
1515
import org.eclipse.che.api.project.shared.dto.event.GitCheckoutEventDto;
1616
import org.eclipse.che.api.project.shared.dto.event.GitCheckoutEventDto.Type;
17+
import org.eclipse.che.ide.api.app.AppContext;
1718
import org.eclipse.che.ide.api.notification.NotificationManager;
19+
import org.eclipse.che.ide.resources.impl.ResourceManager;
1820
import org.eclipse.che.ide.util.loging.Log;
1921

2022
import javax.inject.Inject;
@@ -27,22 +29,26 @@
2729
/**
2830
* Receives git checkout notifications caught by server side VFS file watching system.
2931
* Support two type of notifications: git branch checkout and git revision checkout.
30-
* After a notification is received it is processed and passed to and instance of
31-
* {@link NotificationManager}.
32+
* After a notification is received it is processed and passed to an instance of
33+
* {@link NotificationManager}. Updates attributes of the project from server to load
34+
* new HEAD value to project attributes that are held in {@link ResourceManager}.
3235
*/
3336
@Singleton
34-
public class GitCheckoutStatusNotificationHandler {
35-
private final Provider<NotificationManager> notificationManagerProvider;
37+
public class GitCheckoutHandler {
38+
private final Provider<NotificationManager> notificationManagerProvider;
39+
private final AppContext appContext;
3640

3741
@Inject
38-
public GitCheckoutStatusNotificationHandler(Provider<NotificationManager> notificationManagerProvider,
39-
RequestHandlerConfigurator configurator) {
42+
public GitCheckoutHandler(Provider<NotificationManager> notificationManagerProvider,
43+
RequestHandlerConfigurator configurator,
44+
AppContext appContext) {
4045
this.notificationManagerProvider = notificationManagerProvider;
46+
this.appContext = appContext;
4147

4248
configureHandler(configurator);
4349
}
4450

45-
public void configureHandler(RequestHandlerConfigurator configurator) {
51+
private void configureHandler(RequestHandlerConfigurator configurator) {
4652
configurator.newConfiguration()
4753
.methodName("event:git-checkout")
4854
.paramsAsDto(GitCheckoutEventDto.class)
@@ -76,5 +82,8 @@ public void apply(String endpointId, GitCheckoutEventDto dto) {
7682
break;
7783
}
7884
}
85+
86+
//Update project attributes from server.
87+
appContext.getWorkspaceRoot().synchronize();
7988
}
8089
}

plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/branch/BranchPresenter.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -160,8 +160,7 @@ public void onCheckoutClicked() {
160160

161161
service.checkout(project.getLocation(), checkoutRequest)
162162
.then(ignored -> {
163-
getBranches();
164-
project.synchronize();
163+
view.close();
165164
})
166165
.catchError(error -> {
167166
handleError(error.getCause(), BRANCH_CHECKOUT_COMMAND_NAME);

plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/inject/GitGinModule.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
import org.eclipse.che.ide.api.extension.ExtensionGinModule;
1919
import org.eclipse.che.ide.api.preferences.PreferencePagePresenter;
2020
import org.eclipse.che.ide.api.project.wizard.ImportWizardRegistrar;
21-
import org.eclipse.che.ide.ext.git.client.GitCheckoutStatusNotificationHandler;
21+
import org.eclipse.che.ide.ext.git.client.GitCheckoutHandler;
2222
import org.eclipse.che.ide.ext.git.client.add.AddToIndexView;
2323
import org.eclipse.che.ide.ext.git.client.add.AddToIndexViewImpl;
2424
import org.eclipse.che.ide.ext.git.client.branch.BranchView;
@@ -92,6 +92,6 @@ protected void configure() {
9292
install(new GinFactoryModuleBuilder().implement(GitOutputConsole.class, GitOutputConsolePresenter.class)
9393
.build(GitOutputConsoleFactory.class));
9494

95-
bind(GitCheckoutStatusNotificationHandler.class).asEagerSingleton();
95+
bind(GitCheckoutHandler.class).asEagerSingleton();
9696
}
9797
}

0 commit comments

Comments
 (0)