No fear refactoring in the DVCS age: Enter SemanticMerge.
These are the slides of my talk at QCon 2013.
http://www.youtube.com/watch?v=GJuHtNZaong&feature=share&list=UUT5MZm9TcduZFstmQp9vRXQ&index=3
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Semantic Merge - No fear refactoring
1.
2. No fear refactoring in the DVCS age
Enter SemanticMerge
pablo santos @psluaces
@semanticmerge
meet us at booth #14
3. Agenda
• How to diff and merge refactored code with
SemanticMerge
• Under the hood: the inner workings of the tool
• Next step: multi-file SemanticMerge
• Towards Semantic version control
4. Tech from the 80’s
• Git and the DVCS pack came in 2005
• They went mainstream (GitHub)
• They all can do awesome merges
• But they rely on old-fashioned diff and merge tools
6. You can do amazing things with DVCS
• It has greatly improved merge tracking
• It does a great job finding the contributors for the 3-way
merge
• But at the end of the day… it invokes an external 3-way
merge tool to solve the merge
10. What will a conventional 3-way merge tool do?
• No conflict!
• And two methods!!
11. What will a conventional 3-way merge tool do?
• No conflict!
• And two methods!!
• It simply finds two blocks of text
being added and the original
block being deleted… Doesn’t
care about the code structure
13. What is
semanticmerge?
I guess you all know by now ;-)
• It is a 3-way merge tool (handles src, dst and base).
• It is refactor-aware and programming languageaware.
• Handles merging at the structure level and not
textblock level.
• It means:
• It first parses the code – creates intermediate trees.
• Then calculates diff pairs: base-src, base-dst.
• Then looks for conflicts between pairs.
• Enabling eXtreme Refactoring was always the goal :-)
14. How can
semanticmerge affect
development?
We were always motivated by “the cost of
change” and how refactoring can greatly
help keeping code quality high and reducing
maintenance costs.
SemanticMerge is all about helping teams to
clean up the code, keep it readable and
simple, without restrictions: do it in
parallel, fine!
15. How can
semanticmerge affect
development?
1) It helps simplifying the merges TODAY
already.
2) But more importantly it enables new
scenarios that you’re not doing today: clean
up the code, move methods, split classes…
and just be able to merge it back.
18. Detect conflicts that regular tools can’t
• What if the same method is modified concurrently at
different lines?
• Semantic detects the case and can force the conflict
resolution to be manual – a regular text based merge tool can’t do that
because it doesn’t have the context
20. Creating a tree-like view of the code
using System [1]
using System.Text [2]
namespace Sample [4-26]
class Math [6-25]
int Add(int a, int b) [8-12]
int Mul(int a, int b) [14-18]
int Subst(int a, int b) [20-24]
22. Some complex cases – cyclic move
base
namespace Test
class Socket
class Utils
class DNS
namespace Test
class DNS
class Socket
class Utils
source
namespace Test
class Socket
class Utils
class DNS
destination
23. Evil twin
base
namespace Test
class Socket
method Connect
source
destination
namespace Test
namespace Test
class Socket
class Socket
method Connect
method Connect
method Send
method Send
Two methods with exactly the same
signature can’t be added on the same
location -> conflict
25. Next steps
Check UserVoice -
http://plasticscm.uservoice.com
• JavaScript is the top request
• C/C++ - Objective-C
• XML
• Ruby, Scala…
• Mac OS X support
• External Parsers (Delphi already there)
26. • Semantic code review – each time you
Next steps
review code you would like to go straight to the point…
• Semantic blame/annotate – calculate
the blame considering methods
• Semantic Method History
• Semantic repository stats