Bug 1329191 - Download clang-format 4.0 from tooltool and add a checksum check. Flake8 on the rest of the file r=gps
authorSylvestre Ledru <sledru@mozilla.com>
Fri, 06 Jan 2017 15:52:07 +0100
changeset 329493 a115a788ded675737751fb113e2622a6ee485130
parent 329492 4c2947db3419832adaae416db24d46221c50ca85
child 329494 67e09570f10aa8739f479466e8df6437eaf7cf8b
child 329519 829f16159b89b921eb81e0f26954ef54ae55034b
push id36066
push usersledru@mozilla.com
push dateSun, 15 Jan 2017 11:19:32 +0000
treeherderautoland@a115a788ded6 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersgps
bugs1329191
milestone53.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
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