You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by br...@apache.org on 2019/09/03 22:16:25 UTC

[allura] branch db/8332 created (now 989e9f6)

This is an automated email from the ASF dual-hosted git repository.

brondsem pushed a change to branch db/8332
in repository https://gitbox.apache.org/repos/asf/allura.git.


      at 989e9f6  [#8332] skip syntax highlighting for really large files; add timermiddleware timer for pygments.highlight

This branch includes the following new commits:

     new 989e9f6  [#8332] skip syntax highlighting for really large files; add timermiddleware timer for pygments.highlight

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[allura] 01/01: [#8332] skip syntax highlighting for really large files; add timermiddleware timer for pygments.highlight

Posted by br...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

brondsem pushed a commit to branch db/8332
in repository https://gitbox.apache.org/repos/asf/allura.git

commit 989e9f66f5159c3cafa841a02a28e07948d7f995
Author: Dave Brondsema <da...@brondsema.net>
AuthorDate: Tue Sep 3 18:09:21 2019 -0400

    [#8332] skip syntax highlighting for really large files; add timermiddleware timer for pygments.highlight
---
 Allura/allura/lib/app_globals.py       | 16 ++++++++--------
 Allura/allura/lib/custom_middleware.py |  2 ++
 Allura/development.ini                 |  3 +++
 3 files changed, 13 insertions(+), 8 deletions(-)

diff --git a/Allura/allura/lib/app_globals.py b/Allura/allura/lib/app_globals.py
index a30607e..b948a65 100644
--- a/Allura/allura/lib/app_globals.py
+++ b/Allura/allura/lib/app_globals.py
@@ -402,23 +402,23 @@ class Globals(object):
             return h.html.literal('<em>Empty file</em>')
         # Don't use line numbers for diff highlight's, as per [#1484]
         if lexer == 'diff':
-            formatter = pygments.formatters.HtmlFormatter(
-                cssclass='codehilite', linenos=False)
+            formatter = pygments.formatters.HtmlFormatter(cssclass='codehilite', linenos=False)
         else:
             formatter = self.pygments_formatter
         text = h.really_unicode(text)
         if lexer is None:
-            try:
-                lexer = pygments.lexers.get_lexer_for_filename(
-                    filename, encoding='chardet')
-            except pygments.util.ClassNotFound:
+            if len(text) < asint(config.get('scm.view.max_syntax_highlight_bytes', 500000)):
+                try:
+                    lexer = pygments.lexers.get_lexer_for_filename(filename, encoding='chardet')
+                except pygments.util.ClassNotFound:
+                    pass
+            if lexer is None:
                 # no highlighting, but we should escape, encode, and wrap it in
                 # a <pre>
                 text = cgi.escape(text)
                 return h.html.literal(u'<pre>' + text + u'</pre>')
         else:
-            lexer = pygments.lexers.get_lexer_by_name(
-                lexer, encoding='chardet')
+            lexer = pygments.lexers.get_lexer_by_name(lexer, encoding='chardet')
         return h.html.literal(pygments.highlight(text, lexer, formatter))
 
     def forge_markdown(self, **kwargs):
diff --git a/Allura/allura/lib/custom_middleware.py b/Allura/allura/lib/custom_middleware.py
index 7b52480..27aa2bd 100644
--- a/Allura/allura/lib/custom_middleware.py
+++ b/Allura/allura/lib/custom_middleware.py
@@ -295,6 +295,7 @@ class AlluraTimerMiddleware(TimerMiddleware):
         import socket
         import urllib2
         import activitystream
+        import pygments
 
         timers = self.entry_point_timers() + [
             Timer(
@@ -340,6 +341,7 @@ class AlluraTimerMiddleware(TimerMiddleware):
             Timer('urlopen', urllib2, 'urlopen'),
             Timer('base_repo_tool.{method_name}',
                   allura.model.repository.RepositoryImplementation, 'last_commit_ids'),
+            Timer('pygments', pygments, 'highlight'),  # often called from within a template so will overlap w/ jinja
         ] + [Timer('sidebar', ep.load(), 'sidebar_menu') for ep in tool_entry_points]
 
         try:
diff --git a/Allura/development.ini b/Allura/development.ini
index 4478d73..03d3897 100644
--- a/Allura/development.ini
+++ b/Allura/development.ini
@@ -425,6 +425,9 @@ scm.view.log.limit = 25
 ;   Details at https://forge-allura.apache.org/p/allura/tickets/5496/#1b4a
 scm.view.commit_browser.limit = 500
 
+; Default limit for when to stop doing syntax highlighting (can take a lot of CPU for large files)
+scm.view.max_syntax_highlight_bytes = 500000
+
 ; bulk_export_enabled = true
 ; If you keep bulk_export_enabled, you should set up your server to securely share bulk_export_path with users somehow
 bulk_export_path = /tmp/bulk_export/{nbhd}/{project}