Remove dependency on http package
BUG=
Review URL: https://codereview.appspot.com/243950044
diff --git a/lib/discovery.dart b/lib/discovery.dart
index f8e45d4..0dd7f55 100644
--- a/lib/discovery.dart
+++ b/lib/discovery.dart
@@ -5,9 +5,11 @@
library package_config.discovery;
import "dart:async";
-import "dart:io" show Directory, File, FileSystemEntity;
+import "dart:io";
+import "dart:typed_data" show Uint8List;
+
import "package:path/path.dart" as path;
-import "package:http/http.dart" as http;
+
import "packages.dart";
import "packages_file.dart" as pkgfile show parse;
import "src/packages_impl.dart";
@@ -39,8 +41,7 @@
/// It must return the *contents* of the file identified by the URI it's given,
/// which should be a UTF-8 encoded `.packages` file, and must return an
/// error future if loading fails for any reason.
-Future<Packages> findPackages(
- Uri baseUri,
+Future<Packages> findPackages(Uri baseUri,
{Future<List<int>> loader(Uri unsupportedUri)}) {
if (baseUri.scheme == "file") {
return new Future<Packages>.sync(() => findPackagesFromFile(baseUri));
@@ -113,8 +114,8 @@
if (location == null) return Packages.noPackages;
if (location is File) {
List<int> fileBytes = location.readAsBytesSync();
- Map<String, Uri> map = pkgfile.parse(fileBytes,
- new Uri.file(location.path));
+ Map<String, Uri> map =
+ pkgfile.parse(fileBytes, new Uri.file(location.path));
return new MapPackages(map);
}
assert(location is Directory);
@@ -139,7 +140,7 @@
/// of the requested `.packages` file as bytes, which will be assumed to be
/// UTF-8 encoded.
Future<Packages> findPackagesFromNonFile(Uri nonFileUri,
- {Future<List<int>> loader(Uri name)}) {
+ {Future<List<int>> loader(Uri name)}) {
if (loader == null) loader = _httpGet;
Uri packagesFileUri = nonFileUri.resolve(".packages");
return loader(packagesFileUri).then((List<int> fileBytes) {
@@ -152,10 +153,29 @@
});
}
-/// Fetches a file using the http library.
+/// Fetches a file over http.
Future<List<int>> _httpGet(Uri uri) {
- return http.get(uri).then((http.Response response) {
- if (response.statusCode == 200) return response.bodyBytes;
- throw 0; // The error message isn't being used for anything.
+ HttpClient client = new HttpClient();
+ return client
+ .getUrl(uri)
+ .then((HttpClientRequest request) => request.close())
+ .then((HttpClientResponse response) {
+ if (response.statusCode != HttpStatus.OK) {
+ String msg = 'Failure getting $uri: '
+ '${response.statusCode} ${response.reasonPhrase}';
+ throw msg;
+ }
+ return response.toList();
+ }).then((List<List<int>> splitContent) {
+ int totalLength = splitContent.fold(0, (int old, List list) {
+ return old + list.length;
+ });
+ Uint8List result = new Uint8List(totalLength);
+ int offset = 0;
+ for (List<int> contentPart in splitContent) {
+ result.setRange(offset, offset + contentPart.length, contentPart);
+ offset += contentPart.length;
+ }
+ return result;
});
}
diff --git a/pubspec.lock b/pubspec.lock
index 708d891..5cae005 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -25,10 +25,6 @@
description: crypto
source: hosted
version: "0.9.0"
- http:
- description: http
- source: hosted
- version: "0.11.2"
http_parser:
description: http_parser
source: hosted
diff --git a/pubspec.yaml b/pubspec.yaml
index 338aab5..5eca330 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
name: package_config
-version: 0.0.3
+version: 0.0.3+1
description: Support for working with Package Resolution config files.
author: Dart Team <misc@dartlang.org>
homepage: https://github.com/dart-lang/package_config
@@ -9,7 +9,6 @@
dependencies:
charcode: '^1.1.0'
- http: '^0.11.0'
path: '>=1.0.0 <2.0.0'
dev_dependencies: