files - typed etag()

This commit is contained in:
Benjamin Pasero 2019-04-24 17:08:38 +02:00
parent 5fe900dd7b
commit 87d3f3e77b
3 changed files with 9 additions and 9 deletions

View file

@ -763,12 +763,12 @@ export const FALLBACK_MAX_MEMORY_SIZE_MB = 4096;
*/ */
export const ETAG_DISABLED = ''; export const ETAG_DISABLED = '';
export function etag(mtime: number, size: number): string; export function etag(stat: { mtime: number, size: number }): string;
export function etag(mtime: number | undefined, size: number | undefined): string | undefined; export function etag(stat: { mtime: number | undefined, size: number | undefined }): string | undefined;
export function etag(mtime: number | undefined, size: number | undefined): string | undefined { export function etag(stat: { mtime: number | undefined, size: number | undefined }): string | undefined {
if (typeof size !== 'number' || typeof mtime !== 'number') { if (typeof stat.size !== 'number' || typeof stat.mtime !== 'number') {
return undefined; return undefined;
} }
return mtime.toString(29) + size.toString(31); return stat.mtime.toString(29) + stat.size.toString(31);
} }

View file

@ -206,7 +206,7 @@ export class FileService extends Disposable implements IFileService {
isReadonly: !!(provider.capabilities & FileSystemProviderCapabilities.Readonly), isReadonly: !!(provider.capabilities & FileSystemProviderCapabilities.Readonly),
mtime: stat.mtime, mtime: stat.mtime,
size: stat.size, size: stat.size,
etag: etag(stat.mtime, stat.size) etag: etag({ mtime: stat.mtime, size: stat.size })
}; };
// check to recurse for directories // 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. // the file content for comparison which would be much slower to compute.
if ( if (
options && typeof options.mtime === 'number' && typeof options.etag === 'string' && 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); throw new FileOperationError(localize('fileModifiedError', "File Modified Since"), FileOperationResult.FILE_MODIFIED_SINCE, options);
} }

View file

@ -1406,7 +1406,7 @@ suite('Disk File Service', () => {
let error: FileOperationError | undefined = undefined; let error: FileOperationError | undefined = undefined;
try { 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) { } catch (err) {
error = err; error = err;
} }
@ -1434,7 +1434,7 @@ suite('Disk File Service', () => {
let error: FileOperationError | undefined = undefined; let error: FileOperationError | undefined = undefined;
try { 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) { } catch (err) {
error = err; error = err;
} }