Skip to content

Commit a8da06d

Browse files
committed
use options instead of flags in revert command
1 parent b779681 commit a8da06d

File tree

3 files changed

+13
-21
lines changed

3 files changed

+13
-21
lines changed

src/commands/git/revert.ts

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,13 @@ interface Context {
3333
}
3434

3535
type Flags = '--edit' | '--no-edit';
36+
type RevertOptions = { edit?: boolean };
3637

3738
interface State<Refs = GitRevisionReference | GitRevisionReference[]> {
3839
repo: string | Repository;
3940
references: Refs;
4041
flags: Flags[];
42+
options: RevertOptions;
4143
}
4244

4345
export interface RevertGitCommandArgs {
@@ -79,7 +81,7 @@ export class RevertGitCommand extends QuickCommand<State> {
7981
async execute(state: RevertStepState<State<GitRevisionReference[]>>) {
8082
for (const ref of state.references.reverse()) {
8183
try {
82-
await state.repo.git.revert(ref.ref, state.flags);
84+
await state.repo.git.revert(ref.ref, state.options);
8385
} catch (ex) {
8486
if (ex instanceof RevertError) {
8587
let shouldRetry = false;
@@ -196,7 +198,7 @@ export class RevertGitCommand extends QuickCommand<State> {
196198
const result = yield* this.confirmStep(state as RevertStepState, context);
197199
if (result === StepResultBreak) continue;
198200

199-
state.flags = result;
201+
state.options = Object.assign({}, ...result);
200202

201203
endSteps(state);
202204
await this.execute(state as RevertStepState<State<GitRevisionReference[]>>);
@@ -205,22 +207,24 @@ export class RevertGitCommand extends QuickCommand<State> {
205207
return state.counter < 0 ? StepResultBreak : undefined;
206208
}
207209

208-
private *confirmStep(state: RevertStepState, context: Context): StepResultGenerator<Flags[]> {
209-
const step: QuickPickStep<FlagsQuickPickItem<Flags>> = this.createConfirmStep(
210+
private *confirmStep(state: RevertStepState, context: Context): StepResultGenerator<RevertOptions[]> {
211+
const optionsArr: RevertOptions[] = [];
212+
const step: QuickPickStep<FlagsQuickPickItem<RevertOptions>> = this.createConfirmStep(
210213
appendReposToTitle(`Confirm ${context.title}`, state, context),
211214
[
212-
createFlagsQuickPickItem<Flags>(state.flags, ['--no-edit'], {
215+
createFlagsQuickPickItem<RevertOptions>(optionsArr, [{ edit: false }], {
213216
label: this.title,
214217
description: '--no-edit',
215218
detail: `Will revert ${getReferenceLabel(state.references)}`,
216219
}),
217-
createFlagsQuickPickItem<Flags>(state.flags, ['--edit'], {
220+
createFlagsQuickPickItem<RevertOptions>(optionsArr, [{ edit: true }], {
218221
label: `${this.title} & Edit`,
219222
description: '--edit',
220223
detail: `Will revert and edit ${getReferenceLabel(state.references)}`,
221224
}),
222225
],
223226
);
227+
state.options = Object.assign({}, ...optionsArr);
224228
const selection: StepSelection<typeof step> = yield step;
225229
return canPickStepContinue(step, state, selection) ? selection[0].item : StepResultBreak;
226230
}

src/env/node/git/git.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ export const GitErrors = {
108108
invalidTagName: /invalid tag name/i,
109109
remoteRejected: /rejected because the remote contains work/i,
110110
revertHasConflicts: /(error: could not revert .*) (hint: After resolving the conflicts)/gi,
111+
localChangesWouldBeOverwritten: /error: your local changes would be overwritten/i,
111112
};
112113

113114
const GitWarnings = {
@@ -181,6 +182,7 @@ const revertErrorAndReason = [
181182
[GitErrors.invalidObjectName, RevertErrorReason.InvalidObjectName],
182183
[GitErrors.revertHasConflicts, RevertErrorReason.Conflict],
183184
[GitErrors.changesWouldBeOverwritten, RevertErrorReason.LocalChangesWouldBeOverwritten],
185+
[GitErrors.localChangesWouldBeOverwritten, RevertErrorReason.LocalChangesWouldBeOverwritten],
184186
];
185187

186188
export class Git {

src/git/gitProviderService.ts

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1335,24 +1335,10 @@ export class GitProviderService implements Disposable {
13351335
}
13361336

13371337
@log()
1338-
async revert(repoPath: string | Uri, ref: string, flags: string[] | undefined = []): Promise<void> {
1338+
revert(repoPath: string | Uri, ref: string, options?: { edit?: boolean }): Promise<void> {
13391339
const { provider, path } = this.getProvider(repoPath);
13401340
if (provider.revert == null) throw new ProviderNotSupportedError(provider.descriptor.name);
13411341

1342-
const options: { edit?: boolean } = {};
1343-
for (const flag of flags) {
1344-
switch (flag) {
1345-
case '--edit':
1346-
options.edit = true;
1347-
break;
1348-
case '--no-edit':
1349-
options.edit = false;
1350-
break;
1351-
default:
1352-
break;
1353-
}
1354-
}
1355-
13561342
return provider.revert(path, ref, options);
13571343
}
13581344

0 commit comments

Comments
 (0)