[darcs-users] soc progress 3

Petr Rockai me at mornfall.net
Wed Jun 10 07:55:32 UTC 2009

Hi, I know that last time I forgot to send the report to the list, so I'm
sending #2 as well with this one...

soc progress 3

This week has been a little weaker. Lot of non-SoC stuff interfered, not the
least exams. So far I have passed 2, 2 more to go (but these are the harder
ones, and I spend fair amount of time preparing for those). Of course,
bassoon takes its chunk as well and everything.

I have worked on documenting the index format (and code), some minor cleanup
and interoperability improvements. I have some unrecorded changes making the
lcs dependency optional as well, and I need to sort out the bytestring-mmap
versus mmap thing (i.e. drop bytestring-mmap and use mmap everywhere,

I have also tracked down an important performance regression in current
hashed-storage (came with an innocent bug fix, and is about factor of 2
slowdown ... oops). The bad patch is "Do not miss Stubs that are hidden in a
SubTree when unfolding." Go figure. I have also found another performance
problem, in "darcs wh filename", where darcs reads full pristine cache to
check whether the filename given exists in the repository (this can be made
much more efficient using hashed-storage). I'll fix both in the following
week, hopefully.

Last, Eric has helped me set up some wiki bits [for the SoC project] [1]
itself and [for hashed storage] [2].

[1]: http://wiki.darcs.net/GoogleSummerOfCode/2009-Hashed
[2]: http://wiki.darcs.net/hashed-storage

Finally, the mandatory list of changes... The parenthesised changes are not on
the public branches... the rollback is there mostly because it reverts to a
more strict behaviour, although buggy darcs patches require a more
benevolent one (there are supposedly move patches out there with
non-existent "from" files). The Cabal 1.7.1 thing is really nice, but will
have to wait till Cabal 1.8 is released... if you are interested, there's a
patch bundle for upstream darcs in darcs-users@ archive.


  * Do not build the unit tests by default (avoids dependency on new process lib).
  * Bump version to 0.3.1.
  * Make the createIndex Stub error more specific.
  * Add a makeName utility function to AnchoredPath.
  * Make rename of a non-existent file a non-fatal error (in TreeIO).
  * Check that unfolded Tree does not have any Stubs in it.
  * Really make the process dependency optional.
  * Bump required cabal version to 1.6 (required for source-repository).
  * Fix typo in description in the cabal file.
  * Bump version to 0.3.2.
  * Tighten the base dependency since hackage complains otherwise.
  * Do not miss Stubs that are hidden in a SubTree when unfolding.
  * (rollback: Make rename of a non-existent file a non-fatal error (in TreeIO).)
  * Improve Index documentation.
  * Make peekItem safe even when dirlen is Nothing.
  * Un-hardcode _darcs/index from the Index module.
  * Bump version to 0.3.3.

And darcs-hs:

  * (Link darcs executable and unit tests against the darcs library (Cabal >= 1.7.1).)
  * (Move non-darcslib modules out of src, so we can build the unit tests.)
  * We need to unfold the pristine Tree before rebuilding the index.
  * Fix index invalidation in the move command.
  * Bump the hashed-storage dependency to >= 0.3.2.

soc progress 2

As for the last week... There have been some unexpected developments. The
hashed-storage patches have started to trickle into mainline darcs instead of
(as I have expected) sitting on my private branch for a while. This is
partially due to my RM decision to try push for indexed whatsnew in darcs 2.3
(and Eric dutifully started to push patches into mainline, conjuring review
coverage out of thin air...)

Either way, this has probably caused some intermittent breakage, although
everything should be back on track with the latest patches. Also, due to some
cabal vs ghc 6.8 vs process-1.0.1 bug, installing hashed-storage has caused
problems for people on 6.8. Since that library is only required for the unit
tests of hashed-storage, I have made this optional and people should be able to
install hashed-storage 0.3.1 on 6.8 without much trouble (however, Hackage does
not let me upload it right now, and I'm not sure why... I'll try to resolve
that ASAP).

Nevertheless, I am locally using darcs-hs with Record flipped over to use
indexed diffing. This goes a long way to improve testing coverage of the index
code, since almost everything in the testsuite relies on the record code
(whereas the whatsnew code is only mildly tested). With the current versions of
hashed-storage and darcs-hs, everything passes just fine, and most bugs I could
find with previous incarnations are fixed (mostly pertaining to pending renames
and to subtree queries). Unfortunately, doing a subtree query is for some
reason relatively slow (although still reasonably faster than say darcs
2.2). I'll look into that in the following week.

Moreover, I should start looking into getting us a new pristine format that I
have promised in my application (the indexed working directory is, obviously,
just a part of the whole deal).

In the last week, hashed-storage library has seen these changes:

  * Properly decode whitespace when reading darcs hashed pristine.
  * Provide unfoldPath to partially unfold a (stubbed) Tree.
  * Use partial unfolding in TreeIO monad.
  * Bump version to 0.3.
  * Update cabal (description and category).
  * Resolve conflict in Monad.
  * Add haddock to TreeState.
  * Resolve conflicts in the cabal file.
  * Improve AnchoredPath API and haddocks.
  * Do not build the unit tests by default (avoids dependency on new process lib).
  * Bump version to 0.3.1.

And darcs-hs:

  * Extend the weird filenames part of the whatsnew test to cover indexed filenames.
  * Run tests in groups even when only a part of the testsuite is being executed.
  * Resolve issue1229: strictify checkPristineAgainstSlurpy.
  * Resolve conflict with import list cleanup in Setup.lhs.
  * Put back Setup into a Wall-clean state, robustify error conditions a little.
  * Add comment explaining strictification of checkPristineAgainstSlurpy
  * TreeIO is smart enough now to unfold as needed.
  * Version the build dependency on hashed-storage.
  * Fix the path restriction versus pending renames in unrecordedChanges.
  * Factor out a separate boring_regexps in Darcs.Repository.Prefs.
  * Provide a restrictBoring (like restrictSubpaths) in Darcs.Gorsvet.
  * Fix Tree restriction in various cases of unrecordedChanges.
  * Also invalidateIndex in Revert and Remove.
  * Remove tentativelyMerge from Gorsvet, as it's unused and confusing.
  * Take a list of paths in unrecordedChanges instead of Tree transform.
  * Drop extra parens.
  * Fix witnesses in Darcs.Gorsvet.


Peter Rockai | me()mornfall!net | prockai()redhat!com
 http://blog.mornfall.net | http://web.mornfall.net

"In My Egotistical Opinion, most people's C programs should be
 indented six feet downward and covered with dirt."
     -- Blair P. Houghton on the subject of C program indentation

More information about the darcs-users mailing list