/delta-updater

Two utilities and library for creating and applying binary patches to file system directories

Primary LanguageJavaMIT LicenseMIT

Binary delta patches for directories

Utilities and library for creating and applying binary patches to file system directories. It's based on Javaxdelta library - java implementation of xdelta binary diff algorithm. GDIFF format is used for patches.

It can be used to implement auto-updating for rich-client applications.

Delta-diff and delta-patch utilities are available:

Libraries are available in Maven cental.

Javadocs: delta-diff, delta-patch

###Features

  • supports directories with arbitrary structure
  • supports changed, added and deleted files
  • directory patch includes human readable '.index' file
  • streaming patch creation and applying
  • fail-fast patch applying with hash sum checks
  • pure java, tested on linux and windows

###Directory patch creation

  • takes two directories (to create delta between) and IOFilter to include/exclude files
  • creates ZIP file (or stream) with GDIFF deltas for all changed files and '.index' text file (with '.index_' prefix) with list of unchanged, added, updated and deleted files with SHA1 hash sums

###Patch application

Patches are applied in fail-fast mode, application will be aborted on first wrong hash-sum or IO error.

  • takes directory to patch and patch file (or stream)
  • reads '.index' file and using it for futher steps:
  • checks hash sums for 'unchanged' files
  • reads from stream 'added' files, puts them into directory checking hash sums
  • check hash sums for 'updated' files
  • reads '.gdiff' patches from stream, applies them, checks hash sums for applied files
  • checks hash sums for 'deleted' files
  • deletes 'deleted' files

Using library

Maven dependency (available in central repository):

<dependency>
    <groupId>com.alexkasko.delta</groupId>
    <artifactId>delta-diff</artifactId>
    <!--artifactId>delta-patch</artifactId-->
    <version>1.1.3</version>
</dependency>

For patch file/stream creation you should use one of these methods:

 new DirDeltaCreator().create(oldDirectory, newDirectory, patchFile);
 new DirDeltaCreator().create(oldDirectory, newDirectory, filesFilter, patchOutputStream);

For patch application (it will throw IOException on hash-sum error):

new DirDeltaPatcher().patch(directory, patchFile);
new DirDeltaPatcher().patch(directory, patchZipInputStream);

Both DirDeltaCreator and DirDeltaPatcher are thread-safe (stateless).

Using utilities

delta-diff and delta-patch programs (they will be put into delta-updater/delta-xxx/target/delta-xxx-yyy-distr) can be used as command line utilities.

Patch creation:

java -jar delta-diff.jar dir1 dir2 -o patch.zip

Patch application:

java -jar delta-patch.jar dir patch.zip

How to build

All dependencies are in Maven Central. To build project run:

mvn clean install

License Information

Note: javaxdelta depends on GNU Trove 1.0.2 library which is released under the LGPL license.

This project is released under the MIT License (the same license is used by javaxdelta project).

Changelog

1.1.3 (2014-10-21)

  • fix typos in error messages (#2)

1.1.2 (2014-08-09)

  • add support for case-sensivity flag (#1)

1.1.1 (2014-01-31)

  • remove NullOutputStream usage to support recent versions of Guava

1.1 (2012-10-26)

  • code and dependencies cleanup, maven central upload

1.0 (2011-11-20)

  • initial version