Skip to content

Commit eb31b02

Browse files
authored
Show errors when interacting with the CLI from the experiments webview or tree (#1953)
* register experiment tree commands that interact directly with the CLI as CLI commands * rework how we call the CLI from the webview * register commands that are used by both views once * consolidate all but remove experiments * consolidate remove command * consolidate toggle command * revert internal commands * remove experiment item from registration * remove unnecessary exp show fixture from build experiments
1 parent c12a639 commit eb31b02

File tree

15 files changed

+466
-374
lines changed

15 files changed

+466
-374
lines changed

extension/package.json

Lines changed: 35 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -398,47 +398,53 @@
398398
"icon": "$(close)"
399399
},
400400
{
401-
"title": "%command.views.experimentsTree.applyExperiment%",
402-
"command": "dvc.views.experimentsTree.applyExperiment",
401+
"title": "%command.views.experiments.applyExperiment%",
402+
"command": "dvc.views.experiments.applyExperiment",
403403
"category": "DVC",
404404
"icon": "$(merge)"
405405
},
406406
{
407-
"title": "%command.views.experimentsTree.branchExperiment%",
408-
"command": "dvc.views.experimentsTree.branchExperiment",
407+
"title": "%command.views.experiments.branchExperiment%",
408+
"command": "dvc.views.experiments.branchExperiment",
409409
"category": "DVC",
410410
"icon": "$(source-control)"
411411
},
412412
{
413-
"title": "%command.views.experimentsTree.queueExperiment%",
414-
"command": "dvc.views.experimentsTree.queueExperiment",
413+
"title": "%command.views.experiments.queueExperiment%",
414+
"command": "dvc.views.experiments.queueExperiment",
415415
"category": "DVC",
416416
"icon": {
417417
"dark": "resources/dark/queue-experiment.svg",
418418
"light": "resources/light/queue-experiment.svg"
419419
}
420420
},
421421
{
422-
"title": "%command.views.experimentsTree.removeExperiment%",
422+
"title": "%command.views.experiments.removeExperiment%",
423423
"command": "dvc.views.experimentsTree.removeExperiment",
424424
"category": "DVC",
425425
"icon": "$(trash)"
426426
},
427427
{
428-
"title": "%command.views.experimentsTree.runExperiment%",
429-
"command": "dvc.views.experimentsTree.runExperiment",
428+
"title": "%command.views.experiments.removeExperiment%",
429+
"command": "dvc.views.experiments.removeExperiment",
430+
"category": "DVC",
431+
"icon": "$(trash)"
432+
},
433+
{
434+
"title": "%command.views.experiments.runExperiment%",
435+
"command": "dvc.views.experiments.runExperiment",
430436
"category": "DVC",
431437
"icon": "$(play)"
432438
},
433439
{
434-
"title": "%command.views.experimentsTree.resumeCheckpointExperiment%",
435-
"command": "dvc.views.experimentsTree.resumeCheckpointExperiment",
440+
"title": "%command.views.experiments.resumeCheckpointExperiment%",
441+
"command": "dvc.views.experiments.resumeCheckpointExperiment",
436442
"category": "DVC",
437443
"icon": "$(debug-continue-small)"
438444
},
439445
{
440-
"title": "%command.views.experimentsTree.resetAndRunCheckpointExperiment%",
441-
"command": "dvc.views.experimentsTree.resetAndRunCheckpointExperiment",
446+
"title": "%command.views.experiments.resetAndRunCheckpointExperiment%",
447+
"command": "dvc.views.experiments.resetAndRunCheckpointExperiment",
442448
"category": "DVC",
443449
"icon": "$(play)"
444450
},
@@ -726,31 +732,35 @@
726732
"when": "dvc.commands.available && dvc.project.available"
727733
},
728734
{
729-
"command": "dvc.views.experimentsTree.applyExperiment",
735+
"command": "dvc.views.experiments.applyExperiment",
730736
"when": "false"
731737
},
732738
{
733-
"command": "dvc.views.experimentsTree.branchExperiment",
739+
"command": "dvc.views.experiments.branchExperiment",
734740
"when": "false"
735741
},
736742
{
737-
"command": "dvc.views.experimentsTree.queueExperiment",
743+
"command": "dvc.views.experiments.queueExperiment",
738744
"when": "false"
739745
},
740746
{
741747
"command": "dvc.views.experimentsTree.removeExperiment",
742748
"when": "false"
743749
},
744750
{
745-
"command": "dvc.views.experimentsTree.runExperiment",
751+
"command": "dvc.views.experiments.removeExperiment",
752+
"when": "false"
753+
},
754+
{
755+
"command": "dvc.views.experiments.runExperiment",
746756
"when": "false"
747757
},
748758
{
749-
"command": "dvc.views.experimentsTree.resumeCheckpointExperiment",
759+
"command": "dvc.views.experiments.resumeCheckpointExperiment",
750760
"when": "false"
751761
},
752762
{
753-
"command": "dvc.views.experimentsTree.resetAndRunCheckpointExperiment",
763+
"command": "dvc.views.experiments.resetAndRunCheckpointExperiment",
754764
"when": "false"
755765
},
756766
{
@@ -1015,12 +1025,12 @@
10151025
"when": "view == dvc.views.experimentsFilterByTree && dvc.commands.available && viewItem == dvcRoot"
10161026
},
10171027
{
1018-
"command": "dvc.views.experimentsTree.applyExperiment",
1028+
"command": "dvc.views.experiments.applyExperiment",
10191029
"group": "inline@1",
10201030
"when": "view == dvc.views.experimentsTree && dvc.commands.available && viewItem =~ /^(checkpoint|experiment)$/ && !dvc.experiment.running"
10211031
},
10221032
{
1023-
"command": "dvc.views.experimentsTree.branchExperiment",
1033+
"command": "dvc.views.experiments.branchExperiment",
10241034
"group": "inline@2",
10251035
"when": "view == dvc.views.experimentsTree && dvc.commands.available && viewItem =~ /^(checkpoint|experiment)$/ && !dvc.experiment.running"
10261036
},
@@ -1030,22 +1040,22 @@
10301040
"when": "view == dvc.views.experimentsTree && dvc.commands.available && viewItem =~ /^(experiment|queued)$/ && !dvc.experiment.running"
10311041
},
10321042
{
1033-
"command": "dvc.views.experimentsTree.runExperiment",
1043+
"command": "dvc.views.experiments.runExperiment",
10341044
"group": "1_modify@1",
10351045
"when": "view == dvc.views.experimentsTree && dvc.commands.available && viewItem =~ /^(workspace|branch|experiment|queued)$/ && !dvc.experiment.running && !dvc.experiment.checkpoints"
10361046
},
10371047
{
1038-
"command": "dvc.views.experimentsTree.resetAndRunCheckpointExperiment",
1048+
"command": "dvc.views.experiments.resetAndRunCheckpointExperiment",
10391049
"group": "1_modify@1",
10401050
"when": "view == dvc.views.experimentsTree && dvc.commands.available && viewItem =~ /^(workspace|branch|experiment|queued)$/ && !dvc.experiment.running && dvc.experiment.checkpoints"
10411051
},
10421052
{
1043-
"command": "dvc.views.experimentsTree.resumeCheckpointExperiment",
1053+
"command": "dvc.views.experiments.resumeCheckpointExperiment",
10441054
"group": "1_modify@2",
10451055
"when": "view == dvc.views.experimentsTree && dvc.commands.available && viewItem =~ /^(workspace|branch|experiment|queued)$/ && !dvc.experiment.running && dvc.experiment.checkpoints"
10461056
},
10471057
{
1048-
"command": "dvc.views.experimentsTree.queueExperiment",
1058+
"command": "dvc.views.experiments.queueExperiment",
10491059
"group": "1_modify@3",
10501060
"when": "view == dvc.views.experimentsTree && dvc.commands.available && viewItem =~ /^(workspace|branch|experiment|queued)$/ && !dvc.experiment.running"
10511061
},

extension/package.nls.json

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -58,13 +58,13 @@
5858
"command.views.experimentsSortByTree.removeSort": "Remove Sort From Experiments Table",
5959
"command.views.experimentsTree.autoApplyFilters": "Auto Apply Filters To Experiment Selection",
6060
"command.views.experimentsTree.disableAutoApplyFilters": "Disable Auto Apply Filters To Experiment Selection",
61-
"command.views.experimentsTree.applyExperiment": "Apply to Workspace",
62-
"command.views.experimentsTree.branchExperiment": "Create new Branch",
63-
"command.views.experimentsTree.queueExperiment": "Modify Param(s) and Queue",
64-
"command.views.experimentsTree.removeExperiment": "Remove",
65-
"command.views.experimentsTree.runExperiment": "Modify Param(s) and Run",
66-
"command.views.experimentsTree.resumeCheckpointExperiment": "Modify Param(s) and Resume",
67-
"command.views.experimentsTree.resetAndRunCheckpointExperiment": "Modify Param(s), Reset and Run",
61+
"command.views.experiments.applyExperiment": "Apply to Workspace",
62+
"command.views.experiments.branchExperiment": "Create new Branch",
63+
"command.views.experiments.queueExperiment": "Modify Param(s) and Queue",
64+
"command.views.experiments.removeExperiment": "Remove",
65+
"command.views.experiments.runExperiment": "Modify Param(s) and Run",
66+
"command.views.experiments.resumeCheckpointExperiment": "Modify Param(s) and Resume",
67+
"command.views.experiments.resetAndRunCheckpointExperiment": "Modify Param(s), Reset and Run",
6868
"command.views.experimentsTree.selectExperiments": "Select Experiments to Display in Plots",
6969
"command.views.plotsPathsTree.selectPlots": "Select Plots to Display",
7070
"command.views.plotsPathsTree.refreshPlots": "Refresh Plots for Selected Experiments",

extension/src/commands/external.ts

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,20 @@ export enum RegisteredCliCommands {
1111
EXPERIMENT_RESET_AND_RUN = 'dvc.resetAndRunCheckpointExperiment',
1212
QUEUE_EXPERIMENT = 'dvc.queueExperiment',
1313

14+
EXPERIMENT_VIEW_APPLY = 'dvc.views.experiments.applyExperiment',
15+
EXPERIMENT_VIEW_BRANCH = 'dvc.views.experiments.branchExperiment',
16+
EXPERIMENT_VIEW_REMOVE = 'dvc.views.experiments.removeExperiment',
17+
18+
EXPERIMENT_VIEW_QUEUE = 'dvc.views.experiments.queueExperiment',
19+
EXPERIMENT_VIEW_RESUME = 'dvc.views.experiments.resumeCheckpointExperiment',
20+
EXPERIMENT_VIEW_RUN = 'dvc.views.experiments.runExperiment',
21+
EXPERIMENT_VIEW_RESET_AND_RUN = 'dvc.views.experiments.resetAndRunCheckpointExperiment',
22+
23+
MODIFY_EXPERIMENT_PARAMS_AND_QUEUE = 'dvc.modifyExperimentParamsAndQueue',
24+
MODIFY_EXPERIMENT_PARAMS_AND_RESUME = 'dvc.modifyExperimentParamsAndResume',
25+
MODIFY_EXPERIMENT_PARAMS_AND_RUN = 'dvc.modifyExperimentParamsAndRun',
26+
MODIFY_EXPERIMENT_PARAMS_RESET_AND_RUN = 'dvc.modifyExperimentParamsResetAndRun',
27+
1428
ADD_TARGET = 'dvc.addTarget',
1529
CHECKOUT = 'dvc.checkout',
1630
CHECKOUT_TARGET = 'dvc.checkoutTarget',
@@ -34,24 +48,13 @@ export enum RegisteredCommands {
3448
EXPERIMENT_FILTERS_REMOVE = 'dvc.removeExperimentsTableFilters',
3549
EXPERIMENT_FILTERS_REMOVE_ALL = 'dvc.views.experimentsFilterByTree.removeAllFilters',
3650
EXPERIMENT_METRICS_AND_PARAMS_TOGGLE = 'dvc.views.experimentsColumnsTree.toggleStatus',
37-
EXPERIMENT_TREE_APPLY = 'dvc.views.experimentsTree.applyExperiment',
38-
EXPERIMENT_TREE_BRANCH = 'dvc.views.experimentsTree.branchExperiment',
39-
EXPERIMENT_TREE_QUEUE = 'dvc.views.experimentsTree.queueExperiment',
40-
EXPERIMENT_TREE_REMOVE = 'dvc.views.experimentsTree.removeExperiment',
41-
EXPERIMENT_TREE_RESUME = 'dvc.views.experimentsTree.resumeCheckpointExperiment',
42-
EXPERIMENT_TREE_RUN = 'dvc.views.experimentsTree.runExperiment',
43-
EXPERIMENT_TREE_RESET_AND_RUN = 'dvc.views.experimentsTree.resetAndRunCheckpointExperiment',
4451
EXPERIMENT_SELECT = 'dvc.views.experimentsTree.selectExperiments',
4552
EXPERIMENT_SHOW = 'dvc.showExperiments',
4653
EXPERIMENT_SORT_ADD = 'dvc.addExperimentsTableSort',
4754
EXPERIMENT_SORT_REMOVE = 'dvc.views.experimentsSortByTree.removeSort',
4855
EXPERIMENT_SORTS_REMOVE = 'dvc.removeExperimentsTableSorts',
4956
EXPERIMENT_SORTS_REMOVE_ALL = 'dvc.views.experimentsSortByTree.removeAllSorts',
50-
EXPERIMENT_TOGGLE = 'dvc.views.experimentsTree.toggleStatus',
51-
MODIFY_EXPERIMENT_PARAMS_AND_QUEUE = 'dvc.modifyExperimentParamsAndQueue',
52-
MODIFY_EXPERIMENT_PARAMS_AND_RESUME = 'dvc.modifyExperimentParamsAndResume',
53-
MODIFY_EXPERIMENT_PARAMS_AND_RUN = 'dvc.modifyExperimentParamsAndRun',
54-
MODIFY_EXPERIMENT_PARAMS_RESET_AND_RUN = 'dvc.modifyExperimentParamsResetAndRun',
57+
EXPERIMENT_TOGGLE = 'dvc.views.experiments.toggleStatus',
5558
STOP_EXPERIMENT = 'dvc.stopRunningExperiment',
5659

5760
PLOTS_PATH_TOGGLE = 'dvc.views.plotsPathsTree.toggleStatus',

extension/src/experiments/commands/register.ts

Lines changed: 97 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ import {
77
} from '../../commands/external'
88
import { Title } from '../../vscode/title'
99

10+
type ExperimentDetails = { dvcRoot: string; id: string }
11+
1012
const registerExperimentCwdCommands = (
1113
experiments: WorkspaceExperiments,
1214
internalCommands: InternalCommands
@@ -19,13 +21,19 @@ const registerExperimentCwdCommands = (
1921
)
2022
)
2123

22-
internalCommands.registerExternalCommand(
23-
RegisteredCommands.MODIFY_EXPERIMENT_PARAMS_AND_QUEUE,
24+
internalCommands.registerExternalCliCommand(
25+
RegisteredCliCommands.MODIFY_EXPERIMENT_PARAMS_AND_QUEUE,
2426
() =>
2527
experiments.pauseUpdatesThenRun(() =>
26-
experiments.modifyExperimentParamsAndRun(
27-
AvailableCommands.EXPERIMENT_QUEUE
28-
)
28+
experiments.modifyExperimentParamsAndQueue()
29+
)
30+
)
31+
32+
internalCommands.registerExternalCliCommand(
33+
RegisteredCliCommands.EXPERIMENT_VIEW_QUEUE,
34+
({ dvcRoot, id }: ExperimentDetails) =>
35+
experiments.pauseUpdatesThenRun(() =>
36+
experiments.modifyExperimentParamsAndQueue(dvcRoot, id)
2937
)
3038
)
3139

@@ -34,18 +42,40 @@ const registerExperimentCwdCommands = (
3442
experiments.modifyExperimentParamsAndRun(AvailableCommands.EXPERIMENT_RUN)
3543
)
3644

37-
internalCommands.registerExternalCommand(
38-
RegisteredCommands.MODIFY_EXPERIMENT_PARAMS_AND_RESUME,
45+
internalCommands.registerExternalCliCommand(
46+
RegisteredCliCommands.MODIFY_EXPERIMENT_PARAMS_AND_RESUME,
3947
modifyExperimentParamsAndRun
4048
)
4149

42-
internalCommands.registerExternalCommand(
43-
RegisteredCommands.MODIFY_EXPERIMENT_PARAMS_AND_RUN,
50+
internalCommands.registerExternalCliCommand(
51+
RegisteredCliCommands.MODIFY_EXPERIMENT_PARAMS_AND_RUN,
4452
modifyExperimentParamsAndRun
4553
)
4654

47-
internalCommands.registerExternalCommand(
48-
RegisteredCommands.MODIFY_EXPERIMENT_PARAMS_RESET_AND_RUN,
55+
const modifyExperimentParamsAndRunFromView = ({
56+
dvcRoot,
57+
id
58+
}: ExperimentDetails) =>
59+
experiments.pauseUpdatesThenRun(() =>
60+
experiments.modifyExperimentParamsAndRun(
61+
AvailableCommands.EXPERIMENT_RUN,
62+
dvcRoot,
63+
id
64+
)
65+
)
66+
67+
internalCommands.registerExternalCliCommand(
68+
RegisteredCliCommands.EXPERIMENT_VIEW_RESUME,
69+
modifyExperimentParamsAndRunFromView
70+
)
71+
72+
internalCommands.registerExternalCliCommand(
73+
RegisteredCliCommands.EXPERIMENT_VIEW_RUN,
74+
modifyExperimentParamsAndRunFromView
75+
)
76+
77+
internalCommands.registerExternalCliCommand(
78+
RegisteredCliCommands.MODIFY_EXPERIMENT_PARAMS_RESET_AND_RUN,
4979
() =>
5080
experiments.pauseUpdatesThenRun(() =>
5181
experiments.modifyExperimentParamsAndRun(
@@ -54,6 +84,18 @@ const registerExperimentCwdCommands = (
5484
)
5585
)
5686

87+
internalCommands.registerExternalCliCommand(
88+
RegisteredCliCommands.EXPERIMENT_VIEW_RESET_AND_RUN,
89+
({ dvcRoot, id }: ExperimentDetails) =>
90+
experiments.pauseUpdatesThenRun(() =>
91+
experiments.modifyExperimentParamsAndRun(
92+
AvailableCommands.EXPERIMENT_RESET_AND_RUN,
93+
dvcRoot,
94+
id
95+
)
96+
)
97+
)
98+
5799
internalCommands.registerExternalCliCommand(
58100
RegisteredCliCommands.EXPERIMENT_REMOVE_QUEUE,
59101
() =>
@@ -67,12 +109,34 @@ const registerExperimentNameCommands = (
67109
): void => {
68110
internalCommands.registerExternalCliCommand(
69111
RegisteredCliCommands.EXPERIMENT_APPLY,
70-
() => experiments.getExpNameThenRun(AvailableCommands.EXPERIMENT_APPLY)
112+
() =>
113+
experiments.getCwdAndExpNameThenRun(AvailableCommands.EXPERIMENT_APPLY)
114+
)
115+
116+
internalCommands.registerExternalCliCommand(
117+
RegisteredCliCommands.EXPERIMENT_VIEW_APPLY,
118+
({ dvcRoot, id }: ExperimentDetails) =>
119+
experiments.getExpNameThenRun(
120+
AvailableCommands.EXPERIMENT_APPLY,
121+
dvcRoot,
122+
id
123+
)
71124
)
72125

73126
internalCommands.registerExternalCliCommand(
74127
RegisteredCliCommands.EXPERIMENT_REMOVE,
75-
() => experiments.getExpNameThenRun(AvailableCommands.EXPERIMENT_REMOVE)
128+
() =>
129+
experiments.getCwdAndExpNameThenRun(AvailableCommands.EXPERIMENT_REMOVE)
130+
)
131+
132+
internalCommands.registerExternalCliCommand(
133+
RegisteredCliCommands.EXPERIMENT_VIEW_REMOVE,
134+
({ dvcRoot, ids }: { dvcRoot: string; ids: string[] }) =>
135+
experiments.runCommand(
136+
AvailableCommands.EXPERIMENT_REMOVE,
137+
dvcRoot,
138+
...ids
139+
)
76140
)
77141

78142
internalCommands.registerExternalCliCommand(
@@ -84,16 +148,28 @@ const registerExperimentNameCommands = (
84148
const registerExperimentInputCommands = (
85149
experiments: WorkspaceExperiments,
86150
internalCommands: InternalCommands
87-
): void =>
151+
): void => {
88152
internalCommands.registerExternalCliCommand(
89153
RegisteredCliCommands.EXPERIMENT_BRANCH,
90154
() =>
91-
experiments.getExpNameAndInputThenRun(
155+
experiments.getCwdExpNameAndInputThenRun(
92156
AvailableCommands.EXPERIMENT_BRANCH,
93157
Title.ENTER_BRANCH_NAME
94158
)
95159
)
96160

161+
internalCommands.registerExternalCliCommand(
162+
RegisteredCliCommands.EXPERIMENT_VIEW_BRANCH,
163+
({ dvcRoot, id }: ExperimentDetails) =>
164+
experiments.getExpNameAndInputThenRun(
165+
AvailableCommands.EXPERIMENT_BRANCH,
166+
Title.ENTER_BRANCH_NAME,
167+
dvcRoot,
168+
id
169+
)
170+
)
171+
}
172+
97173
const registerExperimentQuickPickCommands = (
98174
experiments: WorkspaceExperiments,
99175
internalCommands: InternalCommands
@@ -187,4 +263,10 @@ export const registerExperimentCommands = (
187263
RegisteredCommands.EXPERIMENT_DISABLE_AUTO_APPLY_FILTERS,
188264
(dvcRoot?: string) => experiments.autoApplyFilters(false, dvcRoot)
189265
)
266+
267+
internalCommands.registerExternalCommand(
268+
RegisteredCommands.EXPERIMENT_TOGGLE,
269+
({ dvcRoot, id }: ExperimentDetails) =>
270+
experiments.getRepository(dvcRoot).toggleExperimentStatus(id)
271+
)
190272
}

0 commit comments

Comments
 (0)