| Index: utils/lib/file_system.dart
|
| diff --git a/utils/lib/file_system.dart b/utils/lib/file_system.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..a10c685ad827b0cc43f76b0e308e5cfac3f24b64
|
| --- /dev/null
|
| +++ b/utils/lib/file_system.dart
|
| @@ -0,0 +1,75 @@
|
| +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
|
| +// for details. All rights reserved. Use of this source code is governed by a
|
| +// BSD-style license that can be found in the LICENSE file.
|
| +
|
| +// TODO(terry): Investigate common library for file I/O shared between frog and tools.
|
| +
|
| +/** Abstraction for file systems and utility functions to manipulate paths. */
|
| +#library('file_system');
|
| +
|
| +/**
|
| + * Abstraction around file system access to work in a variety of different
|
| + * environments.
|
| + */
|
| +interface FileSystem {
|
| + String readAll(String filename);
|
| +
|
| + void writeString(String outfile, String text);
|
| +
|
| + bool fileExists(String filename);
|
| +
|
| + void createDirectory(String path, [bool recursive]);
|
| + void removeDirectory(String path, [bool recursive]);
|
| +}
|
| +
|
| +/**
|
| + * Replaces all back slashes (\) with forward slashes (/) in [path] and
|
| + * return the result.
|
| + */
|
| +String canonicalizePath(String path) {
|
| + return path.replaceAll('\\', '/');
|
| +}
|
| +
|
| +/** Join [path1] to [path2]. */
|
| +String joinPaths(String path1, String path2) {
|
| + path1 = canonicalizePath(path1);
|
| + path2 = canonicalizePath(path2);
|
| +
|
| + var pieces = path1.split('/');
|
| + for (var piece in path2.split('/')) {
|
| + if (piece == '..' && pieces.length > 0 && pieces.last() != '.'
|
| + && pieces.last() != '..') {
|
| + pieces.removeLast();
|
| + } else if (piece != '') {
|
| + if (pieces.length > 0 && pieces.last() == '.') {
|
| + pieces.removeLast();
|
| + }
|
| + pieces.add(piece);
|
| + }
|
| + }
|
| + return Strings.join(pieces, '/');
|
| +}
|
| +
|
| +/** Returns the directory name for the [path]. */
|
| +String dirname(String path) {
|
| + path = canonicalizePath(path);
|
| +
|
| + int lastSlash = path.lastIndexOf('/', path.length);
|
| + if (lastSlash == -1) {
|
| + return '.';
|
| + } else {
|
| + return path.substring(0, lastSlash);
|
| + }
|
| +}
|
| +
|
| +/** Returns the file name without directory for the [path]. */
|
| +String basename(String path) {
|
| + path = canonicalizePath(path);
|
| +
|
| + int lastSlash = path.lastIndexOf('/', path.length);
|
| + if (lastSlash == -1) {
|
| + return path;
|
| + } else {
|
| + return path.substring(lastSlash + 1);
|
| + }
|
| +}
|
|
|