Package: diffoscope Version: 30 Severity: wishlist Tags: upstream patch For various reasons there should be no .py in diffoscope shipped within the source VCS (let me know if I need to elaborate).
Attahed is the patch which should accomplish the mission I guess -- System Information: Debian Release: stretch/sid APT prefers testing APT policy: (900, 'testing'), (600, 'unstable'), (300, 'experimental') Architecture: amd64 (x86_64) Foreign Architectures: i386 Kernel: Linux 3.17-1-amd64 (SMP w/4 CPU cores) Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Init: systemd (via /run/systemd/system) Versions of packages diffoscope depends on: ii python 2.7.9-1 ii python-debian 0.1.27 ii python-libarchive-c 2.1-1 ii python-magic 1:5.22+15-2 ii python-rpm 4.12.0.1+dfsg1-3 ii python-ssdeep 3.1+dfsg-1 pn python:any <none> Versions of packages diffoscope recommends: ii acl 2.2.52-2 ii binutils-multiarch 2.25.1-1 ii bzip2 1.0.6-8 ii cpio 2.11+dfsg-4.1 ii default-jdk [java-sdk] 2:1.7-52 ii fontforge-extras 0.3-4 ii genisoimage 9:1.1.11-3 ii gettext 0.19.4-1 ii ghc 7.8.4-9 ii gnupg 1.4.19-3 ii mono-utils 3.2.8+dfsg-10 ii openjdk-7-jdk [java-sdk] 7u75-2.5.4-2 ii pdftk 2.02-3 ii poppler-utils 0.26.5-2 ii rpm2cpio 4.12.0.1+dfsg1-3 ii sng 1.0.6-2 ii sqlite3 3.8.11.1-1 ii squashfs-tools 1:4.2+20130409-2.1 ii unzip 6.0-17 ii vim-common 2:7.4.712-3 ii xz-utils 5.1.1alpha+20120614-2.1 diffoscope suggests no packages. -- no debconf information
>From 13a9076393bddbc9689069a0ff1dd6803691bf0c Mon Sep 17 00:00:00 2001 From: Yaroslav Halchenko <deb...@onerussian.com> Date: Thu, 20 Aug 2015 10:49:45 +0200 Subject: [PATCH] RF: diffoscope.py -> diffoscope (implementation language is irrelevant) --- README | 4 +- debian/rules | 6 +-- diffoscope.py | 118 ----------------------------------------------- diffoscope/diffoscope.py | 118 +++++++++++++++++++++++++++++++++++++++++++++++ setup.py | 2 +- 5 files changed, 122 insertions(+), 126 deletions(-) delete mode 100755 diffoscope.py create mode 100755 diffoscope/diffoscope.py mode change 100644 => 100755 setup.py diff --git a/README b/README index c08d152..7bad538 100644 --- a/README +++ b/README @@ -24,7 +24,7 @@ debbindiff. Example ------- - $ ./diffoscope.py --html output.html build1.changes build2.changes + $ ./diffoscope --html output.html build1.changes build2.changes This will compare `build1.changes` and `build2.changes` and create `output.html` if there are differences between the two files. @@ -35,7 +35,7 @@ External dependencies The various comparators rely on external commands being available. To get a list of them, please run: - $ ./diffoscope.py --list-tools + $ ./diffoscope --list-tools Contributors ------------ diff --git a/debian/rules b/debian/rules index 78ea5ce..8236beb 100755 --- a/debian/rules +++ b/debian/rules @@ -13,14 +13,10 @@ override_dh_auto_build: dh_auto_build -O--buildsystem=pybuild override_dh_gencontrol: - echo "diffoscope:Recommends=$$(./diffoscope.py --list-tools | tail -n 1 | \ + echo "diffoscope:Recommends=$$(./diffoscope --list-tools | tail -n 1 | \ sed -e 's/\(^\| \)\(coreutils\|diffutils\|e2fsprogs\|findutils\|gzip\)\(,\|$$\)//g')" >> debian/diffoscope.substvars dh_gencontrol -O--buildsystem=pybuild -override_dh_install: - dh_install -O--buildsystem=pybuild - mv debian/diffoscope/usr/bin/diffoscope.py debian/diffoscope/usr/bin/diffoscope - debian/diffoscope.1: debian/diffoscope.1.rst rst2man $< $@ diff --git a/diffoscope.py b/diffoscope.py deleted file mode 100755 index a1a8ccc..0000000 --- a/diffoscope.py +++ /dev/null @@ -1,118 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# -# diffoscope: in-depth comparison of files, archives, and directories -# -# Copyright © 2014-2015 Jérémy Bobbio <lu...@debian.org> -# -# diffoscope 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 3 of the License, or -# (at your option) any later version. -# -# diffoscope 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 diffoscope. If not, see <http://www.gnu.org/licenses/>. - -from __future__ import print_function - -import argparse -from contextlib import contextmanager -import logging -import codecs -import os -import sys -import traceback -from diffoscope import logger, VERSION, set_locale -import diffoscope.comparators -from diffoscope.config import Config -from diffoscope.presenters.html import output_html -from diffoscope.presenters.text import output_text - - -def create_parser(): - parser = argparse.ArgumentParser( - description='Highlight differences between two builds ' - 'of Debian packages') - parser.add_argument('--version', action='version', - version='diffoscope %s' % VERSION) - parser.add_argument('--list-tools', nargs=0, action=ListToolsAction, - help='show external tools required and exit') - parser.add_argument('--debug', dest='debug', action='store_true', - default=False, help='display debug messages') - parser.add_argument('--html', metavar='output', dest='html_output', - help='write HTML report to given file (use - for stdout)') - parser.add_argument('--text', metavar='output', dest='text_output', - help='write plain text output to given file (use - for stdout)') - parser.add_argument('--max-report-size', metavar='BYTES', - dest='max_report_size', type=int, - help='maximum bytes written in report') - parser.add_argument('--max-diff-block-lines', dest='max_diff_block_lines', type=int, - help='maximum number of lines per diff block') - parser.add_argument('--max-diff-input-lines', dest='max_diff_input_lines', type=int, - help='maximum number of lines fed to diff') - parser.add_argument('--css', metavar='url', dest='css_url', - help='link to an extra CSS for the HTML report') - parser.add_argument('file1', help='first file to compare') - parser.add_argument('file2', help='second file to compare') - return parser - - -@contextmanager -def make_printer(path): - if path == '-': - output = sys.stdout - if not sys.stdout.isatty(): - output = codecs.getwriter(sys.stdin.encoding)(sys.stdout) - else: - output = codecs.open(path, 'w', encoding='utf-8') - def print_func(*args, **kwargs): - kwargs['file'] = output - print(*args, **kwargs) - yield print_func - if path != '-': - output.close() - - -class ListToolsAction(argparse.Action): - def __call__(self, parser, namespace, values, option_string=None): - from diffoscope import tool_required, RequiredToolNotFound - print("External tools required:") - print(', '.join(tool_required.all)) - print() - print("Available in packages:") - print(', '.join(sorted(set([RequiredToolNotFound.PROVIDERS[k]["debian"] for k in tool_required.all])))) - sys.exit(0) - - -def main(): - parser = create_parser() - parsed_args = parser.parse_args(sys.argv[1:]) - Config.config().max_diff_block_lines = parsed_args.max_diff_block_lines - Config.config().max_diff_input_lines = parsed_args.max_diff_input_lines - Config.config().max_report_size = parsed_args.max_report_size - if parsed_args.debug: - logger.setLevel(logging.DEBUG) - set_locale() - difference = diffoscope.comparators.compare_root_paths( - parsed_args.file1, parsed_args.file2) - if difference: - if parsed_args.html_output: - with make_printer(parsed_args.html_output) as print_func: - output_html(difference, css_url=parsed_args.css_url, print_func=print_func) - if (parsed_args.text_output and parsed_args.text_output != parsed_args.html_output) or not parsed_args.html_output: - with make_printer(parsed_args.text_output or '-') as print_func: - output_text(difference, print_func=print_func) - return 1 - return 0 - -if __name__ == '__main__': - try: - sys.exit(main()) - except (Exception, KeyboardInterrupt): - traceback.print_exc() - sys.exit(2) diff --git a/diffoscope/diffoscope.py b/diffoscope/diffoscope.py new file mode 100755 index 0000000..a1a8ccc --- /dev/null +++ b/diffoscope/diffoscope.py @@ -0,0 +1,118 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +# diffoscope: in-depth comparison of files, archives, and directories +# +# Copyright © 2014-2015 Jérémy Bobbio <lu...@debian.org> +# +# diffoscope 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 3 of the License, or +# (at your option) any later version. +# +# diffoscope 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 diffoscope. If not, see <http://www.gnu.org/licenses/>. + +from __future__ import print_function + +import argparse +from contextlib import contextmanager +import logging +import codecs +import os +import sys +import traceback +from diffoscope import logger, VERSION, set_locale +import diffoscope.comparators +from diffoscope.config import Config +from diffoscope.presenters.html import output_html +from diffoscope.presenters.text import output_text + + +def create_parser(): + parser = argparse.ArgumentParser( + description='Highlight differences between two builds ' + 'of Debian packages') + parser.add_argument('--version', action='version', + version='diffoscope %s' % VERSION) + parser.add_argument('--list-tools', nargs=0, action=ListToolsAction, + help='show external tools required and exit') + parser.add_argument('--debug', dest='debug', action='store_true', + default=False, help='display debug messages') + parser.add_argument('--html', metavar='output', dest='html_output', + help='write HTML report to given file (use - for stdout)') + parser.add_argument('--text', metavar='output', dest='text_output', + help='write plain text output to given file (use - for stdout)') + parser.add_argument('--max-report-size', metavar='BYTES', + dest='max_report_size', type=int, + help='maximum bytes written in report') + parser.add_argument('--max-diff-block-lines', dest='max_diff_block_lines', type=int, + help='maximum number of lines per diff block') + parser.add_argument('--max-diff-input-lines', dest='max_diff_input_lines', type=int, + help='maximum number of lines fed to diff') + parser.add_argument('--css', metavar='url', dest='css_url', + help='link to an extra CSS for the HTML report') + parser.add_argument('file1', help='first file to compare') + parser.add_argument('file2', help='second file to compare') + return parser + + +@contextmanager +def make_printer(path): + if path == '-': + output = sys.stdout + if not sys.stdout.isatty(): + output = codecs.getwriter(sys.stdin.encoding)(sys.stdout) + else: + output = codecs.open(path, 'w', encoding='utf-8') + def print_func(*args, **kwargs): + kwargs['file'] = output + print(*args, **kwargs) + yield print_func + if path != '-': + output.close() + + +class ListToolsAction(argparse.Action): + def __call__(self, parser, namespace, values, option_string=None): + from diffoscope import tool_required, RequiredToolNotFound + print("External tools required:") + print(', '.join(tool_required.all)) + print() + print("Available in packages:") + print(', '.join(sorted(set([RequiredToolNotFound.PROVIDERS[k]["debian"] for k in tool_required.all])))) + sys.exit(0) + + +def main(): + parser = create_parser() + parsed_args = parser.parse_args(sys.argv[1:]) + Config.config().max_diff_block_lines = parsed_args.max_diff_block_lines + Config.config().max_diff_input_lines = parsed_args.max_diff_input_lines + Config.config().max_report_size = parsed_args.max_report_size + if parsed_args.debug: + logger.setLevel(logging.DEBUG) + set_locale() + difference = diffoscope.comparators.compare_root_paths( + parsed_args.file1, parsed_args.file2) + if difference: + if parsed_args.html_output: + with make_printer(parsed_args.html_output) as print_func: + output_html(difference, css_url=parsed_args.css_url, print_func=print_func) + if (parsed_args.text_output and parsed_args.text_output != parsed_args.html_output) or not parsed_args.html_output: + with make_printer(parsed_args.text_output or '-') as print_func: + output_text(difference, print_func=print_func) + return 1 + return 0 + +if __name__ == '__main__': + try: + sys.exit(main()) + except (Exception, KeyboardInterrupt): + traceback.print_exc() + sys.exit(2) diff --git a/setup.py b/setup.py old mode 100644 new mode 100755 index 7ffac88..ba229a2 --- a/setup.py +++ b/setup.py @@ -32,7 +32,7 @@ setup(name='diffoscope', packages=find_packages(), tests_require=['pytest'], cmdclass = {'test': PyTest}, - scripts=['diffoscope.py'], + scripts=['diffoscope'], install_requires=[ 'python-debian', 'magic', -- 2.4.3.573.g4eafbef
_______________________________________________ Reproducible-builds mailing list Reproducible-builds@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/reproducible-builds