Hi!<br><br>I'm pleased to announce the first release of my program package-vt. It's role is to detect changes between two versions of package that should cause version bump.<br><br>Recommended versioning policy for Haskell packages is on the wiki [1].<br>
<br>The ultimate goal is to get as good approximation of the algorithm specified there as possible. Currently the tool is far from being complete: it only detects changes to exports in .cabal and module files, but doesn't take any types into consideration, not to mention other possible heuristics.<br>
<br>This tool is not meant as a replacement for developer's own brain. It
can only detect a subset of changes, and there will always be some important
changes it won't catch, like adding such line:<br>
<span style="font-family: courier new,monospace;">head (_:y:_) = y</span><br>
<br>
However, it can be used for some quality checks.<br>
<br>Thing that needs improving is user interface. No options are currently accepted. This, and a lot more, will change in future versions.<br><br>You can find a Git repo here [2]. The repo contains 'tests' directory with two useful scripts. You can use them to run package-vt on anything from Hackage.<br>
Here are a few random usage examples:<br><br>1) Detect small change within module<br><br><span style="font-family: courier new,monospace;">package-vt packages/HCL/1.1/HCL-1.1/HCL.cabal packages/HCL/1.2/HCL-1.2/HCL.cabal </span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">Single changes:</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">ChangeABC : Entity added to module ModuleName "HCL"</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">---</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">EVar (UnQual (Ident "prompt1"))</span><br style="font-family: courier new,monospace;">
<br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">---</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">Biggest change comes from:</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">ChangeABC : Entity added to module ModuleName "HCL"</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">---</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">EVar (UnQual (Ident "prompt1"))</span><br><br>2) Detect new module added to .cabal<br style="font-family: courier new,monospace;"><br><span style="font-family: courier new,monospace;">package-vt 0.2.0/AERN-Net-0.2.0/AERN-Net.cabal 0.2.1/AERN-Net-0.2.1/AERN-Net.cabal</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">Single changes:</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">ChangeABC : Entity added to module ModuleName "Control.ERNet.Foundations.Process"</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">---</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">EThingAll (UnQual (Ident "ERProcessAction"))</span><br style="font-family: courier new,monospace;">
<br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">---ChangeABC : Module(s) added.(Consider AB change if new modules are likely to cause name collisions)</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">---</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">"Control/ERNet/Blocks/Real/LFT"</span><br style="font-family: courier new,monospace;">
<br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">---</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">Biggest change comes from:</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">ChangeABC : Module(s) added.(Consider AB change if new modules are likely to cause name collisions)</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">---</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">"Control/ERNet/Blocks/Real/LFT"</span><br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">---</span><br style="font-family: courier new,monospace;"><br>3) Using testing script: package-vt correctly detects that AERN-RnToRM-0.4.9 should rather be 0.5.0 because the module <span style="font-family: courier new,monospace;">Data.Number.ER.RnToRm.UnitDom.ChebyshevBase.Polynom.Field <span style="font-family: arial,helvetica,sans-serif;">has been removed.</span></span><br>
<br><span style="font-family: courier new,monospace;">./test-on-package.lhs AERN-RnToRm</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">--cut--</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">>>> Testing package-vt on AERN-RnToRm-0.4.2 and AERN-RnToRm-0.4.9</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">Parse error: VarSym "#" : SrcLoc {srcFilename = "0.4.2/AERN-RnToRm-0.4.2/src/Data/Number/ER/RnToRm/Approx/DomTransl.hs", srcLine = 174, srcColumn = 1}</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">Single changes:</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">ChangeABC : Entity added to module ModuleName "Data.Number.ER.RnToRm.Approx"</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">---</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">EVar (UnQual (Ident "keyPointsConsistencyCheck"))</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">EVar (UnQual (Ident "keyPointsPointwiseConsistencyCheck"))</span><br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;">
<br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">---ChangeABC : Entity added to module ModuleName "Data.Number.ER.RnToRm.UnitDom.Approx"</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">---</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">EVar (UnQual (Ident "keyPointsConsistencyCheck"))</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">EVar (UnQual (Ident "keyPointsPointwiseConsistencyCheck"))</span><br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;">
<br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">---ChangeAB : Module(s) removed/renamed.</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">---</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">"Data/Number/ER/RnToRm/UnitDom/ChebyshevBase/Polynom/Field"</span><br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;">
<br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">---</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">Biggest change comes from:</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">ChangeAB : Module(s) removed/renamed.</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">---</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">"Data/Number/ER/RnToRm/UnitDom/ChebyshevBase/Polynom/Field"</span><br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;">
<br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">---</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">ExitSuccess</span><br style="font-family: courier new,monospace;">
<br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">--cut--</span><br><br>In case of any trouble please email me or report an issue here [3].<br>In the near future I'll post more specific plans about development on my blog [4].<br>
<br>I hope you will find it useful.<br><br>Best regards,<br><br>Krzysztof Skrzętnicki<br><br>[1] <a href="http://www.haskell.org/haskellwiki/Package_versioning_policy">http://www.haskell.org/haskellwiki/Package_versioning_policy</a><br>
[2] <a href="http://github.com/Tener/haskell-package-vt">http://github.com/Tener/haskell-package-vt</a><br>[3] <a href="http://github.com/Tener/haskell-package-vt/issues">http://github.com/Tener/haskell-package-vt/issues</a><br>
[4] <a href="http://mostlycode.wordpress.com">http://mostlycode.wordpress.com</a><br>