提交 2b15bbbc 编写于 作者: J Joao Moreno

git: stage commands

上级 8bf0865e
......@@ -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();
}
}
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册