RSA-RTE. RSx EGit Integration. Logical and closure merge from command line. Author: Sergey Eroshkin Owner: IBM

Similar documents
News in RSA-RTE 10.1 updated for sprint Mattias Mohlin, November 2017

News in RSA-RTE 10.1 updated for sprint Mattias Mohlin, July 2017

News in RSA-RTE 10.1 updated for sprint Mattias Mohlin, March 2017

News in RSA-RTE 10.1 updated for sprint Mattias Mohlin, January 2018

Show all text and icon decorations Preferences->Team->IBM Rational ClearTeam Explorer->ClearCase decorations: Enable Text and Icon Decorations

News in RSA-RTE 10.1 updated for sprint Mattias Mohlin, April 2017

News in RSA-RTE 10.1 updated for sprint Mattias Mohlin, March 2017

EGit in Eclipse. Distributed Verzion Control Systems

News in RSA-RTE Mattias Mohlin, June 2015

Git version control with Eclipse (EGit) Tutorial

RSARTE Plugin for Model Fixup

News from Git in Eclipse. Matthias Sohn (SAP)

RSARTE Git Integration

News in RSA-RTE 10.0 updated for sprint Mattias Mohlin/Anders Ek, June 2016

RSARTE Git Integration

News in RSA-RTE CP1

News in RSA-RTE 10.2 updated for sprint Mattias Mohlin, May 2018

News in RSA-RTE 10.2 updated for sprint Mattias Mohlin, January 2018

FAQ Q: Where/in which branch do I create new code/modify existing code? A: Q: How do I commit new changes? A:

Open Source Integrated Development Environment

RSARTE Icons. Mattias Mohlin Senior Software Architect IBM

Git at Eclipse. Shawn Pearce (Google)

Git Journey from Mars to Neon. Matthias Sohn (SAP)

Rational Software Architect Real-Time Edition. RSARTE 10.0 Installation Instructions

News in RSA-RTE CP1

Revision control Advanced git

2 Initialize a git repository on your machine, add a README file, commit and push

1. Installing R4E 1. 1) Provision Software Sites 2. 2) Install Version Control System Features 3. 3) Install R4E feature 4. 4) Install Versions

News in RSA-RTE CP2

Team Support and Versioning with ClearCase and CVS in WebSphere Business Modeler V7

EGit/Gerrit Hands-on training #1: Installation and Configuration

Rational Software Architect Real-Time Edition. RSARTE 10.1 Installation Instructions

Produced by. App Development & Modelling. Eamonn de Leastar

Version Control Systems

Software Tools Subversion

Getting the Source Code

b. Developing multiple versions of a software project in parallel

Software Revision Control for MASS. Git Installation / Configuration / Use

Getting Started with Cisco UCS Director Open Automation

git commit --amend git rebase <base> git reflog git checkout -b Create and check out a new branch named <branch>. Drop the -b

Object Oriented Programming. Week 1 Part 2 Git and egit

Push up your code next generation version control with (E)Git

TangeloHub Documentation

Building and Running a Simple UML RT Model in RSARTE

EGit and JGit 1.0 Release and Graduation Review

Submitting your Work using GIT

1. Which of these Git client commands creates a copy of the repository and a working directory in the client s workspace. (Choose one.

Git. Charles J. Geyer School of Statistics University of Minnesota. Stat 8054 Lecture Notes

Linus Torvalds inventor of Linux wanted a better source control system so he wrote one

From: Sudarshan N Raghavan (770)

Eclipse Plug-in for AccuRev User s Guide Version April 2012

Technology Background Development environment, Skeleton and Libraries

Lab Exercise 1 Using EGit and JUnit

Prof. Dr. Marko Boger. Prof. Dr. Christian Johner. Version Management

Subversion Repository Layout

Working with EGL and Subversion Using RDi with RBD

Design Room ONE Release Notes

Using Git to Manage Source RTL

Buckminster. Helios Review. May, Cloudsmith Inc - Made available under the Eclipse Public License.

Weak Consistency and Disconnected Operation in git. Raymond Cheng

Branching with Eclipse and CVS

API RI. Application Programming Interface Reference Implementation. Policies and Procedures Discussion

History...: Displays a window of Gitk, a standard commit viewer for Git.

[Software Development] Development Tools. Davide Balzarotti. Eurecom Sophia Antipolis, France

Tutorial 2 GitHub Tutorial

February 2 nd Jean Parpaillon

CS 390 Software Engineering Lecture 5 More Git

TM DevOps Use Case TechMinfy All Rights Reserved

The Rock branching strategy is based on the Git Branching Model documented by Vincent Driessen.

Working with CVS in Eclipse

Index. Alias syntax, 31 Author and commit attributes, 334

Repositories, Directories and Files

Git: (Distributed) Version Control

CS 390 Software Engineering Lecture 3 Configuration Management

Working in Teams CS 520 Theory and Practice of Software Engineering Fall 2018

Technology Background Development environment, Skeleton and Libraries

Common Git Commands. Git Crash Course. Teon Banek April 7, Teon Banek (TakeLab) Common Git Commands TakeLab 1 / 18

CSCI 2132: Software Development. Norbert Zeh. Faculty of Computer Science Dalhousie University. Subversion (and Git) Winter 2019

Assumptions. GIT Commands. OS Commands

Module 4: Advanced Development

TDDC88 Lab 4 Software Configuration Management

Source Management (Version Control) Installation and Configuration Guide. Version 8.0 and Higher

Snapshot Best Practices: Continuous Integration

CS 520: VCS and Git. Intermediate Topics Ben Kushigian

Selenium Testing Course Content

Git: (Distributed) Version Control

Eclipse Tutorial How To Write Java Program In Eclipse Step By Step Eclipse Tutorial For Beginners Java

An Introduction to Eclipse Che Lets build a custom cloud IDE. October 2015 Tyler Jewell, Eclipse Che Project

Integrate Collaboration into your Workflow

Software Development I

Version Control with GIT

Branching and Merging

Version Control. Second level Third level Fourth level Fifth level. - Software Development Project. January 11, 2017

Eclipse Tool Stack Interchange Format

Version Control with Git

Version Control. Second level Third level Fourth level Fifth level. - Software Development Project. January 17, 2018


AgileSCM Release 4.1. AgileSCM Release 4.0. AgileSCM Release 3.2. New Features. Bug Fixes. New Features. Bug Fixes

Git AN INTRODUCTION. Introduction to Git as a version control system: concepts, main features and practical aspects.

Review Version Control Concepts

Transcription:

RSx EGit Integration Logical and closure merge from command line Author: Sergey Eroshkin Owner: IBM Dated May 2016 - Version 1.1 IBM Corporation 2016

Version Revision Date Summary of Changes Revision history 1.0 Draft March 2015 Initial version Sergey Eroshkin 1.1 May 2016 Updated for RSARTE 10.0 Mattias Mohlin 1.2 September 2016 Updated EGit version to 4.4.1 Elena Strabykina Who Printed 26 September 2016 Page 2 of 20

Contents 1 Introduction...4 1.1 Definitions...4 1.2 Git customization limitations...4 1.3 EGit limitations and IBM solution...4 2 Installation...6 3 Common principles...7 3.1 Eclipse Team API...7 3.2 Workspace configuration...7 4 Merge operations...8 4.1 Logical merge from command line...8 4.2 Closure merge...12 5 Compare operations...16 6 Automatic project import...19 6.1 Custom script for launching RSA-RTE...19 6.2 Project import filters...19 6.3 Using extension point to define custom project importer...20 6.4 Commit analysis...20 Printed 26 September 2016 Page 3 of 20

1 Introduction This document describes the RSA-RTE command line API to invoke logical or closure merge for models stored in a Git repository. The implementation is based on Eclipse EGit/JGit plugins and the new RSA-RTE Compare/Merge command line API was introduced in 9.1.1 CP1 and 9.1.2. 1.1 Definitions We will use the following terms to define artifacts managed by RSA-RTE: File: model root (*.emx) or fragment (*.efx) or some other file (transformation configuration and so on ) Logical model: a set of files with containment relationship having single root file. In RSA-RTE this corresponds to model file (*.emx) with set of contained fragments (*.efx) Closure model or just closure: an arbitrary set of logical models. These artifacts define several possible compare/merge scenarios: file-by-file compare/merge: files are processed independently one by one logical model compare/merge: files are grouped into logical models and each logical model is processed as single entity from compare/merge point of view closure compare/merge: files are grouped into one or multiple closures and each closure is processed as single entity from compare/merge point of view Some EGit/Git terms: Merge Tool graphical application to resolve conflicts that have resulted from a previous merge operation. In the context of EGit this is the command which starts the Merge editor on conflicting files. 1.2 Git customization limitations The plain console Git allows to define custom diff/merge tools files. Unfortunately there is no way to define a merger that would process a set of files as a single entity. It is not possible to implement extension to Git to perform logical or closure compare/merge operations as part of regular git commands (like merge, pull, rebase, etc). Thus the support for logical and closure compare/merge requires customized commands that can be aware about models. The IBM approach is to implement a solution based on the Eclipse EGit/JGit projects, taking into account what is specific about RSA-RTE models. 1.3 EGit limitations and IBM solution EGit is an Eclipse Team Provider for the Git version control system which is based on a Java implementation of Git (JGit). The current latest public EGit release does not support modelling tools. It always uses plain text merge for files and hence could easily cause corruption of models when merging them. Work was initiated to make EGit aware about modelling tools. However, at the time of writing the result of this work has not yet been incorporated into the standard EGit. Also, the proposed additions still don t cover all required scenarios from RSA-RTE point of view. The main limitations are missing support for closures, lack of extension points and inappropriate handling of addition/deletion of logical model fragments in some cases. Printed 26 September 2016 Page 4 of 20

The IBM solution for RSA-RTE/EGit integration is based on a new Compare/Merge command line API, the Eclipse Team API, the latest public EGit release (with some ideas taken from the ongoing work mentioned above), the previous integration with ClearCase TeamExplorer and it also takes into account some specific RSA-RTE cases. The IBM RSA-RTE/EGit integration provides a command line interface which allows to perform both nonvisual and visual logical/closure merge and visual logical/closure compare (non-visual logical/closure compare is not yet supported). It also provides possibility to re-use Eclipse mergers that are associated with files. Printed 26 September 2016 Page 5 of 20

2 Installation The RSA-RTE Egit integration can be installed as an optional component when installing RSARTE 10: Note that in order to install it you first need to have EGit version 4.4.1 installed (it s a newer version than the version that comes included with Eclipse Mars SR2). You can install it from this location http://download.eclipse.org/egit/updates-4.4.1. The command line interface for the RSA-RTE EGit integration is based on the new RSA-RTE command line Compare/Merge tool cmcmdline.jar which is located in <install-dir>\rsa_rt\tools. More details about this command line Compare/Merge tool can be found in a separate document. In this document we will focus on logical and closure compare/merge operations only. Printed 26 September 2016 Page 6 of 20

3 Common principles 3.1 Eclipse Team API The support for logical and closure merge is based on the Eclipse Team API which imposes some constraints on possible scenarios. The Eclipse Team API is intended for files in an Eclipse workspace. All its functionality is available only if files are present in a workspace in some way. Thus it becomes impossible to use logical or closure merge functionality on files that are not imported into workspace. The Eclipse Team API does not have explicit support for closures, it supports only logical models. In RSA- RTE a closure is represented as an implicitly-generated hidden *.ecx file representing a root of a logical model where fragments of this logical model are *.emx files included in the closure. The closure file is generated automatically based on user s options when the compare/merge operation is started. 3.2 Workspace configuration The RSA-RTE command line Compare/Merge tool requires access to an RSA-RTE instance with a properly configured workspace. You can either use a pre-configured workspace or use options for automatic population of a workspace with projects from a Git repository. The RSA-RTE EGit integration does not require to set any special preferences in the workspace in order to use compare or merge operations from the command line. It only needs relevant resources to be imported into the workspace and the Git repository should be in the right state when performing compare/merge operations. There are two main recommendations for workspace content when using command line logical or closure compare/merge do not have projects from different Git repositories (this may cause problems with resolving branch names since different repositories may have branches with the same name) do not have non-git projects in the workspace (this decreases performance of compare/merge operations because RSA-RTE needs to filter out unrelated projects) Printed 26 September 2016 Page 7 of 20

4 Merge operations The generic behaviour of merge operation from commit/branch/ref S to branch T on Git repository via RSA- RTE command line Compare/Merge tool is the following : 1. Connect to running RSA-RTE instance (or launch new instance if relevant option is specified) 2. [Optionally] Create workspace and import relevant projects from Git repository. 3. Check that workspace contains content related to the target branch T 4. Group files in workspace into logical or closure models 5. Perform non-visual logical or closure merge for each logical/closure model 6. Perform non-visual file-by-file merge for RSA-RTE files (e.g. transformation configurations) not included in logical models or closures 7. Perform default non-visual EGit text merge for non RSA-RTE files (text files, C++/Java source files, etc) 8. [if xmerge command was used] Start Merge Tool on each conflicting logical or closure model and other RSA-RTE files (transformation configurations, etc). 9. [optionally (if the command-line option -CPFG= commit:true is used) and only if no conflicts were found] Perform commit of the result 4.1 Logical merge from command line The common format for starting command line logical merge is: java -cp cmcmdline.jar com.ibm.xtools.comparemerge.cmcmdline.cmtool merge xmerge -kind=logical -source source -target target [<options>] Option Description -kind=logical merge xmerge -source source Enables logical model merge Run non-visual logical merge. When conflicts are detected they will be printed to the console. Run visual logical merge. This operation performs non-visual merge first and then starts the Merge Tool on each conflicting logical model. The merge tools are started sequentially. Information about currently processed logical model is printed to the console (see example below). When you resolve conflicts in the Merge editor and click on the Commit merge session button, the affected files are automatically added to the Index and the red conflict decorator is removed in the Project Explorer Defines source context name for the merge. Possible values are: commit SHA complete reference name (refs/...) branch name short reference name under refs/heads, refs/tags, refs/remotes Printed 26 September 2016 Page 8 of 20

namespace HEAD -target target -CPCFG= values -CPMSG= value Defines target context name for the merge. The possible values are: branch name complete reference name (refs/...) short reference name under refs/heads, refs/tags, refs/remotes namespace HEAD The workspace of running RSA-RT instance should contain project related to target context. Defines additional option for merge operation. Currently supported options are: -CPFG= commit:true false. This option enables/disables autocommit of the merge result. Default value is false. Autocommit can be performed only if no conflicts were detected. -CPFG= ffmode:ff no-ff ff-only. This option sets the fast-forward method for the merge. Default value is ff (fast-forward). -CPFG= squash:true false. This option enables or disables squash mode for the merge. Default value is false. -CPFG= fcheckout. This option forces a checkout of the target branch. To use more than one of these options, separate them with comma. For example: -CPCFG=commit:true,ffmode:no-ff Defines commit message for the merge commit Example: Non-visual merge: java -cp cmcmdline.jar com.ibm.xtools.comparemerge.cmcmdline.cmtool merge -kind=logical -source branch-01 -target main-01 RSx Compare/Merge command line tool. (c) IBM Corporation 2014, 2016. All Rights Reserved. CONNECT : Connecting to TeamServer... CONNECT : Connected to TeamServer at port 60001. Protocol: 9.2 Performing Logical Non-Visual Merge on contributors: -source=branch-01 -target=main-01 Calling RSx EGit Command Line Logical and Closure Merger to perform a LOGICAL MODEL merge Printed 26 September 2016 Page 9 of 20

Preparing compare/merge operation Running compare/merge operation Operation completed with status 'Conflicting' Merge status message: Merge branch 'branch-01' into main-01 Conflicts: LMM1/ModelFragment_1.efx LMM1/ModelFragment_2.efx LMM1/Root1.emx LMM2/Root2.emx LMM2/ModelFragment_2.efx LMM2/ModelFragment_1.efx Command line merge COMPLETED Visual merge java -cp cmcmdline.jar com.ibm.xtools.comparemerge.cmcmdline.cmtool xmerge -kind=logical -source branch-01 -target main-01 RSx Compare/Merge command line tool. (c) IBM Corporation 2014, 2016. All Rights Reserved. CONNECT : Connecting to TeamServer... CONNECT : Connected to TeamServer at port 60001. Protocol: 9.2 Performing Logical Visual Merge on contributors: -source=branch-01 -target=main-01 Calling RSx EGit Command Line Logical and Closure Merger to perform a LOGICAL MODEL merge Preparing compare/merge operation Running compare/merge operation Operation completed with status 'Conflicting' Merge status message: Merge branch 'branch-01' into main-01 Printed 26 September 2016 Page 10 of 20

Conflicts: LMM1/ModelFragment_1.efx LMM1/ModelFragment_2.efx LMM1/Root1.emx LMM2/Root2.emx LMM2/ModelFragment_2.efx LMM2/ModelFragment_1.efx Starting Merge Tool to resolve conflicts Merging logical or closure model [1/2] [/LMM1/Root1.emx] User cancelled merge for this logical model Merging logical or closure model [2/2] [/LMM2/Root2.emx] User cancelled merge for this logical model Command line merge COMPLETED First merge session (for the first logical model): Second merge session (for the second logical model) Printed 26 September 2016 Page 11 of 20

4.2 Closure merge The common format for starting command line closure merge is: java -cp cmcmdline.jar com.ibm.xtools.comparemerge.cmcmdline.cmtool merge xmerge -kind=closure -source source -target target -manifest path [<options>] Option Description -kind=closure merge xmerge -source source -target target Enables closure model merge Run non-visual closure merge. When conflicts are detected they will be printed to the console. Run visual closure merge. This operation performs non-visual merge first and then starts the Merge Tool on each conflicting closure model. The merge tools are started sequentially. Information about currently processed logical model is printed to the console (see example below). The same as for logical merge The same as for logical merge Printed 26 September 2016 Page 12 of 20

-CPCFG= values -CPMSG= value -manifest path The same as for logical merge The same as for logical merge Defines path to closure manifest file. If manifest is omitted, then implicit closure is generated which includes all logical models in the workspace. The closure manifest is a text file containing one or more sections with structure: [closure Name] <workspace-relative path to *.emx file> <workspace-relative path to *.emx file> Where [closure Name] defines closure with given Name containing one or more logical models with specified root files. Example: Non-visual merge: java -cp cmcmdline.jar com.ibm.xtools.comparemerge.cmcmdline.cmtool merge -kind=closure -source branch-01 -target main-01 RSx Compare/Merge command line tool. (c) IBM Corporation 2014, 2016. All Rights Reserved. CONNECT : Connecting to TeamServer... CONNECT : Connected to TeamServer at port 60001. Protocol: 9.2 Performing Closure Non-Visual Merge on contributors: -source=branch-01 -target=main-01 Calling RSx EGit Command Line Logical and Closure Merger to perform a CLOSURE merge Preparing compare/merge operation Running compare/merge operation Operation completed with status 'Conflicting' Merge status message: Merge branch 'branch-01' into main-01 Conflicts: LMM1/ModelFragment_1.efx LMM1/ModelFragment_2.efx LMM1/Root1.emx LMM2/Root2.emx LMM2/ModelFragment_2.efx Printed 26 September 2016 Page 13 of 20

LMM2/ModelFragment_1.efx Command line merge COMPLETED Visual merge java -cp cmcmdline.jar com.ibm.xtools.comparemerge.cmcmdline.cmtool xmerge -kind=closure -source branch-01 -target main-01 RSx Compare/Merge command line tool. (c) IBM Corporation 2014, 2016. All Rights Reserved. CONNECT : Connecting to TeamServer... CONNECT : Connected to TeamServer at port 60001. Protocol: 9.2 Performing Closure Visual Merge on contributors: -source=branch-01 -target=main-01 Calling RSx EGit Command Line Logical and Closure Merger to perform a CLOSURE merge Preparing compare/merge operation Running compare/merge operation Operation completed with status 'Conflicting' Merge status message: Merge branch 'branch-01' into main-01 Conflicts: LMM1/ModelFragment_1.efx LMM1/ModelFragment_2.efx LMM1/Root1.emx LMM2/Root2.emx LMM2/ModelFragment_2.efx LMM2/ModelFragment_1.efx Starting Merge Tool to resolve conflicts Merging logical or closure model [1/1] [/LMM1/Root1.emx, /LMM2/Root2.emx] User canceled merge for this logical model Command line merge COMPLETED Single merge session (closure includes two logical models) Printed 26 September 2016 Page 14 of 20

Printed 26 September 2016 Page 15 of 20

5 Compare operations Currently only visual logical or closure compare is supported. The compare operation works similar to merge - it compares the source context with target context which is in the workspace. The common format of launching a logical or closure compare operation is java -cp cmcmdline.jar com.ibm.xtools.comparemerge.cmcmdline.cmtool xcompare -kind=logical closure -source source -filter= filter [-target target ] [<options>] Option -kind=logical closure xcompare -source source -target target Enables logical or closure compare Run visual compare Description Defines source context name for the compare. Possible values are: commit SHA complete reference name (refs/...) branch name short reference name under refs/heads, refs/tags, refs/remotes namespace HEAD This defines the target context for compare operation. If the option is omitted, then compare will be performed against current configuration of the workspace. Possible values are the same as for the -source option. -filter= pattern,pattern,.. This defines a pattern for file selection for compare operation. The value is a comma-separated list of file name patterns (with * and? wildcard symbols). The patterns are matched against the workspace-relative path of *.emx files in the workspace. When using logical compare, the pattern must match just one logical model. When using closure compare, the pattern can match multiple *.emx files. All matched files will be grouped into the closure. Example Closure compare: java -cp cmcmdline.jar com.ibm.xtools.comparemerge.cmcmdline.cmtool xcompare -kind=closure -source branch-01 -target HEAD -filter *LMM* RSx Compare/Merge command line tool. (c) IBM Corporation 2014, 2016. All Rights Reserved. CONNECT : Connecting to TeamServer... Printed 26 September 2016 Page 16 of 20

CONNECT : Connected to TeamServer at port 60001. Protocol: 9.2 Performing Closure Visual Compare on contributors: -source=branch-01 -target=head Calling RSx EGit Command Line Logical and Closure Merger to perform a CLOSURE compare Preparing compare/merge operation Running compare/merge operation Openning Compare session. Compare Session completed. Command line merge COMPLETED Logical Compare java -cp cmcmdline.jar com.ibm.xtools.comparemerge.cmcmdline.cmtool compare -kind=logical -source branch-01 -target HEAD -filter= *LMM1* RSx Compare/Merge command line tool. (c) IBM Corporation 2014, 2016. All Rights Reserved. CONNECT : Connecting to TeamServer... CONNECT : Connected to TeamServer at port 60001. Protocol: 9.2 Performing Logical Visual Compare on contributors: Printed 26 September 2016 Page 17 of 20

-source=branch-01 -target=head Calling RSx EGit Command Line Logical and Closure Merger to perform a LOGICAL MODEL compare Preparing compare/merge operation Running compare/merge operation Openning Compare session. Compare Session completed. Command line merge COMPLETED Printed 26 September 2016 Page 18 of 20

6 Automatic project import When working with command line logical or closure compare/merge it is important to have a properly configured workspace. Currently RSA-RTE provides several solutions for automatic workspace configuration and population. 6.1 Custom script for launching RSA-RTE The workspace population can be done as part of a custom script for launching the RSA-RTE instance to be used in the compare/merge operation. The custom script can be passed to the RSA-RTE Compare/Merge command line tool via options: -autolaunch -al <argument> -autolaunchfile -alf <file path> Run the specified RSA-RTE instance for Compare/Merge operation. When this option is used, the tool will use only the autolaunched version. The argument should be a command line to launch an RSA-RTE instance. The same as -autolaunch but takes the launch command from the specified file. 6.2 Project import filters You may specify additional options on the command line for compare or merge operations to ensure automatic project import from a Git repository: Option -CPimport= path -CPimportManifest= path Description Defines absolute path to the Git repository in local file system Defines absolute path to import manifest file. The import manifest is a text file with a list of filters describing which projects should be imported or ignored. If the manifest is omitted, then all projects will be imported. The import manifest consists of a list of rules: Inclusion (project whose path matches condition will be imported): +wildcard or +[regex] Exclusion (project whose path matches condition will be ignored): -wildcard or -[regex] where "wildcard" is standard wildcard with "*" and "?" meta-symbols and "regex" is Java regular expression. Example: +*MyProject* -*ObsoleteProject* -[\\d+\\w+] Printed 26 September 2016 Page 19 of 20

6.3 Using extension point to define custom project importer You may also define a custom project importer in a separate plugin using a special extension point. <extension point="com.ibm.xtools.comparemerge.egit.projectimporter"> <projectimporter class="projectimporterfactory"> </projectimporter> </extension> Sample Java implementation: public class ProjectImporterFactory implements IExecutableExtensionFactory { public static class MyImporter { public IProject[] importprojects(string repository, String sourcebranch,string targetbranch, IProgressMonitor monitor) { // TODO: Import projects from the repository return null; } } public ProjectImporterFactory() { } } @Override public Object create() throws CoreException { return new MyImporter(); } 6.4 Commit analysis A possible future improvement would be to have an automatic project import that will import projects based on analysis of the commits that are involved in the compare/merge operation. Printed 26 September 2016 Page 20 of 20