Posts Tagged ‘Hg’

A couple of weeks ago, I kicked off the addition of SVN support to Bespin (bug 493038). This required two things: One was the actual ability to choose which VCS you’re using, as it defaulted to Hg and the auto-detection was primitive and long since functional. (There were rumors that it had even been missing from the code for a while already.) But that was the relatively easy part, as it was mostly just manipulating HTML.

The (relatively) harder part was writing the code that would do the actual work with SVN. (VCS support in Bespin is powered by UVC.) A factor in this difficulty was that the backend code is written in Python, which I’m not especially familiar with. Nevertheless, the process was actually simplified by the way things are set up, because I was able to copy the Hg code and just modify to fit the SVN commands. I was able to add basic checkout, commit, and update support, as well as username/password authentication. Kevin later came in and finished up the push/commit differentiation, among other things. I believe SSH support still needs to be done, but we’re looking for a method to use to do it. (Kevin has suggested using environmental variables, as SVN does not have the ability to pass SSH details via command line, like Hg does.)

Kevin and the other Bespin folks are in the process of getting the 0.4.0 release out the door today or in the next couple of days, and that will include this support for SVN, as well as collaboration.

My first few attempts helped me get familiar with the code that controls the model, the cursor, and the editor. (MVC, as Ben referred to it. But no, not that MVC.) But attempting to switch between model-awareness and cursor-awareness just cluttered up my code and confused the heck out of me. So I saved everything I had in a little patch file, then reverted all my changes and began anew. (Having Ben first commit some basic cleanup stuff I came across certainly helped to clear things, too.)

So I approached the problem logically, with none of the conceptions from my prior attempts, other than my new-found familiarity with the code. This allowed me to focus on the one task that I had: keep everything in cursor. It also helped prevent me from having dozens of search windows up trying to figure out where things were. And, after a bit of minor confusion about object state persistence and object cloning (thanks, kdangoor!), it was done pretty quickly. But it does require that any position coordinates that are sent to the model be translated via the new getModelPosition().

Since Julian Viereck has been “messing around” with “my” code a lot lately, and since this darn task has taken up a good chunk of my day every day this past week and a half, I decided to put up my own public clone of the Bespin repository on BitBucket to keep things running smoothly. That way I can mess around with things, too, and not get in other people’s way (as much). My code for the tab support is available in this changeset, in addition to this attachment on the bug.

So go merge or import or whatever it is you do in Hg, and give my code a whirl. If you find anything amiss, don’t hesitate to let me know. I would imagine Ben will be critiquing my code at some point soon and then eventually getting it into the main source. Enjoy!