mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-28 04:23:32 +01:00
git: stage commands
This commit is contained in:
@@ -24,20 +24,20 @@ function openFile(model: Model, resource: Resource): void {
|
||||
log('open file', resource);
|
||||
}
|
||||
|
||||
function stage(model: Model, resource: Resource): void {
|
||||
log('stage', resource);
|
||||
async function stage(model: Model, resource: Resource): Promise<void> {
|
||||
return await model.stage(resource);
|
||||
}
|
||||
|
||||
function stageAll(model: Model, resourceGroup: ResourceGroup): void {
|
||||
log('stageAll', resourceGroup);
|
||||
async function stageAll(model: Model): Promise<void> {
|
||||
return await model.stage();
|
||||
}
|
||||
|
||||
function unstage(model: Model, resource: Resource): void {
|
||||
log('unstage', resource);
|
||||
async function unstage(model: Model, resource: Resource): Promise<void> {
|
||||
return await model.unstage(resource);
|
||||
}
|
||||
|
||||
function unstageAll(model: Model, resourceGroup: ResourceGroup): void {
|
||||
log('unstageAll', resourceGroup);
|
||||
async function unstageAll(model: Model): Promise<void> {
|
||||
return await model.unstage();
|
||||
}
|
||||
|
||||
function clean(model: Model, resource: Resource): void {
|
||||
@@ -56,6 +56,11 @@ function skipUndefined<T, R>(command: (t: T) => R): (t: T | undefined) => R | un
|
||||
return t => t === undefined ? undefined : command(t);
|
||||
}
|
||||
|
||||
// TODO: do more with these errors
|
||||
function catchErrors<T, R>(command: (t: T) => Promise<R>): (t: T) => void {
|
||||
return t => command(t).catch(err => console.error(err));
|
||||
}
|
||||
|
||||
function compose(command: Command, ...args: Function[]): Command {
|
||||
return args.reduce((r, fn) => fn(r), command) as Command;
|
||||
}
|
||||
@@ -67,10 +72,10 @@ export function registerCommands(model: Model): Disposable {
|
||||
commands.registerCommand('git.refresh', compose(refresh, bindModel)),
|
||||
commands.registerCommand('git.openChange', compose(openChange, bindModel, resolveURI, skipUndefined)),
|
||||
commands.registerCommand('git.openFile', compose(openFile, bindModel, resolveURI, skipUndefined)),
|
||||
commands.registerCommand('git.stage', compose(stage, bindModel, resolveURI, skipUndefined)),
|
||||
commands.registerCommand('git.stageAll', compose(stageAll, bindModel, resolveURI, skipUndefined)),
|
||||
commands.registerCommand('git.unstage', compose(unstage, bindModel, resolveURI, skipUndefined)),
|
||||
commands.registerCommand('git.unstageAll', compose(unstageAll, bindModel, resolveURI, skipUndefined)),
|
||||
commands.registerCommand('git.stage', compose(stage, bindModel, resolveURI, skipUndefined, catchErrors)),
|
||||
commands.registerCommand('git.stageAll', compose(stageAll, bindModel, catchErrors)),
|
||||
commands.registerCommand('git.unstage', compose(unstage, bindModel, resolveURI, skipUndefined, catchErrors)),
|
||||
commands.registerCommand('git.unstageAll', compose(unstageAll, bindModel, catchErrors)),
|
||||
commands.registerCommand('git.clean', compose(clean, bindModel, resolveURI, skipUndefined)),
|
||||
commands.registerCommand('git.cleanAll', compose(cleanAll, bindModel, resolveURI, skipUndefined)),
|
||||
];
|
||||
|
||||
@@ -174,7 +174,7 @@ export class Model {
|
||||
|
||||
update(now = false): void {
|
||||
if (now) {
|
||||
this._update();
|
||||
this.updateNow();
|
||||
} else {
|
||||
this.eventuallyUpdate();
|
||||
}
|
||||
@@ -182,11 +182,11 @@ export class Model {
|
||||
|
||||
@debounce(500)
|
||||
private eventuallyUpdate(): void {
|
||||
this._update();
|
||||
this.updateNow();
|
||||
}
|
||||
|
||||
@decorate(throttle)
|
||||
private async _update(): Promise<void> {
|
||||
private async updateNow(): Promise<void> {
|
||||
const status = await this.repository.getStatus();
|
||||
let HEAD: IRef | undefined;
|
||||
|
||||
@@ -266,4 +266,16 @@ export class Model {
|
||||
|
||||
return resources;
|
||||
}
|
||||
|
||||
async stage(...resources: Resource[]): Promise<void> {
|
||||
const paths = resources.map(r => r.uri.fsPath);
|
||||
await this.repository.add(paths);
|
||||
await this.updateNow();
|
||||
}
|
||||
|
||||
async unstage(...resources: Resource[]): Promise<void> {
|
||||
const paths = resources.map(r => r.uri.fsPath);
|
||||
await this.repository.revertFiles('HEAD', paths);
|
||||
await this.updateNow();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user