67 lines
2.1 KiB
Dart
67 lines
2.1 KiB
Dart
// Copyright 2015 The Chromium Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
import 'dart:io' as dart_io;
|
|
|
|
import 'package:file/io.dart';
|
|
import 'package:file/sync_io.dart';
|
|
import 'package:path/path.dart' as path;
|
|
|
|
export 'package:file/io.dart';
|
|
export 'package:file/sync_io.dart';
|
|
|
|
/// Currently active implmenetation of the file system.
|
|
///
|
|
/// By default it uses local disk-based implementation. Override this in tests
|
|
/// with [MemoryFileSystem].
|
|
FileSystem fs = new LocalFileSystem();
|
|
SyncFileSystem syncFs = new SyncLocalFileSystem();
|
|
|
|
typedef String CurrentDirectoryGetter();
|
|
|
|
final CurrentDirectoryGetter _defaultCurrentDirectoryGetter = () {
|
|
return dart_io.Directory.current.path;
|
|
};
|
|
|
|
/// Points to the current working directory (like `pwd`).
|
|
CurrentDirectoryGetter getCurrentDirectory = _defaultCurrentDirectoryGetter;
|
|
|
|
/// Exits the process with the given [exitCode].
|
|
typedef void ExitFunction([int exitCode]);
|
|
|
|
final ExitFunction _defaultExitFunction = ([int exitCode]) {
|
|
dart_io.exit(exitCode);
|
|
};
|
|
|
|
/// Exits the process.
|
|
ExitFunction exit = _defaultExitFunction;
|
|
|
|
/// Restores [fs] and [syncFs] to the default local disk-based implementation.
|
|
void restoreFileSystem() {
|
|
fs = new LocalFileSystem();
|
|
syncFs = new SyncLocalFileSystem();
|
|
getCurrentDirectory = _defaultCurrentDirectoryGetter;
|
|
exit = _defaultExitFunction;
|
|
}
|
|
|
|
/// Uses in-memory replacments for `dart:io` functionality. Useful in tests.
|
|
void useInMemoryFileSystem({ cwd: '/', ExitFunction exitFunction }) {
|
|
MemoryFileSystem memFs = new MemoryFileSystem();
|
|
fs = memFs;
|
|
syncFs = new SyncMemoryFileSystem(backedBy: memFs.storage);
|
|
getCurrentDirectory = () => cwd;
|
|
exit = exitFunction ?? ([int exitCode]) {
|
|
throw new Exception('Exited with code $exitCode');
|
|
};
|
|
}
|
|
|
|
/// Create the ancestor directories of a file path if they do not already exist.
|
|
void ensureDirectoryExists(String filePath) {
|
|
String dirPath = path.dirname(filePath);
|
|
|
|
if (syncFs.type(dirPath) == FileSystemEntityType.DIRECTORY)
|
|
return;
|
|
syncFs.directory(dirPath).create(recursive: true);
|
|
}
|