Date and venue

When: 17-19 April 2009 Where: Haskell Hackathon 5, Utrecht



Lots of discussions held (incomplete list, help fill this in):

  • Patchwork
  • Wolfgang pointed me to the DarcsAPI wrapper… could this be used to refactor Darcs.Command?
  • WolfgangJeltsch, EricKow
  • darcs PhD
  • ReinierLamers, EricKow, GaneshSittampalam, IanLynagh
  • Improved patch notation, possible new patch theory
  • MarnixK and everybody
  • HTML and ReST documentation: HTML for math and tables is OK as a stopgap measure
  • Thomas Schilling and Operational Transformations
  • TODO: what’s the link to that paper?
  • Thomas Schilling and demo of darcs changes –context (git vs darcs)
  • hashed-storage: what indexing of timestamps is for
  • PetrRockai, EricKow
  • darcs3 and camp roadmap
  • IanLynagh, GaneshSittampalam, EricKow -darcs3 and camp roadmap
  • camp theory
  • IanLynagh, lots of people

Code implemented

  • darcs changes –max-count (unfortunately, this doesn’t seem to be very efficient)


Darcs Q&A session

  • everybody

More discussions

  • IssueManagement

  • ThorkilNaur and EricKow

  • What does darcs annotate do when there is a conflict?

  • ArjanBoeijink and EricKow

  • darcs sources

  • PetrRockai and EricKow

  • Issues

  • Plan

  • check for availability of repo root (that we’re fetching from), and if not available

  • remote: ignore the entry for this darcs (we want to keep the entry in case it’s just transient error)

    • “WARNING: can’t use <foo> please remove it from _darcs/prefs/sources”
  • local: remove the entry

  • fix unionCaches - optional, but could be nice

  • long term? on timeout: disable all sources from a given host for this darcs (URL, Ssh [transient])

  • Why does cabal install for gorsvet keep trying to reinstall darcs even though I already have it?

  • DuncanCoutts and EricKow

  • Answer: because the version of your dependency (darcs) you have installed would create an inconsistent install plan, so cabal must do the safe thing and reinstall it instead of trying to use what you have

    • In this particular case, hackage darcs (2.2.1) says it wants parsec < 3, but unstable darcs says it’s OK with parsec 3
  • Fix:

    • If your build changes dependencies, bump version numbers (of darcs.cabal, and also on dependencies on unstable darcs)
    • Unstable darcs should always have a different version number than released darcs (PetrRockai chooses scheme)
  • zlib plan

  • DuncanCoutts and GaneshSittampalam

  • Idea: The zlib API should provide a little lower-level interface based on a custom Stream type, that can end either OK (End) or in a (structured) error: data Stream = Chunk ByteString Stream | End (…) | Error (…). Compatibility is provided by folding the Stream into a lazy bytestring.

  • Plan: implementation by Ganesh? (Duncan needs to work on thesis

    • Haskell platform)


  • hashed-storage/gorsvet

  • PetrRockai and EricKow

  • TODO: make gorsvet optimize (basically the index rebuild functionality of hashed-storage) go fast when there already is a (possibly out of date) index

  • PLAN for darcs:

    • start with adding hooks into darcs that use hashed-storage to keep an up-to-date index around (and possibly make darcs optimize create the index if it’s missing
    • start flipping individual commands to use the hashed-storage primitives for diffing (whatsnew first, others later)
    • a bad index should only cause performance issues, not correctness issues (as long as we don’t run into a sha256 collision, anyway :P…)

Code implemented

  • replacing indexed lists by maps in Darcs.Patch.Check




  • headPermutations, bits of Darcs.Patch classes, bits of Darcs.Patch.Non


  • –max-count fixed to actually be faster! PetrRockai
  • zlib extended with enough information needed to recover from bad CRC patches - GaneshSittampalam (pending approval from Duncan)
  • Some failed attempts to make unit tests faster. Refactored Darcs.Patch.Check.superdirs_exist -ReinierLamers


Attendee checklist

  1. Register for Hac5!

  2. Add yourself to the attendee list (or ask Eric to do it if you don’t have a HaskellWiki account)

  3. Add yourself to the Hac5 projects page under darcs

  4. Install GHC (>= 6.6) with Cabal 1.6 and cabal-install 0.6 on your laptop

  5. Get a community.haskell.org account

  6. Tell Eric about your account, if you have not done so already

  7. Make sure you can compile the latest darcs darcs get http://darcs.net

  8. darcs get http://code.haskell.org/darcs/buildbot

    (and try the quickstart) just in case we want to have lots of buildbots during the sprint

See also