@@ -12,7 +12,7 @@ import { Event, Emitter } from 'vs/base/common/event';
1212import * as ext from 'vs/workbench/common/contributions' ;
1313import { CodeEditorWidget } from 'vs/editor/browser/widget/codeEditorWidget' ;
1414import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation' ;
15- import { ITextModelService } from 'vs/editor/common/services/resolverService' ;
15+ import { IResolvedTextEditorModel , ITextModelService } from 'vs/editor/common/services/resolverService' ;
1616import { IEditorService } from 'vs/workbench/services/editor/common/editorService' ;
1717import { IEditorWorkerService } from 'vs/editor/common/services/editorWorkerService' ;
1818import { IConfigurationService } from 'vs/platform/configuration/common/configuration' ;
@@ -46,7 +46,7 @@ import { IMarginData } from 'vs/editor/browser/controller/mouseTarget';
4646import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService' ;
4747import { ISplice } from 'vs/base/common/sequence' ;
4848import { createStyleSheet } from 'vs/base/browser/dom' ;
49- import { ITextFileEditorModel , IResolvedTextFileEditorModel , ITextFileService } from 'vs/workbench/services/textfile/common/textfiles' ;
49+ import { ITextFileEditorModel , IResolvedTextFileEditorModel , ITextFileService , isTextFileEditorModel } from 'vs/workbench/services/textfile/common/textfiles' ;
5050import { EncodingMode } from 'vs/workbench/common/editor' ;
5151
5252class DiffActionRunner extends ActionRunner {
@@ -1017,7 +1017,8 @@ export async function getOriginalResource(scmService: ISCMService, uri: URI): Pr
10171017
10181018export class DirtyDiffModel extends Disposable {
10191019
1020- private _originalModel : IResolvedTextFileEditorModel | null = null ;
1020+ private _originalResource : URI | null = null ;
1021+ private _originalModel : IResolvedTextEditorModel | null = null ;
10211022 private _model : ITextFileEditorModel ;
10221023 get original ( ) : ITextModel | null { return this . _originalModel ?. textEditorModel || null ; }
10231024 get modified ( ) : ITextModel | null { return this . _model . textEditorModel || null ; }
@@ -1049,6 +1050,7 @@ export class DirtyDiffModel extends Disposable {
10491050
10501051 this . _register ( this . _model . onDidChangeEncoding ( ( ) => {
10511052 this . diffDelayer . cancel ( ) ;
1053+ this . _originalResource = null ;
10521054 this . _originalModel = null ;
10531055 this . _originalURIPromise = undefined ;
10541056 this . setChanges ( [ ] ) ;
@@ -1128,11 +1130,12 @@ export class DirtyDiffModel extends Disposable {
11281130 }
11291131
11301132 if ( ! originalUri ) {
1133+ this . _originalResource = null ;
11311134 this . _originalModel = null ;
11321135 return null ;
11331136 }
11341137
1135- if ( this . _originalModel && this . _originalModel . resource . toString ( ) === originalUri . toString ( ) ) {
1138+ if ( this . _originalResource ? .toString ( ) === originalUri . toString ( ) ) {
11361139 return originalUri ;
11371140 }
11381141
@@ -1142,12 +1145,15 @@ export class DirtyDiffModel extends Disposable {
11421145 return null ;
11431146 }
11441147
1145- this . _originalModel = ref . object as IResolvedTextFileEditorModel ;
1148+ this . _originalResource = originalUri ;
1149+ this . _originalModel = ref . object ;
11461150
1147- const encoding = this . _model . getEncoding ( ) ;
1151+ if ( isTextFileEditorModel ( this . _originalModel ) ) {
1152+ const encoding = this . _model . getEncoding ( ) ;
11481153
1149- if ( encoding ) {
1150- this . _originalModel . setEncoding ( encoding , EncodingMode . Decode ) ;
1154+ if ( encoding ) {
1155+ this . _originalModel . setEncoding ( encoding , EncodingMode . Decode ) ;
1156+ }
11511157 }
11521158
11531159 this . originalModelDisposables . clear ( ) ;
@@ -1214,6 +1220,7 @@ export class DirtyDiffModel extends Disposable {
12141220 super . dispose ( ) ;
12151221
12161222 this . _disposed = true ;
1223+ this . _originalResource = null ;
12171224 this . _originalModel = null ;
12181225 this . diffDelayer . cancel ( ) ;
12191226 this . repositoryDisposables . forEach ( d => dispose ( d ) ) ;
0 commit comments