Skip to content

Commit 71e6d27

Browse files
authored
Prevent running checkpoint experiment from being selected through toggle (#2888)
1 parent cc39604 commit 71e6d27

File tree

3 files changed

+76
-2
lines changed

3 files changed

+76
-2
lines changed

extension/src/experiments/index.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ import {
1616
pickFilterToAdd,
1717
pickFiltersToRemove
1818
} from './model/filterBy/quickPick'
19-
import { tooManySelected } from './model/status'
19+
import { Color } from './model/status/colors'
20+
import { tooManySelected, UNSELECTED } from './model/status'
2021
import { starredSort } from './model/sortBy/constants'
2122
import { pickSortsToRemove, pickSortToAdd } from './model/sortBy/quickPick'
2223
import { ColumnsModel } from './columns/model'
@@ -192,7 +193,15 @@ export class Experiments extends BaseRepository<TableData> {
192193
return this.columns.getTerminalNodeStatuses()
193194
}
194195

195-
public toggleExperimentStatus(id: string) {
196+
public toggleExperimentStatus(
197+
id: string
198+
): Color | typeof UNSELECTED | undefined {
199+
if (this.experiments.isRunningInWorkspace(id)) {
200+
return this.experiments.isSelected('workspace')
201+
? undefined
202+
: this.toggleExperimentStatus('workspace')
203+
}
204+
196205
const selected = this.experiments.isSelected(id)
197206
if (!selected && !this.experiments.canSelect()) {
198207
return

extension/src/experiments/model/index.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,17 @@ export class ExperimentsModel extends ModelWithPersistence {
165165
return this.running.length > 0
166166
}
167167

168+
public isRunningInWorkspace(id: string) {
169+
if (id === 'workspace') {
170+
return false
171+
}
172+
173+
return this.running.some(
174+
({ id: runningId, executor }) =>
175+
executor === 'workspace' && runningId === id
176+
)
177+
}
178+
168179
public setRevisionCollected(revisions: string[]) {
169180
this.getFlattenedExperiments()
170181
.filter(({ label }) => revisions.includes(label))

extension/src/test/suite/experiments/model/tree.test.ts

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,60 @@ suite('Experiments Tree Test Suite', () => {
152152
).to.be.calledOnceWith(false)
153153
}).timeout(WEBVIEW_TEST_TIMEOUT)
154154

155+
it('should set the workspace to selected when trying to toggle a checkpoint experiment that is running in the workspace', async () => {
156+
const { experiments } = buildExperiments(disposable, {
157+
'53c3851f46955fa3e2b8f6e1c52999acc8c9ea77': {
158+
'4fb124aebddb2adf1545030907687fa9a4c80e70': {
159+
data: {
160+
...expShowFixture['53c3851f46955fa3e2b8f6e1c52999acc8c9ea77'][
161+
'4fb124aebddb2adf1545030907687fa9a4c80e70'
162+
].data,
163+
executor: 'workspace'
164+
}
165+
},
166+
baseline:
167+
expShowFixture['53c3851f46955fa3e2b8f6e1c52999acc8c9ea77'].baseline
168+
},
169+
workspace: expShowFixture.workspace
170+
})
171+
const isWorkspaceSelected = (): boolean =>
172+
!!experiments.getExperiments().find(({ id }) => id === 'workspace')
173+
?.selected
174+
175+
await experiments.isReady()
176+
stubWorkspaceExperimentsGetters(dvcDemoPath, experiments)
177+
expect(isWorkspaceSelected()).to.be.true
178+
179+
await commands.executeCommand(RegisteredCommands.EXPERIMENT_TOGGLE, {
180+
dvcRoot: dvcDemoPath,
181+
id: 'workspace'
182+
})
183+
184+
expect(isWorkspaceSelected()).to.be.false
185+
186+
const selected = await commands.executeCommand(
187+
RegisteredCommands.EXPERIMENT_TOGGLE,
188+
{
189+
dvcRoot: dvcDemoPath,
190+
id: 'exp-e7a67'
191+
}
192+
)
193+
expect(!!selected).to.be.true
194+
195+
expect(isWorkspaceSelected()).to.be.true
196+
197+
const notReselected = await commands.executeCommand(
198+
RegisteredCommands.EXPERIMENT_TOGGLE,
199+
{
200+
dvcRoot: dvcDemoPath,
201+
id: 'exp-e7a67'
202+
}
203+
)
204+
expect(notReselected).to.be.undefined
205+
206+
expect(isWorkspaceSelected()).to.be.true
207+
})
208+
155209
it('should not show queued experiments in the dvc.views.experimentsTree.selectExperiments quick pick', async () => {
156210
await buildPlots(disposable)
157211

0 commit comments

Comments
 (0)