Circa 1993: Initial version, Phil Karn, karn (at) ka9q (dot) net.


1998-02-12: Last version from Phil Karn.


2004-12-07: Version 1.1: 
Added swap macro, invers mode, no replacing of zero length files, void casts for
semantic checkers, version number, sorting of equal size files due to dev and ino and name, ...
Switched to C99.
Tested with SuSE 9.2 and Debian (both Kernel 2.6), tested with 4 and 7 Gigabyte files, coreutils sources,
md5-collision files, changed to reading/writing/comparing 8 byte blocks (instead of 1 byte blocks):
2 times faster now. Added Todo-List.
Rolf Freitag, rolf.freitag at email.de


Version 1.21, 2004-12-1:
Bugfix, because in the old verson 1.1 there are two missing braces. 
These missing braces caused that files of same size where 
compared only in the first 64 bits so some different files where linked
together from that version! 
So all future releses and cvs versions before release/commit with the
coreutils-5.2.1 sources to assert that in new versions there will be no new
errors. 
These are the test results from du -sk: 
before dupmerge: 31628 
after original version 1.0 from Phil Karn: 29968 
after version 1.1: 29712 
after actual version 1.21: 29968 
. Rolf Freitag


2005-02-10, Version 1.3:
This version has a help and a fully tested sparse mode which replaces each
file which can be shrinked by sparse copying. The inverse nomal mode now
expands all hard links in O(n) (was O(n*log(n))) and has a new combo mode in
which first all files are replaced by their sparse copy if it is smaller and
after that files of size > 0 with the same content get hard linked to the
oldest file with lowest disk usage (the eldest of the most sparse files). With
the -i option the inverse will be done. This version now "compresses" as much
as theoretical possible by removing redundancy with linking and sparsing. It
saves approx. 20 % of disk space.
Rolf Freitag


2005-04-17, Version 1.4:
Added deletion mode (option -d), which deletes multiple files. 
This mode can be used e. g. for clearing movie and picture archives.
Rolf Freitag


2005-04-27, Version 1.5:
Because the old versions of dupmerge do use fgets to read the filenames,
filenames with newlines can not be read. Therefore fgets is replaced since
version 1.5 by fread and the old sequence operator '\n' is replaced by '\0';
the input file names must now be separated with zero and not newline. This is
now perfect because a file name is a zero-terminated string. 
So instead of  
find ./ -type f -print | dupmerge <options or not> 
now you have to call  
find ./ -type f -print0 | dupmerge <options or not> 
Bugfix of the wrong version number.
Tested with several files with several newlines in them.
Rolf Freitag


2005-08-31, Version 1.6:
Added changelog and several file checks because fread does not distinguish
between end-of-file and error.
Fixed not quite "started" message in quiet mode.
Updated header.
Rolf Freitag



