Jump to: navigation, search

Difference between revisions of "EMF DiffMerge"

(Links)
 
(35 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 +
[[Image:Logo EDM Small.png]]
 +
 
== Introduction  ==
 
== Introduction  ==
  
EMF Diff/Merge is a diff/merge tool for models.  
+
EMF Diff/Merge is a tool for merging models. More precisely, it is a technical component which helps create tools that need to merge models. It consists in a diff/merge engine that is designed to prevent data loss and enforce model consistency during merge, thanks to consistency rules - predefined and, if needed, user-defined. It also includes GUI components.  
  
Merging models is a common need in model-based activities, not only for version control but for model manipulation in general. However, merging models is much more complex than merging source code. Since EMF models are rich data structures with constraints and behavior, merging them consistently is a delicate problem.  
+
It is intended to be a booster for developing merge-based features or systems such as model refactoring, iterative model transformations, bridges between models or modeling tools, collaborative modeling environments, or versioning systems.  
  
EMF Diff/Merge aims to help solve that problem. The tool currently satisfies the following requirements:  
+
The EMF Diff/Merge project is part of [http://www.eclipse.org/projects/project.php?id=modeling.emf EMF]
  
*The consistency of the model being merged is preserved whenever possible, by automatically merging interdependent differences together.
+
== Context and issues  ==
*The order in which differences are merged has no impact.
+
*The global impact of a merge can be determined beforehand (picture below).
+
*Undo/redo of merges is supported.
+
*Comparison can be performed on any arbitrary model scope for better versatility and scalability.<br>
+
  
<br>
+
Merging models is a common need in model-based activities, not only for version control of models but for model manipulation in general. However, it is a much more complex operation than merging source code. This is because models, in the EMF sense, are rich data structures constrained by a metamodel and sometimes subject to implicit engineering rules.&nbsp;Have you ever merged models in the past and obtained incorrect, unexpected or inconsistent results?&nbsp;This is what EMF Diff/Merge seeks to prevent.
  
[[Image:ReducedOverview.png|center]]<br>
+
== Tool overview  ==
 +
 
 +
[[Image:ReducedOverview.png|center]]  
  
 
The scope of EMF Diff/Merge covers:  
 
The scope of EMF Diff/Merge covers:  
  
*A lightweight, configurable engine for comparing and merging EMF models in 2-way and 3-way (with common ancestor) configurations.
+
*A lightweight, configurable engine for comparing and merging EMF-based models in 2-way and 3-way (with common ancestor) configurations.
*Matching of model elements by ID, where an ID can be any "signature" that uniquely identifies the element within its scope: Ecore ID, XML ID, qualified name, location in model tree, etc.
+
*A simple GUI with reusable UI components.
+
  
The final goal is to obtain a mature, versatile software building block for multiple usages: version control, incremental model transformations, model refactoring, etc.  
+
*Matching of model elements by ID, where an ID can be any "signature" that uniquely identifies the element within its scope: Ecore ID, XML ID, qualified name, location in model tree, etc.
  
The EMF Diff/Merge project is part of&nbsp;[http://www.eclipse.org/projects/project.php?id=modeling.emf EMF].  
+
*A GUI with reusable components.
  
== Principle  ==
+
Among others, the tool exhibits the following characteristics:
  
The usage process is illustrated by the figure below. First, a comparison is created based on the models to compare. The differences between those models are computed according to given policies. Then, as long as differences remain, any subset of these differences can be selected for merging. Every time, predefined consistency rules and user-defined policies are used to compute the minimal superset of differences that must be merged to preserve consistency. The user may decide whether to confirm or cancel the merge of the whole set of differences.<br>
+
*Comparison can be performed on any arbitrary model scope for versatility and scalability reasons.
  
[[Image:Process.png|center]]  
+
*Interdependent differences are merged together in order to preserve model consistency.
 +
 
 +
*The order in which differences are merged has no impact.
 +
 
 +
*The global impact of a merge can be determined beforehand (picture above).
 +
 
 +
*Undo/redo of merges is supported.
 +
 
 +
== Principle of the solution  ==
 +
 
 +
The usage process is illustrated by the figure below. First, a comparison is created based on the models to compare. The differences between those models are computed according to given policies. Then, as long as differences remain, any subset of these differences can be selected for merging. Every time, predefined consistency rules and user-defined policies are used to compute the minimal superset of differences that must be merged to preserve consistency. The user may decide whether to confirm or cancel the merge of the whole set of differences.
 +
 
 +
<br> [[Image:Process.png|center]]  
 +
 
 +
For a description on how the objectives and the level of abstraction differ from EMF Compare, see the [http://www.eclipse.org/proposals/modeling.emf.edm/ project proposal].
  
 
== Usage  ==
 
== Usage  ==
  
 
*[http://wiki.eclipse.org/EMF_DiffMerge/Programmatic_Usage Programmatic usage and concepts]  
 
*[http://wiki.eclipse.org/EMF_DiffMerge/Programmatic_Usage Programmatic usage and concepts]  
*[http://wiki.eclipse.org/EMF_DiffMerge/Default_GUI Default GUI]<br>
+
*[http://wiki.eclipse.org/EMF_DiffMerge/Default_GUI Default GUI]  
*[https://hudson.eclipse.org/hudson/job/buckminster-emf-diffmerge-master/javadoc/ Javadoc]
+
*[https://hudson.eclipse.org/diffmerge/job/emf-diffmerge-core-master/javadoc/ Javadoc]
 +
 
 +
== Applications  ==
 +
 
 +
*[http://wiki.eclipse.org/EMF_DiffMerge/Patterns Patterns]: a technology for the declarative creation, application, evolution and management of modeling patterns
 +
*[http://wiki.eclipse.org/EMF_DiffMerge/Co-Evolution Co-Evolution]: a technology for model synchronization based on the merge mechanism
 +
*[http://wiki.eclipse.org/EMF_DiffMerge/Model_Patch Model Patch]: a technology for recording, applying and persisting model modifications in a portable, model instance independent way
 +
*Incremental transitions between engineering phases in [http://www.polarsys.org/capella/ Capella]
 +
*Reuse mechanism ("Replicable Elements") in [http://www.polarsys.org/capella/ Capella]
  
 
== Documents  ==
 
== Documents  ==
  
*[http://wiki.eclipse.org/images/4/4c/EDM_ECE12.pdf Overview] at EclipseCon Europe 2012 - Modeling Symposium
+
*[http://wiki.eclipse.org/images/4/4c/EDM_ECE12.pdf Overview] at EclipseCon Europe 2012 - Modeling Symposium  
 +
*[http://jaxenter.com/introducing-emf-diff-merge-chat-with-olivier-constant-project-lead-47666.html "New in Kepler" interview] in June 2013 on JAXenter
 +
*[http://wiki.eclipse.org/images/f/fc/EDM_KeplerDemoCamp_Frankfurt_2013.pdf Presentation] at Kepler Demo Camp Frankfurt am Main (2013)
 +
*[https://www.eclipsecon.org/france2015/session/transformations-patterns-version-control-where-there-modeling-there-merging-sponsored-thales Presentation of applications] at EclipseCon France 2015
 +
 
 +
== Download  ==
 +
 
 +
Click here for the [http://wiki.eclipse.org/EMF_DiffMerge/Download Download page].
 +
 
 +
== Links  ==
 +
 
 +
*[https://www.eclipse.org/projects/project.php?id=modeling.emf.diffmerge Project summary]: a summary of the current state of the project
 +
 
 +
*[https://www.eclipse.org/proposals/modeling.emf.edm/ Project proposal]: the original proposal for the project
 +
 
 +
*[https://www.eclipse.org/forums/index.php?t=thread&frm_id=246 Forum]: the dedicated newsgroup
  
== Download<br>  ==
+
*[https://bugs.eclipse.org/bugs/buglist.cgi?classification=Modeling;query_format=advanced;component=Core;component=UI;component=Patterns;component=Co-evolution;component=Patch;product=EMF.Diffmerge Bugzilla]: for reporting bugs
  
*Via the update site:&nbsp;[https://hudson.eclipse.org/hudson/job/buckminster-emf-diffmerge-master/lastSuccessfulBuild/artifact/result/publish/org.eclipse.emf.diffmerge.sdk.feature/site.p2/ https://hudson.eclipse.org/hudson/job/buckminster-emf-diffmerge-master/lastSuccessfulBuild/artifact/result/publish/org.eclipse.emf.diffmerge.sdk.feature/site.p2/]  
+
*[https://git.eclipse.org/c/diffmerge/org.eclipse.emf.diffmerge.core.git/ Source repository]: the Git repository of source files
*Or as [https://hudson.eclipse.org/hudson/job/buckminster-emf-diffmerge-master/lastSuccessfulBuild/artifact/result/publish/org.eclipse.emf.diffmerge.sdk.feature/dropins/*zip*/dropins.zip dropins]
+
  
The tool has been tested with Juno, Indigo and Helios (Eclipse Modeling 4.2, 3.7 and 3.6).  
+
*[https://git.eclipse.org/r/#/admin/projects/diffmerge/org.eclipse.emf.diffmerge.core Gerrit access]: the project on Eclipse Gerrit
  
== Links&nbsp; ==
+
*[https://hudson.eclipse.org/diffmerge/job/emf-diffmerge-core-master/ Build job]: the location where the project is being built
  
*[http://www.eclipse.org/projects/project.php?id=modeling.emf.diffmerge Project summary]: a summary of the current state of the project<br>
+
*[[EMF_DiffMerge/Developer|Developer's guide]]: setting up a development environment for contributing
*[http://eclipse.org/diffmerge/ Project homepage]: the standard Eclipse web page for the project, essentially referring to this wiki
+
*[http://www.eclipse.org/proposals/modeling.emf.edm/ Project proposal]: the original proposal that led to the creation of the project
+
*[http://www.eclipse.org/forums/index.php?t=thread&frm_id=246 Forum]: the dedicated newsgroup
+
*[https://bugs.eclipse.org/bugs/buglist.cgi?list_id=2354424;classification=Modeling;query_format=advanced;component=Core;component=UI;product=EMF.Diffmerge Bugzilla]: for reporting bugs
+
*[http://git.eclipse.org/c/diffmerge/org.eclipse.emf.diffmerge.core.git/ Source repository]: the git repository of source files
+
*Build jobs: [https://hudson.eclipse.org/hudson/job/buckminster-emf-diffmerge-master/ main], [https://hudson.eclipse.org/hudson/job/buckminster-emf-diffmerge-helios/ legacy]<br>
+

Latest revision as of 03:26, 31 May 2017

Logo EDM Small.png

Introduction

EMF Diff/Merge is a tool for merging models. More precisely, it is a technical component which helps create tools that need to merge models. It consists in a diff/merge engine that is designed to prevent data loss and enforce model consistency during merge, thanks to consistency rules - predefined and, if needed, user-defined. It also includes GUI components.

It is intended to be a booster for developing merge-based features or systems such as model refactoring, iterative model transformations, bridges between models or modeling tools, collaborative modeling environments, or versioning systems.

The EMF Diff/Merge project is part of EMF

Context and issues

Merging models is a common need in model-based activities, not only for version control of models but for model manipulation in general. However, it is a much more complex operation than merging source code. This is because models, in the EMF sense, are rich data structures constrained by a metamodel and sometimes subject to implicit engineering rules. Have you ever merged models in the past and obtained incorrect, unexpected or inconsistent results? This is what EMF Diff/Merge seeks to prevent.

Tool overview

ReducedOverview.png

The scope of EMF Diff/Merge covers:

  • A lightweight, configurable engine for comparing and merging EMF-based models in 2-way and 3-way (with common ancestor) configurations.
  • Matching of model elements by ID, where an ID can be any "signature" that uniquely identifies the element within its scope: Ecore ID, XML ID, qualified name, location in model tree, etc.
  • A GUI with reusable components.

Among others, the tool exhibits the following characteristics:

  • Comparison can be performed on any arbitrary model scope for versatility and scalability reasons.
  • Interdependent differences are merged together in order to preserve model consistency.
  • The order in which differences are merged has no impact.
  • The global impact of a merge can be determined beforehand (picture above).
  • Undo/redo of merges is supported.

Principle of the solution

The usage process is illustrated by the figure below. First, a comparison is created based on the models to compare. The differences between those models are computed according to given policies. Then, as long as differences remain, any subset of these differences can be selected for merging. Every time, predefined consistency rules and user-defined policies are used to compute the minimal superset of differences that must be merged to preserve consistency. The user may decide whether to confirm or cancel the merge of the whole set of differences.


Process.png

For a description on how the objectives and the level of abstraction differ from EMF Compare, see the project proposal.

Usage

Applications

  • Patterns: a technology for the declarative creation, application, evolution and management of modeling patterns
  • Co-Evolution: a technology for model synchronization based on the merge mechanism
  • Model Patch: a technology for recording, applying and persisting model modifications in a portable, model instance independent way
  • Incremental transitions between engineering phases in Capella
  • Reuse mechanism ("Replicable Elements") in Capella

Documents

Download

Click here for the Download page.

Links

  • Forum: the dedicated newsgroup
  • Build job: the location where the project is being built