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 374487 a115a788ded675737751fb113e2622a6ee485130
parent 374486 4c2947db3419832adaae416db24d46221c50ca85
child 374488 829f16159b89b921eb81e0f26954ef54ae55034b
child 374510 67e09570f10aa8739f479466e8df6437eaf7cf8b
push id6996
push userjlorenzo@mozilla.com
push dateMon, 06 Mar 2017 20:48:21 +0000
treeherdermozilla-beta@d89512dab048 [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