33 * Licensed under the MIT License. See License.txt in the project root for license information.
44 *--------------------------------------------------------------------------------------------*/
55
6- import { flatten , isNonEmptyArray } from 'vs/base/common/arrays' ;
6+ import { isNonEmptyArray } from 'vs/base/common/arrays' ;
77import { IDisposable , dispose , Disposable } from 'vs/base/common/lifecycle' ;
88import { TernarySearchTree } from 'vs/base/common/map' ;
99import { Schemas } from 'vs/base/common/network' ;
@@ -223,8 +223,8 @@ export class RemoteFileService extends FileService {
223223 } ) ;
224224 }
225225
226- resolveFile ( resource : URI , options ?: IResolveFileOptions ) : Promise < IFileStat > ;
227226 resolveFile ( resource : URI , options : IResolveMetadataFileOptions ) : Promise < IFileStatWithMetadata > ;
227+ resolveFile ( resource : URI , options ?: IResolveFileOptions ) : Promise < IFileStat > ;
228228 resolveFile ( resource : URI , options ?: IResolveFileOptions ) : Promise < IFileStat > {
229229 if ( resource . scheme === Schemas . file ) {
230230 return super . resolveFile ( resource , options ) ;
@@ -242,30 +242,6 @@ export class RemoteFileService extends FileService {
242242 }
243243 }
244244
245- resolveFiles ( toResolve : { resource : URI ; options ?: IResolveFileOptions ; } [ ] ) : Promise < IResolveFileResult [ ] > {
246-
247- // soft-groupBy, keep order, don't rearrange/merge groups
248- let groups : Array < typeof toResolve > = [ ] ;
249- let group : typeof toResolve | undefined ;
250- for ( const request of toResolve ) {
251- if ( ! group || group [ 0 ] . resource . scheme !== request . resource . scheme ) {
252- group = [ ] ;
253- groups . push ( group ) ;
254- }
255- group . push ( request ) ;
256- }
257-
258- const promises : Promise < IResolveFileResult [ ] > [ ] = [ ] ;
259- for ( const group of groups ) {
260- if ( group [ 0 ] . resource . scheme === Schemas . file ) {
261- promises . push ( super . resolveFiles ( group ) ) ;
262- } else {
263- promises . push ( this . _doResolveFiles ( group ) ) ;
264- }
265- }
266- return Promise . all ( promises ) . then ( data => flatten ( data ) ) ;
267- }
268-
269245 private _doResolveFiles ( toResolve : { resource : URI ; options ?: IResolveFileOptions ; } [ ] ) : Promise < IResolveFileResult [ ] > {
270246 return this . _withProvider ( toResolve [ 0 ] . resource ) . then ( provider => {
271247 let result : IResolveFileResult [ ] = [ ] ;
@@ -467,52 +443,7 @@ export class RemoteFileService extends FileService {
467443 }
468444 }
469445
470- moveFile ( source : URI , target : URI , overwrite ?: boolean ) : Promise < IFileStat > {
471- if ( source . scheme !== target . scheme ) {
472- return this . _doMoveAcrossScheme ( source , target ) ;
473- } else if ( source . scheme === Schemas . file ) {
474- return super . moveFile ( source , target , overwrite ) ;
475- } else {
476- return this . _doMoveWithInScheme ( source , target , overwrite ) ;
477- }
478- }
479-
480- private _doMoveWithInScheme ( source : URI , target : URI , overwrite : boolean = false ) : Promise < IFileStat > {
481-
482- const prepare = overwrite
483- ? Promise . resolve ( this . del ( target , { recursive : true } ) . catch ( _err => { /*ignore*/ } ) )
484- : Promise . resolve ( ) ;
485-
486- return prepare . then ( ( ) => this . _withProvider ( source ) ) . then ( RemoteFileService . _throwIfFileSystemIsReadonly ) . then ( provider => {
487- return RemoteFileService . _mkdirp ( provider , resources . dirname ( target ) ) . then ( ( ) => {
488- return provider . rename ( source , target , { overwrite } ) . then ( ( ) => {
489- return this . resolveFile ( target ) ;
490- } ) . then ( fileStat => {
491- this . _onAfterOperation . fire ( new FileOperationEvent ( source , FileOperation . MOVE , fileStat ) ) ;
492- return fileStat ;
493- } , err => {
494- const result = toFileOperationResult ( err ) ;
495- if ( result === FileOperationResult . FILE_MOVE_CONFLICT ) {
496- throw new FileOperationError ( localize ( 'fileMoveConflict' , "Unable to move/copy. File already exists at destination." ) , result ) ;
497- }
498- throw err ;
499- } ) ;
500- } ) ;
501- } ) ;
502- }
503-
504- private _doMoveAcrossScheme ( source : URI , target : URI , overwrite ?: boolean ) : Promise < IFileStat > {
505- return this . copyFile ( source , target , overwrite ) . then ( ( ) => {
506- return this . del ( source , { recursive : true } ) ;
507- } ) . then ( ( ) => {
508- return this . resolveFile ( target ) ;
509- } ) . then ( fileStat => {
510- this . _onAfterOperation . fire ( new FileOperationEvent ( source , FileOperation . MOVE , fileStat ) ) ;
511- return fileStat ;
512- } ) ;
513- }
514-
515- copyFile ( source : URI , target : URI , overwrite ?: boolean ) : Promise < IFileStat > {
446+ copyFile ( source : URI , target : URI , overwrite ?: boolean ) : Promise < IFileStatWithMetadata > {
516447 if ( source . scheme === target . scheme && source . scheme === Schemas . file ) {
517448 return super . copyFile ( source , target , overwrite ) ;
518449 }
@@ -522,7 +453,7 @@ export class RemoteFileService extends FileService {
522453 if ( source . scheme === target . scheme && ( provider . capabilities & FileSystemProviderCapabilities . FileFolderCopy ) ) {
523454 // good: provider supports copy withing scheme
524455 return provider . copy ! ( source , target , { overwrite : ! ! overwrite } ) . then ( ( ) => {
525- return this . resolveFile ( target ) ;
456+ return this . resolveFile ( target , { resolveMetadata : true } ) ;
526457 } ) . then ( fileStat => {
527458 this . _onAfterOperation . fire ( new FileOperationEvent ( source , FileOperation . COPY , fileStat ) ) ;
528459 return fileStat ;
0 commit comments