Index: sky/tools/pretty-diff |
diff --git a/sky/tools/webkit-patch b/sky/tools/pretty-diff |
similarity index 51% |
copy from sky/tools/webkit-patch |
copy to sky/tools/pretty-diff |
index 2ed9d8daef37b112036410c87670d5036640c46f..5ddeab0ac66030e6f0e1725329d35bcd6a92e24e 100755 |
--- a/sky/tools/webkit-patch |
+++ b/sky/tools/pretty-diff |
@@ -32,52 +32,62 @@ |
# |
# A tool for automating dealing with bugzilla, posting patches, committing patches, etc. |
-import logging |
-import os |
-import signal |
-import sys |
-import codecs |
+import time |
+import urllib |
+import webbrowser |
-import webkitpy.common.version_check |
+from webkitpy.common.prettypatch import PrettyPatch |
+from webkitpy.common.system import logutils |
+from webkitpy.common.system.executive import Executive |
+from webkitpy.common.system.executive import ScriptError |
+from webkitpy.common.system.filesystem import FileSystem |
+from webkitpy.common.checkout.scm.detection import detect_scm_system |
-from webkitpy.common.system.logutils import configure_logging |
-from webkitpy.tool.main import WebKitPatch |
-# A StreamWriter will by default try to encode all objects passed |
-# to write(), so when passed a raw string already encoded as utf8, |
-# it will blow up with an UnicodeDecodeError. This does not match |
-# the default behaviour of writing to sys.stdout, so we intercept |
-# the case of writing raw strings and make sure StreamWriter gets |
-# input that it can handle. |
-class ForgivingUTF8Writer(codecs.lookup('utf-8')[-1]): |
- def write(self, object): |
- if isinstance(object, str): |
- # Assume raw strings are utf-8 encoded. If this line |
- # fails with an UnicodeDecodeError, our assumption was |
- # wrong, and the stacktrace should show you where we |
- # write non-Unicode/UTF-8 data (which we shouldn't). |
- object = object.decode('utf-8') |
- return codecs.StreamWriter.write(self, object) |
+_log = logutils.get_logger(__file__) |
-# By default, sys.stdout assumes ascii encoding. Since our messages can |
-# contain unicode strings (as with some peoples' names) we need to apply |
-# the utf-8 codec to prevent throwing and exception. |
-# Not having this was the cause of https://bugs.webkit.org/show_bug.cgi?id=63452. |
-sys.stdout = ForgivingUTF8Writer(sys.stdout) |
-_log = logging.getLogger("webkit-patch") |
+def can_open_url(): |
+ try: |
+ webbrowser.get() |
+ return True |
+ except webbrowser.Error, e: |
+ return False |
-def main(): |
- # 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) |
- WebKitPatch(os.path.abspath(__file__)).main() |
+def open_url(url): |
+ if not can_open_url(): |
+ _log.warn("Failed to open %s" % url) |
+ webbrowser.open(url) |
+def show_pretty_diff(): |
+ if not can_open_url(): |
+ return None |
+ |
+ try: |
+ pretty_patch = PrettyPatch(Executive()) |
+ pretty_diff_file = pretty_patch.pretty_diff_file(diff()) |
+ url = "file://%s" % urllib.quote(pretty_diff_file.name) |
+ open_url(url) |
+ # We return the pretty_diff_file here because we need to keep the |
+ # file alive until the user has had a chance to confirm the diff. |
+ return pretty_diff_file |
+ except ScriptError, e: |
+ _log.warning("PrettyPatch failed. :(") |
+ except OSError, e: |
+ _log.warning("PrettyPatch unavailable.") |
+ |
+def diff(): |
+ scm = detect_scm_system(FileSystem().getcwd()) |
+ changed_files = scm.changed_files() |
+ return scm.create_patch(None, changed_files=changed_files) |
+ |
+def main(): |
+ pretty_diff_file = show_pretty_diff() |
+ # This is a terrible hack. Try to give enough time for the |
+ # browser to actually load the file. |
+ time.sleep(1) |
+ if pretty_diff_file: |
+ pretty_diff_file.close() |
if __name__ == "__main__": |
try: |