squeeze-1.0.4.13: changelog.markdown
# 2010-11-18 Dr. Alistair Ward <squeeze@functionalley.eu>
## 1.0.0.0
* First version of the package.
## 1.0.0.1
* Created sub-directory "**src/Squeeze/**" & then modified module-names accordingly.
* Pacified **hlint**.
* Added a makefile.
## 1.0.0.2
* Tested with **ghc-7.0.1**.
* Added *.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 module "**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 module "**ToolShed.Package**".
(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 module "**Squeeze.QC**".
* Fixed negated reference to unparenthesised CPP-macro "**MIN_VERSION**".
* Protected reference in module "**Main**", to `Test.QuickCheck.verboseCheck`, using CPP-statement.
## 1.0.1.3
* Amended *.spec*-file to define RPM-package, to install under directory "**/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 reads standard-input as requested, but disregarded any other command-line options.
* Refined man-page to be an "**extra-source-file**" in the *.cabal*-file and the *.spec*-file.
* Ported to compile against alternative integral definitions of `Squeeze.File.FileSize`.
* Added manually controlled flag "**llvm**" to the *.cabal*-file.
* Replaced references to the module "**ToolShed.Package**" with "**Distribution.Package**".
* Reacted to the creation of module "**ToolShed.Defaultable**".
* Uploaded to [Hackage](http://hackage.haskell.org/package/squeeze).
## 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 file "**changelog.Debian**" to the *.cabal*-file.
* 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 options "**+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 modules "**Control.Applicative**" & "**Prelude**" which (from package "**base-4.8**") also exports this symbol, or hid the symbol when importing the module "**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 module "**Main**", to account for call to `printf`.
## 1.0.4.6
* Minimised the explicit size of compiler's 'context-stack' in module "**Main**".
* In module "**Squeeze.Data.File.hs**", replaced the use of the package "**unix**" with the package "**directory**", for compatibility with **Windows**.
## 1.0.4.7
* Increased the specified value of compiler-option "**context-stack**" in module "**Main**", to account for call to `printf`.
## 1.0.4.8
* Changed flag "**threaded**" in the *.cabal*-file to **manual**.
* Added "**Default-language**"-specification to the *.cabal*-file.
* Added file "**README.markdown**".
* Converted this file to markdown-format.
* Replaced `System.Exit.exitWith System.Exit.ExitSuccess` with `System.Exit.exitSuccess`.
* Moved the entry-point to the test-suite from module **Main** to module **Test**, both to integrate with **cabal** & to minimise the dependencies of the executable.
* Partitioned the source-files into directories "**src-lib**", "**src-exe**", & "**src-test**", & referenced them individually from the *.cabal*-file to avoid repeated compilation.
* Used CPP to control the import of symbols from **Control.Applicative**.
* Changed default **minimumUsageRatio** in module "**Squeeze.Data.CommandOptions**" from **99%** to **90%**.
## 1.0.4.9
* Amended the help-message for options "**testPerformanceContinuous**" & "**testPerformanceDiscrete**".
* Corrected the markdown-syntax in this file.
* Reverted to calling "**error**" rather than "**Control.Monad.fail**", since the **String**-argument for the latter is discarded in **Monad**-implementations other than **IO**.
* Uploaded to [GitHub](https://github.com/functionalley/Squeeze.git).
* Simplified file **src-test/Main.hs**.
* Added file **.travis.yml** to control testing by <https://docs.travis-ci.com>.
* Added file **.ghci**.
* Replaced use of module **ToolShed.Defaultable** with **Data.Default**.
* Tested with **ghc-8.0.1**.
## 1.0.4.10
* Amended pre-processor directive **MIN_TOOL_VERSION_ghc** in **Main.hs**.
## 1.0.4.11
* Checked pre-processor directives are defined.
## 1.0.4.12
* Re-factored pre-processor directive in **Main.hs**.
## 1.0.4.13
* Performance-improvements.
* Added default RTS-options to **squeeze.cabal**.
* Replaced 'Data.List.genericLength' with the more efficient @fromIntegral . length@.
* Removed dependency on **Distribution.Package.PackageName**