diff --git a/extensions/git/src/model.ts b/extensions/git/src/model.ts index db8e5696a6b..12e374430c9 100644 --- a/extensions/git/src/model.ts +++ b/extensions/git/src/model.ts @@ -66,7 +66,12 @@ export class Model implements IRepository { return undefined; } - private async runByRepository(resources: Uri[], fn: (repository: Repository, resources: Uri[]) => Promise): Promise { + private runByRepository(resources: Uri, fn: (repository: Repository, resources: Uri) => Promise): Promise; + private runByRepository(resources: Uri[], fn: (repository: Repository, resources: Uri[]) => Promise): Promise; + private async runByRepository(arg: Uri | Uri[], fn: (repository: Repository, resources: any) => Promise): Promise { + const resources = arg instanceof Uri ? [arg] : arg; + const isSingleResource = arg instanceof Uri; + const groups = resources.reduce((result, resource) => { const repository = this.getRepository(resource); @@ -88,7 +93,7 @@ export class Model implements IRepository { }, [] as { repository: Repository, resources: Uri[] }[]); const promises = groups - .map(({ repository, resources }) => fn(repository as Repository, resources)); + .map(({ repository, resources }) => fn(repository as Repository, isSingleResource ? resources[0] : resources)); return Promise.all(promises); } @@ -98,4 +103,8 @@ export class Model implements IRepository { async add(resources: Uri[]): Promise { await this.runByRepository(resources, async (repository, resources) => repository.add(resources)); } + + async stage(resource: Uri, contents: string): Promise { + await this.runByRepository(resource, async (repository, uri) => repository.stage(uri, contents)); + } } \ No newline at end of file diff --git a/extensions/git/src/repository.ts b/extensions/git/src/repository.ts index 9498174e9fd..83daf1b60db 100644 --- a/extensions/git/src/repository.ts +++ b/extensions/git/src/repository.ts @@ -297,6 +297,7 @@ export interface CommitOptions { export interface IRepository { add(resources: Uri[]): Promise; + stage(resource: Uri, contents: string): Promise; } export class Repository implements IRepository, Disposable { @@ -406,8 +407,8 @@ export class Repository implements IRepository, Disposable { await this.run(Operation.Add, () => this.repository.add(resources.map(r => r.fsPath))); } - async stage(uri: Uri, contents: string): Promise { - const relativePath = path.relative(this.repository.root, uri.fsPath).replace(/\\/g, '/'); + async stage(resource: Uri, contents: string): Promise { + const relativePath = path.relative(this.repository.root, resource.fsPath).replace(/\\/g, '/'); await this.run(Operation.Stage, () => this.repository.stage(relativePath, contents)); }