soc progress 10
Wow, tenth progress report. That’s a long time now. Still a day late, but getting on track slowly (slower than expected I guess). Last week has seen the release of darcs 2.3. Nonetheless, this release has seen partial integration of hashed-storage work. Unfortunately, the release was also a major motivation drain — RMing darcs is a lot of (fairly hard) work.
On the unsafeDiff front, I’m at a standstill (there are still the same 2 instances that I reported about last week). I haven’t progressed on the HPC issue either, but that can wait and it’s not directly relevant to SoC.
I have worked on profiling my last-week’s check/repair port. Fortunately, the implementation does not leak memory, and is slightly slower (some 20%) than the old version. Most of the extra goes into filepath juggling (due to representation differences between darcs and hashed-storage). See my darcs-users post for more details about this.
In other news, I have forked an 0.3 branch of hashed-storage and flipped the switch to 0.4 in mainline. The first compatibility-breaker is the Hash type refactor, which improved things a fair bit. Also, we now represent hashes in-memory (and in the binary index) by 32-byte binary vectors (represented as bytestrings) instead of using the 64-byte ascii-hex representation. Also, this has removed a lot of Maybe wrapping, since the new Hash type comes with a “NoHash” constructor.
Other than that, I have taken a break after the release. I still have some motivational issues, but I should improve my output rate over the next week. The major todo on is file benchmarking (since Eric keeps nagging me about this, and I still haven’t figured how to do this properly) and actual implementation of the (internal) pack format.
Hashed-storage changes:
- Do not include _darcs/index in the testdata.
- Move floatPath into the AnchoredPath module.
- Do not forget to reset changesize in Monad, upon sync.
- Avoid calling expandPath when not needed, in Monad.
- Do not forget to update hashes before syncing a hashed tree in Monad.
- Refactor Hash datatypes extensively.
- Bump version to 0.4.0.
- We can now base64/url-encode (and decode) all Hash types.
- Add a generic sha256 function to the Hash module.
- Sprinkle a few haddocks around the Hash module.
- Add a NEWS file.
- Bundle NEWS in source distribution.
- Move the darcs-specific packing bits into Darcs.
- Use “plain” hashes in Packed (instead of the size-carrying darcs ones).
- The hatchery cleanup for compact is a removeFile (for now, anyway).
- Rename readOS to load.
- Haddock header for Packed.
- Fix collateral from using plain hashes in object storage. (Ow, ugly.)
And darcs-hs changes:
- Bump version to 2.3.0.
- Update autoconf release data to 2.3.0.
- Update NEWS.
- Ship the NEWS file in cabal tarballs as well.
- Port to hashed-storage 0.4 Hash changes.