build_externals: announce success moofully.

build_externals (by design) emits a bunch of errors to stdout
on a successful run.  This contributes to the widespread
problem of ChromeOS infrastructure not making success or failure
obvious.  In order to make success/failure more clear here,
this change fixes this problem by announcing success for all
to see.

cowsay, one of the greatest unix tools of all time, can be
used for good or evil.  In this case, it is used for good.

BUG=None
TEST=Run build_externals.py

Change-Id: I5bde86bb847d3a455c234815decf1f5a9faa5235
Reviewed-on: https://chromium-review.googlesource.com/1099732
Commit-Ready: ChromeOS CL Exonerator Bot <chromiumos-cl-exonerator@appspot.gserviceaccount.com>
Tested-by: Craig Bergstrom <craigb@chromium.org>
Reviewed-by: Aviv Keshet <akeshet@chromium.org>
diff --git a/utils/build_externals.py b/utils/build_externals.py
index 7841e83..102adc0 100755
--- a/utils/build_externals.py
+++ b/utils/build_externals.py
@@ -1,6 +1,6 @@
 #!/usr/bin/python
 #
-# Please keep this code python 2.4 compatible and stand alone.
+# Please keep this code python 2.4 compatible and standalone.
 
 """
 Fetch, build and install external Python library dependancies.
@@ -17,6 +17,7 @@
 import logging
 import os
 import sys
+import textwrap
 
 import common
 from autotest_lib.client.common_lib import logging_config, logging_manager
@@ -41,7 +42,10 @@
 
 
 class BuildExternalsLoggingConfig(logging_config.LoggingConfig):
+    """Logging manager config."""
+
     def configure_logging(self, results_dir=None, verbose=False):
+        """Configure logging."""
         super(BuildExternalsLoggingConfig, self).configure_logging(
                                                                use_console=True,
                                                                verbose=verbose)
@@ -92,6 +96,30 @@
     for error_msg in errors:
         logging.error(error_msg)
 
+    if not errors:
+      logging.info(textwrap.dedent("""
+           _______________________________________
+          / You may see errors above, but this is \\
+          \ still SUCCESS. Moo.                   /
+           ---------------------------------------
+                \   ^__^
+                 \  (oo)\_______
+                    (__)\       )\/\\
+                        ||----w |
+                        ||     ||
+          """))
+    else:
+      logging.info(textwrap.dedent("""
+           ________________
+          < I have failed. >
+           ----------------
+                \   ^__^
+                 \  (oo)\_______
+                    (__)\       )\/\\
+                        ||----w |
+                        ||     ||
+          """))
+
     return len(errors)