Changelog for squeeze-1.0.4.6
2010-11-18 Dr. Alistair Ward <squeeze at functionalley dot eu>
1.0.0.0
* First version of the package.
1.0.0.1
* Created "src/Squeeze/" sub-directory & then modified module-names accordingly.
* Pacified 'hlint'.
* Added a makefile.
1.0.0.2
* Tested with ghc-7.0.1
* Added RPM-spec file.
1.0.1.0
* Improved the basic algorithm, by permitting the file-list to be bisected; each file-combination resulting from the LHS, is then concatenated with each of those resulting from the recursively bisected RHS.
* Used "Control.Parallel.Strategies" to parallelize the concatenation of each combination from the LH-list, with each of those from the RH-list.
* Added default values of command-line flags, to usage-message.
* Used new "ToolShed.Package" module.
(1.0.1.1)
* Replaced 'Data.List.subsequences' with a tailored version which terminates combinations when they've grown too large, providing a better and more predictable performance-gain than recursive list-bisection.
* Reduced recursive list-bisection to a single bisection, for the sole purpose of facilitating parallelisation.
* Added module "Squeeze.QC" to define "Test.QuickCheck" tests and command-line option "--verbose", to govern level of output.
* Partitioned into new modules; "Squeeze.File", "Squeeze.FileSizeBounds" and "Squeeze.FileCombination".
1.0.1.2
* Fixed typo in CPP-statement in "Squeeze.QC".
* Fixed negated reference to unparenthesised CPP-macro 'MIN_VERSION'.
* Protected reference in "Main", to 'Test.QuickCheck.verboseCheck', using CPP-statement.
1.0.1.3
* Amended "squeeze.spec" to define RPM-package, to install under "/usr", rather than "/usr/local".
* Renamed package from 'Squeeze' to 'squeeze', for compatibility with Debian's ".deb"-format.
* Added directory-structure required to build ".deb" package.
1.0.1.4
* Corrected command-line processing of the special file "-", which read standard-input as requested, but disregarded any other command-line options.
* Refined man-page to be an 'extra-source-file' in "squeeze.cabal" and "squeeze.spec" files.
* Ported to compile against alternative integral definitions of 'Squeeze.File.FileSize'.
* Added manually controlled "llvm" flag to "squeeze.cabal".
* Replaced references to the module "ToolShed.Package" with "Distribution.Package".
* Reacted to the creation of module "ToolShed.Defaultable".
* Uploaded to <http://hackage.haskell.org/packages/hackage.html>.
1.0.2.0
* Reimplemented 'Squeeze.File.aggregateSize' using 'foldr' rather than 'foldl'.
* Removed use of "Control.Parallel.Strategies" from "Squeeze.Squeeze", which ruined performance on one core and had no obvious benefit on two.
* Changed the definition of 'Squeeze.FileCombinations.FileCombinations' from a 'Pair' to a record-style data-type with selective strictness-annotation.
* Renamed 'Squeeze.FileCombination.concatenate' to '(Squeeze.FileCombination.<+>)' and 'Squeeze.FileCombination.prepend' to '(Squeeze.FileCombination.+>)'.
* Used new module "ToolShed.TimeAction", to permit measurement of the CPU-time required to find the best fit.
* Added the number, mean file-size and standard-deviation, to the output, when flag '--verbose' is specified; and as a side-effect, created a dependency on the package 'factory'.
* Replaced module "Squeeze.FileSizeBounds" with "Factory.Data.Interval", requiring use of 'toolshed-0.12.0.0'.
* Made the data-type 'CommandOptions.CommandOptions' polymorphic in terms of the /ratio/-type fields.
* Inserted new layers "Data" and "Test" into the module-hierarchy, and relocated existing modules accordingly.
* Added module "Squeeze.Test.Performance" to test with randomly generated virtual files.
1.0.2.1
* Added check for zero file-names when reading from stdin.
* Corrected the syntax required when specifying ratios, in the man-page.
1.0.2.2
* Renamed 'Squeeze.Data.File.order' to 'Squeeze.Data.File.orderBySize'.
* Used 'Paths_squeeze.version' in 'Main', rather than hard-coding it.
* Added 'Squeeze.Data.CommandOptions.getErrors' to permit better error-diagnosis.
* Reacted to new module-hierarchy and addition of method 'ToolShed.SelfValidate.getErrors', in toolshed-0.13.0.0.
* Replaced use of 'Control.Exception.bracket' with 'System.IO.withFile', in 'Squeeze.Data.File.findSize'.
* Replaced "System" with "System.Environment" and "System.Exit".
* Removed dependency on "haskell98".
1.0.2.3
* Added class 'Show' to context for 'Squeeze.Test.Performance.run', for migration to 'ghc-7.4.1'.
1.0.2.4
* Added details to any failure to parse the command-line arguments.
* Defined package's name using program's name & enhanced usage-message, in "Main.hs".
* Re-implemented logging using "Control.Monad.Writer.Writer" & renamed 'Squeeze.Squeeze.findBestFitM' to 'Squeeze.Squeeze.findBestFitWriter'.
* Implemented 'verbose' functionality in "Squeeze.Test.Performance".
* Added command-line flag 'includeEmpty', to allow one to include empty files & directories in any solution.
1.0.3.0
* Changed "Main" to replace calls to 'error' from inside the IO-monad, with 'Control.Monad.fail'.
* Changed "Main"; by adding a command-line option to define the seed for the random-generator used for performance-testing; to permit 'includeEmpty' to take an optional Boolean argument, rather than a mandatory one; to read 'Squeeze.Data.CommandOptions.getMinimumUsageRatio' as a 'Double', rather than a 'Rational'.
* Renamed the accessors in "Squeeze.Data.CommandOptions", & removed 'bisectionRatio' & associated code.
* Added "Squeeze.Control.Concurrent.DivideAndConquer", called from "Main" to utilise multiple CPU-cores where available.
* Trapped command-line arguments to which garbage has been appended.
* Changed "Data.CommandOptions" to use 'Distribution.Verbosity.Verbosity'.
1.0.4.0
* Corrected the Copyright-statement in 'Main.main.optDescrList.printVersion'.
* Renamed "Squeeze.Test.QC" to "Squeeze.Test.QuickChecks"; migrating its tests to a new module "Squeeze.Test.Squeeze", & added new tests 'prop_monotonicFileSize' & 'prop_uniqueFileNames', requiring package 'toolshed-0.14.0.0'; added module "Squeeze.Test.Data.FileCombinations".
* Amended the log-messages printed by "Main".
* Removed the command-line option 'graphPerformance', which printed only CPU-seconds rather than elapsed time, & therefore didn't correctly represent the multi-threaded implementation.
* Removed the printing of CPU-seconds when not testing performance; this is better left to '/usr/bin/time'.
* Compensated for the potential rejection of some virtual files after generation of a test-population.
* Used new class 'Factory.Math.Probability.Distribution' & bumped required version to 'factory-0.2.1.0'.
* Replaced the command-line option '--testPerformance', with '--testPerformanceContinuous' & '--testPerformanceDiscrete'.
1.0.4.1
* Removed 'ToolShed.SelfValidate.isValid commandOptions' from 'Main.runQuickChecks'; since the command-options aren't used.
* Added 'changelog.Debian' to 'squeeze.cabal'.
* Relocated 'Main.distribute' to 'Squeeze.Squeeze.distributeAndFindBestFit' & added check on whether maximum size has been exceeded.
* Added 'Squeeze.Squeeze.partitionEmptyFilesAndDistributeAndFindBestFit', to efficiently account for empty files, & relocated calculation of file-statistics to this function.
* Amended 'Test.Performance.run', replacing call to 'Squeeze.Squeeze.findBestFit' with 'Squeeze.Squeeze.distributeAndFindBestFit', to permit multi-threaded performance-tests.
* Added function 'Squeeze.Data.CommandOptions.mkCommandOptions' & modules "Squeeze.Test.Data.Verbosity" & "Squeeze.Test.Data.CommandOptions" for future QuickChecks.
* Extracted 'Squeeze.Data.File.expandDirectory' from 'Squeeze.Data.File.findSize' to clarify the logic. Symlinks are also now permissible input files.
* Added 'Squeeze.Data.File.findDuplicates', & trapped duplicate files implicit within those directories specified.
1.0.4.2
* Improved the syntax of 'verbosity' in the usage-message.
* Tested with 'haskell-platform-2013.2.0.0'.
* Added a function 'Data.CommandOptions.subtractFile' to adjust 'Data.CommandOptions.CommandOptions' after removing a file from the problem; previously done incorrectly, causing an error when running with '+RTS -N2'.
1.0.4.3
* Changed the value of '0/0' to '0' rather than '1' in 'Data.CommandOptions.subtractFile'.
1.0.4.4
* Either replaced instances of '(<$>)' with 'fmap' to avoid ambiguity between "Control.Applicative" & "Prelude" which (from 'base-4.8') also exports this symbol, or hid the symbol when importing the "Prelude"..
* In module "Main", redirected version-message to stderr.
1.0.4.5
* Added the compiler to the output returned for the command-line option "version".
* Specified compiler-option 'context-stack' in 'Main.hs', to account for call to printf.
1.0.4.6
* Minimised the explicit size of compiler's 'context-stack' in 'Main.hs'.