Terror of the Reposturgeon!

I’ve just shipped reposurgeon 2.0, a power tool for editing and interconverting version-control repositories. This is a major release, adding the capability to read Subversion dump files directly.

I’ve blogged about this project before, highlights at 1 2 3 4 5 6 7 8.

Development had gotten stalled for six months because of a really insidious bug in the handling of Subversion dumps with certain odd sorts of multibranch histories. But recently one Greg Hudson sent me a performance-enhancement patch that enabled me to get rid of an O(n**2) lookup function deep in the code – and, as I had suspected since it first popped up, the bug was in that lookup function. (No, I still don’t know exactly where – it was something subtle.)

I’m shipping this now, before my previous target of when the NUT project guys sign off on their repo conversion, because I want people to stop using the older versions. 99 out of 100 times they would be OK, but that 100th time could be nasty.

Fear the reposturgeon!

7 comments

  1. I guess that was Subversion misdesign decision to follow Perforce model of branching, i.e. branching by copying, which conflates projects / repositories + branches + project directory structure in one filesystem hierarchy namespace that was the ultimate source of the problem?

    1. >I guess that was Subversion misdesign decision to follow Perforce model of branching, i.e. branching by copying, which conflates projects / repositories + branches + project directory structure in one filesystem hierarchy namespace that was the ultimate source of the problem?

      Yes, I think so. There are no end of problems near branch merges in Subversion, and not just under my tools either.

  2. I wonder how you can swim for so long so deep in Subversion’s innards without snapping? Your mental constitution can’t possibly be human. I, for one, would not trust myself with Subversion and a small arsenal at my disposal. Kudos to you sir, kudos.

Leave a comment

Your email address will not be published. Required fields are marked *