Semantic Merge - No fear refactoring
Upcoming SlideShare
Loading in...5
×
 

Semantic Merge - No fear refactoring

on

  • 531 views

No fear refactoring in the DVCS age : Enter SemanticMerge . ...

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

Statistics

Views

Total Views
531
Views on SlideShare
529
Embed Views
2

Actions

Likes
0
Downloads
3
Comments
0

1 Embed 2

https://twitter.com 2

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Semantic Merge - No fear refactoring Semantic Merge - No fear refactoring Presentation Transcript

  • No fear refactoring in the DVCS age Enter SemanticMerge pablo santos @psluaces @semanticmerge meet us at booth #14
  • 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
  • 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
  • You can do amazing things with DVCS
  • 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
  • Simple example
  • Simple example
  • Simple example
  • What will a conventional 3-way merge tool do? • No conflict! • And two methods!!
  • 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
  • What SemanticMerge does • It *knows* about the methods so…
  • 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 :-)
  • 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!
  • 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.
  • A SemanticMerge scenario
  • A divergent move case
  • 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
  • Under the hood
  • 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]
  • base source destination Process Parser source tree base tree destination tree Differ Differ src-base diffs dst-base diffs Merger automatic conflicts manual conflicts source ops to apply result
  • 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
  • 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
  • Integrations • IntelliJ (and Android Studio) • Git, Mercurial, TFS, Plastic SCM, Perforce, SVN… everything!
  • 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)
  • • 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
  • Multi-file SemanticMerge