Bug 1292668 - mach rage; r?jgriffin draft
authorGregory Szorc <gps@mozilla.com>
Fri, 05 Aug 2016 13:35:12 -0700
changeset 397420 e77590b69de1cad3c823d100b1a910b524b34af4
parent 397385 192132a4cbc78fa948ad1e37c204f537043fc37e
child 527456 7c904c9406506cea73fa112906b2daf8918698a0
push id25298
push userbmo:gps@mozilla.com
push dateFri, 05 Aug 2016 20:44:28 +0000
reviewersjgriffin
bugs1292668
milestone51.0a1
Bug 1292668 - mach rage; r?jgriffin This commit introduces the `mach rage` command. It opens a web browser and loads a new tab with a short Google Form. Google Forms appears to not have optional login where they capture login info if available. So, we attempt to prepopulate the contact info from version control or from the current login name. This field is directly above the submit button, so it should be obvious enough that people can clear it if they want to leave an anonymous response. The alternative is we require a login to the Mozilla Google Apps account. And that feels wrong. r+ on this bug also constitutes r+ on the Google Form content. MozReview-Commit-ID: HVAVVVva29T
tools/mach_commands.py
--- a/tools/mach_commands.py
+++ b/tools/mach_commands.py
@@ -4,16 +4,17 @@
 
 from __future__ import absolute_import, unicode_literals
 
 import sys
 import os
 import stat
 import platform
 import errno
+import subprocess
 
 from mach.decorators import (
     CommandArgument,
     CommandProvider,
     Command,
 )
 
 from mozbuild.base import MachCommandBase, MozbuildObject
@@ -75,16 +76,69 @@ class UUIDProvider(object):
         if format in [None, 'cpp', 'c++']:
             u = u.hex
             print('{ 0x%s, 0x%s, 0x%s, \\' % (u[0:8], u[8:12], u[12:16]))
             pairs = tuple(map(lambda n: u[n:n+2], range(16, 32, 2)))
             print(('  { ' + '0x%s, ' * 7 + '0x%s } }') % pairs)
 
 
 @CommandProvider
+class RageProvider(MachCommandBase):
+    @Command('rage', category='misc',
+             description='Express your frustration')
+    def rage(self):
+        """Have a bad experience developing Firefox? Run this command to
+        express your frustration.
+
+        This command will open your default configured web browser to a short
+        form where you can submit feedback. Just close the tab when done.
+        """
+        import getpass
+        import urllib
+        import webbrowser
+
+        # Try to resolve the current user.
+        user = None
+        with open(os.devnull, 'wb') as null:
+            if os.path.exists(os.path.join(self.topsrcdir, '.hg')):
+                try:
+                    user = subprocess.check_output(['hg', 'config',
+                                                    'ui.username'],
+                                                   cwd=self.topsrcdir,
+                                                   stderr=null)
+
+                    i = user.find('<')
+                    if i >= 0:
+                        user = user[i + 1:-2]
+                except subprocess.CalledProcessError:
+                    pass
+            elif os.path.exists(os.path.join(self.topsrcdir, '.git')):
+                try:
+                    user = subprocess.check_output(['git', 'config', '--get',
+                                                    'user.email'],
+                                                   cwd=self.topsrcdir,
+                                                   stderr=null)
+                except subprocess.CalledProcessError:
+                    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'
+        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.')
     @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',