update_homebrew:dart: also make a dart@2, for Dart 2 migration
This PR modifies update_homebrew to also generate a dart@2 versioned formula. The new file is dropped out right next to the old `dart.rb` file.
The dart@2 formula is a temporary measure to aid application developers
migrating from Dart 1 to Dart 2.
Supersedes https://github.com/dart-lang/homebrew-dart/pull/52.
This looks right by inspection, but I haven't been able to test it yet: my local `dart` environment is all messed up, and I am a Dart newbie. Still, I'm putting this out here as a PR so the discussion from https://github.com/dart-lang/homebrew-dart/pull/52 can proceed.
Closes #33318
https://github.com/dart-lang/sdk/pull/33318
GitOrigin-RevId: 5230782aabf4f45199cff9b1fb9c5304e5dcb21c
Change-Id: I78cf5b066d85ac8b0ef51ed44e6eb1a15192b23c
Reviewed-on: https://dart-review.googlesource.com/58120
Commit-Queue: William Hesse <whesse@google.com>
Reviewed-by: William Hesse <whesse@google.com>
diff --git a/tools/apps/update_homebrew/lib/update_homebrew.dart b/tools/apps/update_homebrew/lib/update_homebrew.dart
index 0d2fcbb..3db0e68 100644
--- a/tools/apps/update_homebrew/lib/update_homebrew.dart
+++ b/tools/apps/update_homebrew/lib/update_homebrew.dart
@@ -23,6 +23,7 @@
const contentShellFile = 'dartium/content_shell-macos-x64-release.zip';
const dartRbFileName = 'dart.rb';
+const dart2RbFileName = 'dart@2.rb';
Future<String> getHash256(
String channel, String revision, String download) async {
@@ -107,6 +108,9 @@
await new File(p.join(repository, dartRbFileName)).writeAsString(
createDartFormula(revisions, hashes, devVersion, stableVersion),
flush: true);
+ await new File(p.join(repository, dart2RbFileName)).writeAsString(
+ createDart2Formula(revisions, hashes, devVersion, stableVersion),
+ flush: true);
}
String createDartFormula(
@@ -200,6 +204,61 @@
end
''';
+/// TODO: Remove this formula after Dart 2 is released as stable.
+/// This is a transitional mechanism to support developers migrating
+/// from Dart 1 to Dart 2 while it's in pre-release.
+String createDart2Formula(
+ Map revisions, Map hashes, String devVersion, String stableVersion) =>
+ '''
+class DartAT2 < Formula
+ desc "The Dart 2 SDK"
+ homepage "https://www.dartlang.org/"
+ version "$devVersion"
+
+ keg_only :versioned_formula
+
+ if MacOS.prefer_64_bit?
+ url "$urlBase/dev/release/${revisions['dev']}/$x64File"
+ sha256 "${hashes['dev'][x64File]}"
+ else
+ url "$urlBase/dev/release/${revisions['dev']}/$ia32File"
+ sha256 "${hashes['dev'][ia32File]}"
+ end
+
+ def install
+ libexec.install Dir["*"]
+ bin.install_symlink "#{libexec}/bin/dart"
+ bin.write_exec_script Dir["#{libexec}/bin/{pub,dart?*}"]
+ end
+
+ def shim_script(target)
+ <<~EOS
+ #!/usr/bin/env bash
+ exec "#{prefix}/#{target}" "$@"
+ EOS
+ end
+
+ def caveats; <<~EOS
+ Note that this is a prerelease version of Dart.
+
+ Please note the path to the Dart SDK:
+ #{opt_libexec}
+ EOS
+ end
+
+ test do
+ (testpath/"sample.dart").write <<~EOS
+ void main() {
+ print(r"test message");
+ }
+ EOS
+
+ assert_equal "test message\n", shell_output("#{bin}/dart sample.dart")
+ end
+end
+''';
+
+
Future runGit(List<String> args, String repository,
Map<String, String> gitEnvironment) async {
print("git ${args.join(' ')}");