| // Copyright (c) 2017, 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:async'; |
| import 'dart:convert'; |
| import 'dart:io'; |
| |
| import 'package:_discoveryapis_commons/_discoveryapis_commons.dart'; |
| import 'package:googleapis/storage/v1.dart' as storage; |
| import 'package:http/http.dart' as http; |
| import 'package:path/path.dart' as p; |
| |
| import 'src/formula.dart'; |
| |
| part 'src/impl.dart'; |
| |
| const githubRepo = 'dart-lang/homebrew-dart'; |
| |
| const formulaByChannel = { |
| 'beta': 'Formula/dart-beta.rb', |
| 'dev': 'Formula/dart.rb', |
| 'stable': 'Formula/dart.rb' |
| }; |
| |
| Iterable<String> get supportedChannels => formulaByChannel.keys; |
| |
| Future<bool> writeHomebrewInfo( |
| String channel, String version, String repository, bool dryRun) async { |
| var formula = File(p.join(repository, formulaByChannel[channel])); |
| var contents = await formula.readAsString(); |
| var hashes = await _getHashes(channel, version); |
| var updated = updateFormula(channel, contents, version, hashes); |
| bool changed = contents != updated; |
| if (changed) { |
| if (dryRun) { |
| print(updated); |
| } else { |
| await formula.writeAsString(updated, flush: true); |
| } |
| } |
| return changed; |
| } |
| |
| Future<void> runGit(List<String> args, String repository, |
| Map<String, String>? gitEnvironment, bool dryRun) async { |
| if (dryRun) { |
| args = [args[0], '--dry-run', ...args.skip(1)]; |
| } |
| print("git ${args.join(' ')}"); |
| |
| final result = await Process.run('git', args, |
| workingDirectory: repository, environment: gitEnvironment); |
| |
| if (result.stdout != "") { |
| print(result.stdout.trimRight()); |
| } |
| if (result.stderr != "") { |
| print(result.stderr.trimRight()); |
| } |
| |
| if (result.exitCode != 0 && !dryRun /* the test doesn't write a file */) { |
| throw Exception("Command exited ${result.exitCode}: git ${args.join(' ')}"); |
| } |
| } |