[darcs-users] soc progress 8

Petr Rockai me at mornfall.net
Fri Jul 17 13:24:59 UTC 2009

Hi! The latest report follows...

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

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] [1]).

[1]: http://repos.mornfall.net/hashed-storage/dist/hpc/hpc_index.html

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] [2] inefficiency comes from calling `darcs show
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.)

[2]: http://progetti.arstecnica.it/trac+darcs/

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
  * 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.

More information about the darcs-users mailing list