diff --git a/extensions/git/src/repository.ts b/extensions/git/src/repository.ts index 87f24395d6d8c..eeb90b6f6e8c0 100644 --- a/extensions/git/src/repository.ts +++ b/extensions/git/src/repository.ts @@ -79,7 +79,7 @@ export class Resource implements SourceControlResourceState { return this.resources[0]; } - get rightUri(): Uri { + get rightUri(): Uri | undefined { return this.resources[1]; } @@ -88,7 +88,7 @@ export class Resource implements SourceControlResourceState { } @memoize - private get resources(): [Uri | undefined, Uri] { + private get resources(): [Uri | undefined, Uri | undefined] { return this._commandResolver.getResources(this); } @@ -613,7 +613,7 @@ class ResourceCommandResolver { } } - getResources(resource: Resource): [Uri | undefined, Uri] { + getResources(resource: Resource): [Uri | undefined, Uri | undefined] { for (const submodule of this.repository.submodules) { if (path.join(this.repository.root, submodule.path) === resource.resourceUri.fsPath) { return [undefined, toGitUri(resource.resourceUri, resource.resourceGroupType === ResourceGroupType.Index ? 'index' : 'wt', { submoduleOf: this.repository.root })]; @@ -641,7 +641,7 @@ class ResourceCommandResolver { return undefined; } - private getRightResource(resource: Resource): Uri { + private getRightResource(resource: Resource): Uri | undefined { switch (resource.type) { case Status.INDEX_MODIFIED: case Status.INDEX_ADDED: @@ -677,7 +677,7 @@ class ResourceCommandResolver { return resource.resourceUri; } - throw new Error('Should never happen'); + return undefined; } private getTitle(resource: Resource): string { diff --git a/extensions/git/src/test/smoke.test.ts b/extensions/git/src/test/smoke.test.ts index 9e0933776a3b2..c8c761bc79be0 100644 --- a/extensions/git/src/test/smoke.test.ts +++ b/extensions/git/src/test/smoke.test.ts @@ -124,4 +124,31 @@ suite('git smoke test', function () { assert.equal(repository.state.workingTreeChanges.length, 0); assert.equal(repository.state.indexChanges.length, 0); }); + + test('rename/delete conflict', async function () { + cp.execSync('git branch test', { cwd }); + cp.execSync('git checkout test', { cwd }); + + fs.unlinkSync(file('app.js')); + cp.execSync('git add .', { cwd }); + + await repository.commit('commit on test'); + cp.execSync('git checkout master', { cwd }); + + fs.renameSync(file('app.js'), file('rename.js')); + cp.execSync('git add .', { cwd }); + await repository.commit('commit on master'); + + try { + cp.execSync('git merge test', { cwd }); + } catch (e) { } + + setTimeout(() => { + commands.executeCommand('workbench.scm.focus'); + }, 2e3); + + await new Promise(resolve => { + setTimeout(resolve, 5e3); + }); + }); });