Changelog for squeeze-

2010-11-18 Dr. Alistair Ward <squeeze at functionalley dot eu> * First version of the package. * Created "src/Squeeze/" sub-directory & then modified module-names accordingly. * Pacified 'hlint'. * Added a makefile. * Tested with ghc-7.0.1 * Added RPM-spec file. * 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. ( * 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". * 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. * 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. * 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 <>. * 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-'. * 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. * Added check for zero file-names when reading from stdin. * Corrected the syntax required when specifying ratios, in the man-page. * 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- * 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". * Added class 'Show' to context for '', for migration to 'ghc-7.4.1'. * 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. * Changed "Main" to replace calls to 'error' from inside the IO-monad, with ''. * 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'. * 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-'; 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-'. * Replaced the command-line option '--testPerformance', with '--testPerformanceContinuous' & '--testPerformanceDiscrete'. * 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 '', 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.