| // 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; | |
| } |