Monday, 25 August 2008

Coming together again...

I've had a break, a week in California and a week on Cape Cod, I'm back in England, I've taken my study apart, laid a new floor, and put it back together again.

I've just picked up the pieces of re-writing the explorer shell extensions in c++ (so that explorer won't load the .Net run-times and get itself into trouble). I hope Microsoft support .Net shell extension in Windows 7.

A break did me some good, and things have progressed well since.

The new extensions are working well, all the icon overlays are in place using TortoiseOverlays. I know I said they were done in July, but I was getting a bit ahead of myself. The codes much neater now, and client/server operations minimised. The only issue I have at the moment is that the 'Normal' overlay doesn't appear, when I attach the same Lizard handler to a different TortoiseOverlay handler all works fine, so I think there's either something up with the TortoiseOverlays code (unlikely) or something up with the config (more likely) but it all looks right, and is the same for all the working ones.

I've got to optimise the item data requests for the additional list view columns, but the techniques used for overlays will work again here, so its just implementation. I'm going to leave the property page out for now to try a get a build out. I'm not entirely happen about the build process with the c++ project. For some reason regsvr32 always fails for the output dll, so COM registration is manual. I'll probably post the source, a good build and a .reg file initially and leave it to those who want to to create their own build process.

I'm away next weekend, but realistically I'm hoping to get something published but mid september. I'm also planning to provide support for assigning different TFS servers to working folders and up loading all the source to the Codeplex TFS server and testing Lizard against that.

After that, back to features list, and on to a Beta release!

Saturday, 12 July 2008

Stop press...

I've fixed the problem with the context menus! My 'QueryContextMenu' funtion wasn't returning the number of added items. Huzzah!

Now we should see some progress.

Quick update

I've been really busy with 'other things' of late, and Lizard has been a bit neglected despite my good intentions.

But a quick update :-

The c++ extensions are still coming along. The additional columns are working nicely. The icon overlays are working - and using the TortoiseOverlays dll, so Lizard will run nicely with TortoiseSVN/CVS installed - thanks to HarriHasler for the tip on that one - and for taking me to task for the c# extensions in the first place.

At the moment I have a weird problem where the menus display great, the first item works, but clicking other items causes menu commands from the main menu to be invoked, not the sub menu. I keep looking through the code for the error but just can't spot it.

Once that is done I just need to re-code the properties page, there are some good examples on CodeProject for property pages so hopefully it won't be too bad.

I am not enjoying this at all though! The mixture of c++, COM and running within the Explorer process and the inherent debugging issues does not make for a fulfilling evening of coding! How many ways can you screw up string handling in c++? I think I've managed about 6,000 so far.

I really want the ability to merge across arbitrary folder and not just direct branches, so that will be the next area to tackle. I hope once the extensions are re-done my enthusiasm will rally!

Sorry to anyone waiting... it will come soon!

Thanks

Ian.

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.

Sunday, 13 April 2008

New Release LizardTF.alpha.v.0.2.9

It's been a month and a half, which is far longer than I intended, but a new release is now available. I've been using Lizard at work in all the situations where Team Explorer annoys me too much, and that has driven a fair bit of the latest release, so some of the areas I intended to do more work on have actually been left behind a little (full conflict resolution with renames, moves etc), and other areas, such as WorkItems are ahead of plans.

Also in this time my VS-TFS 2008 Beta licence expired and it took a while before I could set up a shiny new VM server running the old 2005 version. I thought it ran out in April, but hey ho.

I need to do a whole bunch of screen shots, really, for this release as there are lots of new screens to handle labels, WorkItems, shelving, unshelving, branching and a Repository Browser, hopefully I'll post this over the next week. But just right-click a file/folder that belongs to a workspace in Explorer and have a look. Hopefully it's fairly intuitive if you're use to TFS/Team Explorer or SVN/TortoiseSVN

All in all, Lizard is going rather well. This release isn't as complete as I'd like it to be, but I thought I should get something out. Otherwise it's easy to keep putting off and putting releasing anything. Obvious omissions from this release that I'll address soon are: Deleting labels, right click menu options from the Review screen, Move and Rename options. The labeling screens haven't been tested very hard.

Next up, the review screen will show files that have not been checked out, but have been changed (with an option to check them out) - handy if you're not using VS and you're a bit lazy and I'll finally sort out the rename/move conflict resolution and branch merging.

The 'fun' bit of this release was changing the already 'interesting' list/tree view of the review screen to use VirtualMode (that is creating ListViewItems on demand, rather than all up front). The MS implementation of this feels a bit last minute as although your list views are much faster, they don't support groups, images or checkboxes, Lizard uses all three, but the images and checkboxes were already custom drawn, now the groups are custom handled too. One happy consequence was that it actually made column sorting easier. The whole thing now feels much slicker and smoother, especially when dealing with large file sets, and the tree expansion and collapsing looks much better too.

Sunday, 9 March 2008

Differences between LizardTf and Team Explorer

I posted a reference to LizardTF on a post to Dotmad.net, and Adi asked what the main differences between Microsofts Team Explorer and LizardTF were. I started to answer on that post but the comment started to get quite long, so I thought I'd answer it here, and link here from there. So here is the answer:

The main difference is that all functions are driven from the working copies (via windows explorer) rather than from a repository (server) view. I prefer this way of working as once checked out, you are working on the working copies, not the repository. I admit the distinction is a subtle one, but quite important if you want to work off-line, which is something I'd like to add to LizardTF - though I notice now that it is included in TFS2008 (see previous post)

LizardTF integrates into Windows Explorer, and shows TFS items current status with icon overlays, so as you browse your files you can immediately see what is checked in, checked out, changed, out of date, potentially conflicting or recently added. Extra detail columns show TFS version numbers, status and locks, an additional properties page shows a quick history and full status - all from the regular explorer. Extra context menus provide access to all the repository functions.


LizardTF shows both in windows explorer and in review screens all conflicts, out of dates, check-outs with local changes, and check-outs without changes(a distinction Team Explorer doesn't make).
The review screens only show changes about the files/folders selected, rather than all across the repository as in Team Explorer. Though if you select a root folder, you will see all changes, obviously.

When you select 'Check-in' in Team Explorer it lists everything that is checked out. Visual studio will check things out automatically, some won't have changed. This makes a quick sanity check review before committing a changeset rather time consuming. LizardTF clearly shows files that have changed seperately from ones just checked out.

Team Explorer only mentions conflicts after you attempted a check in. You then get the option to fix conflicts, but it does not prompt to re-attempt the check in once all are resolved. You will have lost all check in comments, notes and associations. LizardTF highlights conflicts at once, and doesn't close the check in screen unless you tell it to.

Team Explorer sometimes insists that there are no pending changes, even though you know there are. You have to use the command line to get out of this situation. (Or maybe re-start Visual Studio - but that can be a pain). LizardTF has never done this (yet) and can resolve this problem with Team Explorer encounters it.

The comparison tool has more view options, than the Microsoft one, offering side-by-side and inline, and differences only with optional context - good for quick reviews. It also allows you to reload either side from either any file system file, or any repository item. Once a repository item is loaded you can easily reload to any revision with out closing and re-opening. This makes searching for where changes occurred much simpler.



The merge tool is, in my opinion a lot clearer than Microsoft's tool, it also offers side-by-side-by-side view, side-by-side with output beneath, and side-by-side with output in a separate window for maximum on-screen visibility. All merges can be undone/redone, all conflicts resolved / reset and resolved again, all with distinctive mark-up and tool tip text to show the state of any line.

Lizard TF also offers what Tortoise calls blame, and Microsoft have called Annotate in their 2008 release of Team Explorer, this shows the originating changeset for every line in a file, which can be very useful when you find a line that seems insane, but also necessary.

LizardTF History screen shows changeset details in second pane, so you don't have to launch a seperate model form to see what is in a changeset, you can then immediately navigate to the history of any item included in changeset, navigate back again, or up a folder level. This makes history browsing very quick and fluid.

The integration into Visual Studio makes Team Explorer very annoying when it comes to model forms - you can't enter a WorkItem, or view histories once you've opened a check-in dialog, for example. LizardTF uses very few modal forms.

Team Explorer does have better progress bars, but I think they might have better access to progress events than are offered by the public API, because I've looked and can't find the message events! (I will keep looking...)

There are screen shots throughout this blog, but I need to get a decent up to date set.

That's all for now. In the future we will have baseless merging, rollbacks and more...

Already written for the next release: branching, shelving, unshelving, some performance optimisations (for big Gets and Explorer browsing) and merging changes into unrelated targets.

Sunday, 2 March 2008

They are copying me (pre-emptively)

I've just noticed that the VS2008 version of Team Explorer has a blame (annotate) option, and a folder diff tool that allows you to compare folders from repo/version or disk.

Just for the record, Microsoft copied Lizard, even if their code was written some time before mine. And I still like mine the most!

Bah!