From 471d46897f1a819335ea9016affd85d882734fc7 Mon Sep 17 00:00:00 2001 From: Matt Seddon Date: Thu, 25 Aug 2022 10:32:27 +1000 Subject: [PATCH] Add commit and share experiment command to the palette --- extension/package.json | 10 ++++ extension/package.nls.json | 1 + extension/src/commands/external.ts | 1 + .../src/experiments/commands/register.ts | 9 +++ extension/src/telemetry/constants.ts | 1 + .../test/suite/experiments/workspace.test.ts | 55 +++++++++++++++++++ 6 files changed, 77 insertions(+) diff --git a/extension/package.json b/extension/package.json index d44f73cef5..6af999c61c 100644 --- a/extension/package.json +++ b/extension/package.json @@ -363,6 +363,12 @@ "category": "DVC", "icon": "$(repo-push)" }, + { + "title": "%command.shareExperimentAsCommit%", + "command": "dvc.shareExperimentAsCommit", + "category": "DVC", + "icon": "$(repo-push)" + }, { "title": "%command.showCommands", "command": "dvc.showCommands", @@ -757,6 +763,10 @@ "command": "dvc.shareExperimentAsBranch", "when": "dvc.commands.available && dvc.project.available && !dvc.experiment.running" }, + { + "command": "dvc.shareExperimentAsCommit", + "when": "dvc.commands.available && dvc.project.available && !dvc.experiment.running" + }, { "command": "dvc.showExperiments", "when": "dvc.commands.available && dvc.project.available" diff --git a/extension/package.nls.json b/extension/package.nls.json index c2e12b6385..8dc27f18d4 100644 --- a/extension/package.nls.json +++ b/extension/package.nls.json @@ -49,6 +49,7 @@ "command.selectForCompare": "Select for Compare", "command.setupWorkspace": "Setup The Workspace", "command.shareExperimentAsBranch": "Share Experiment as Branch", + "command.shareExperimentAsCommit": "Commit and Share Experiment", "command.showCommands": "Show Commands", "command.showExperiments": "Show Experiments", "command.showOutput": "Show DVC Output", diff --git a/extension/src/commands/external.ts b/extension/src/commands/external.ts index e5eac9043c..4f1ef257f6 100644 --- a/extension/src/commands/external.ts +++ b/extension/src/commands/external.ts @@ -10,6 +10,7 @@ export enum RegisteredCliCommands { EXPERIMENT_RUN_QUEUED = 'dvc.startExperimentsQueue', EXPERIMENT_RESET_AND_RUN = 'dvc.resetAndRunCheckpointExperiment', EXPERIMENT_SHARE_AS_BRANCH = 'dvc.shareExperimentAsBranch', + EXPERIMENT_SHARE_AS_COMMIT = 'dvc.shareExperimentAsCommit', QUEUE_EXPERIMENT = 'dvc.queueExperiment', EXPERIMENT_VIEW_APPLY = 'dvc.views.experiments.applyExperiment', diff --git a/extension/src/experiments/commands/register.ts b/extension/src/experiments/commands/register.ts index 830308fc90..731794c024 100644 --- a/extension/src/experiments/commands/register.ts +++ b/extension/src/experiments/commands/register.ts @@ -194,6 +194,15 @@ const registerExperimentInputCommands = ( ) ) + internalCommands.registerExternalCliCommand( + RegisteredCliCommands.EXPERIMENT_SHARE_AS_COMMIT, + () => + experiments.getCwdExpNameAndInputThenRun( + getShareExperimentAsCommitCommand(internalCommands), + Title.ENTER_COMMIT_MESSAGE + ) + ) + internalCommands.registerExternalCliCommand( RegisteredCliCommands.EXPERIMENT_VIEW_SHARE_AS_COMMIT, ({ dvcRoot, id }: ExperimentDetails) => diff --git a/extension/src/telemetry/constants.ts b/extension/src/telemetry/constants.ts index c421430b7d..a7961950c9 100644 --- a/extension/src/telemetry/constants.ts +++ b/extension/src/telemetry/constants.ts @@ -127,6 +127,7 @@ export interface IEventNamePropertyMapping { [EventName.EXPERIMENT_RESET_AND_RUN]: undefined [EventName.EXPERIMENT_SELECT]: undefined [EventName.EXPERIMENT_SHARE_AS_BRANCH]: undefined + [EventName.EXPERIMENT_SHARE_AS_COMMIT]: undefined [EventName.EXPERIMENT_SHOW]: undefined [EventName.EXPERIMENT_SORT_ADD]: undefined [EventName.EXPERIMENT_SORT_ADD_STARRED]: undefined diff --git a/extension/src/test/suite/experiments/workspace.test.ts b/extension/src/test/suite/experiments/workspace.test.ts index 2ab009fc1c..9d85dfa0d9 100644 --- a/extension/src/test/suite/experiments/workspace.test.ts +++ b/extension/src/test/suite/experiments/workspace.test.ts @@ -606,6 +606,61 @@ suite('Workspace Experiments Test Suite', () => { }) }) + describe('dvc.shareExperimentAsCommit', () => { + it('should be able to share an experiment as a commit', async () => { + const { experiments } = buildExperiments(disposable) + await experiments.isReady() + + const testExperiment = 'exp-83425' + const mockCommit = 'this is the best experiment ever!' + const inputEvent = getInputBoxEvent(mockCommit) + + stub(window, 'showQuickPick').resolves({ + value: { id: testExperiment, name: testExperiment } + } as QuickPickItemWithValue<{ id: string; name: string }>) + + const mockExperimentApply = stub( + DvcExecutor.prototype, + 'experimentApply' + ).resolves( + `Changes for experiment '${testExperiment}' have been applied to your current workspace.` + ) + const mockPush = stub(DvcExecutor.prototype, 'push').resolves( + '191232423 files updated.' + ) + const mockStageAndCommit = stub( + GitExecutor.prototype, + 'stageAndCommit' + ).resolves('') + const mockGitPush = stub(GitExecutor.prototype, 'pushBranch') + const branchPushedToRemote = new Promise(resolve => + mockGitPush.callsFake(() => { + resolve(undefined) + return Promise.resolve(`${mockCommit} pushed to remote`) + }) + ) + + stubWorkspaceExperimentsGetters(dvcDemoPath, experiments) + + await commands.executeCommand( + RegisteredCliCommands.EXPERIMENT_SHARE_AS_COMMIT + ) + + await inputEvent + await branchPushedToRemote + expect(mockExperimentApply).to.be.calledWithExactly( + dvcDemoPath, + testExperiment + ) + expect(mockStageAndCommit).to.be.calledWithExactly( + dvcDemoPath, + mockCommit + ) + expect(mockPush).to.be.calledWithExactly(dvcDemoPath) + expect(mockGitPush).to.be.calledWithExactly(dvcDemoPath) + }) + }) + describe('dvc.removeExperiment', () => { it('should ask the user to pick an experiment and then remove that experiment from the workspace', async () => { const mockExperiment = 'exp-to-remove'