[Reproducible-commits] [debbindiff] 01/01: Check for availability of tools required by comparators

Reiner Herrmann deki-guest at moszumanska.debian.org
Fri Mar 6 20:12:26 UTC 2015


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

deki-guest pushed a commit to branch master
in repository debbindiff.

commit 3fdf52c2e7e7841b64387f69c2d5b3385770460f
Author: Reiner Herrmann <reiner at reiner-h.de>
Date:   Fri Mar 6 21:09:23 2015 +0100

    Check for availability of tools required by comparators
    
    Move the packages of those tools to Recommends section.
---
 debbindiff/comparators/bzip2.py     |  3 ++-
 debbindiff/comparators/cpio.py      |  3 ++-
 debbindiff/comparators/directory.py |  5 +++++
 debbindiff/comparators/elf.py       |  6 +++++-
 debbindiff/comparators/fonts.py     |  3 ++-
 debbindiff/comparators/gettext.py   |  3 ++-
 debbindiff/comparators/gzip.py      |  4 +++-
 debbindiff/comparators/haskell.py   |  3 ++-
 debbindiff/comparators/pdf.py       |  4 +++-
 debbindiff/comparators/png.py       |  3 ++-
 debbindiff/comparators/rpm.py       | 10 ++++++++--
 debbindiff/comparators/squashfs.py  |  3 ++-
 debbindiff/comparators/utils.py     | 18 ++++++++++++++++++
 debbindiff/comparators/xz.py        |  3 ++-
 debbindiff/comparators/zip.py       |  3 ++-
 debian/control                      | 35 ++++++++++++++++++-----------------
 16 files changed, 78 insertions(+), 31 deletions(-)

diff --git a/debbindiff/comparators/bzip2.py b/debbindiff/comparators/bzip2.py
index e6cdf55..7e04dcf 100644
--- a/debbindiff/comparators/bzip2.py
+++ b/debbindiff/comparators/bzip2.py
@@ -21,7 +21,7 @@ from contextlib import contextmanager
 import os.path
 import subprocess
 import debbindiff.comparators
-from debbindiff.comparators.utils import binary_fallback, make_temp_directory
+from debbindiff.comparators.utils import binary_fallback, make_temp_directory, tool_required
 from debbindiff.difference import get_source
 
 
@@ -40,6 +40,7 @@ def decompress_bzip2(path):
 
 
 @binary_fallback
+ at tool_required('bzip2')
 def compare_bzip2_files(path1, path2, source=None):
     with decompress_bzip2(path1) as new_path1:
         with decompress_bzip2(path2) as new_path2:
diff --git a/debbindiff/comparators/cpio.py b/debbindiff/comparators/cpio.py
index bb67e38..2f2d6e9 100644
--- a/debbindiff/comparators/cpio.py
+++ b/debbindiff/comparators/cpio.py
@@ -21,7 +21,7 @@ import subprocess
 import os.path
 import debbindiff.comparators
 from debbindiff import logger
-from debbindiff.comparators.utils import binary_fallback, make_temp_directory
+from debbindiff.comparators.utils import binary_fallback, make_temp_directory, tool_required
 from debbindiff.difference import Difference
 
 
@@ -44,6 +44,7 @@ def extract_cpio_archive(path, destdir):
 
 
 @binary_fallback
+ at tool_required('cpio')
 def compare_cpio_files(path1, path2, source=None):
     differences = []
 
diff --git a/debbindiff/comparators/directory.py b/debbindiff/comparators/directory.py
index 3f9cd8c..0ceb9a3 100644
--- a/debbindiff/comparators/directory.py
+++ b/debbindiff/comparators/directory.py
@@ -22,6 +22,7 @@ import re
 import subprocess
 from debbindiff import logger
 from debbindiff.difference import Difference
+from debbindiff.comparators.utils import tool_required
 import debbindiff.comparators
 
 
@@ -49,6 +50,9 @@ def getfacl(path):
     return subprocess.check_output(['getfacl', '-p', '-c', path], shell=False).decode('utf-8')
 
 
+ at tool_required('stat')
+ at tool_required('lsattr')
+ at tool_required('getfacl')
 def compare_meta(path1, path2):
     logger.debug('compare_meta(%s, %s)' % (path1, path2))
     differences = []
@@ -73,6 +77,7 @@ def compare_meta(path1, path2):
     return differences
 
 
+ at tool_required('ls')
 def compare_directories(path1, path2, source=None):
     differences = []
     logger.debug('path1 files: %s' % sorted(set(os.listdir(path1))))
diff --git a/debbindiff/comparators/elf.py b/debbindiff/comparators/elf.py
index 0a8142f..496ddf7 100644
--- a/debbindiff/comparators/elf.py
+++ b/debbindiff/comparators/elf.py
@@ -20,7 +20,7 @@
 import os.path
 import re
 import subprocess
-from debbindiff.comparators.utils import binary_fallback, get_ar_content
+from debbindiff.comparators.utils import binary_fallback, get_ar_content, tool_required
 from debbindiff.difference import Difference
 
 
@@ -74,11 +74,15 @@ def _compare_elf_data(path1, path2, source=None):
 
 
 @binary_fallback
+ at tool_required('readelf')
+ at tool_required('objdump')
 def compare_elf_files(path1, path2, source=None):
     return _compare_elf_data(path1, path2, source=None)
 
 
 @binary_fallback
+ at tool_required('readelf')
+ at tool_required('objdump')
 def compare_static_lib_files(path1, path2, source=None):
     differences = []
     # look up differences in metadata
diff --git a/debbindiff/comparators/fonts.py b/debbindiff/comparators/fonts.py
index 8af5dcd..90b318e 100644
--- a/debbindiff/comparators/fonts.py
+++ b/debbindiff/comparators/fonts.py
@@ -18,7 +18,7 @@
 # along with debbindiff.  If not, see <http://www.gnu.org/licenses/>.
 
 import subprocess
-from debbindiff.comparators.utils import binary_fallback
+from debbindiff.comparators.utils import binary_fallback, tool_required
 from debbindiff.difference import Difference
 
 
@@ -27,6 +27,7 @@ def show_ttf(path):
 
 
 @binary_fallback
+ at tool_required('showttf')
 def compare_ttf_files(path1, path2, source=None):
     ttf1 = show_ttf(path1)
     ttf2 = show_ttf(path2)
diff --git a/debbindiff/comparators/gettext.py b/debbindiff/comparators/gettext.py
index 88824e3..1d6a419 100644
--- a/debbindiff/comparators/gettext.py
+++ b/debbindiff/comparators/gettext.py
@@ -18,7 +18,7 @@
 # along with debbindiff.  If not, see <http://www.gnu.org/licenses/>.
 
 import subprocess
-from debbindiff.comparators.utils import binary_fallback
+from debbindiff.comparators.utils import binary_fallback, tool_required
 from debbindiff.difference import Difference
 
 
@@ -27,6 +27,7 @@ def msgunfmt(path):
 
 
 @binary_fallback
+ at tool_required('msgunfmt')
 def compare_mo_files(path1, path2, source=None):
     mo1 = msgunfmt(path1)
     mo2 = msgunfmt(path2)
diff --git a/debbindiff/comparators/gzip.py b/debbindiff/comparators/gzip.py
index c684725..413c538 100644
--- a/debbindiff/comparators/gzip.py
+++ b/debbindiff/comparators/gzip.py
@@ -21,7 +21,7 @@ from contextlib import contextmanager
 import subprocess
 import os.path
 import debbindiff.comparators
-from debbindiff.comparators.utils import binary_fallback, make_temp_directory
+from debbindiff.comparators.utils import binary_fallback, make_temp_directory, tool_required
 from debbindiff.difference import Difference, get_source
 
 
@@ -44,6 +44,8 @@ def get_gzip_metadata(path):
 
 
 @binary_fallback
+ at tool_required('gzip')
+ at tool_required('file')
 def compare_gzip_files(path1, path2, source=None):
     differences = []
     # check metadata
diff --git a/debbindiff/comparators/haskell.py b/debbindiff/comparators/haskell.py
index 2e496bc..3e45013 100644
--- a/debbindiff/comparators/haskell.py
+++ b/debbindiff/comparators/haskell.py
@@ -18,7 +18,7 @@
 # along with debbindiff.  If not, see <http://www.gnu.org/licenses/>.
 
 import subprocess
-from debbindiff.comparators.utils import binary_fallback
+from debbindiff.comparators.utils import binary_fallback, tool_required
 from debbindiff.difference import Difference
 
 
@@ -27,6 +27,7 @@ def show_iface(path):
 
 
 @binary_fallback
+ at tool_required('ghc')
 def compare_hi_files(path1, path2, source=None):
     iface1 = show_iface(path1)
     iface2 = show_iface(path2)
diff --git a/debbindiff/comparators/pdf.py b/debbindiff/comparators/pdf.py
index 9fa44a5..eddd3cc 100644
--- a/debbindiff/comparators/pdf.py
+++ b/debbindiff/comparators/pdf.py
@@ -18,7 +18,7 @@
 # along with debbindiff.  If not, see <http://www.gnu.org/licenses/>.
 
 import subprocess
-from debbindiff.comparators.utils import binary_fallback
+from debbindiff.comparators.utils import binary_fallback, tool_required
 from debbindiff.difference import Difference, get_source
 
 
@@ -36,6 +36,8 @@ def pdftotext(path):
 
 
 @binary_fallback
+ at tool_required('pdftk')
+ at tool_required('pdftotext')
 def compare_pdf_files(path1, path2, source=None):
     differences = []
     src = get_source(path1, path2) or 'FILE'
diff --git a/debbindiff/comparators/png.py b/debbindiff/comparators/png.py
index 68167cb..fabfa88 100644
--- a/debbindiff/comparators/png.py
+++ b/debbindiff/comparators/png.py
@@ -18,7 +18,7 @@
 # along with debbindiff.  If not, see <http://www.gnu.org/licenses/>.
 
 import subprocess
-from debbindiff.comparators.utils import binary_fallback
+from debbindiff.comparators.utils import binary_fallback, tool_required
 from debbindiff.difference import Difference
 
 
@@ -33,6 +33,7 @@ def sng(path):
         return out
 
 @binary_fallback
+ at tool_required('sng')
 def compare_png_files(path1, path2, source=None):
     sng1 = sng(path1)
     sng2 = sng(path2)
diff --git a/debbindiff/comparators/rpm.py b/debbindiff/comparators/rpm.py
index cec044e..9f0bf6c 100644
--- a/debbindiff/comparators/rpm.py
+++ b/debbindiff/comparators/rpm.py
@@ -18,13 +18,12 @@
 # along with debbindiff.  If not, see <http://www.gnu.org/licenses/>.
 
 from __future__ import absolute_import
-import rpm
 import os.path
 import subprocess
 from contextlib import contextmanager
 import debbindiff.comparators
 from debbindiff import logger
-from debbindiff.comparators.utils import binary_fallback, make_temp_directory
+from debbindiff.comparators.utils import binary_fallback, make_temp_directory, tool_required
 from debbindiff.difference import Difference, get_source
 
 def get_rpm_header(path, ts):
@@ -64,7 +63,14 @@ def extract_rpm_payload(path):
 
 
 @binary_fallback
+ at tool_required('rpm2cpio')
 def compare_rpm_files(path1, path2, source=None):
+    try:
+        import rpm
+    except ImportError:
+        logger.info("Python module rpm not found.")
+        return []
+
     differences = []
 
     # compare headers
diff --git a/debbindiff/comparators/squashfs.py b/debbindiff/comparators/squashfs.py
index 6b92b47..0cfc926 100644
--- a/debbindiff/comparators/squashfs.py
+++ b/debbindiff/comparators/squashfs.py
@@ -21,7 +21,7 @@ import subprocess
 import os.path
 import debbindiff.comparators
 from debbindiff import logger
-from debbindiff.comparators.utils import binary_fallback, make_temp_directory
+from debbindiff.comparators.utils import binary_fallback, make_temp_directory, tool_required
 from debbindiff.difference import Difference
 
 
@@ -48,6 +48,7 @@ def extract_squashfs(path, destdir):
 
 
 @binary_fallback
+ at tool_required('unsquashfs')
 def compare_squashfs_files(path1, path2, source=None):
     differences = []
 
diff --git a/debbindiff/comparators/utils.py b/debbindiff/comparators/utils.py
index 959c8ac..d7a1580 100644
--- a/debbindiff/comparators/utils.py
+++ b/debbindiff/comparators/utils.py
@@ -20,11 +20,13 @@
 from contextlib import contextmanager
 import hashlib
 import re
+import os
 import shutil
 import subprocess
 import tempfile
 from debbindiff.comparators.binary import compare_binary_files
 from debbindiff.difference import Difference
+from debbindiff import logger
 
 
 def are_same_binaries(path1, path2):
@@ -72,6 +74,22 @@ def binary_fallback(original_function):
     return with_fallback
 
 
+# decorator that checks if the specified tool is installed
+def tool_required(filename):
+    def wrapper(original_function):
+        def tool_check(*args):
+            if 'PATH' not in os.environ:
+                return []
+            for path in os.environ['PATH'].split(os.pathsep):
+                f = os.path.join(path, filename)
+                if os.path.isfile(f):
+                    return original_function(*args)
+            logger.info("Tool '%s' not found." % filename)
+            return []
+        return tool_check
+    return wrapper
+
+
 @contextmanager
 def make_temp_directory():
     temp_dir = tempfile.mkdtemp(suffix='debbindiff')
diff --git a/debbindiff/comparators/xz.py b/debbindiff/comparators/xz.py
index 143444d..f2cc0ef 100644
--- a/debbindiff/comparators/xz.py
+++ b/debbindiff/comparators/xz.py
@@ -21,7 +21,7 @@ from contextlib import contextmanager
 import os.path
 import subprocess
 import debbindiff.comparators
-from debbindiff.comparators.utils import binary_fallback, make_temp_directory
+from debbindiff.comparators.utils import binary_fallback, make_temp_directory, tool_required
 from debbindiff.difference import get_source
 
 
@@ -40,6 +40,7 @@ def decompress_xz(path):
 
 
 @binary_fallback
+ at tool_required('xz')
 def compare_xz_files(path1, path2, source=None):
     with decompress_xz(path1) as new_path1:
         with decompress_xz(path2) as new_path2:
diff --git a/debbindiff/comparators/zip.py b/debbindiff/comparators/zip.py
index ab12eb7..1c2ada1 100644
--- a/debbindiff/comparators/zip.py
+++ b/debbindiff/comparators/zip.py
@@ -24,7 +24,7 @@ from zipfile import ZipFile
 from debbindiff import logger
 from debbindiff.difference import Difference
 import debbindiff.comparators
-from debbindiff.comparators.utils import binary_fallback, make_temp_directory
+from debbindiff.comparators.utils import binary_fallback, make_temp_directory, tool_required
 
 
 def get_zipinfo(path, verbose=False):
@@ -38,6 +38,7 @@ def get_zipinfo(path, verbose=False):
 
 
 @binary_fallback
+ at tool_required('zipinfo')
 def compare_zip_files(path1, path2, source=None):
     differences = []
     with ZipFile(path1, 'r') as zip1:
diff --git a/debian/control b/debian/control
index 2c3798b..5b7f228 100644
--- a/debian/control
+++ b/debian/control
@@ -19,28 +19,29 @@ Vcs-Browser: https://anonscm.debian.org/cgit/reproducible/debbindiff.git
 
 Package: debbindiff
 Architecture: all
-Depends: acl,
-         binutils-multiarch,
-         bzip2,
-         cpio,
-         diffutils,
-         e2fsprogs,
-         file,
-         fontforge-extras,
-         gettext,
-         ghc,
+Depends: diffutils,
          gnupg,
-         pdftk,
-         poppler-utils,
-         rpm2cpio,
-         sng,
-         unzip,
          vim,
          vim-common,
-         xz-utils,
          ${misc:Depends},
          ${python:Depends},
-Recommends: squashfs-tools
+Recommends: acl,
+            binutils-multiarch,
+            bzip2,
+            cpio,
+            e2fsprogs,
+            file,
+            fontforge-extras,
+            gettext,
+            ghc,
+            gzip,
+            pdftk,
+            poppler-utils,
+            rpm2cpio,
+            sng,
+            squashfs-tools,
+            unzip,
+            xz-utils
 Description: highlight differences between two builds of Debian packages
  debbindiff was designed to easily compare two builds of the same Debian
  package, and understand their differences.

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



More information about the Reproducible-commits mailing list