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

Side by Side Diff: lib/src/io.dart

Issue 1235013002: Remove the timeout for downloading packages. (Closed) Base URL: git@github.com:dart-lang/pub.git@master
Patch Set: Created 5 years, 5 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
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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 /// Helper functionality to make working with IO easier. 5 /// Helper functionality to make working with IO easier.
6 library pub.io; 6 library pub.io;
7 7
8 import 'dart:async'; 8 import 'dart:async';
9 import 'dart:collection'; 9 import 'dart:collection';
10 import 'dart:convert'; 10 import 'dart:convert';
(...skipping 811 matching lines...) Expand 10 before | Expand all | Expand 10 after
822 executable = "cmd"; 822 executable = "cmd";
823 } 823 }
824 824
825 log.process(executable, args, workingDir == null ? '.' : workingDir); 825 log.process(executable, args, workingDir == null ? '.' : workingDir);
826 826
827 return fn(executable, args, 827 return fn(executable, args,
828 workingDirectory: workingDir, 828 workingDirectory: workingDir,
829 environment: environment); 829 environment: environment);
830 } 830 }
831 831
832 /// Wraps [input], an asynchronous network operation to provide a timeout.
833 ///
834 /// If [input] completes before [milliseconds] have passed, then the return
835 /// value completes in the same way. However, if [milliseconds] pass before
836 /// [input] has completed, it completes with a [TimeoutException] with
837 /// [description] (which should be a fragment describing the action that timed
838 /// out).
839 ///
840 /// [url] is the URL being accessed asynchronously.
841 ///
842 /// Note that timing out will not cancel the asynchronous operation behind
843 /// [input].
844 Future timeout(Future input, int milliseconds, Uri url, String description) {
845 // TODO(nwiez): Replace this with [Future.timeout].
846 var completer = new Completer();
847 var duration = new Duration(milliseconds: milliseconds);
848 var timer = new Timer(duration, () {
849 // Include the duration ourselves in the message instead of passing it to
850 // TimeoutException since we show nicer output.
851 var message = 'Timed out after ${niceDuration(duration)} while '
852 '$description.';
853
854 if (url.host == "pub.dartlang.org" ||
855 url.host == "storage.googleapis.com") {
856 message += "\nThis is likely a transient error. Please try again later.";
857 }
858
859 completer.completeError(new TimeoutException(message), new Chain.current());
860 });
861 input.then((value) {
862 if (completer.isCompleted) return;
863 timer.cancel();
864 completer.complete(value);
865 }).catchError((e, stackTrace) {
866 if (completer.isCompleted) return;
867 timer.cancel();
868 completer.completeError(e, stackTrace);
869 });
870 return completer.future;
871 }
872
873 /// Creates a temporary directory and passes its path to [fn]. 832 /// Creates a temporary directory and passes its path to [fn].
874 /// 833 ///
875 /// Once the [Future] returned by [fn] completes, the temporary directory and 834 /// Once the [Future] returned by [fn] completes, the temporary directory and
876 /// all its contents are deleted. [fn] can also return `null`, in which case 835 /// all its contents are deleted. [fn] can also return `null`, in which case
877 /// the temporary directory is deleted immediately afterwards. 836 /// the temporary directory is deleted immediately afterwards.
878 /// 837 ///
879 /// Returns a future that completes to the value that the future returned from 838 /// Returns a future that completes to the value that the future returned from
880 /// [fn] completes to. 839 /// [fn] completes to.
881 Future withTempDir(Future fn(String path)) { 840 Future withTempDir(Future fn(String path)) {
882 return new Future.sync(() { 841 return new Future.sync(() {
883 var tempDir = createSystemTempDir(); 842 var tempDir = createSystemTempDir();
884 return new Future.sync(() => fn(tempDir)) 843 return new Future.sync(() => fn(tempDir))
885 .whenComplete(() => deleteEntry(tempDir)); 844 .whenComplete(() => deleteEntry(tempDir));
886 }); 845 });
887 } 846 }
888 847
889 /// Binds an [HttpServer] to [host] and [port]. 848 /// Binds an [HttpServer] to [host] and [port].
890 /// 849 ///
891 /// If [host] is "localhost", this will automatically listen on both the IPv4 850 /// If [host] is "localhost", this will automatically listen on both the IPv4
892 /// and IPv6 loopback addresses. 851 /// and IPv6 loopback addresses.
893 Future<HttpServer> bindServer(String host, int port) { 852 Future<HttpServer> bindServer(String host, int port) {
894 if (host == 'localhost') return HttpMultiServer.loopback(port); 853 if (host == 'localhost') return HttpMultiServer.loopback(port);
895 return HttpServer.bind(host, port); 854 return HttpServer.bind(host, port);
896 } 855 }
897 856
898 /// Extracts a `.tar.gz` file from [stream] to [destination]. 857 /// Extracts a `.tar.gz` file from [stream] to [destination].
899 /// 858 ///
900 /// Returns whether or not the extraction was successful. 859 /// Returns whether or not the extraction was successful.
901 Future<bool> extractTarGz(Stream<List<int>> stream, String destination) { 860 Future<bool> extractTarGz(Stream<List<int>> stream, String destination) {
Bob Nystrom 2015/07/14 00:48:42 This <bool> is bogus here. Yay for null being "boo
nweiz 2015/07/14 01:21:40 Done.
902 log.fine("Extracting .tar.gz stream to $destination."); 861 log.fine("Extracting .tar.gz stream to $destination.");
903 862
904 if (Platform.operatingSystem == "windows") { 863 if (Platform.operatingSystem == "windows") {
905 return _extractTarGzWindows(stream, destination); 864 return _extractTarGzWindows(stream, destination);
906 } 865 }
907 866
908 var args = ["--extract", "--gunzip", "--directory", destination]; 867 var args = ["--extract", "--gunzip", "--directory", destination];
909 if (_noUnknownKeyword) { 868 if (_noUnknownKeyword) {
910 // BSD tar (the default on OS X) can insert strange headers to a tarfile 869 // BSD tar (the default on OS X) can insert strange headers to a tarfile
911 // that GNU tar (the default on Linux) is unable to understand. This will 870 // that GNU tar (the default on Linux) is unable to understand. This will
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
954 var major = int.parse(match[1]); 913 var major = int.parse(match[1]);
955 var minor = int.parse(match[2]); 914 var minor = int.parse(match[2]);
956 return major >= 2 || (major == 1 && minor >= 23); 915 return major >= 2 || (major == 1 && minor >= 23);
957 } 916 }
958 917
959 final String pathTo7zip = (() { 918 final String pathTo7zip = (() {
960 if (!runningFromDartRepo) return sdkAssetPath(path.join('7zip', '7za.exe')); 919 if (!runningFromDartRepo) return sdkAssetPath(path.join('7zip', '7za.exe'));
961 return path.join(dartRepoRoot, 'third_party', '7zip', '7za.exe'); 920 return path.join(dartRepoRoot, 'third_party', '7zip', '7za.exe');
962 })(); 921 })();
963 922
964 Future<bool> _extractTarGzWindows(Stream<List<int>> stream, 923 Future<bool> _extractTarGzWindows(Stream<List<int>> stream,
Bob Nystrom 2015/07/14 00:48:42 Might as well remove it here too.
nweiz 2015/07/14 01:21:40 Done.
965 String destination) { 924 String destination) {
966 // TODO(rnystrom): In the repo's history, there is an older implementation of 925 // TODO(rnystrom): In the repo's history, there is an older implementation of
967 // this that does everything in memory by piping streams directly together 926 // this that does everything in memory by piping streams directly together
968 // instead of writing out temp files. The code is simpler, but unfortunately, 927 // instead of writing out temp files. The code is simpler, but unfortunately,
969 // 7zip seems to periodically fail when we invoke it from Dart and tell it to 928 // 7zip seems to periodically fail when we invoke it from Dart and tell it to
970 // read from stdin instead of a file. Consider resurrecting that version if 929 // read from stdin instead of a file. Consider resurrecting that version if
971 // we can figure out why it fails. 930 // we can figure out why it fails.
972 931
973 return withTempDir((tempDir) { 932 return withTempDir((tempDir) {
974 // Write the archive to a temp file. 933 // Write the archive to a temp file.
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
1093 1052
1094 // TODO(rnystrom): Remove this and change to returning one string. 1053 // TODO(rnystrom): Remove this and change to returning one string.
1095 static List<String> _toLines(String output) { 1054 static List<String> _toLines(String output) {
1096 var lines = splitLines(output); 1055 var lines = splitLines(output);
1097 if (!lines.isEmpty && lines.last == "") lines.removeLast(); 1056 if (!lines.isEmpty && lines.last == "") lines.removeLast();
1098 return lines; 1057 return lines;
1099 } 1058 }
1100 1059
1101 bool get success => exitCode == exit_codes.SUCCESS; 1060 bool get success => exitCode == exit_codes.SUCCESS;
1102 } 1061 }
OLDNEW
« lib/src/http.dart ('K') | « lib/src/http.dart ('k') | lib/src/source/hosted.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698