anchor.diff:  import '../environment/build_environment.dart';
   import '../logging/logging.dart';
   import '../package_graph/package_graph.dart';
  +
  +/// Pool for async file operations, we don't want to use too many file handles.
  +final _descriptorPool = new Pool(32);
   
   final _logger = new Logger('CreateOutputDir');
   const _manifestName = '.build.manifest';
  
positive.code: 
    var outputId = new AssetId(packageGraph.root.name, assetPath);
    try {
      _writeAsBytes(outputDir, outputId, await reader.readAsBytes(id));
    } on AssetNotFoundException catch (e, __) {
      if (p.basename(id.path).startsWith('.')) {
        _logger.fine('Skipping missing hidden file ${id.path}');
  
negative.code:   return outputId;
  }
  
  Future<void> _writeAsBytes(Directory outputDir, AssetId id, List<int> bytes) =>
      _descriptorPool.withResource(
          () => _fileFor(outputDir, id).then((file) => file.writeAsBytes(bytes)));
  
  Future<void> _writeAsString(Directory outputDir, AssetId id, String contents) =>
      _descriptorPool.withResource(() =>
          _fileFor(outputDir, id).then((file) => file.writeAsString(contents)));
  
  Future<File> _fileFor(Directory outputDir, AssetId id) {
    String relativePath;
    if (id.path.startsWith('lib')) {
      relativePath =
  