[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