Skip to content

Commit

Permalink
Reorgs git commands
Browse files Browse the repository at this point in the history
Adds explicit directive for going back
Adds command error logging
Removes unneeded abort error
  • Loading branch information
eamodio committed Aug 14, 2019
1 parent f274bc1 commit 5c3f6b5
Show file tree
Hide file tree
Showing 12 changed files with 151 additions and 128 deletions.
16 changes: 5 additions & 11 deletions src/commands/quick/checkout.ts → src/commands/git/checkout.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,10 @@ import { ProgressLocation, QuickInputButtons, window } from 'vscode';
import { Container } from '../../container';
import { GitBranch, GitReference, GitTag, Repository } from '../../git/gitService';
import { GlyphChars } from '../../constants';
import {
CommandAbortError,
getBranchesAndOrTags,
QuickCommandBase,
QuickInputStep,
QuickPickStep,
StepState
} from './quickCommand';
import { getBranchesAndOrTags, QuickCommandBase, QuickInputStep, QuickPickStep, StepState } from '../quickCommand';
import { ReferencesQuickPickItem, RefQuickPickItem, RepositoryQuickPickItem } from '../../quickpicks';
import { Strings } from '../../system';
import { Logger } from '../../logger';

interface State {
repos: Repository[];
Expand All @@ -28,7 +22,7 @@ export interface CommandArgs {
skipConfirmation?: boolean;
}

export class CheckoutQuickCommand extends QuickCommandBase<State> {
export class CheckoutGitCommand extends QuickCommandBase<State> {
constructor(args?: CommandArgs) {
super('checkout', 'Checkout');

Expand Down Expand Up @@ -211,7 +205,7 @@ export class CheckoutQuickCommand extends QuickCommandBase<State> {
? state.repos[0].formattedName
: `${state.repos.length} repositories`
}`,
placeholder: 'Choose name for the local branch',
placeholder: 'Please provide a name for the local branch',
value: state.branchOrTagOrRef.getName(),
validate: async (value: string | undefined): Promise<[boolean, string | undefined]> => {
if (value == null) return [false, undefined];
Expand Down Expand Up @@ -268,7 +262,7 @@ export class CheckoutQuickCommand extends QuickCommandBase<State> {
break;
}
catch (ex) {
if (ex instanceof CommandAbortError) break;
Logger.error(ex, this.title);

throw ex;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,16 @@ import { Container } from '../../container';
import { GitBranch, GitLogCommit, GitReference, Repository } from '../../git/gitService';
import { GlyphChars } from '../../constants';
import { Iterables, Strings } from '../../system';
import { getBranchesAndOrTags, QuickCommandBase, QuickInputStep, QuickPickStep, StepState } from '../quickCommand';
import {
CommandAbortError,
getBranchesAndOrTags,
QuickCommandBase,
QuickInputStep,
QuickPickStep,
StepState
} from './quickCommand';
import { BranchQuickPickItem, CommitQuickPickItem, RepositoryQuickPickItem } from '../../quickpicks';
BackOrCancelQuickPickItem,
BranchQuickPickItem,
CommitQuickPickItem,
RefQuickPickItem,
RepositoryQuickPickItem
} from '../../quickpicks';
import { runGitCommandInTerminal } from '../../terminal';
import { RefQuickPickItem } from '../../quickpicks/gitQuickPicks';
import { Logger } from '../../logger';

interface State {
repo: Repository;
Expand All @@ -23,7 +22,7 @@ interface State {
commits?: GitLogCommit[];
}

export class CherryPickQuickCommand extends QuickCommandBase<State> {
export class CherryPickGitCommand extends QuickCommandBase<State> {
constructor() {
super('cherry-pick', 'Cherry Pick', { description: 'via Terminal' });
}
Expand Down Expand Up @@ -86,7 +85,7 @@ export class CherryPickQuickCommand extends QuickCommandBase<State> {

const step = this.createPickStep<BranchQuickPickItem | RefQuickPickItem>({
title: `${this.title} into ${state.destination.name}${Strings.pad(GlyphChars.Dot, 2, 2)}${
state.repo.name
state.repo.formattedName
}`,
placeholder: `Choose a branch or tag to cherry-pick from${GlyphChars.Space.repeat(
3
Expand Down Expand Up @@ -129,7 +128,7 @@ export class CherryPickQuickCommand extends QuickCommandBase<State> {

const step = this.createPickStep<CommitQuickPickItem>({
title: `${this.title} onto ${state.destination.name}${Strings.pad(GlyphChars.Dot, 2, 2)}${
state.repo.name
state.repo.formattedName
}`,
multiselect: log !== undefined,
placeholder:
Expand All @@ -138,7 +137,7 @@ export class CherryPickQuickCommand extends QuickCommandBase<State> {
: `Choose commits to cherry-pick onto ${state.destination.name}`,
items:
log === undefined
? []
? [BackOrCancelQuickPickItem.create(false, true), BackOrCancelQuickPickItem.create()]
: [
...Iterables.map(log.commits.values(), commit =>
CommitQuickPickItem.create(
Expand All @@ -159,7 +158,7 @@ export class CherryPickQuickCommand extends QuickCommandBase<State> {
}

const step = this.createConfirmStep(
`Confirm ${this.title}${Strings.pad(GlyphChars.Dot, 2, 2)}${state.repo.name}`,
`Confirm ${this.title}${Strings.pad(GlyphChars.Dot, 2, 2)}${state.repo.formattedName}`,
[
state.commits !== undefined
? {
Expand Down Expand Up @@ -192,7 +191,7 @@ export class CherryPickQuickCommand extends QuickCommandBase<State> {
break;
}
catch (ex) {
if (ex instanceof CommandAbortError) break;
Logger.error(ex, this.title);

throw ex;
}
Expand Down
7 changes: 4 additions & 3 deletions src/commands/quick/fetch.ts → src/commands/git/fetch.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@
import { QuickPickItem } from 'vscode';
import { Container } from '../../container';
import { Repository } from '../../git/gitService';
import { CommandAbortError, QuickCommandBase, QuickInputStep, QuickPickStep, StepState } from './quickCommand';
import { QuickCommandBase, QuickInputStep, QuickPickStep, StepState } from '../quickCommand';
import { RepositoryQuickPickItem } from '../../quickpicks';
import { Strings } from '../../system';
import { GlyphChars } from '../../constants';
import { Logger } from '../../logger';

interface State {
repos: Repository[];
Expand All @@ -19,7 +20,7 @@ export interface CommandArgs {
skipConfirmation?: boolean;
}

export class FetchQuickCommand extends QuickCommandBase<State> {
export class FetchGitCommand extends QuickCommandBase<State> {
constructor(args?: CommandArgs) {
super('fetch', 'Fetch');

Expand Down Expand Up @@ -154,7 +155,7 @@ export class FetchQuickCommand extends QuickCommandBase<State> {
break;
}
catch (ex) {
if (ex instanceof CommandAbortError) break;
Logger.error(ex, this.title);

throw ex;
}
Expand Down
28 changes: 11 additions & 17 deletions src/commands/quick/merge.ts → src/commands/git/merge.ts
Original file line number Diff line number Diff line change
@@ -1,28 +1,22 @@
'use strict';
import { QuickPickItem } from 'vscode';
import { Container } from '../../container';
import { GitBranch, Repository } from '../../git/gitService';
import { GitBranch, GitTag, Repository } from '../../git/gitService';
import { GlyphChars } from '../../constants';
import {
CommandAbortError,
getBranchesAndOrTags,
QuickCommandBase,
QuickInputStep,
QuickPickStep,
StepState
} from './quickCommand';
import { BranchQuickPickItem, RepositoryQuickPickItem } from '../../quickpicks';
import { getBranchesAndOrTags, QuickCommandBase, QuickInputStep, QuickPickStep, StepState } from '../quickCommand';
import { BranchQuickPickItem, RepositoryQuickPickItem, TagQuickPickItem } from '../../quickpicks';
import { Strings } from '../../system';
import { runGitCommandInTerminal } from '../../terminal';
import { Logger } from '../../logger';

interface State {
repo: Repository;
destination: GitBranch;
source: GitBranch;
source: GitBranch | GitTag;
flags: string[];
}

export class MergeQuickCommand extends QuickCommandBase<State> {
export class MergeGitCommand extends QuickCommandBase<State> {
constructor() {
super('merge', 'Merge', { description: 'via Terminal' });
}
Expand Down Expand Up @@ -77,9 +71,9 @@ export class MergeQuickCommand extends QuickCommandBase<State> {
if (state.source === undefined || state.counter < 2) {
const destId = state.destination.id;

const step = this.createPickStep<BranchQuickPickItem>({
const step = this.createPickStep<BranchQuickPickItem | TagQuickPickItem>({
title: `${this.title} into ${state.destination.name}${Strings.pad(GlyphChars.Dot, 2, 2)}${
state.repo.name
state.repo.formattedName
}`,
placeholder: `Choose a branch or tag to merge into ${state.destination.name}`,
items: await getBranchesAndOrTags(state.repo, true, {
Expand All @@ -105,7 +99,7 @@ export class MergeQuickCommand extends QuickCommandBase<State> {
])) || 0;
if (count === 0) {
const step = this.createConfirmStep(
`Confirm ${this.title}${Strings.pad(GlyphChars.Dot, 2, 2)}${state.repo.name}`,
`Confirm ${this.title}${Strings.pad(GlyphChars.Dot, 2, 2)}${state.repo.formattedName}`,
[
{
label: `Cancel ${this.title}`,
Expand All @@ -121,7 +115,7 @@ export class MergeQuickCommand extends QuickCommandBase<State> {
}

const step = this.createConfirmStep<QuickPickItem & { item: string[] }>(
`Confirm ${this.title}${Strings.pad(GlyphChars.Dot, 2, 2)}${state.repo.name}`,
`Confirm ${this.title}${Strings.pad(GlyphChars.Dot, 2, 2)}${state.repo.formattedName}`,
[
{
label: this.title,
Expand Down Expand Up @@ -162,7 +156,7 @@ export class MergeQuickCommand extends QuickCommandBase<State> {
break;
}
catch (ex) {
if (ex instanceof CommandAbortError) break;
Logger.error(ex, this.title);

throw ex;
}
Expand Down
7 changes: 4 additions & 3 deletions src/commands/quick/pull.ts → src/commands/git/pull.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@
import { QuickPickItem } from 'vscode';
import { Container } from '../../container';
import { Repository } from '../../git/gitService';
import { CommandAbortError, QuickCommandBase, QuickInputStep, QuickPickStep, StepState } from './quickCommand';
import { QuickCommandBase, QuickInputStep, QuickPickStep, StepState } from '../quickCommand';
import { RepositoryQuickPickItem } from '../../quickpicks';
import { Strings } from '../../system';
import { GlyphChars } from '../../constants';
import { Logger } from '../../logger';

interface State {
repos: Repository[];
Expand All @@ -19,7 +20,7 @@ export interface CommandArgs {
skipConfirmation?: boolean;
}

export class PullQuickCommand extends QuickCommandBase<State> {
export class PullGitCommand extends QuickCommandBase<State> {
constructor(args?: CommandArgs) {
super('pull', 'Pull');

Expand Down Expand Up @@ -134,7 +135,7 @@ export class PullQuickCommand extends QuickCommandBase<State> {
break;
}
catch (ex) {
if (ex instanceof CommandAbortError) break;
Logger.error(ex, this.title);

throw ex;
}
Expand Down
7 changes: 4 additions & 3 deletions src/commands/quick/push.ts → src/commands/git/push.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
'use strict';
import { Container } from '../../container';
import { Repository } from '../../git/gitService';
import { CommandAbortError, QuickCommandBase, QuickInputStep, QuickPickStep, StepState } from './quickCommand';
import { QuickCommandBase, QuickInputStep, QuickPickStep, StepState } from '../quickCommand';
import { RepositoryQuickPickItem } from '../../quickpicks';
import { Strings } from '../../system';
import { GlyphChars } from '../../constants';
import { Logger } from '../../logger';

interface State {
repos: Repository[];
Expand All @@ -18,7 +19,7 @@ export interface CommandArgs {
skipConfirmation?: boolean;
}

export class PushQuickCommand extends QuickCommandBase<State> {
export class PushGitCommand extends QuickCommandBase<State> {
constructor(args?: CommandArgs) {
super('push', 'Push');

Expand Down Expand Up @@ -140,7 +141,7 @@ export class PushQuickCommand extends QuickCommandBase<State> {
break;
}
catch (ex) {
if (ex instanceof CommandAbortError) break;
Logger.error(ex, this.title);

throw ex;
}
Expand Down
28 changes: 11 additions & 17 deletions src/commands/quick/rebase.ts → src/commands/git/rebase.ts
Original file line number Diff line number Diff line change
@@ -1,28 +1,22 @@
'use strict';
import { QuickPickItem } from 'vscode';
import { Container } from '../../container';
import { GitBranch, Repository } from '../../git/gitService';
import { GitBranch, GitTag, Repository } from '../../git/gitService';
import { GlyphChars } from '../../constants';
import {
CommandAbortError,
getBranchesAndOrTags,
QuickCommandBase,
QuickInputStep,
QuickPickStep,
StepState
} from './quickCommand';
import { BranchQuickPickItem, RepositoryQuickPickItem } from '../../quickpicks';
import { getBranchesAndOrTags, QuickCommandBase, QuickInputStep, QuickPickStep, StepState } from '../quickCommand';
import { BranchQuickPickItem, RepositoryQuickPickItem, TagQuickPickItem } from '../../quickpicks';
import { Strings } from '../../system';
import { runGitCommandInTerminal } from '../../terminal';
import { Logger } from '../../logger';

interface State {
repo: Repository;
destination: GitBranch;
source: GitBranch;
source: GitBranch | GitTag;
flags: string[];
}

export class RebaseQuickCommand extends QuickCommandBase<State> {
export class RebaseGitCommand extends QuickCommandBase<State> {
constructor() {
super('rebase', 'Rebase', { description: 'via Terminal' });
}
Expand Down Expand Up @@ -77,9 +71,9 @@ export class RebaseQuickCommand extends QuickCommandBase<State> {
if (state.source === undefined || state.counter < 2) {
const destId = state.destination.id;

const step = this.createPickStep<BranchQuickPickItem>({
const step = this.createPickStep<BranchQuickPickItem | TagQuickPickItem>({
title: `${this.title} ${state.destination.name}${Strings.pad(GlyphChars.Dot, 2, 2)}${
state.repo.name
state.repo.formattedName
}`,
placeholder: `Choose a branch or tag to rebase ${state.destination.name} with`,
items: await getBranchesAndOrTags(state.repo, true, {
Expand All @@ -105,7 +99,7 @@ export class RebaseQuickCommand extends QuickCommandBase<State> {
])) || 0;
if (count === 0) {
const step = this.createConfirmStep(
`Confirm ${this.title}${Strings.pad(GlyphChars.Dot, 2, 2)}${state.repo.name}`,
`Confirm ${this.title}${Strings.pad(GlyphChars.Dot, 2, 2)}${state.repo.formattedName}`,
[
{
label: `Cancel ${this.title}`,
Expand All @@ -121,7 +115,7 @@ export class RebaseQuickCommand extends QuickCommandBase<State> {
}

const step = this.createConfirmStep<QuickPickItem & { item: string[] }>(
`Confirm ${this.title}${Strings.pad(GlyphChars.Dot, 2, 2)}${state.repo.name}`,
`Confirm ${this.title}${Strings.pad(GlyphChars.Dot, 2, 2)}${state.repo.formattedName}`,
[
{
label: this.title,
Expand Down Expand Up @@ -154,7 +148,7 @@ export class RebaseQuickCommand extends QuickCommandBase<State> {
break;
}
catch (ex) {
if (ex instanceof CommandAbortError) break;
Logger.error(ex, this.title);

throw ex;
}
Expand Down

0 comments on commit 5c3f6b5

Please sign in to comment.