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

Unified Diff: sdk/lib/_internal/pub/lib/src/log.dart

Issue 16159003: Show progress on upload and resolve. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Revise. Created 7 years, 7 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 side-by-side diff with in-line comments
Download patch
Index: sdk/lib/_internal/pub/lib/src/log.dart
diff --git a/sdk/lib/_internal/pub/lib/src/log.dart b/sdk/lib/_internal/pub/lib/src/log.dart
index e01425b7d2bf6789d0b08a4ec67baf690726b3f4..047f62124e3642c9f112575d425e74327d48c784 100644
--- a/sdk/lib/_internal/pub/lib/src/log.dart
+++ b/sdk/lib/_internal/pub/lib/src/log.dart
@@ -18,6 +18,13 @@ final Map<Level, LogFn> _loggers = new Map<Level, LogFn>();
/// [recordTranscript()] is called.
List<Entry> _transcript;
+/// The timer used to write "..." during a progress log.
+Timer _progressTimer;
+
+/// The progress message as it's being incrementally appended. When the
+/// progress is done, a single entry will be added to the log for it.
+String _progressMessage;
+
/// An enum type for defining the different logging levels. By default, [ERROR]
/// and [WARNING] messages are printed to sterr. [MESSAGE] messages are printed
/// to stdout, and others are ignored.
@@ -178,6 +185,40 @@ void dumpTranscript() {
stderr.writeln('---- End log transcript ----');
}
+/// Prints [message] then slowly prints additional "..." after it until the
+/// future returned by [callback] completes. If anything else is logged during
+/// this, it cancels the progress.
+Future progress(String message, Future callback()) {
+ if (_progressTimer != null) throw new StateError("Already in progress.");
+
+ _progressMessage = '$message...';
+ stdout.write(_progressMessage);
+
+ _progressTimer = new Timer.periodic(new Duration(milliseconds: 500), (_) {
+ stdout.write('.');
+ _progressMessage += '.';
+ });
+
+ return callback().whenComplete(_stopProgress);
+}
+
+/// Stops the running progress indicator, if currently running.
+_stopProgress() {
+ if (_progressTimer == null) return;
+
+ // Stop the timer.
+ _progressTimer.cancel();
+ _progressTimer = null;
+ stdout.writeln();
+
+ // Add the progress message to the transcript.
+ if (_transcript != null) {
+ _transcript.add(new Entry(Level.MESSAGE, [_progressMessage]));
+ }
+
+ _progressMessage = null;
+}
+
/// Sets the verbosity to "normal", which shows errors, warnings, and messages.
void showNormal() {
_loggers[Level.ERROR] = _logToStderr;
@@ -241,6 +282,8 @@ void _logToStderrWithLabel(Entry entry) {
}
void _logToStream(IOSink sink, Entry entry, {bool showLabel}) {
+ _stopProgress();
+
bool firstLine = true;
for (var line in entry.lines) {
if (showLabel) {
« no previous file with comments | « sdk/lib/_internal/pub/lib/src/command_lish.dart ('k') | sdk/lib/_internal/pub/lib/src/solver/version_solver.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698