提交 61066b2c 编写于 作者: B Benjamin Pasero

Search results include large files which can't be viewed (fixes #3758)

上级 e23aa19a
......@@ -417,6 +417,8 @@ export enum FileOperationResult {
FILE_TOO_LARGE
}
export const MAX_FILE_SIZE = 50 * 1024 * 1024;
export const AutoSaveConfiguration = {
OFF: 'off',
AFTER_DELAY: 'afterDelay',
......
......@@ -70,7 +70,6 @@ export class FileService implements files.IFileService {
public serviceId = files.IFileService;
private static FS_EVENT_DELAY = 50; // aggregate and only emit events when changes have stopped for this duration (in ms)
private static MAX_FILE_SIZE = 50 * 1024 * 1024; // do not try to load larger files than that
private static MAX_DEGREE_OF_PARALLEL_FS_OPS = 10; // degree of parallel fs calls that we accept at the same time
private basePath: string;
......@@ -430,7 +429,7 @@ export class FileService implements files.IFileService {
}
// Return early if file is too large to load
if (types.isNumber(model.size) && model.size > FileService.MAX_FILE_SIZE) {
if (types.isNumber(model.size) && model.size > files.MAX_FILE_SIZE) {
return TPromise.wrapError(<files.IFileOperationResult>{
fileOperationResult: files.FileOperationResult.FILE_TOO_LARGE
});
......
......@@ -11,6 +11,7 @@ import paths = require('path');
import scorer = require('vs/base/common/scorer');
import arrays = require('vs/base/common/arrays');
import strings = require('vs/base/common/strings');
import types = require('vs/base/common/types');
import glob = require('vs/base/common/glob');
import {IProgress} from 'vs/platform/search/common/search';
......@@ -25,6 +26,7 @@ export class FileWalker {
private excludePattern: glob.IExpression;
private includePattern: glob.IExpression;
private maxResults: number;
private maxFilesize: number;
private isLimitHit: boolean;
private resultCount: number;
private isCanceled: boolean;
......@@ -37,6 +39,7 @@ export class FileWalker {
this.excludePattern = config.excludePattern;
this.includePattern = config.includePattern;
this.maxResults = config.maxResults || null;
this.maxFilesize = config.maxFilesize || null;
this.walkedPaths = Object.create(null);
this.resultCount = 0;
this.isLimitHit = false;
......@@ -201,6 +204,10 @@ export class FileWalker {
return clb(null); // ignore file if its path matches with the file pattern because checkFilePatternRelativeMatch() takes care of those
}
if (this.maxFilesize && types.isNumber(stat.size) && stat.size > this.maxFilesize) {
return clb(null); // ignore file if max file size is hit
}
this.matchFile(onResult, currentAbsolutePath, currentRelativePathWithSlashes);
}
......@@ -248,7 +255,7 @@ export class FileWalker {
return true;
}
private statLinkIfNeeded(path: string, lstat: fs.Stats, clb: (error:Error, stat: fs.Stats) => void): void {
private statLinkIfNeeded(path: string, lstat: fs.Stats, clb: (error: Error, stat: fs.Stats) => void): void {
if (lstat.isSymbolicLink()) {
return fs.stat(path, clb); // stat the target the link points to
}
......
......@@ -12,6 +12,7 @@ gracefulFs.gracefulify(fs);
import {PPromise} from 'vs/base/common/winjs.base';
import glob = require('vs/base/common/glob');
import {MAX_FILE_SIZE} from 'vs/platform/files/common/files';
import {IProgress, ILineMatch, IPatternInfo} from 'vs/platform/search/common/search';
import {FileWalker, Engine as FileSearchEngine} from 'vs/workbench/services/search/node/fileSearch';
import {Engine as TextSearchEngine} from 'vs/workbench/services/search/node/textSearch';
......@@ -24,6 +25,7 @@ export interface IRawSearch {
includePattern?: glob.IExpression;
contentPattern?: IPatternInfo;
maxResults?: number;
maxFilesize?: number;
fileEncoding?: string;
}
......@@ -64,7 +66,8 @@ export class SearchService implements IRawSearchService {
extraFiles: config.extraFiles,
includePattern: config.includePattern,
excludePattern: config.excludePattern,
filePattern: config.filePattern
filePattern: config.filePattern,
maxFilesize: MAX_FILE_SIZE
}));
return this.doSearch(engine);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册