2010-05-24 Eric Seidel <eric@webkit.org>
authoreric@webkit.org <eric@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 24 May 2010 08:31:09 +0000 (08:31 +0000)
committereric@webkit.org <eric@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 24 May 2010 08:31:09 +0000 (08:31 +0000)
        Reviewed by Chris Jerdonek.

        webkit-patch needs --verbose flag to enable DEBUG logging
        https://bugs.webkit.org/show_bug.cgi?id=39208

        I also added some code to print out how long commands take to run.

        * Scripts/webkit-patch:
         - Add hackish -v/--verbose parsing (similar to check-webkit-style)
        * Scripts/webkitpy/common/system/executive.py:
         - Log how long commands take to run.
        * Scripts/webkitpy/tool/main.py:
         - Add -v/--verbose option to global options.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@60066 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebKitTools/ChangeLog
WebKitTools/Scripts/webkit-patch
WebKitTools/Scripts/webkitpy/common/system/executive.py
WebKitTools/Scripts/webkitpy/tool/main.py

index bec231f..f48e031 100644 (file)
@@ -1,3 +1,19 @@
+2010-05-24  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Chris Jerdonek.
+
+        webkit-patch needs --verbose flag to enable DEBUG logging
+        https://bugs.webkit.org/show_bug.cgi?id=39208
+
+        I also added some code to print out how long commands take to run.
+
+        * Scripts/webkit-patch:
+         - Add hackish -v/--verbose parsing (similar to check-webkit-style)
+        * Scripts/webkitpy/common/system/executive.py:
+         - Log how long commands take to run.
+        * Scripts/webkitpy/tool/main.py:
+         - Add -v/--verbose option to global options.
+
 2010-05-23  Eric Seidel  <eric@webkit.org>
 
         Reviewed by Daniel Bates.
index e0170ed..8300b9f 100755 (executable)
@@ -1,5 +1,5 @@
 #!/usr/bin/env python
-# Copyright (c) 2009, Google Inc. All rights reserved.
+# Copyright (c) 2010 Google Inc. All rights reserved.
 # Copyright (c) 2009 Apple Inc. All rights reserved.
 # Copyright (C) 2010 Chris Jerdonek (cjerdonek@webkit.org)
 #
@@ -31,6 +31,7 @@
 #
 # A tool for automating dealing with bugzilla, posting patches, committing patches, etc.
 
+import logging
 import os
 import sys
 
@@ -39,7 +40,14 @@ import webkitpy.python24.versioning as versioning
 
 
 def main():
-    configure_logging()
+    # This is a hack to let us enable DEBUG logging as early as possible.
+    # Note this can't be ternary as versioning.check_version()
+    # hasn't run yet and this python might be older than 2.5.
+    if set(["-v", "--verbose"]).intersection(set(sys.argv)):
+        logging_level = logging.DEBUG
+    else:
+        logging_level = logging.INFO
+    configure_logging(logging_level=logging_level)
 
     versioning.check_version()
 
index 0fd21c7..9c5889b 100644 (file)
@@ -41,6 +41,7 @@ import StringIO
 import signal
 import subprocess
 import sys
+import time
 
 from webkitpy.common.system.deprecated_logging import tee
 
@@ -255,6 +256,18 @@ class Executive(object):
             input = input.encode("utf-8")
         return (subprocess.PIPE, input)
 
+    def _command_for_printing(self, args):
+        """Returns a print-ready string representing command args.
+        The string should be copy/paste ready for execution in a shell."""
+        escaped_args = []
+        for arg in args:
+            if isinstance(arg, unicode):
+                # Escape any non-ascii characters for easy copy/paste
+                arg = arg.encode("unicode_escape")
+            # FIXME: Do we need to fix quotes here?
+            escaped_args.append(arg)
+        return " ".join(escaped_args)
+
     # FIXME: run_and_throw_if_fail should be merged into this method.
     def run_command(self,
                     args,
@@ -266,6 +279,7 @@ class Executive(object):
                     decode_output=True):
         """Popen wrapper for convenience and to work around python bugs."""
         assert(isinstance(args, list) or isinstance(args, tuple))
+        start_time = time.time()
         args = map(unicode, args)  # Popen will throw an exception if args are non-strings (like int())
         stdin, string_to_communicate = self._compute_stdin(input)
         stderr = subprocess.STDOUT if return_stderr else None
@@ -284,6 +298,8 @@ class Executive(object):
         # http://bugs.python.org/issue1731717
         exit_code = process.wait()
 
+        _log.debug('"%s" took %.2fs' % (self._command_for_printing(args), time.time() - start_time))
+
         if return_exit_code:
             return exit_code
 
index 2dc177d..1f43145 100755 (executable)
@@ -56,6 +56,7 @@ from webkitpy.common.system.deprecated_logging import log
 
 class WebKitPatch(MultiCommandTool):
     global_options = [
+        make_option("-v", "--verbose", action="store_true", dest="verbose", default=False, help="enable all logging"),
         make_option("--dry-run", action="store_true", dest="dry_run", default=False, help="do not touch remote servers"),
         make_option("--status-host", action="store", dest="status_host", type="string", nargs=1, help="Hostname (e.g. localhost or commit.webkit.org) where status updates should be posted."),
         make_option("--irc-password", action="store", dest="irc_password", type="string", nargs=1, help="Password to use when communicating via IRC."),