WM: pre-fill bug-reports
authorCampbell Barton <ideasman42@gmail.com>
Wed, 13 Mar 2019 12:02:51 +0000 (23:02 +1100)
committerCampbell Barton <ideasman42@gmail.com>
Wed, 13 Mar 2019 12:20:48 +0000 (23:20 +1100)
D4507 by @LazyDodo w/ edits & moved into own module.

release/scripts/modules/bl_ui_utils/__init__.py [new file with mode: 0644]
release/scripts/modules/bl_ui_utils/bug_report_url.py [new file with mode: 0644]
release/scripts/startup/bl_ui/space_topbar.py

diff --git a/release/scripts/modules/bl_ui_utils/__init__.py b/release/scripts/modules/bl_ui_utils/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/release/scripts/modules/bl_ui_utils/bug_report_url.py b/release/scripts/modules/bl_ui_utils/bug_report_url.py
new file mode 100644 (file)
index 0000000..510ea5d
--- /dev/null
@@ -0,0 +1,76 @@
+# ##### BEGIN GPL LICENSE BLOCK #####
+#
+#  This program is free software; you can redistribute it and/or
+#  modify it under the terms of the GNU General Public License
+#  as published by the Free Software Foundation; either version 2
+#  of the License, or (at your option) any later version.
+#
+#  This program is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#  GNU General Public License for more details.
+#
+#  You should have received a copy of the GNU General Public License
+#  along with this program; if not, write to the Free Software Foundation,
+#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ##### END GPL LICENSE BLOCK #####
+
+# <pep8-80 compliant>
+
+def url_prefill_from_blender():
+    import bpy
+    import bgl
+    import struct
+    import platform
+    import urllib.parse
+    import io
+
+    fh = io.StringIO()
+
+    fh.write("**System Information**\n")
+    fh.write(
+        "Operating system: {!s} {!s} Bits\n".format(
+            platform.platform(),
+            struct.calcsize("P") * 8,
+        )
+    )
+    fh.write(
+        "Graphics card: {!s} {!s} {!s}\n".format(
+            bgl.glGetString(bgl.GL_RENDERER),
+            bgl.glGetString(bgl.GL_VENDOR),
+            bgl.glGetString(bgl.GL_VERSION),
+        )
+    )
+    fh.write(
+        "\n"
+        "\n**Blender Version**\n"
+    )
+    fh.write(
+        "Broken: version: {!s}, branch: {!s}, commit date: {!s} {!s}, hash: `rB{!s}`\n".format(
+            bpy.app.version_string,
+            bpy.app.build_branch.decode('utf-8', 'replace'),
+            bpy.app.build_commit_date.decode('utf-8', 'replace'),
+            bpy.app.build_commit_time.decode('utf-8', 'replace'),
+            bpy.app.build_hash.decode('ascii'),
+        )
+    )
+    fh.write(
+        "Worked: (optional)\n"
+        "\n"
+        "\n"
+        "**Short description of error**\n"
+        "[Please fill out a short description of the error here]\n"
+        "\n"
+        "**Exact steps for others to reproduce the error**\n"
+        "[Please describe the exact steps needed to reproduce the issue]\n"
+        "[Based on the default startup or an attached .blend file (as simple as possible)]\n"
+        "\n"
+    )
+
+    fh.seek(0)
+
+    return (
+        "https://developer.blender.org/maniphest/task/edit/form/1?description=" +
+        urllib.parse.quote(fh.read())
+    )
index 1414278b159575bc0bc5ca081cf6f80fee1bb474..48922911507877f9b830206cd6a048397d721324 100644 (file)
@@ -868,6 +868,10 @@ class TOPBAR_MT_help(Menu):
     bl_label = "Help"
 
     def draw(self, context):
+        # If 'url_prefill_from_blender' becomes slow it could be made into a separate operator
+        # to avoid constructing the bug report just to show this menu.
+        from bl_ui_utils.bug_report_url import url_prefill_from_blender
+
         layout = self.layout
 
         show_developer = context.preferences.view.show_developer_ui
@@ -878,7 +882,7 @@ class TOPBAR_MT_help(Menu):
 
         layout.operator(
             "wm.url_open", text="Report a Bug", icon='URL',
-        ).url = "https://developer.blender.org/maniphest/task/edit/form/1"
+        ).url = url_prefill_from_blender()
 
         layout.separator()