Bug 1329191 - Download clang-format 4.0 from tooltool and add a checksum check. Flake8 on the rest of the file r?gps draft
authorSylvestre Ledru <sledru@mozilla.com>
Fri, 06 Jan 2017 15:52:07 +0100
changeset 456934 ce68eca186105c5576b3cc088b0025a2db4a758c
parent 456933 e707872fe4576d6011346a768ae27f074042151d
child 456940 9610ba5684d0d8b53c2ba5b68e0adeae9a569010
child 457028 90e06863cdb61431ac5c5c42cab7e4d76db671c1
push id40648
push userbmo:sledru@mozilla.com
push dateFri, 06 Jan 2017 14:52:33 +0000
reviewersgps
bugs1329191
milestone53.0a1
Bug 1329191 - Download clang-format 4.0 from tooltool and add a checksum check. Flake8 on the rest of the file r?gps MozReview-Commit-ID: FKTrXgVdjZs
tools/mach_commands.py
--- a/tools/mach_commands.py
+++ b/tools/mach_commands.py
@@ -18,57 +18,57 @@ from mach.decorators import (
 )
 
 from mozbuild.base import MachCommandBase, MozbuildObject
 
 
 @CommandProvider
 class SearchProvider(object):
     @Command('dxr', category='misc',
-        description='Search for something in DXR.')
+             description='Search for something in DXR.')
     @CommandArgument('term', nargs='+', help='Term(s) to search for.')
     def dxr(self, term):
         import webbrowser
         term = ' '.join(term)
         uri = 'http://dxr.mozilla.org/mozilla-central/search?q=%s&redirect=true' % term
         webbrowser.open_new_tab(uri)
 
     @Command('mdn', category='misc',
-        description='Search for something on MDN.')
+             description='Search for something on MDN.')
     @CommandArgument('term', nargs='+', help='Term(s) to search for.')
     def mdn(self, term):
         import webbrowser
         term = ' '.join(term)
         uri = 'https://developer.mozilla.org/search?q=%s' % term
         webbrowser.open_new_tab(uri)
 
     @Command('google', category='misc',
-        description='Search for something on Google.')
+             description='Search for something on Google.')
     @CommandArgument('term', nargs='+', help='Term(s) to search for.')
     def google(self, term):
         import webbrowser
         term = ' '.join(term)
         uri = 'https://www.google.com/search?q=%s' % term
         webbrowser.open_new_tab(uri)
 
     @Command('search', category='misc',
-        description='Search for something on the Internets. '
-        'This will open 3 new browser tabs and search for the term on Google, '
-        'MDN, and DXR.')
+             description='Search for something on the Internets. '
+             'This will open 3 new browser tabs and search for the term on Google, '
+             'MDN, and DXR.')
     @CommandArgument('term', nargs='+', help='Term(s) to search for.')
     def search(self, term):
         self.google(term)
         self.mdn(term)
         self.dxr(term)
 
 
 @CommandProvider
 class UUIDProvider(object):
     @Command('uuid', category='misc',
-        description='Generate a uuid.')
+             description='Generate a uuid.')
     @CommandArgument('--format', '-f', choices=['idl', 'cpp', 'c++'],
                      help='Output format for the generated uuid.')
     def uuid(self, format=None):
         import uuid
         u = uuid.uuid4()
         if format in [None, 'idl']:
             print(u)
             if format is None:
@@ -120,62 +120,61 @@ class RageProvider(MachCommandBase):
                     pass
 
         if not user:
             try:
                 user = getpass.getuser()
             except Exception:
                 pass
 
-        url = 'https://docs.google.com/a/mozilla.com/forms/d/e/1FAIpQLSeDVC3IXJu5d33Hp_ZTCOw06xEUiYH1pBjAqJ1g_y63sO2vvA/viewform'
+        url = 'https://docs.google.com/a/mozilla.com/forms/d/e/1FAIpQLSeDVC3IXJu5d33Hp_ZTCOw06xEUiYH1pBjAqJ1g_y63sO2vvA/viewform'  # noqa: E501
         if user:
             url += '?entry.1281044204=%s' % urllib.quote(user)
 
         print('Please leave your feedback in the opened web form')
         webbrowser.open_new_tab(url)
 
 
 @CommandProvider
 class PastebinProvider(object):
     @Command('pastebin', category='misc',
-        description='Command line interface to pastebin.mozilla.org.')
+             description='Command line interface to pastebin.mozilla.org.')
     @CommandArgument('--language', default=None,
                      help='Language to use for syntax highlighting')
     @CommandArgument('--poster', default='',
                      help='Specify your name for use with pastebin.mozilla.org')
     @CommandArgument('--duration', default='day',
                      choices=['d', 'day', 'm', 'month', 'f', 'forever'],
                      help='Keep for specified duration (default: %(default)s)')
     @CommandArgument('file', nargs='?', default=None,
                      help='Specify the file to upload to pastebin.mozilla.org')
-
     def pastebin(self, language, poster, duration, file):
         import urllib
         import urllib2
 
         URL = 'https://pastebin.mozilla.org/'
 
         FILE_TYPES = [{'value': 'text', 'name': 'None', 'extension': 'txt'},
-        {'value': 'bash', 'name': 'Bash', 'extension': 'sh'},
-        {'value': 'c', 'name': 'C', 'extension': 'c'},
-        {'value': 'cpp', 'name': 'C++', 'extension': 'cpp'},
-        {'value': 'html4strict', 'name': 'HTML', 'extension': 'html'},
-        {'value': 'javascript', 'name': 'Javascript', 'extension': 'js'},
-        {'value': 'javascript', 'name': 'Javascript', 'extension': 'jsm'},
-        {'value': 'lua', 'name': 'Lua', 'extension': 'lua'},
-        {'value': 'perl', 'name': 'Perl', 'extension': 'pl'},
-        {'value': 'php', 'name': 'PHP', 'extension': 'php'},
-        {'value': 'python', 'name': 'Python', 'extension': 'py'},
-        {'value': 'ruby', 'name': 'Ruby', 'extension': 'rb'},
-        {'value': 'css', 'name': 'CSS', 'extension': 'css'},
-        {'value': 'diff', 'name': 'Diff', 'extension': 'diff'},
-        {'value': 'ini', 'name': 'INI file', 'extension': 'ini'},
-        {'value': 'java', 'name': 'Java', 'extension': 'java'},
-        {'value': 'xml', 'name': 'XML', 'extension': 'xml'},
-        {'value': 'xml', 'name': 'XML', 'extension': 'xul'}]
+                      {'value': 'bash', 'name': 'Bash', 'extension': 'sh'},
+                      {'value': 'c', 'name': 'C', 'extension': 'c'},
+                      {'value': 'cpp', 'name': 'C++', 'extension': 'cpp'},
+                      {'value': 'html4strict', 'name': 'HTML', 'extension': 'html'},
+                      {'value': 'javascript', 'name': 'Javascript', 'extension': 'js'},
+                      {'value': 'javascript', 'name': 'Javascript', 'extension': 'jsm'},
+                      {'value': 'lua', 'name': 'Lua', 'extension': 'lua'},
+                      {'value': 'perl', 'name': 'Perl', 'extension': 'pl'},
+                      {'value': 'php', 'name': 'PHP', 'extension': 'php'},
+                      {'value': 'python', 'name': 'Python', 'extension': 'py'},
+                      {'value': 'ruby', 'name': 'Ruby', 'extension': 'rb'},
+                      {'value': 'css', 'name': 'CSS', 'extension': 'css'},
+                      {'value': 'diff', 'name': 'Diff', 'extension': 'diff'},
+                      {'value': 'ini', 'name': 'INI file', 'extension': 'ini'},
+                      {'value': 'java', 'name': 'Java', 'extension': 'java'},
+                      {'value': 'xml', 'name': 'XML', 'extension': 'xml'},
+                      {'value': 'xml', 'name': 'XML', 'extension': 'xul'}]
 
         lang = ''
 
         if file:
             try:
                 with open(file, 'r') as f:
                     content = f.read()
                 # TODO: Use mime-types instead of extensions; suprocess('file <f_name>')
@@ -190,17 +189,16 @@ class PastebinProvider(object):
                 return 1
         else:
             content = sys.stdin.read()
         duration = duration[0]
 
         if language:
             lang = language
 
-
         params = [
             ('parent_pid', ''),
             ('format', lang),
             ('code2', content),
             ('poster', poster),
             ('expiry', duration),
             ('paste', 'Send')]
 
@@ -209,29 +207,29 @@ class PastebinProvider(object):
         try:
             req = urllib2.Request(URL, data)
             response = urllib2.urlopen(req)
             http_response_code = response.getcode()
             if http_response_code == 200:
                 print(response.geturl())
             else:
                 print('Could not upload the file, '
-                      'HTTP Response Code %s' %(http_response_code))
+                      'HTTP Response Code %s' % (http_response_code))
         except urllib2.URLError:
             print('ERROR. Could not connect to pastebin.mozilla.org.')
             return 1
         return 0
 
 
 @CommandProvider
 class FormatProvider(MachCommandBase):
     @Command('clang-format', category='misc',
-        description='Run clang-format on current changes')
-    @CommandArgument('--show', '-s', action = 'store_true',
-        help = 'Show diff output on instead of applying changes')
+             description='Run clang-format on current changes')
+    @CommandArgument('--show', '-s', action='store_true',
+                     help='Show diff output on instead of applying changes')
     def clang_format(self, show=False):
         import urllib2
 
         plat = platform.system()
         fmt = plat.lower() + "/clang-format-4.0"
         fmt_diff = "clang-format-diff-4.0"
 
         # We are currently using an unmodified snapshot of upstream clang-format.
@@ -258,49 +256,50 @@ class FormatProvider(MachCommandBase):
         except urllib2.HTTPError as e:
             print("HTTP error {0}: {1}".format(e.code, e.reason))
             return 1
 
         from subprocess import Popen, PIPE
 
         if os.path.exists(".hg"):
             diff_process = Popen(["hg", "diff", "-U0", "-r", "tip^",
-                                  "--include", "glob:**.c", "--include", "glob:**.cpp", "--include", "glob:**.h",
+                                  "--include", "glob:**.c", "--include", "glob:**.cpp",
+                                  "--include", "glob:**.h",
                                   "--exclude", "listfile:.clang-format-ignore"], stdout=PIPE)
         else:
             git_process = Popen(["git", "diff", "--no-color", "-U0", "HEAD^"], stdout=PIPE)
             try:
                 diff_process = Popen(["filterdiff", "--include=*.h", "--include=*.cpp",
                                       "--exclude-from-file=.clang-format-ignore"],
                                      stdin=git_process.stdout, stdout=PIPE)
             except OSError as e:
                 if e.errno == errno.ENOENT:
                     print("Can't find filterdiff. Please install patchutils.")
                 else:
                     print("OSError {0}: {1}".format(e.code, e.reason))
                 return 1
 
-
         args = [sys.executable, clang_format_diff, "-p1"]
         if not show:
-           args.append("-i")
+            args.append("-i")
         cf_process = Popen(args, stdin=diff_process.stdout)
         return cf_process.communicate()[0]
 
     def locate_or_fetch(self, root, python_script=False):
         import urllib2
         import hashlib
         bin_sha = {
             "Windows": "51ad909026e7adcc9342a199861ab4882d5ecbbd24ec76aee1d620ed5ee93c94079485214a7e4656180fb889ced11fc137aff9b1e08b474af5c21a2506407b7d",  # noqa: E501
             "Linux": "3f85905248f103c7c6761e622a2a374fa26fe0b90cb78e65496596f39788621871fcf2619092975d362c2001c544fa662ebdca227042ef40369a16f564fe51a8",  # noqa: E501
             "Darwin": "b07ed6bbb08bf71d8e9985b68e60fc8e9abda05d4b16f2123a188eb35fabb3f0b0123b9224aea7e51cae4cc59ddc25ffce55007fc841a8c30b195961841f850c",  # noqa: E501
             "python_script": "00d6d6628c9e1af4a250bae09bef27bcb9ba9e325c7ae11de9413d247fa327c512e4a17dd82ba871532038dfd48985a01c4c21f0cb868c531b852d04160cd757",  # noqa: E501
         }
 
         target = os.path.join(self._mach_context.state_dir, os.path.basename(root))
+
         if not os.path.exists(target):
             tooltool_url = "https://api.pub.build.mozilla.org/tooltool/sha512/"
             if self.prompt and raw_input("Download clang-format executables from {0} (yN)? ".format(tooltool_url)).lower() != 'y':  # noqa: E501,F821
                 print("Download aborted.")
                 return 1
             self.prompt = False
             plat = platform.system()
             if python_script:
@@ -320,16 +319,17 @@ class FormatProvider(MachCommandBase):
                 return 1
             with open(temp, "wb") as fh:
                 fh.write(data)
                 fh.close()
             os.chmod(temp, os.stat(temp).st_mode | stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH)
             os.rename(temp, target)
         return target
 
+
 def mozregression_import():
     # Lazy loading of mozregression.
     # Note that only the mach_interface module should be used from this file.
     try:
         import mozregression.mach_interface
     except ImportError:
         return None
     return mozregression.mach_interface