Skip to content

Commit 5799e31

Browse files
yaohui-wyhrogeryhwang
authored and
rogeryhwang
committed
[jb-gw]: add ref & timespan column for workspace panel
1 parent 4c0dc51 commit 5799e31

File tree

4 files changed

+97
-5
lines changed

4 files changed

+97
-5
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package io.gitpod.gitpodprotocol.api.entities;
2+
3+
public class Repository {
4+
5+
private String branch;
6+
private int totalUncommitedFiles;
7+
private int totalUnpushedCommits;
8+
private int totalUntrackedFiles;
9+
10+
public String getBranch() {
11+
return branch;
12+
}
13+
14+
public void setBranch(String branch) {
15+
this.branch = branch;
16+
}
17+
18+
public int getTotalUncommitedFiles() {
19+
return totalUncommitedFiles;
20+
}
21+
22+
public void setTotalUncommitedFiles(int totalUncommitedFiles) {
23+
this.totalUncommitedFiles = totalUncommitedFiles;
24+
}
25+
26+
public int getTotalUnpushedCommits() {
27+
return totalUnpushedCommits;
28+
}
29+
30+
public void setTotalUnpushedCommits(int totalUnpushedCommits) {
31+
this.totalUnpushedCommits = totalUnpushedCommits;
32+
}
33+
34+
public int getTotalUntrackedFiles() {
35+
return totalUntrackedFiles;
36+
}
37+
38+
public void setTotalUntrackedFiles(int totalUntrackedFiles) {
39+
this.totalUntrackedFiles = totalUntrackedFiles;
40+
}
41+
}

components/gitpod-protocol/java/src/main/java/io/gitpod/gitpodprotocol/api/entities/WorkspaceContext.java

+9
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
public class WorkspaceContext {
88
private String normalizedContextURL;
9+
private String ref;
910

1011
public String getNormalizedContextURL() {
1112
return normalizedContextURL;
@@ -14,4 +15,12 @@ public String getNormalizedContextURL() {
1415
public void setNormalizedContextURL(String normalizedContextURL) {
1516
this.normalizedContextURL = normalizedContextURL;
1617
}
18+
19+
public String getRef() {
20+
return ref;
21+
}
22+
23+
public void setRef(String ref) {
24+
this.ref = ref;
25+
}
1726
}

components/gitpod-protocol/java/src/main/java/io/gitpod/gitpodprotocol/api/entities/WorkspaceInstanceStatus.java

+9
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ public class WorkspaceInstanceStatus {
88
private String phase;
99
private String ownerToken;
1010
private WorkspaceInstanceConditions conditions;
11+
private Repository repo;
1112

1213
public String getPhase() {
1314
return phase;
@@ -32,4 +33,12 @@ public WorkspaceInstanceConditions getConditions() {
3233
public void setConditions(WorkspaceInstanceConditions conditions) {
3334
this.conditions = conditions;
3435
}
36+
37+
public Repository getRepo() {
38+
return repo;
39+
}
40+
41+
public void setRepo(Repository repo) {
42+
this.repo = repo;
43+
}
3544
}

components/ide/jetbrains/gateway-plugin/src/main/kotlin/io/gitpod/jetbrains/gateway/GitpodWorkspacesView.kt

+38-5
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,7 @@ import com.intellij.openapi.project.DumbAwareAction
1515
import com.intellij.openapi.wm.impl.welcomeScreen.WelcomeScreenUIManager
1616
import com.intellij.remoteDev.util.onTerminationOrNow
1717
import com.intellij.ui.components.JBScrollPane
18-
import com.intellij.ui.dsl.builder.BottomGap
19-
import com.intellij.ui.dsl.builder.RightGap
20-
import com.intellij.ui.dsl.builder.TopGap
21-
import com.intellij.ui.dsl.builder.panel
18+
import com.intellij.ui.dsl.builder.*
2219
import com.intellij.ui.dsl.gridLayout.HorizontalAlign
2320
import com.intellij.ui.dsl.gridLayout.VerticalAlign
2421
import com.intellij.ui.layout.ComponentPredicate
@@ -41,6 +38,8 @@ import kotlinx.coroutines.ensureActive
4138
import kotlinx.coroutines.future.await
4239
import kotlinx.coroutines.launch
4340
import java.time.OffsetDateTime
41+
import java.time.ZonedDateTime
42+
import java.time.temporal.ChronoUnit
4443
import javax.swing.text.SimpleAttributeSet
4544
import javax.swing.text.StyleConstants
4645
import javax.swing.text.StyledDocument
@@ -189,6 +188,24 @@ class GitpodWorkspacesView(
189188
return { updateActor.trySend(null) }
190189
}
191190

191+
private fun getRelativeTimeSpan(creationTime: String): String {
192+
val fromDate = ZonedDateTime.parse(creationTime)
193+
val toDate = ZonedDateTime.now()
194+
val days = ChronoUnit.DAYS.between(fromDate, toDate)
195+
if (days > 0) {
196+
return "$days days ago"
197+
}
198+
val hours = ChronoUnit.HOURS.between(fromDate, toDate)
199+
if (hours > 0) {
200+
return "$hours hours ago"
201+
}
202+
val minutes = ChronoUnit.MINUTES.between(fromDate, toDate)
203+
if (minutes > 0) {
204+
return "$minutes minutes ago"
205+
}
206+
return "a few seconds ago"
207+
}
208+
192209
private fun doUpdate(updateLifetime: Lifetime, workspacesPane: JBScrollPane) {
193210
val gitpodHost = settings.gitpodHost
194211
if (!GitpodAuthService.hasAccessToken(gitpodHost)) {
@@ -260,6 +277,22 @@ class GitpodWorkspacesView(
260277
}.rowComment("<a href='${info.workspace.context.normalizedContextURL}'>${info.workspace.context.normalizedContextURL}</a>")
261278
}
262279
label("").resizableColumn().horizontalAlign(HorizontalAlign.FILL)
280+
panel {
281+
val repo = info.latestInstance.status.repo
282+
val changes = repo?.let {
283+
it.totalUncommitedFiles + it.totalUntrackedFiles + it.totalUnpushedCommits
284+
} ?: 0
285+
row {
286+
label(info.workspace.context.ref)
287+
}.rowComment(
288+
when {
289+
changes == 1 -> "<b>$changes Change</b>"
290+
changes > 0 -> "<b>$changes Changes</b>"
291+
else -> "No Changes"
292+
}
293+
)
294+
}
295+
label(getRelativeTimeSpan(info.latestInstance.creationTime))
263296
button("Connect") {
264297
if (!canConnect) {
265298
BrowserUtil.browse(info.latestInstance.ideUrl)
@@ -273,7 +306,7 @@ class GitpodWorkspacesView(
273306
}
274307
}
275308
cell()
276-
}
309+
}.layout(RowLayout.PARENT_GRID)
277310
}
278311
}
279312
}

0 commit comments

Comments
 (0)