| Index: sdk/lib/_internal/pub_generated/lib/src/progress.dart
|
| diff --git a/sdk/lib/_internal/pub_generated/lib/src/progress.dart b/sdk/lib/_internal/pub_generated/lib/src/progress.dart
|
| index 3d2454bdfc3f8d1baec17482ce0ff575d18e8cad..d74da5627ba495a67a223760541ac245f457c7e3 100644
|
| --- a/sdk/lib/_internal/pub_generated/lib/src/progress.dart
|
| +++ b/sdk/lib/_internal/pub_generated/lib/src/progress.dart
|
| @@ -1,46 +1,97 @@
|
| +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
|
| +// for details. All rights reserved. Use of this source code is governed by a
|
| +// BSD-style license that can be found in the LICENSE file.
|
| +
|
| library pub.progress;
|
| +
|
| import 'dart:async';
|
| import 'dart:io';
|
| +
|
| import 'log.dart' as log;
|
| import 'utils.dart';
|
| +
|
| +/// A live-updating progress indicator for long-running log entries.
|
| class Progress {
|
| + /// The timer used to write "..." during a progress log.
|
| Timer _timer;
|
| +
|
| + /// The [Stopwatch] used to track how long a progress log has been running.
|
| final _stopwatch = new Stopwatch();
|
| +
|
| + /// 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.
|
| final String _message;
|
| +
|
| + /// Gets the current progress time as a parenthesized, formatted string.
|
| String get _time => "(${niceDuration(_stopwatch.elapsed)})";
|
| +
|
| + /// Creates a new progress indicator.
|
| + ///
|
| + /// If [fine] is passed, this will log progress messages on [log.Level.FINE]
|
| + /// as opposed to [log.Level.MESSAGE].
|
| Progress(this._message, {bool fine: false}) {
|
| _stopwatch.start();
|
| +
|
| var level = fine ? log.Level.FINE : log.Level.MESSAGE;
|
| +
|
| + // The animation is only shown when it would be meaningful to a human.
|
| + // That means we're writing a visible message to a TTY at normal log levels
|
| + // with non-JSON output.
|
| if (stdioType(stdout) != StdioType.TERMINAL ||
|
| !log.verbosity.isLevelVisible(level) ||
|
| log.json.enabled ||
|
| fine ||
|
| log.verbosity.isLevelVisible(log.Level.FINE)) {
|
| + // Not animating, so just log the start and wait until the task is
|
| + // completed.
|
| log.write(level, "$_message...");
|
| return;
|
| }
|
| +
|
| _update();
|
| _timer = new Timer.periodic(new Duration(milliseconds: 100), (_) {
|
| _update();
|
| });
|
| }
|
| +
|
| + /// Stops the progress indicator.
|
| void stop() {
|
| _stopwatch.stop();
|
| +
|
| + // Always log the final time as [log.fine] because for the most part normal
|
| + // users don't care about the precise time information beyond what's shown
|
| + // in the animation.
|
| log.fine("$_message finished $_time.");
|
| +
|
| + // If we were animating, print one final update to show the user the final
|
| + // time.
|
| if (_timer == null) return;
|
| _timer.cancel();
|
| _timer = null;
|
| _update();
|
| stdout.writeln();
|
| }
|
| +
|
| + /// Stop animating the progress indicator.
|
| + ///
|
| + /// This will continue running the stopwatch so that the full time can be
|
| + /// logged in [stop].
|
| void stopAnimating() {
|
| if (_timer == null) return;
|
| +
|
| + // Print a final message without a time indicator so that we don't leave a
|
| + // misleading half-complete time indicator on the console.
|
| stdout.writeln(log.format("\r$_message..."));
|
| _timer.cancel();
|
| _timer = null;
|
| }
|
| +
|
| + /// Refreshes the progress line.
|
| void _update() {
|
| stdout.write(log.format("\r$_message... "));
|
| +
|
| + // Show the time only once it gets noticeably long.
|
| if (_stopwatch.elapsed.inSeconds > 0) {
|
| stdout.write(log.gray(_time));
|
| }
|
|
|