// 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 inTempDir( Future 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 runProcess({ required Uri executable, List 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; }