mirror of
https://github.com/microsoft/vscode.git
synced 2026-05-02 06:21:50 +01:00
git: multirepo stageAll, unstageAll, cleanAll
This commit is contained in:
@@ -5,7 +5,7 @@
|
||||
|
||||
'use strict';
|
||||
|
||||
import { Uri, commands, scm, Disposable, window, workspace, QuickPickItem, OutputChannel, Range, WorkspaceEdit, Position, LineChange, SourceControlResourceState, TextDocumentShowOptions, ViewColumn } from 'vscode';
|
||||
import { Uri, commands, scm, Disposable, window, workspace, QuickPickItem, OutputChannel, Range, WorkspaceEdit, Position, LineChange, SourceControlResourceGroup, SourceControlResourceState, TextDocumentShowOptions, ViewColumn } from 'vscode';
|
||||
import { Ref, RefType, Git, GitErrorCodes, Branch } from './git';
|
||||
import { Repository, Resource, Status, CommitOptions, ResourceGroupType } from './repository';
|
||||
import { Model } from './model';
|
||||
@@ -444,8 +444,22 @@ export class CommandCenter {
|
||||
await this.model.add(resources);
|
||||
}
|
||||
|
||||
@command('git.stageAll', { repository: true })
|
||||
async stageAll(repository: Repository): Promise<void> {
|
||||
@command('git.stageAll')
|
||||
async stageAll(group?: SourceControlResourceGroup): Promise<void> {
|
||||
let repository: Repository | undefined = undefined;
|
||||
|
||||
if (group) {
|
||||
repository = this.model.getRepositoryFromResourceGroup(group);
|
||||
}
|
||||
|
||||
if (!repository) {
|
||||
repository = await this.model.pickRepository();
|
||||
}
|
||||
|
||||
if (!repository) {
|
||||
return;
|
||||
}
|
||||
|
||||
await repository.add([]);
|
||||
}
|
||||
|
||||
@@ -550,9 +564,23 @@ export class CommandCenter {
|
||||
await this.model.revert(resources);
|
||||
}
|
||||
|
||||
@command('git.unstageAll', { repository: true })
|
||||
async unstageAll(repository: Repository): Promise<void> {
|
||||
return await repository.revert([]);
|
||||
@command('git.unstageAll')
|
||||
async unstageAll(group?: SourceControlResourceGroup): Promise<void> {
|
||||
let repository: Repository | undefined = undefined;
|
||||
|
||||
if (group) {
|
||||
repository = this.model.getRepositoryFromResourceGroup(group);
|
||||
}
|
||||
|
||||
if (!repository) {
|
||||
repository = await this.model.pickRepository();
|
||||
}
|
||||
|
||||
if (!repository) {
|
||||
return;
|
||||
}
|
||||
|
||||
await repository.revert([]);
|
||||
}
|
||||
|
||||
// TODO@Joao does this command really receive a model?
|
||||
@@ -642,8 +670,22 @@ export class CommandCenter {
|
||||
await this.model.clean(resources);
|
||||
}
|
||||
|
||||
@command('git.cleanAll', { repository: true })
|
||||
async cleanAll(repository: Repository): Promise<void> {
|
||||
@command('git.cleanAll')
|
||||
async cleanAll(group?: SourceControlResourceGroup): Promise<void> {
|
||||
let repository: Repository | undefined = undefined;
|
||||
|
||||
if (group) {
|
||||
repository = this.model.getRepositoryFromResourceGroup(group);
|
||||
}
|
||||
|
||||
if (!repository) {
|
||||
repository = await this.model.pickRepository();
|
||||
}
|
||||
|
||||
if (!repository) {
|
||||
return;
|
||||
}
|
||||
|
||||
const config = workspace.getConfiguration('git');
|
||||
let scope = config.get<string>('discardAllScope') || 'prompt';
|
||||
let resources = repository.workingTreeGroup.resourceStates;
|
||||
@@ -1220,6 +1262,10 @@ export class CommandCenter {
|
||||
if (!options.repository) {
|
||||
result = Promise.resolve(method.apply(this, args));
|
||||
} else {
|
||||
console.log(args[0]);
|
||||
// if (args[0] instanceof SourceControlResourceGroup) {
|
||||
// }
|
||||
|
||||
result = this.model.pickRepository().then(repository => {
|
||||
if (!repository) {
|
||||
return Promise.reject(localize('modelnotfound', "Git model not found"));
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
'use strict';
|
||||
|
||||
import { Uri, window, QuickPickItem, Disposable } from 'vscode';
|
||||
import { Uri, window, QuickPickItem, Disposable, SourceControlResourceGroup } from 'vscode';
|
||||
import { Repository, IRepository, State } from './repository';
|
||||
import { memoize } from './decorators';
|
||||
import { toDisposable, filterEvent, once } from './util';
|
||||
@@ -44,6 +44,15 @@ export class Model implements IRepository {
|
||||
}
|
||||
|
||||
async pickRepository(): Promise<Repository | undefined> {
|
||||
if (this.repositories.size === 0) {
|
||||
throw new Error(localize('no repositories', "There are no available repositories"));
|
||||
}
|
||||
|
||||
// TODO@joao enable this code
|
||||
// if (this.repositories.size === 1) {
|
||||
// return this.repositories.values().next().value;
|
||||
// }
|
||||
|
||||
const picks = Array.from(this.repositories.entries(), ([uri, model]) => new RepositoryPick(uri, model));
|
||||
const placeHolder = localize('pick repo', "Choose a repository");
|
||||
const pick = await window.showQuickPick(picks, { placeHolder });
|
||||
@@ -51,15 +60,25 @@ export class Model implements IRepository {
|
||||
return pick && pick.repository;
|
||||
}
|
||||
|
||||
getRepositoryFromResourceGroup(resourceGroup?: SourceControlResourceGroup): Repository | undefined {
|
||||
for (let [, repository] of this.repositories) {
|
||||
if (resourceGroup === repository.mergeGroup || resourceGroup === repository.indexGroup || resourceGroup === repository.workingTreeGroup) {
|
||||
return repository;
|
||||
}
|
||||
}
|
||||
|
||||
return undefined;
|
||||
}
|
||||
|
||||
getRepository(resource: Uri): Repository | undefined {
|
||||
const resourcePath = resource.fsPath;
|
||||
|
||||
for (let [repositoryRoot, model] of this.repositories) {
|
||||
const repositoryRootPath = repositoryRoot.fsPath;
|
||||
for (let [root, repository] of this.repositories) {
|
||||
const repositoryRootPath = root.fsPath;
|
||||
const relativePath = path.relative(repositoryRootPath, resourcePath);
|
||||
|
||||
if (!/^\./.test(relativePath)) {
|
||||
return model;
|
||||
return repository;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user