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

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

Issue 896623005: Use native async/await support in pub. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Code review changes Created 5 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 side-by-side diff with in-line comments
Download patch
Index: sdk/lib/_internal/pub_generated/lib/src/log.dart
diff --git a/sdk/lib/_internal/pub_generated/lib/src/log.dart b/sdk/lib/_internal/pub_generated/lib/src/log.dart
deleted file mode 100644
index ecf67ed2c053d6efaef65453f59b8f001ae70a01..0000000000000000000000000000000000000000
--- a/sdk/lib/_internal/pub_generated/lib/src/log.dart
+++ /dev/null
@@ -1,551 +0,0 @@
-// 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.
-
-/// Message logging.
-library pub.log;
-
-import 'dart:async';
-import 'dart:convert';
-import 'dart:io';
-
-import 'package:args/command_runner.dart';
-import 'package:path/path.dart' as p;
-import 'package:source_span/source_span.dart';
-import 'package:stack_trace/stack_trace.dart';
-
-import 'exceptions.dart';
-import 'io.dart';
-import 'progress.dart';
-import 'transcript.dart';
-import 'utils.dart';
-
-/// The singleton instance so that we can have a nice api like:
-///
-/// log.json.error(...);
-final json = new _JsonLogger();
-
-/// The current logging verbosity.
-Verbosity verbosity = Verbosity.NORMAL;
-
-/// Whether or not to log entries with prejudice.
-bool withPrejudice = false;
-
-/// In cases where there's a ton of log spew, make sure we don't eat infinite
-/// memory.
-///
-/// This can occur when the backtracking solver stumbles into a pathological
-/// dependency graph. It generally will find a solution, but it may log
-/// thousands and thousands of entries to get there.
-const _MAX_TRANSCRIPT = 10000;
-
-/// The list of recorded log messages. Will only be recorded if
-/// [recordTranscript()] is called.
-Transcript<Entry> _transcript;
-
-/// The currently-animated progress indicator, if any.
-///
-/// This will also be in [_progresses].
-Progress _animatedProgress;
-
-final _cyan = getSpecial('\u001b[36m');
-final _green = getSpecial('\u001b[32m');
-final _magenta = getSpecial('\u001b[35m');
-final _red = getSpecial('\u001b[31m');
-final _yellow = getSpecial('\u001b[33m');
-final _gray = getSpecial('\u001b[1;30m');
-final _none = getSpecial('\u001b[0m');
-final _noColor = getSpecial('\u001b[39m');
-final _bold = getSpecial('\u001b[1m');
-
-/// An enum type for defining the different logging levels a given message can
-/// be associated with.
-///
-/// By default, [ERROR] and [WARNING] messages are printed to sterr. [MESSAGE]
-/// messages are printed to stdout, and others are ignored.
-class Level {
- /// An error occurred and an operation could not be completed.
- ///
- /// Usually shown to the user on stderr.
- static const ERROR = const Level._("ERR ");
-
- /// Something unexpected happened, but the program was able to continue,
- /// though possibly in a degraded fashion.
- static const WARNING = const Level._("WARN");
-
- /// A message intended specifically to be shown to the user.
- static const MESSAGE = const Level._("MSG ");
-
- /// Some interaction with the external world occurred, such as a network
- /// operation, process spawning, or file IO.
- static const IO = const Level._("IO ");
-
- /// Incremental output during pub's version constraint solver.
- static const SOLVER = const Level._("SLVR");
-
- /// Fine-grained and verbose additional information.
- ///
- /// Used to provide program state context for other logs (such as what pub
- /// was doing when an IO operation occurred) or just more detail for an
- /// operation.
- static const FINE = const Level._("FINE");
-
- const Level._(this.name);
- final String name;
-
- String toString() => name;
-}
-
-typedef _LogFn(Entry entry);
-
-/// An enum type to control which log levels are displayed and how they are
-/// displayed.
-class Verbosity {
- /// Silence all logging.
- static const NONE = const Verbosity._("none", const {
- Level.ERROR: null,
- Level.WARNING: null,
- Level.MESSAGE: null,
- Level.IO: null,
- Level.SOLVER: null,
- Level.FINE: null
- });
-
- /// Shows only errors and warnings.
- static const WARNING = const Verbosity._("warning", const {
- Level.ERROR: _logToStderr,
- Level.WARNING: _logToStderr,
- Level.MESSAGE: null,
- Level.IO: null,
- Level.SOLVER: null,
- Level.FINE: null
- });
-
- /// The default verbosity which shows errors, warnings, and messages.
- static const NORMAL = const Verbosity._("normal", const {
- Level.ERROR: _logToStderr,
- Level.WARNING: _logToStderr,
- Level.MESSAGE: _logToStdout,
- Level.IO: null,
- Level.SOLVER: null,
- Level.FINE: null
- });
-
- /// Shows errors, warnings, messages, and IO event logs.
- static const IO = const Verbosity._("io", const {
- Level.ERROR: _logToStderrWithLabel,
- Level.WARNING: _logToStderrWithLabel,
- Level.MESSAGE: _logToStdoutWithLabel,
- Level.IO: _logToStderrWithLabel,
- Level.SOLVER: null,
- Level.FINE: null
- });
-
- /// Shows errors, warnings, messages, and version solver logs.
- static const SOLVER = const Verbosity._("solver", const {
- Level.ERROR: _logToStderr,
- Level.WARNING: _logToStderr,
- Level.MESSAGE: _logToStdout,
- Level.IO: null,
- Level.SOLVER: _logToStdout,
- Level.FINE: null
- });
-
- /// Shows all logs.
- static const ALL = const Verbosity._("all", const {
- Level.ERROR: _logToStderrWithLabel,
- Level.WARNING: _logToStderrWithLabel,
- Level.MESSAGE: _logToStdoutWithLabel,
- Level.IO: _logToStderrWithLabel,
- Level.SOLVER: _logToStderrWithLabel,
- Level.FINE: _logToStderrWithLabel
- });
-
- const Verbosity._(this.name, this._loggers);
- final String name;
- final Map<Level, _LogFn> _loggers;
-
- /// Returns whether or not logs at [level] will be printed.
- bool isLevelVisible(Level level) => _loggers[level] != null;
-
- String toString() => name;
-}
-
-/// A single log entry.
-class Entry {
- final Level level;
- final List<String> lines;
-
- Entry(this.level, this.lines);
-}
-
-/// Logs [message] at [Level.ERROR].
-///
-/// If [error] is passed, it's appended to [message]. If [trace] is passed, it's
-/// printed at log level fine.
-void error(message, [error, StackTrace trace]) {
- if (error != null) {
- message = "$message: $error";
- if (error is Error && trace == null) trace = error.stackTrace;
- }
- write(Level.ERROR, message);
- if (trace != null) write(Level.FINE, new Chain.forTrace(trace));
-}
-
-/// Logs [message] at [Level.WARNING].
-void warning(message) => write(Level.WARNING, message);
-
-/// Logs [message] at [Level.MESSAGE].
-void message(message) => write(Level.MESSAGE, message);
-
-/// Logs [message] at [Level.IO].
-void io(message) => write(Level.IO, message);
-
-/// Logs [message] at [Level.SOLVER].
-void solver(message) => write(Level.SOLVER, message);
-
-/// Logs [message] at [Level.FINE].
-void fine(message) => write(Level.FINE, message);
-
-/// Logs [message] at [level].
-void write(Level level, message) {
- message = message.toString();
- var lines = splitLines(message);
-
- // Discard a trailing newline. This is useful since StringBuffers often end
- // up with an extra newline at the end from using [writeln].
- if (lines.isNotEmpty && lines.last == "") {
- lines.removeLast();
- }
-
- var entry = new Entry(level, lines.map(format).toList());
-
- var logFn = verbosity._loggers[level];
- if (logFn != null) logFn(entry);
-
- if (_transcript != null) _transcript.add(entry);
-}
-
-final _capitalizedAnsiEscape = new RegExp(r'\u001b\[\d+(;\d+)?M');
-
-/// Returns [string] formatted as it would be if it were logged.
-String format(String string) {
- if (!withPrejudice) return string;
-
- // [toUpperCase] can corrupt terminal colorings, so fix them up using
- // [replaceAllMapped].
- string = string.toUpperCase().replaceAllMapped(
- _capitalizedAnsiEscape,
- (match) => match[0].toLowerCase());
-
- // Don't use [bold] because it's disabled under [withPrejudice].
- return "$_bold$string$_none";
-}
-
-/// Logs an asynchronous IO operation.
-///
-/// Logs [startMessage] before the operation starts, then when [operation]
-/// completes, invokes [endMessage] with the completion value and logs the
-/// result of that. Returns a future that completes after the logging is done.
-///
-/// If [endMessage] is omitted, then logs "Begin [startMessage]" before the
-/// operation and "End [startMessage]" after it.
-Future ioAsync(String startMessage, Future operation, [String
- endMessage(value)]) {
- if (endMessage == null) {
- io("Begin $startMessage.");
- } else {
- io(startMessage);
- }
-
- return operation.then((result) {
- if (endMessage == null) {
- io("End $startMessage.");
- } else {
- io(endMessage(result));
- }
- return result;
- });
-}
-
-/// Logs the spawning of an [executable] process with [arguments] at [IO]
-/// level.
-void process(String executable, List<String> arguments, String workingDirectory)
- {
- io(
- "Spawning \"$executable ${arguments.join(' ')}\" in "
- "${p.absolute(workingDirectory)}");
-}
-
-/// Logs the results of running [executable].
-void processResult(String executable, PubProcessResult result) {
- // Log it all as one message so that it shows up as a single unit in the logs.
- var buffer = new StringBuffer();
- buffer.writeln("Finished $executable. Exit code ${result.exitCode}.");
-
- dumpOutput(String name, List<String> output) {
- if (output.length == 0) {
- buffer.writeln("Nothing output on $name.");
- } else {
- buffer.writeln("$name:");
- var numLines = 0;
- for (var line in output) {
- if (++numLines > 1000) {
- buffer.writeln(
- '[${output.length - 1000}] more lines of output ' 'truncated...]');
- break;
- }
-
- buffer.writeln("| $line");
- }
- }
- }
-
- dumpOutput("stdout", result.stdout);
- dumpOutput("stderr", result.stderr);
-
- io(buffer.toString().trim());
-}
-
-/// Logs an exception.
-void exception(exception, [StackTrace trace]) {
- if (exception is SilentException) return;
-
- var chain = trace == null ? new Chain.current() : new Chain.forTrace(trace);
-
- // This is basically the top-level exception handler so that we don't
- // spew a stack trace on our users.
- if (exception is SourceSpanException) {
- error(exception.toString(color: canUseSpecialChars));
- } else {
- error(getErrorMessage(exception));
- }
- fine("Exception type: ${exception.runtimeType}");
-
- if (json.enabled) {
- if (exception is UsageException) {
- // Don't print usage info in JSON output.
- json.error(exception.message);
- } else {
- json.error(exception);
- }
- }
-
- if (!isUserFacingException(exception)) {
- error(chain.terse);
- } else {
- fine(chain.terse);
- }
-
- if (exception is WrappedException && exception.innerError != null) {
- var message = "Wrapped exception: ${exception.innerError}";
- if (exception.innerChain != null) {
- message = "$message\n${exception.innerChain}";
- }
- fine(message);
- }
-}
-
-/// Enables recording of log entries.
-void recordTranscript() {
- _transcript = new Transcript<Entry>(_MAX_TRANSCRIPT);
-}
-
-/// If [recordTranscript()] was called, then prints the previously recorded log
-/// transcript to stderr.
-void dumpTranscript() {
- if (_transcript == null) return;
-
- stderr.writeln('---- Log transcript ----');
- _transcript.forEach((entry) {
- _printToStream(stderr, entry, showLabel: true);
- }, (discarded) {
- stderr.writeln('---- ($discarded discarded) ----');
- });
- stderr.writeln('---- End log transcript ----');
-}
-
-/// Prints [message] then displays an updated elapsed time until the future
-/// returned by [callback] completes.
-///
-/// If anything else is logged during this (including another call to
-/// [progress]) that cancels the progress animation, although the total time
-/// will still be printed once it finishes. If [fine] is passed, the progress
-/// information will only be visible at [Level.FINE].
-Future progress(String message, Future callback(), {bool fine: false}) {
- _stopProgress();
-
- var progress = new Progress(message, fine: fine);
- _animatedProgress = progress;
- return callback().whenComplete(progress.stop);
-}
-
-/// Stops animating the running progress indicator, if currently running.
-void _stopProgress() {
- if (_animatedProgress != null) _animatedProgress.stopAnimating();
- _animatedProgress = null;
-}
-
-/// The number of outstanding calls to [muteProgress] that have not been unmuted
-/// yet.
-int _numMutes = 0;
-
-/// Whether progress animation should be muted or not.
-bool get isMuted => _numMutes > 0;
-
-/// Stops animating any ongoing progress.
-///
-/// This is called before spawning Git since Git sometimes writes directly to
-/// the terminal to ask for login credentials, which would then get overwritten
-/// by the progress animation.
-///
-/// Each call to this must be paired with a call to [unmuteProgress].
-void muteProgress() {
- _numMutes++;
-}
-
-/// Resumes animating any ongoing progress once all calls to [muteProgress]
-/// have made their matching [unmuteProgress].
-void unmuteProgress() {
- assert(_numMutes > 0);
- _numMutes--;
-}
-
-/// Wraps [text] in the ANSI escape codes to make it bold when on a platform
-/// that supports that.
-///
-/// Use this to highlight the most important piece of a long chunk of text.
-///
-/// This is disabled under [withPrejudice] since all text is bold with
-/// prejudice.
-String bold(text) => withPrejudice ? text : "$_bold$text$_none";
-
-/// Wraps [text] in the ANSI escape codes to make it gray when on a platform
-/// that supports that.
-///
-/// Use this for text that's less important than the text around it.
-///
-/// The gray marker also enables bold, so it needs to be handled specially with
-/// [withPrejudice] to avoid disabling bolding entirely.
-String gray(text) =>
- withPrejudice ? "$_gray$text$_noColor" : "$_gray$text$_none";
-
-/// Wraps [text] in the ANSI escape codes to color it cyan when on a platform
-/// that supports that.
-///
-/// Use this to highlight something interesting but neither good nor bad.
-String cyan(text) => "$_cyan$text$_noColor";
-
-/// Wraps [text] in the ANSI escape codes to color it green when on a platform
-/// that supports that.
-///
-/// Use this to highlight something successful or otherwise positive.
-String green(text) => "$_green$text$_noColor";
-
-/// Wraps [text] in the ANSI escape codes to color it magenta when on a
-/// platform that supports that.
-///
-/// Use this to highlight something risky that the user should be aware of but
-/// may intend to do.
-String magenta(text) => "$_magenta$text$_noColor";
-
-/// Wraps [text] in the ANSI escape codes to color it red when on a platform
-/// that supports that.
-///
-/// Use this to highlight unequivocal errors, problems, or failures.
-String red(text) => "$_red$text$_noColor";
-
-/// Wraps [text] in the ANSI escape codes to color it yellow when on a platform
-/// that supports that.
-///
-/// Use this to highlight warnings, cautions or other things that are bad but
-/// do not prevent the user's goal from being reached.
-String yellow(text) => "$_yellow$text$_noColor";
-
-/// Log function that prints the message to stdout.
-void _logToStdout(Entry entry) {
- _logToStream(stdout, entry, showLabel: false);
-}
-
-/// Log function that prints the message to stdout with the level name.
-void _logToStdoutWithLabel(Entry entry) {
- _logToStream(stdout, entry, showLabel: true);
-}
-
-/// Log function that prints the message to stderr.
-void _logToStderr(Entry entry) {
- _logToStream(stderr, entry, showLabel: false);
-}
-
-/// Log function that prints the message to stderr with the level name.
-void _logToStderrWithLabel(Entry entry) {
- _logToStream(stderr, entry, showLabel: true);
-}
-
-void _logToStream(IOSink sink, Entry entry, {bool showLabel}) {
- if (json.enabled) return;
-
- _printToStream(sink, entry, showLabel: showLabel);
-}
-
-void _printToStream(IOSink sink, Entry entry, {bool showLabel}) {
- _stopProgress();
-
- bool firstLine = true;
- for (var line in entry.lines) {
- if (showLabel) {
- if (firstLine) {
- sink.write('${entry.level.name}: ');
- } else {
- sink.write(' | ');
- }
- }
-
- sink.writeln(line);
-
- firstLine = false;
- }
-}
-
-/// Namespace-like class for collecting the methods for JSON logging.
-class _JsonLogger {
- /// Whether logging should use machine-friendly JSON output or human-friendly
- /// text.
- ///
- /// If set to `true`, then no regular logging is printed. Logged messages
- /// will still be recorded and displayed if the transcript is printed.
- bool enabled = false;
-
- /// Creates an error JSON object for [error] and prints it if JSON output
- /// is enabled.
- ///
- /// Always prints to stdout.
- void error(error, [stackTrace]) {
- var errorJson = {
- "error": error.toString()
- };
-
- if (stackTrace == null && error is Error) stackTrace = error.stackTrace;
- if (stackTrace != null) {
- errorJson["stackTrace"] = new Chain.forTrace(stackTrace).toString();
- }
-
- // If the error came from a file, include the path.
- if (error is SourceSpanException && error.span.sourceUrl != null) {
- errorJson["path"] = p.fromUri(error.span.sourceUrl);
- }
-
- if (error is FileException) {
- errorJson["path"] = error.path;
- }
-
- this.message(errorJson);
- }
-
- /// Encodes [message] to JSON and prints it if JSON output is enabled.
- void message(message) {
- if (!enabled) return;
-
- print(JSON.encode(message));
- }
-}
« no previous file with comments | « sdk/lib/_internal/pub_generated/lib/src/lock_file.dart ('k') | sdk/lib/_internal/pub_generated/lib/src/oauth2.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698