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

Side by Side Diff: lib/src/source/hosted.dart

Issue 1664903003: Properly include the hosted URL in all IDs. (Closed) Base URL: git@github.com:dart-lang/pub.git@master
Patch Set: Created 4 years, 10 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 | test/descriptor.dart » ('j') | 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) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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 import 'dart:async'; 5 import 'dart:async';
6 import 'dart:io' as io; 6 import 'dart:io' as io;
7 import "dart:convert"; 7 import "dart:convert";
8 8
9 import 'package:http/http.dart' as http; 9 import 'package:http/http.dart' as http;
10 import 'package:path/path.dart' as path; 10 import 'package:path/path.dart' as path;
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
73 } catch (error, stackTrace) { 73 } catch (error, stackTrace) {
74 var parsed = _parseDescription(ref.description); 74 var parsed = _parseDescription(ref.description);
75 _throwFriendlyError(error, stackTrace, parsed.first, parsed.last); 75 _throwFriendlyError(error, stackTrace, parsed.first, parsed.last);
76 } 76 }
77 77
78 var doc = JSON.decode(body); 78 var doc = JSON.decode(body);
79 return doc['versions'].map((map) { 79 return doc['versions'].map((map) {
80 var pubspec = new Pubspec.fromMap( 80 var pubspec = new Pubspec.fromMap(
81 map['pubspec'], systemCache.sources, 81 map['pubspec'], systemCache.sources,
82 expectedName: ref.name, location: url); 82 expectedName: ref.name, location: url);
83 var id = idFor(ref.name, pubspec.version); 83 var id = idFor(ref.name, pubspec.version,
84 url: _serverFor(ref.description));
84 memoizePubspec(id, pubspec); 85 memoizePubspec(id, pubspec);
85 86
86 return id; 87 return id;
87 }).toList(); 88 }).toList();
88 } 89 }
89 90
90 /// Downloads and parses the pubspec for a specific version of a package that 91 /// Downloads and parses the pubspec for a specific version of a package that
91 /// is available from the site. 92 /// is available from the site.
92 Future<Pubspec> describeUncached(PackageId id) async { 93 Future<Pubspec> describeUncached(PackageId id) async {
93 // Request it from the server. 94 // Request it from the server.
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
159 160
160 var successes = []; 161 var successes = [];
161 var failures = []; 162 var failures = [];
162 163
163 for (var serverDir in listDir(systemCacheRoot)) { 164 for (var serverDir in listDir(systemCacheRoot)) {
164 var url = _directoryToUrl(path.basename(serverDir)); 165 var url = _directoryToUrl(path.basename(serverDir));
165 var packages = _getCachedPackagesInDirectory(path.basename(serverDir)); 166 var packages = _getCachedPackagesInDirectory(path.basename(serverDir));
166 packages.sort(Package.orderByNameAndVersion); 167 packages.sort(Package.orderByNameAndVersion);
167 168
168 for (var package in packages) { 169 for (var package in packages) {
169 var id = idFor(package.name, package.version); 170 var id = idFor(package.name, package.version, url: url);
170 171
171 try { 172 try {
172 await _download(url, package.name, package.version, package.dir); 173 await _download(url, package.name, package.version, package.dir);
173 successes.add(id); 174 successes.add(id);
174 } catch (error, stackTrace) { 175 } catch (error, stackTrace) {
175 failures.add(id); 176 failures.add(id);
176 var message = "Failed to repair ${log.bold(package.name)} " 177 var message = "Failed to repair ${log.bold(package.name)} "
177 "${package.version}"; 178 "${package.version}";
178 if (url != defaultUrl) message += " from $url"; 179 if (url != defaultUrl) message += " from $url";
179 log.error("$message. Error:\n$error"); 180 log.error("$message. Error:\n$error");
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
262 log.io("Finding versions of ${ref.name} in " 263 log.io("Finding versions of ${ref.name} in "
263 "$systemCacheRoot/${_urlToDirectory(server)}"); 264 "$systemCacheRoot/${_urlToDirectory(server)}");
264 265
265 var dir = path.join(systemCacheRoot, _urlToDirectory(server)); 266 var dir = path.join(systemCacheRoot, _urlToDirectory(server));
266 267
267 var versions; 268 var versions;
268 if (dirExists(dir)) { 269 if (dirExists(dir)) {
269 versions = await listDir(dir).map((entry) { 270 versions = await listDir(dir).map((entry) {
270 var components = path.basename(entry).split("-"); 271 var components = path.basename(entry).split("-");
271 if (components.first != ref.name) return null; 272 if (components.first != ref.name) return null;
272 return HostedSource.idFor(ref.name, new Version.parse(components.last)); 273 return HostedSource.idFor(
274 ref.name, new Version.parse(components.last),
275 url: _serverFor(ref.description));
273 }).where((id) => id != null).toList(); 276 }).where((id) => id != null).toList();
274 } else { 277 } else {
275 versions = []; 278 versions = [];
276 } 279 }
277 280
278 // If there are no versions in the cache, report a clearer error. 281 // If there are no versions in the cache, report a clearer error.
279 if (versions.isEmpty) { 282 if (versions.isEmpty) {
280 throw new PackageNotFoundException( 283 throw new PackageNotFoundException(
281 "Could not find package ${ref.name} in cache."); 284 "Could not find package ${ref.name} in cache.");
282 } 285 }
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
345 /// converts that to a Uri given [pattern]. 348 /// converts that to a Uri given [pattern].
346 /// 349 ///
347 /// Ensures the package name is properly URL encoded. 350 /// Ensures the package name is properly URL encoded.
348 Uri _makeUrl(description, String pattern(String server, String package)) { 351 Uri _makeUrl(description, String pattern(String server, String package)) {
349 var parsed = _parseDescription(description); 352 var parsed = _parseDescription(description);
350 var server = parsed.last; 353 var server = parsed.last;
351 var package = Uri.encodeComponent(parsed.first); 354 var package = Uri.encodeComponent(parsed.first);
352 return Uri.parse(pattern(server, package)); 355 return Uri.parse(pattern(server, package));
353 } 356 }
354 357
358 /// Returns the server URL for [description].
359 Uri _serverFor(description) => Uri.parse(_parseDescription(description).last);
360
355 /// Parses [id] into its server, package name, and version components, then 361 /// Parses [id] into its server, package name, and version components, then
356 /// converts that to a Uri given [pattern]. 362 /// converts that to a Uri given [pattern].
357 /// 363 ///
358 /// Ensures the package name is properly URL encoded. 364 /// Ensures the package name is properly URL encoded.
359 Uri _makeVersionUrl(PackageId id, 365 Uri _makeVersionUrl(PackageId id,
360 String pattern(String server, String package, String version)) { 366 String pattern(String server, String package, String version)) {
361 var parsed = _parseDescription(id.description); 367 var parsed = _parseDescription(id.description);
362 var server = parsed.last; 368 var server = parsed.last;
363 var package = Uri.encodeComponent(parsed.first); 369 var package = Uri.encodeComponent(parsed.first);
364 var version = Uri.encodeComponent(id.version.toString()); 370 var version = Uri.encodeComponent(id.version.toString());
(...skipping 22 matching lines...) Expand all
387 var name = description["name"]; 393 var name = description["name"];
388 if (name is! String) { 394 if (name is! String) {
389 throw new FormatException("The 'name' key must have a string value."); 395 throw new FormatException("The 'name' key must have a string value.");
390 } 396 }
391 397
392 var url = description["url"]; 398 var url = description["url"];
393 if (url == null) url = HostedSource.defaultUrl; 399 if (url == null) url = HostedSource.defaultUrl;
394 400
395 return new Pair<String, String>(name, url); 401 return new Pair<String, String>(name, url);
396 } 402 }
OLDNEW
« no previous file with comments | « no previous file | test/descriptor.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698