Monday, 26 May 2008

The Joys Of C++

Following this discussion it became apparent that the c# shell extensions that LizardTF uses would not do. I originally thought that there would only be an issue if another application also used shell extensions, and used an incompatible CLR. I was wrong.

So I've been learning some c++.

I've got the menus working! and I'm hoping that most of the pain is now behind me (Getting to grips with c++ libraries and linker errors is not all that fun). But now there's a tcp/ip based transport in place (pretty basic string stuff) for Lizard so serve up the info, and my c++ extension classes are connecting up okay and passing in requests and processing results. I've got Michael Dunn's excellent articles on shell extensions from CodeProject, which I already used as a basis for the c# code, so I'm hoping to get the full set done over the next month, and then pray I haven't caused any major memory leaks along the way. It's a long time since I've coding without built in memory management.

On another note, I have finished (I think) the 'History through Branches' option on the history screen, this does pretty much what the name suggests, and shows the history from the originating branch(es). This was more of a pig than I had hoped, especially when I was trying to keep the selected block sizes all working. It's all looking good, but I haven't given it a full test on a big, real source repository with some complex branching. This should be complete soon.

The Lizard systray icon will (next release) have a little menu to jump straight into a beefed up repository browser, work items or label search. The repository browser now has full support for deleted items and you can browser/compare at any folder, branch or version and view or get any items/folders.

There is a currently experimental feature that uses FileSystem watchers and can automatically check out files that are changed, this seems to be working well, but I need to see what happens when used at the same time as TeamExplorer is doing a large get.

Work as slowed up a bit after crunching through a lot of functionalty, now I'm down to the trickier bits, but once the new shell extensions are done I want to look to releasing once a month, and hopefully will move to Beta (wahey!) quite soon.

The feedback I've had so far as been quite positive, so thanks for that. Please do let me know if something is broken, not right, too slow or difficult to use; and please let me know if you have any desired features not currently present or planned.

I'm hoping to open this project up to collaborators once it becomes Beta and I have a chance to go through, tidy and comment some of the code, so let me know if you think this might be your sort of thing.