blob: d9fb40ecb7e5770e8556ef9c256453894bacac1d [file] [log] [blame]
// Copyright (c) 2023, 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.
import 'dart:io';
const keepTempKey = 'KEEP_TEMPORARY_DIRECTORIES';
Future<void> inTempDir(
Future<void> Function(Uri tempUri) fun, {
String? prefix,
}) async {
final tempDir = await Directory.systemTemp.createTemp(prefix);
// Deal with Windows temp folder aliases.
final tempUri =
Directory(await tempDir.resolveSymbolicLinks()).uri.normalizePath();
try {
await fun(tempUri);
} finally {
if (!Platform.environment.containsKey(keepTempKey) ||
Platform.environment[keepTempKey]!.isEmpty) {
await tempDir.delete(recursive: true);
}
}
}
Future<ProcessResult> runProcess({
required Uri executable,
List<String> arguments = const [],
required Uri workingDirectory,
}) async {
final result = await Process.run(
executable.toFilePath(),
arguments,
workingDirectory: workingDirectory.toFilePath(),
);
if (result.exitCode != 0) {
print(result.stdout);
print(result.stderr);
print(result.exitCode);
}
return result;
}