Skip to main content
This is a pre-production deployment of Warehouse. Changes made here affect the production instance of PyPI (pypi.python.org).
Help us improve Python packaging - Donate today!

in-depth comparison of files, archives, and directories

Project Description

diffoscope will try to get to the bottom of what makes files or directories different. It will recursively unpack archives of many kinds and transform various binary formats into more human readable form to compare them. It can compare two tarballs, ISO images, or PDF just as easily.

It can be scripted through error codes, and a report can be produced with the detected differences. The report can be text or HTML. When no type of report has been selected, diffoscope defaults to write a text report on the standard output.

diffoscope was initially started by the “reproducible builds” Debian project and now being developed as part of the (wider) “Reproducible Builds” initiative. It is meant to be able to quickly understand why two builds of the same package produce different outputs. diffoscope was previously named debbindiff.

Example

To compare two files in-depth and produce an HTML report, run something like:

$ bin/diffoscope --html output.html build1.changes build2.changes

diffoscope will exit with 0 if there’s no differences and 1 if there are.

diffoscope can also compare non-existent files:

$ bin/diffoscope /nonexistent archive.zip

To get all possible options, run:

$ bin/diffoscope --help

If you have enough RAM, you can improve performance by running:

$ TMPDIR=/run/shm bin/diffoscope very-big-input-0/ very-big-input-1/

By default this allowed to use up half of RAM; for more add something like:

tmpfs   /run/shm    tmpfs   size=80%    0   0

to your /etc/fstab; see man mount for details.

External dependencies

diffoscope requires Python 3 and the following modules available on PyPI: libarchive-c, python-magic.

The various comparators rely on external commands being available. To get a list of them, please run:

$ bin/diffoscope --list-tools

Contributing

The preferred way to report bugs about diffoscope, as well as suggest fixes and requests for improvements, is to submit reports to the Debian bug tracker for the diffoscope package. You can do this over e-mail, simply write an email as follows:

To: submit@bugs.debian.org
Subject: <subject>

Source: diffoscope
Version: <version>
Severity: <grave|serious|important|normal|minor|wishlist>

There are more detailed instructions available about reporting a bug in the Debian bug tracker.

If you’re on a Debian-based system, you can install and use the reportbug package to help walk you through the process.

You can also submit patches to the Debian bug tracker. Start by cloning the Git repository, make your changes and commit them as you normally would. You can then use Git’s format-patch command to save your changes as a series of patches that can be attached to the report you submit. For example:

git clone git://anonscm.debian.org/reproducible/diffoscope.git
cd diffoscope
git checkout origin/master -b <topicname>
# <edits>
git commit -a
git format-patch -M origin/master

The format-patch command will create a series of .patch files in your checkout. Attach these files to your submission in your e-mail client or reportbug.

Uploading the package

When uploading diffoscope to the Debian archive, please take extra care to make sure the uploaded source package is correct, that is it includes the files tests/data/test(1|2).(a|o) which in some cases are removed by dpkg-dev when building the package. See #834315 for an example FTBFS bug caused by this. (See #735377 and followups to learn how this happened and how to prevent it)

Please also release a signed tarball:

$ VERSION=FIXME
$ git archive --format=tar --prefix=diffoscope-${VERSION}/ ${VERSION} | bzip2 -9 > diffoscope-${VERSION}.tar.bz2
$ gpg --detach-sig --armor --output=diffoscope-${VERSION}.tar.bz2.asc < diffoscope-${VERSION}.tar.bz2
$ scp diffoscope-${VERSION}* alioth.debian.org:/home/groups/reproducible/htdocs/releases/diffoscope

After uploading, please also update the version on PyPI using:

$ python3 setup.py sdist upload --sign

Once the tracker.debian.org entry appears, consider tweeting the release on #reproducible-builds with:

%twitter diffoscope $VERSION has been released. Check out the changelog here: $URL

Contributors

Lunar, Reiner Herrmann, Chris Lamb, Mattia Rizzolo, Ximin Luo, Helmut Grohne, Holger Levsen, Daniel Kahn Gillmor, Paul Gevers, Peter De Wachter, Yasushi SHOJI, Clemens Lang, Ed Maste, Joachim Breitner, Mike McQuaid. Baptiste Daroussin, Levente Polyak.

Contact

Please report bugs and send patches through the Debian bug tracking system against the diffoscope package: <https://bugs.debian.org/src:diffoscope>

Join the users and developers mailing-list: <https://lists.reproducible-builds.org/listinfo/diffoscope>

diffoscope website is at <https://diffoscope.org/>

License

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 <https://www.gnu.org/licenses/>.

Release History

Release History

This version
History Node

88

History Node

87

History Node

86

History Node

85

History Node

84

History Node

83

History Node

82

History Node

81

History Node

80

History Node

79

History Node

78

History Node

77

History Node

76

History Node

75

History Node

74

History Node

73

History Node

72

History Node

71

History Node

70

History Node

69

History Node

68

History Node

67

History Node

66

History Node

65

History Node

64

History Node

63

History Node

62

History Node

61

History Node

60

History Node

59

History Node

56

History Node

55

History Node

54

History Node

52

History Node

51

History Node

49

History Node

48

History Node

47

History Node

46

History Node

45

History Node

44

History Node

43

History Node

42

History Node

41

History Node

40

History Node

39

Download Files

Download Files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

File Name & Checksum SHA256 Checksum Help Version File Type Upload Date
diffoscope-88.tar.gz (1.0 MB) Copy SHA256 Checksum SHA256 Source Nov 4, 2017

Supported By

WebFaction WebFaction Technical Writing Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Rackspace Rackspace Cloud Servers DreamHost DreamHost Log Hosting