Add a dedicated pretty-diff command.
This will let us delete webkit-patch and a bunch of python code and it will save me some annoyance at needing to type "webkit-patch pretty-diff" all the time. R=abarth@chromium.org Review URL: https://codereview.chromium.org/944193003
This commit is contained in:
96
engine/src/flutter/tools/pretty-diff
Executable file
96
engine/src/flutter/tools/pretty-diff
Executable file
@@ -0,0 +1,96 @@
|
||||
#!/usr/bin/env python
|
||||
# Copyright (c) 2011 Code Aurora Forum. 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)
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met:
|
||||
#
|
||||
# * Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# * Redistributions in binary form must reproduce the above
|
||||
# copyright notice, this list of conditions and the following disclaimer
|
||||
# in the documentation and/or other materials provided with the
|
||||
# distribution.
|
||||
# * Neither the name of Google Inc. nor the names of its
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#
|
||||
# A tool for automating dealing with bugzilla, posting patches, committing patches, etc.
|
||||
|
||||
import time
|
||||
import urllib
|
||||
import webbrowser
|
||||
|
||||
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
|
||||
|
||||
|
||||
_log = logutils.get_logger(__file__)
|
||||
|
||||
|
||||
def can_open_url():
|
||||
try:
|
||||
webbrowser.get()
|
||||
return True
|
||||
except webbrowser.Error, e:
|
||||
return False
|
||||
|
||||
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:
|
||||
main()
|
||||
except KeyboardInterrupt:
|
||||
sys.exit(signal.SIGINT + 128)
|
||||
Reference in New Issue
Block a user