mirror of
https://github.com/Microsoft/vscode
synced 2024-10-30 01:37:20 +00:00
Merge commit 'refs/pull/54300/head' of github.com:Microsoft/vscode into pr/54300
This commit is contained in:
commit
9c06533ace
5 changed files with 93 additions and 14 deletions
|
@ -339,6 +339,16 @@
|
|||
"command": "git.stashPopLatest",
|
||||
"title": "%command.stashPopLatest%",
|
||||
"category": "Git"
|
||||
},
|
||||
{
|
||||
"command": "git.stashApply",
|
||||
"title": "%command.stashApply%",
|
||||
"category": "Git"
|
||||
},
|
||||
{
|
||||
"command": "git.stashApplyLatest",
|
||||
"title": "%command.stashApplyLatest%",
|
||||
"category": "Git"
|
||||
}
|
||||
],
|
||||
"menus": {
|
||||
|
@ -550,6 +560,14 @@
|
|||
{
|
||||
"command": "git.stashPopLatest",
|
||||
"when": "config.git.enabled && gitOpenRepositoryCount != 0"
|
||||
},
|
||||
{
|
||||
"command": "git.stashApply",
|
||||
"when": "config.git.enabled && gitOpenRepositoryCount != 0"
|
||||
},
|
||||
{
|
||||
"command": "git.stashApplyLatest",
|
||||
"when": "config.git.enabled && gitOpenRepositoryCount != 0"
|
||||
}
|
||||
],
|
||||
"scm/title": [
|
||||
|
@ -678,6 +696,16 @@
|
|||
"group": "5_stash",
|
||||
"when": "scmProvider == git"
|
||||
},
|
||||
{
|
||||
"command": "git.stashApply",
|
||||
"group": "5_stash",
|
||||
"when": "scmProvider == git"
|
||||
},
|
||||
{
|
||||
"command": "git.stashApplyLatest",
|
||||
"group": "5_stash",
|
||||
"when": "scmProvider == git"
|
||||
},
|
||||
{
|
||||
"command": "git.showOutput",
|
||||
"group": "7_repository",
|
||||
|
|
|
@ -52,6 +52,8 @@
|
|||
"command.stash": "Stash",
|
||||
"command.stashPop": "Pop Stash...",
|
||||
"command.stashPopLatest": "Pop Latest Stash",
|
||||
"command.stashApply": "Apply Stash...",
|
||||
"command.stashApplyLatest": "Apply Latest Stash",
|
||||
"config.enabled": "Whether git is enabled.",
|
||||
"config.path": "Path and filename of the git executable, e.g. `C:\\Program Files\\Git\\bin\\git.exe` (Windows).",
|
||||
"config.autoRepositoryDetection": "Configures when repositories should be automatically detected.",
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
'use strict';
|
||||
|
||||
import { Uri, commands, Disposable, window, workspace, QuickPickItem, OutputChannel, Range, WorkspaceEdit, Position, LineChange, SourceControlResourceState, TextDocumentShowOptions, ViewColumn, ProgressLocation, TextEditor, MessageOptions } from 'vscode';
|
||||
import { Git, CommitOptions } from './git';
|
||||
import { Git, CommitOptions, Stash } from './git';
|
||||
import { Repository, Resource, Status, ResourceGroupType } from './repository';
|
||||
import { Model } from './model';
|
||||
import { toGitUri, fromGitUri } from './uri';
|
||||
|
@ -1701,16 +1701,8 @@ export class CommandCenter {
|
|||
|
||||
@command('git.stashPop', { repository: true })
|
||||
async stashPop(repository: Repository): Promise<void> {
|
||||
const stashes = await repository.getStashes();
|
||||
|
||||
if (stashes.length === 0) {
|
||||
window.showInformationMessage(localize('no stashes', "There are no stashes to restore."));
|
||||
return;
|
||||
}
|
||||
|
||||
const picks = stashes.map(r => ({ label: `#${r.index}: ${r.description}`, description: '', details: '', id: r.index }));
|
||||
const placeHolder = localize('pick stash to pop', "Pick a stash to pop");
|
||||
const choice = await window.showQuickPick(picks, { placeHolder });
|
||||
const choice = await this.pickStash(repository, placeHolder);
|
||||
|
||||
if (!choice) {
|
||||
return;
|
||||
|
@ -1723,14 +1715,58 @@ export class CommandCenter {
|
|||
async stashPopLatest(repository: Repository): Promise<void> {
|
||||
const stashes = await repository.getStashes();
|
||||
|
||||
if (stashes.length === 0) {
|
||||
window.showInformationMessage(localize('no stashes', "There are no stashes to restore."));
|
||||
if (!this.anyStashesAvailableToRestore(stashes)) {
|
||||
return;
|
||||
}
|
||||
|
||||
await repository.popStash();
|
||||
}
|
||||
|
||||
@command('git.stashApply', { repository: true })
|
||||
async stashApply(repository: Repository): Promise<void> {
|
||||
const placeHolder = localize('pick stash to apply', "Pick a stash to apply");
|
||||
const choice = await this.pickStash(repository, placeHolder);
|
||||
|
||||
if (!choice) {
|
||||
return;
|
||||
}
|
||||
|
||||
await repository.applyStash(choice.id);
|
||||
}
|
||||
|
||||
@command('git.stashApplyLatest', { repository: true })
|
||||
async stashApplyLatest(repository: Repository): Promise<void> {
|
||||
const stashes = await repository.getStashes();
|
||||
|
||||
if (!this.anyStashesAvailableToRestore(stashes)) {
|
||||
return;
|
||||
}
|
||||
|
||||
await repository.applyStash();
|
||||
}
|
||||
|
||||
private anyStashesAvailableToRestore(stashes: Stash[]): boolean {
|
||||
const stashesAvailable = stashes.length > 0;
|
||||
|
||||
if (!stashesAvailable) {
|
||||
window.showInformationMessage(localize('no stashes', "There are no stashes to restore."));
|
||||
}
|
||||
|
||||
return stashesAvailable;
|
||||
}
|
||||
|
||||
private async pickStash(repository: Repository, placeHolder: string) {
|
||||
const stashes = await repository.getStashes();
|
||||
|
||||
if (!this.anyStashesAvailableToRestore(stashes)) {
|
||||
return;
|
||||
}
|
||||
|
||||
const picks = stashes.map(r => ({ label: `#${r.index}: ${r.description}`, description: '', details: '', id: r.index }));
|
||||
return await window.showQuickPick(picks, { placeHolder });
|
||||
}
|
||||
|
||||
|
||||
private createCommand(id: string, key: string, method: Function, options: CommandOptions): (...args: any[]) => any {
|
||||
const result = (...args: any[]) => {
|
||||
let result: Promise<any>;
|
||||
|
|
|
@ -1255,9 +1255,17 @@ export class Repository {
|
|||
}
|
||||
|
||||
async popStash(index?: number): Promise<void> {
|
||||
try {
|
||||
const args = ['stash', 'pop'];
|
||||
const args = ['stash', 'pop'];
|
||||
this.popOrApplyStash(args, index);
|
||||
}
|
||||
|
||||
async applyStash(index?: number): Promise<void> {
|
||||
const args = ['stash', 'apply'];
|
||||
this.popOrApplyStash(args, index);
|
||||
}
|
||||
|
||||
private async popOrApplyStash(args: string[], index?: number): Promise<void> {
|
||||
try {
|
||||
if (typeof index === 'number') {
|
||||
args.push(`stash@{${index}}`);
|
||||
}
|
||||
|
@ -1274,6 +1282,7 @@ export class Repository {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
getStatus(limit = 5000): Promise<{ status: IFileStatus[]; didHitLimit: boolean; }> {
|
||||
return new Promise<{ status: IFileStatus[]; didHitLimit: boolean; }>((c, e) => {
|
||||
const parser = new GitStatusParser();
|
||||
|
|
|
@ -1073,6 +1073,10 @@ export class Repository implements Disposable {
|
|||
return await this.run(Operation.Stash, () => this.repository.popStash(index));
|
||||
}
|
||||
|
||||
async applyStash(index?: number): Promise<void> {
|
||||
return await this.run(Operation.Stash, () => this.repository.applyStash(index));
|
||||
}
|
||||
|
||||
async getCommitTemplate(): Promise<string> {
|
||||
return await this.run(Operation.GetCommitTemplate, async () => this.repository.getCommitTemplate());
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue