changelog.txt from dupmerge =========================== 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 2004-12-01: Version 1.21 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 releases and cvs versions will be tested 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 now you have to call find ./ -type f -print0 | dupmerge 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 2007-10-29: Version 1.7 Added date and time to startup message. That's important in case of filesystem errors like directory loops and an infinit looping find. Added const qualifiers to the two main arguments as minimal write protection. Added volatile qualifier to the i_exit_flag for safe ipc. Added s option for doing soft linking instead of hard linking, but a) it needs several runs to make all links and b) the inverse is not implemented yet. Added Cygwin support simply via #ifndev __CYGWIN__; it can now be compiled under Cygwin without modification. Tested successfull several times with coreutilities and other stuff. Dr. Rolf Freitag 2008-03-01: Version 1.73 Added some comments, checked with coreutils-5.2.1 (find ./ -type f -print0 | dupmerge) and my archive (about 500 GB in one million files on an encrypted partition). Dr. Rolf Freitag