Here we are, releasing again! Doing our best to follow the rule of “release early, release often”.
Today we’re publishing our latest feature in SemanticMerge: the “Visual Merge”. And since picture is worth a thousand words… here you are:
We’ve also added “difference rendering” to the SemanticDiff tool, so it is possible to use the new visual functionality not only during merge but also while looking for differences, which is a much more common operation:
The full story behind visual conflict rendering
At the very beginning we explained semantic with diagrams like this:
We wanted to explain how something as complex as splitting a class into two different ones in parallel could be easily merged by SemanticMerge. Using figures (and Visio) was the better way we had.
Soon we started thinking on how cool it would be to teach Semantic to render the conflicts...
It is all about the icons
If you ever used SemanticMerge or if you visited the website then you’ve seen the way in which we render the conflicts:
As you can see each method in conflict is decorated with icons representing the type of change: “c” stands for changed, “m” for moved, “d” deleted and “a” added (we also use “r” for renamed as a special “moved” case).
Icons on the left mean differences with “source contributor” and the ones on the right mean differences with the “destination contributor” considering contributors as in the following picture:
The whole idea of putting the icons on the left and the right of the method came from this graphic (again powered by Visio):
Hence, when a method in the shape in the middle (ancestor or base) has icons at both sides it means it has a conflict. If it only has one icon it means it only has changes in one of the two contributors, so the merge will be automatic, and if it has no icons it means it was unchanged.
This is the idea behind the entire GUI and as you can see now, the originally Visio-drawn concept grew up to become a full GUI.
Some VisualMerge images
These are some of the merges you can display if you just install SemanticMerge and go to the samples directory.
This is the “Socket Deeper” example, in C# and rendering “hiding unchanged nodes” which greatly simplifies the entire graphic:
Now an example, this time in Java, grouping unchanged parts:
The State of the Art of Merge Technology
We’ve recently posted what can be currently achieved chaining SemanticMerge into an advanced merge toolchain, which maybe is somehint you’re interested on :P
Stay tuned because next week we will come up with a top request in our UserVoice :P