Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(300)

Side by Side Diff: tools/apps/update_homebrew/bin/update_homebrew.dart

Issue 1160383002: update_homebrew: support version-formatted revisions (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library update_homebrew; 5 library update_homebrew;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 import 'dart:convert'; 8 import 'dart:convert';
9 import 'dart:io'; 9 import 'dart:io';
10 10
(...skipping 15 matching lines...) Expand all
26 'sdk/dartsdk-macos-ia32-release.zip' 26 'sdk/dartsdk-macos-ia32-release.zip'
27 ]; 27 ];
28 28
29 const DARTIUM_FILES = const [ 29 const DARTIUM_FILES = const [
30 'dartium/dartium-macos-ia32-release.zip', 30 'dartium/dartium-macos-ia32-release.zip',
31 'dartium/content_shell-macos-ia32-release.zip' 31 'dartium/content_shell-macos-ia32-release.zip'
32 ]; 32 ];
33 33
34 final FILES = []..addAll(SDK_FILES)..addAll(DARTIUM_FILES); 34 final FILES = []..addAll(SDK_FILES)..addAll(DARTIUM_FILES);
35 35
36 Future<String> getHash256(String channel, int revision, String download) async { 36 Future<String> getHash256(
37 String channel, String revision, String download) async {
37 var client = new http.Client(); 38 var client = new http.Client();
38 try { 39 try {
39 var api = new storage.StorageApi(client); 40 var api = new storage.StorageApi(client);
40 var media = await api.objects.get('dart-archive', 41 var media = await api.objects.get('dart-archive',
41 'channels/$channel/release/$revision/$download.sha256sum', 42 'channels/$channel/release/$revision/$download.sha256sum',
42 downloadOptions: DownloadOptions.FullMedia); 43 downloadOptions: DownloadOptions.FullMedia);
43 44
44 var hashLine = await ASCII.decodeStream(media.stream); 45 var hashLine = await ASCII.decodeStream(media.stream);
45 return new RegExp('[0-9a-fA-F]*').stringMatch(hashLine); 46 return new RegExp('[0-9a-fA-F]*').stringMatch(hashLine);
46 } finally { 47 } finally {
47 client.close(); 48 client.close();
48 } 49 }
49 } 50 }
50 51
51 Future<String> getVersion(String channel, int revision) async { 52 Future<String> getVersion(String channel, String revision) async {
52 var client = new http.Client(); 53 var client = new http.Client();
53 try { 54 try {
54 var api = new storage.StorageApi(client); 55 var api = new storage.StorageApi(client);
55 56
56 var media = await api.objects.get( 57 var media = await api.objects.get(
57 'dart-archive', 'channels/$channel/release/$revision/VERSION', 58 'dart-archive', 'channels/$channel/release/$revision/VERSION',
58 downloadOptions: DownloadOptions.FullMedia); 59 downloadOptions: DownloadOptions.FullMedia);
59 60
60 var versionObject = await JSON.fuse(ASCII).decoder.bind(media.stream).first; 61 var versionObject = await JSON.fuse(ASCII).decoder.bind(media.stream).first;
61 return versionObject['version']; 62 return versionObject['version'];
62 } finally { 63 } finally {
63 client.close(); 64 client.close();
64 } 65 }
65 } 66 }
66 67
67 Future setCurrentRevisions(Map revisions) async { 68 Future setCurrentRevisions(Map revisions) async {
68 var lines = await (new File('$repository/dart.rb')).readAsLines(); 69 var lines = await (new File('$repository/dart.rb')).readAsLines();
69 70
70 for (var channel in CHANNELS) { 71 for (var channel in CHANNELS) {
71 final regExp = new RegExp('channels/$channel/release/(\\d*)/sdk'); 72 /// This RegExp between release/ and /sdk matches
73 /// * 1 digit followed by
74 /// * Any number of letters, numbers, dashes and dots
75 /// This covers both numeric- and version-formatted revisions
76 ///
77 /// Note: all of the regexp escape slashes `\` are double-escaped within the
78 /// Dart string
79 final regExp =
80 new RegExp('channels/$channel/release/(\\d[\\w\\d\\-\\.]*)/sdk');
81
72 revisions[channel] = 82 revisions[channel] =
73 regExp.firstMatch(lines.firstWhere(regExp.hasMatch)).group(1); 83 regExp.firstMatch(lines.firstWhere(regExp.hasMatch)).group(1);
74 } 84 }
75 } 85 }
76 86
77 Future setHashes(Map revisions, Map hashes) { 87 Future setHashes(Map revisions, Map hashes) {
78 List waitOn = []; 88 List waitOn = [];
79 for (var channel in CHANNELS) { 89 for (var channel in CHANNELS) {
80 hashes[channel] = {}; 90 hashes[channel] = {};
81 for (var file in FILES) { 91 for (var file in FILES) {
82 waitOn.add(getHash256(channel, revisions[channel], file).then((hash) { 92 waitOn.add(getHash256(channel, revisions[channel], file).then((hash) {
83 hashes[channel][file] = hash; 93 hashes[channel][file] = hash;
84 })); 94 }));
85 } 95 }
86 } 96 }
87 return Future.wait(waitOn); 97 return Future.wait(waitOn);
88 } 98 }
89 99
90 Future writeHomebrewInfo(String channel, int revision) async { 100 Future writeHomebrewInfo(String channel, String revision) async {
91 var revisions = {}; 101 var revisions = {};
92 var hashes = {}; 102 var hashes = {};
93 103
94 await setCurrentRevisions(revisions); 104 await setCurrentRevisions(revisions);
95 105
96 if (revisions[channel] == revision) { 106 if (revisions[channel] == revision) {
97 print("Channel $channel is already at revision $revision in homebrew."); 107 print("Channel $channel is already at revision $revision in homebrew.");
98 exit(0); 108 exit(0);
99 } 109 }
100 revisions[channel] = revision; 110 revisions[channel] = revision;
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 284
275 await runGit(['push']); 285 await runGit(['push']);
276 } finally { 286 } finally {
277 await tempDir.delete(recursive: true); 287 await tempDir.delete(recursive: true);
278 } 288 }
279 }, onError: (error, chain) { 289 }, onError: (error, chain) {
280 print(error); 290 print(error);
281 print(chain.terse); 291 print(chain.terse);
282 }); 292 });
283 } 293 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698