Skip to content

Commit

Permalink
fix(mason): use file descriptor pooling (#511)
Browse files Browse the repository at this point in the history
  • Loading branch information
felangel committed Sep 10, 2022
1 parent 0c33ac0 commit 11f7798
Show file tree
Hide file tree
Showing 5 changed files with 37 additions and 0 deletions.
2 changes: 2 additions & 0 deletions .github/workflows/mason.yaml
Expand Up @@ -6,13 +6,15 @@ on:
- master
paths:
- .github/workflows/mason.yaml
- packages/mason_logger/**
- packages/mason/**

pull_request:
branches:
- master
paths:
- .github/workflows/mason.yaml
- packages/mason_logger/**
- packages/mason/**

jobs:
Expand Down
6 changes: 6 additions & 0 deletions .github/workflows/mason_cli.yaml
Expand Up @@ -6,13 +6,19 @@ on:
- master
paths:
- .github/workflows/mason_cli.yaml
- packages/mason_logger/**
- packages/mason_api/**
- packages/mason/**
- packages/mason_cli/**

pull_request:
branches:
- master
paths:
- .github/workflows/mason_cli.yaml
- packages/mason_logger/**
- packages/mason_api/**
- packages/mason/**
- packages/mason_cli/**

jobs:
Expand Down
5 changes: 5 additions & 0 deletions packages/mason/lib/src/generator.dart
Expand Up @@ -11,9 +11,11 @@ import 'package:mason/mason.dart';
import 'package:mason/src/compute.dart';
import 'package:meta/meta.dart';
import 'package:path/path.dart' as p;
import 'package:pool/pool.dart';

part 'hooks.dart';

final _descriptorPool = Pool(32);
final _partialRegExp = RegExp(r'\{\{~\s(.+)\s\}\}');
final _fileRegExp = RegExp(r'{{%\s?([a-zA-Z]+)\s?%}}');
final _delimeterRegExp = RegExp('{{([^;,=]*?)}}');
Expand Down Expand Up @@ -88,6 +90,7 @@ class MasonGenerator extends Generator {
.whereType<File>()
.map((file) {
return () async {
final resource = await _descriptorPool.request();
try {
final content = await File(file.path).readAsBytes();
final relativePath = file.path.substring(
Expand All @@ -96,6 +99,8 @@ class MasonGenerator extends Generator {
return TemplateFile.fromBytes(relativePath, content);
} on Exception {
return null;
} finally {
resource.release();
}
}();
});
Expand Down
1 change: 1 addition & 0 deletions packages/mason/pubspec.yaml
Expand Up @@ -21,6 +21,7 @@ dependencies:
meta: ^1.7.0
mustache_template: ^2.0.0
path: ^1.8.0
pool: ^1.5.1
pub_semver: ^2.1.0
recase: ^4.0.0
yaml: ^3.1.0
Expand Down
23 changes: 23 additions & 0 deletions packages/mason/test/src/generator_test.dart
Expand Up @@ -134,6 +134,29 @@ void main() {
expect(production.readAsStringSync(), equals('PRODUCTION'));
});

test('constructs an instance (loops stress test)', () async {
const fileCount = 1000;
final brick = Brick.path(
path.join('test', 'bricks', 'loop'),
);
final generator = await MasonGenerator.fromBrick(brick);
final tempDir = Directory.systemTemp.createTempSync();
final files = await generator.generate(
DirectoryGeneratorTarget(tempDir),
vars: <String, dynamic>{
'values': List.generate(fileCount, (index) => '$index'),
},
);

expect(files.length, equals(fileCount));
expect(
files.every(
(element) => element.status == GeneratedFileStatus.created,
),
isTrue,
);
});

test('constructs an instance with hooks', () async {
const name = 'Dash';
final brick = Brick.path(
Expand Down

0 comments on commit 11f7798

Please sign in to comment.