Index: utils/testrunner/utils.dart |
=================================================================== |
--- utils/testrunner/utils.dart (revision 21957) |
+++ utils/testrunner/utils.dart (working copy) |
@@ -4,6 +4,12 @@ |
part of testrunner; |
+/** Create a file [fileName] and populate it with [contents]. */ |
+void writeFile(String fileName, String contents) { |
+ var file = new File(fileName); |
+ file.writeAsStringSync(contents); |
+} |
+ |
/** |
* Read the contents of a file [fileName] into a [List] of [String]s. |
* If the file does not exist and [errorIfNoFile] is true, throw an |
@@ -28,32 +34,24 @@ |
String makePathAbsolute(String path) { |
var p = new Path(path).canonicalize(); |
if (p.isAbsolute) { |
- return p.toString(); |
+ return p.toNativePath(); |
} else { |
var cwd = new Path((new Directory.current()).path); |
- return cwd.join(p).toString(); |
+ return cwd.join(p).toNativePath(); |
} |
} |
/** |
* Create the list of all the files in a set of directories |
* ([dirs]) whose names match [filePat]. If [recurse] is true |
- * look at subdirectories too. Once they have all been enumerated, |
- * call [onComplete]. An optional [excludePat] can be supplied |
+ * look at subdirectories too. An optional [excludePat] can be supplied |
* and files or directories that match that will be excluded. |
+ * [includeSymLinks] controls whether or not to include files that |
+ * have symlinks in the traversed tree. |
*/ |
- // TODO(gram): The key thing here is we want to avoid package |
- // directories, which have symlinks. excludePat was added for |
- // that but can't currently be used because the symlinked files |
- // have canonicalized paths. So instead we exploit that fact and |
- // assert that every file must have a prefix that matches the |
- // directory. If this changes then we will need to switch to using |
- // the exclude pattern or some other mechanism. |
-void buildFileList(List dirs, RegExp filePat, bool recurse, |
- Function onComplete, |
+List buildFileList(List dirs, RegExp filePat, bool recurse, |
[RegExp excludePat, bool includeSymLinks = false]) { |
var files = new List(); |
- var dirCount = 1; |
for (var i = 0; i < dirs.length; i++) { |
var path = dirs[i]; |
if (excludePat != null && excludePat.hasMatch(path)) { |
@@ -69,33 +67,24 @@ |
path = makePathAbsolute(path); |
Directory d = new Directory(path); |
if (d.existsSync()) { |
- ++dirCount; |
- d.list(recursive: recurse).listen( |
- (entity) { |
- if (entity is File) { |
- var file = entity.name; |
- if (filePat.hasMatch(file)) { |
- if (excludePat == null || !excludePat.hasMatch(file)) { |
- if (includeSymLinks || file.startsWith(path)) { |
- files.add(file); |
- } |
- } |
- } |
+ var contents = d.listSync(recursive: recurse, |
+ followLinks: includeSymLinks); |
+ for (var entity in contents) { |
+ if (entity is File) { |
+ var file = entity.path; |
+ if (filePat.hasMatch(file)) { |
+ if (excludePat == null || !excludePat.hasMatch(file)) { |
+ files.add(file); |
} |
- }, |
- onDone: () { |
- if (complete && --dirCount == 0) { |
- onComplete(files); |
- } |
- }); |
+ } |
+ } |
+ } |
} else { // Does not exist. |
print('$path does not exist.'); |
} |
} |
} |
- if (--dirCount == 0) { |
- onComplete(files); |
- } |
+ return files; |
} |
/** |
@@ -108,3 +97,22 @@ |
return libDirectory.substring(0, |
libDirectory.lastIndexOf(Platform.pathSeparator)); |
} |
+ |
+/* |
+ * Run an external process [cmd] with command line arguments [args]. |
+ * Returns a [Future] for when the process terminates. |
+ */ |
+Future _processHelper(String command, List<String> args, |
+ {String workingDir}) { |
+ var options = null; |
+ if (workingDir != null) { |
+ options = new ProcessOptions(); |
+ options.workingDirectory = workingDir; |
+ } |
+ return Process.run(command, args, options) |
+ .then((result) => result.exitCode) |
+ .catchError((e) { |
+ print("$command ${args.join(' ')}: ${e.toString()}"); |
+ }); |
+} |
+ |