[diffoscope] 02/03: Improve how jQuery is specified

Jérémy Bobbio lunar at moszumanska.debian.org
Mon Dec 14 00:06:24 CET 2015

This is an automated email from the git hooks/post-receive script.

lunar pushed a commit to branch master
in repository diffoscope.

commit 05684aadd84f3710884e638558f1c5208cafd2b6
Author: Jérémy Bobbio <lunar at debian.org>
Date:   Sun Dec 13 13:20:19 2015 +0000

    Improve how jQuery is specified
    When --html-dir is used without specifying --jquery, diffoscope will look for
    its presence in a list of known locations. If found, a symlink will be created
    in the report directory. This makes it easy to use --html-dir in a local manner
    when libjs-jquery is installed in Debian. Supporting other operating systems
    should be as easy as modifying JQUERY_SYSTEM_LOCATIONS.
    If jQuery cannot be found in any known system locations, JavaScript will be
    disabled and a warning printed. This will still create usable reports as links
    point to proper HTML pages.
    Specifying --jquery=disable will always disable JavaScript.
 diffoscope/__main__.py        |  4 ++--
 diffoscope/presenters/html.py | 23 +++++++++++++++++++----
 2 files changed, 21 insertions(+), 6 deletions(-)

diff --git a/diffoscope/__main__.py b/diffoscope/__main__.py
index 0ba3f94..ac7913c 100644
--- a/diffoscope/__main__.py
+++ b/diffoscope/__main__.py
@@ -34,7 +34,7 @@ from diffoscope import logger, VERSION, set_locale, clean_all_temp_files
 import diffoscope.comparators
 from diffoscope.config import Config
 from diffoscope.presenters.html import output_html
-from diffoscope.presenters.html import output_html_directory
+from diffoscope.presenters.html import output_html_directory, JQUERY_SYSTEM_LOCATIONS
 from diffoscope.presenters.text import output_text
@@ -84,7 +84,7 @@ def create_parser():
     parser.add_argument('--css', metavar='url', dest='css_url',
                         help='link to an extra CSS for the HTML report')
     parser.add_argument('--jquery', metavar='url', dest='jquery_url',
-                        help='link to the jquery url, with --html-dir. By default, a symlink to /usr/share/javascript/jquery/jquery.js is created')
+                        help='link to the jquery url, with --html-dir. Specify “disable” to disable JavaScript. When omitted diffoscope will try to create a symlink to a system installation. Known locations: %s' % ', '.join(JQUERY_SYSTEM_LOCATIONS))
     parser.add_argument('file1', help='first file to compare')
     parser.add_argument('file2', help='second file to compare')
     if not tlsh:
diff --git a/diffoscope/presenters/html.py b/diffoscope/presenters/html.py
index c0c605a..cbf092d 100644
--- a/diffoscope/presenters/html.py
+++ b/diffoscope/presenters/html.py
@@ -575,6 +575,8 @@ def file_printer(directory, filename):
         print_func = create_limited_print_func(print_func, Config.general.max_report_size)
         yield print_func
+JQUERY_SYSTEM_LOCATIONS = ['/usr/share/javascript/jquery/jquery.js']
 def output_html_directory(directory, difference, css_url=None, jquery_url=None):
     Multi-file presenter. Writes to a directory, and puts large diff tables
@@ -589,9 +591,21 @@ def output_html_directory(directory, difference, css_url=None, jquery_url=None):
     if not jquery_url:
         jquery_symlink = os.path.join(directory, "jquery.js")
-        if not os.path.exists(jquery_symlink):
-            os.symlink("/usr/share/javascript/jquery/jquery.js", jquery_symlink)
-        jquery_url = "./jquery.js"
+        if os.path.exists(jquery_symlink):
+            jquery_url = "./jquery.js"
+        else:
+            if os.path.lexists(jquery_symlink):
+                os.unlink(jquery_symlink)
+            for path in JQUERY_SYSTEM_LOCATIONS:
+                if os.path.exists(path):
+                    os.symlink("/usr/share/javascript/jquery/jquery.js", jquery_symlink)
+                    jquery_url = "./jquery.js"
+                    break
+            if not jquery_url:
+                logger.warning('--jquery was not specified and jQuery was not found in any known location. Disabling on-demand inline loading.')
+                logger.debug('Locations searched: %s', ', '.join(JQUERY_SYSTEM_LOCATIONS))
+    if jquery_url == 'disable':
+        jquery_url = None
     with file_printer(directory, "index.html") as print_func:
         print_func = create_limited_print_func(print_func, Config.general.max_report_size)
@@ -602,5 +616,6 @@ def output_html_directory(directory, difference, css_url=None, jquery_url=None):
             logger.debug('print limit reached')
             print_func(u"<div class='error'>Max output size reached.</div>",
-        print_func(SCRIPTS % {'jquery_url': escape(jquery_url)}, force=True)
+        if jquery_url:
+            print_func(SCRIPTS % {'jquery_url': escape(jquery_url)}, force=True)

Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/reproducible/diffoscope.git

More information about the diffoscope mailing list