soc progress 8
So I have managed to reduce the report lag by a few days, expect the next one on the (regular) Tuesday. Hopefully. Anyway, since the last report, a lot has happened.
I got a new laptop a few weeks back (a Lenovo X200 — I installed the base system on 30th of June), which enabled me to play around with more resource-hungry software than before (this beast has 2G of RAM and two 2.4GHz CPUs). The thing I tried was installing VirtualBox and a copy of Windows XP inside (I have an academic license, hopefully I am within the rules). This worked fairly well (the VM is pretty fast, actually) and enabled me to play with darcs on a win32 system. After installing the Haskell Platform (congrats to all the folks who worked on this: this piece of software is awesome) and MSYS, I got cabal install darcs-beta rolling. Turned out that darcs 2.3 didn’t work very well on windows (well, about 30 tests failed, and darcs whatsnew was completely unusable). It took about two days time to kick all the parts into obedience: I patched all of mmap, hashed-storage and darcs. The net result is that darcs now passes its testsuite on win32 (this never quite worked before). In the meantime, I have already released new beta, darcs 2.3 beta 4 which has all the win32 fixes in it. In addition, I made the hashed-storage testsuite pass on Windows, which should make it much easier in the future to track down problems.
I have also made some coding progress on hashed-storage: first, the packed format prototyping is advancing, and before next report, I hope to have a workable prototype. Some code already went into hashed-storage repository, and there’s already some testing coverage. Which brings me to the other thing, that is that I have improved test coverage of hashed-storage significantly (we now have 10 QC properties and 18 testcases that together cover of 77% toplevels, 66% alternatives and 83% expressions, as reported by HPC).
In darcs-hs, I have done some work on optimising
darcs show contents --match,
as this seems to be an important operation for repository browsers (or at least
for trac, but I imagine others may benefit from this). I have also figured that
large part of the tracdarcs inefficiency comes from calling
contents on way old revisions: based on this, Lele has implemented an
optimisation that instead looks at the latest revision that has a given
version of the file, and for HEAD revisions omits —match altogether. I have
deployed the optimised version on my own tracdarcs instance (for another
project) and I can confirm that it is much more usable than before. I’ll set
up a test instance for GHC repository just for the kicks of it. (Maybe we could
then get Hackage folks to install tracdarcs into their trac instances? Now that
would be cool.)
The summary of hashed-storage changes for the week:
- Improve the modifyTree testcases slightly.
- A basic testcase for diffTrees.
- Minor tidying of the Test module.
- Add a testcase for modifyTree used for removal (with Nothing passed).
- Check plain tree contents in addition to pristine.
- Add some bad and ugly filenames to the test data.
- Add a check that mmaping empty file works.
- More prototyping in Packed.
- Also derive Ord for Hash.
- One more QC property for “reachable”.
- Haddock the new utility functions.
- Add “reachable” to Utils (comes with a pair of QC properties).
- Add iterateM and (m)fixFrom to Utils (comes with QC and unit test respectively).
- Fix QC tests to start with prop_, while unit tests start with check_.
- Reorder test groups.
- Haskell still can’t read my mind. Make Packed compile (and expose it).
- Haddock tweaks.
- Start out on Storage.Hashed.Packed (for a lack of better name).
- Avoid unused import warning in Utils.
- Import Bundled.Posix qualified in Test to avoid future name clashes.
- Refuse to overwrite files in TreeIO rename (darcs relies on this).
- Properly encode whitespace in darcsFormatDir.
- Improved fileExists check in testsuite.
- Make a separate test group for Bundled.Posix.
- Add a test for fileExists from Bundled.Posix.
- Avoid symbol name conflicts with darcs sha256 implementation.
- Make the testsuite pass on win32.
- A quick&dirty unit test for getFileStatus/getSymbolicLinkStatus.
- Do not try to use lstat on win32, it seems to be broken in GHC.
- Bump version to 0.3.6.
- Bump the index magic to HSI1 (incompatible format change).
- Require mmap >= 0.4.
- Get rid of last darcs use in the testsuite.
- Do not use darcs show manifest in test, we have complete file list.
- Avoid trailing slashes when stat-ing directories (fixes win32).
- Correctly store path to the toplevel directory as “.”, not “/”.
- Use readSegment to read hashed directory listings.
and for darcs-hs:
- Optimize darcs show contents —match (avoid slurping pristine).
- Proper implementation for mDoesFileExist/mDoesDirectoryExist in Gorsvet.
- Provide readPending that also provides the “pending conflicts” check natively.
- Bump version to 184.108.40.206.
- Bump the hashed-storage dependency to >= 0.3.6.
- Implement getFileStatus, and use it instead of getSymbolicLinkStatus on win32.
- Use mmapFilePS in gzReadFilePS to avoid lazy bytestring readFile.
- Use DARCS_TESTING_PREFS_DIR in ShellHarness, since APPDATA override does not work.
- Recognize a special DARCS_TESTING_PREFS_DIR envvar to override the global preference directory.