From 87d3f3e77b5c7108babf8e86f70eedac5820bba2 Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Wed, 24 Apr 2019 17:08:38 +0200 Subject: [PATCH] files - typed etag() --- src/vs/platform/files/common/files.ts | 10 +++++----- src/vs/workbench/services/files/common/fileService.ts | 4 ++-- .../services/files/test/node/diskFileService.test.ts | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/vs/platform/files/common/files.ts b/src/vs/platform/files/common/files.ts index d6c1ceb7537..8555f6f68f0 100644 --- a/src/vs/platform/files/common/files.ts +++ b/src/vs/platform/files/common/files.ts @@ -763,12 +763,12 @@ export const FALLBACK_MAX_MEMORY_SIZE_MB = 4096; */ export const ETAG_DISABLED = ''; -export function etag(mtime: number, size: number): string; -export function etag(mtime: number | undefined, size: number | undefined): string | undefined; -export function etag(mtime: number | undefined, size: number | undefined): string | undefined { - if (typeof size !== 'number' || typeof mtime !== 'number') { +export function etag(stat: { mtime: number, size: number }): string; +export function etag(stat: { mtime: number | undefined, size: number | undefined }): string | undefined; +export function etag(stat: { mtime: number | undefined, size: number | undefined }): string | undefined { + if (typeof stat.size !== 'number' || typeof stat.mtime !== 'number') { return undefined; } - return mtime.toString(29) + size.toString(31); + return stat.mtime.toString(29) + stat.size.toString(31); } diff --git a/src/vs/workbench/services/files/common/fileService.ts b/src/vs/workbench/services/files/common/fileService.ts index 851a5ced601..e69d7269f29 100644 --- a/src/vs/workbench/services/files/common/fileService.ts +++ b/src/vs/workbench/services/files/common/fileService.ts @@ -206,7 +206,7 @@ export class FileService extends Disposable implements IFileService { isReadonly: !!(provider.capabilities & FileSystemProviderCapabilities.Readonly), mtime: stat.mtime, size: stat.size, - etag: etag(stat.mtime, stat.size) + etag: etag({ mtime: stat.mtime, size: stat.size }) }; // check to recurse for directories @@ -339,7 +339,7 @@ export class FileService extends Disposable implements IFileService { // the file content for comparison which would be much slower to compute. if ( options && typeof options.mtime === 'number' && typeof options.etag === 'string' && - options.etag !== ETAG_DISABLED && options.mtime < stat.mtime && options.etag !== etag(options.mtime /* not using stat.mtime for a reason, see above */, stat.size) + options.etag !== ETAG_DISABLED && options.mtime < stat.mtime && options.etag !== etag({ mtime: options.mtime /* not using stat.mtime for a reason, see above */, size: stat.size }) ) { throw new FileOperationError(localize('fileModifiedError', "File Modified Since"), FileOperationResult.FILE_MODIFIED_SINCE, options); } diff --git a/src/vs/workbench/services/files/test/node/diskFileService.test.ts b/src/vs/workbench/services/files/test/node/diskFileService.test.ts index 4ad88617b3d..acd0e848991 100644 --- a/src/vs/workbench/services/files/test/node/diskFileService.test.ts +++ b/src/vs/workbench/services/files/test/node/diskFileService.test.ts @@ -1406,7 +1406,7 @@ suite('Disk File Service', () => { let error: FileOperationError | undefined = undefined; try { - await service.writeFile(resource, VSBuffer.fromString(newContentLeadingToError), { etag: etag(fakeMtime, fakeSize), mtime: fakeMtime }); + await service.writeFile(resource, VSBuffer.fromString(newContentLeadingToError), { etag: etag({ mtime: fakeMtime, size: fakeSize }), mtime: fakeMtime }); } catch (err) { error = err; } @@ -1434,7 +1434,7 @@ suite('Disk File Service', () => { let error: FileOperationError | undefined = undefined; try { - await service.writeFile(resource, VSBuffer.fromString(newContentLeadingToNoError), { etag: etag(fakeMtime, actualSize), mtime: fakeMtime }); + await service.writeFile(resource, VSBuffer.fromString(newContentLeadingToNoError), { etag: etag({ mtime: fakeMtime, size: actualSize }), mtime: fakeMtime }); } catch (err) { error = err; }