Skip to main content
AgeCommit message (Collapse)AuthorFilesLines
2019-05-23Merging single-valued containment changes can lead to dangling elements3.3.7M5lgoubet6-3/+206
Change-Id: I122badf27faa6f987a0849e046ff48c595f3c9cd
Change-Id: I3182c6ffc7bbc98450f2da86373548b5589e843f
2019-05-23Prevent LCS computation when we do not need ordering changeslgoubet1-11/+241
Change-Id: Icd79a1d6bd4ff004061a74b4bce8b09811bfcb97
2019-05-09[547139] [i18n] Missing externalizations of stringsChristian W. Damus9-45/+99
Externalize strings that are shown in the UI. Bug: 547139 Change-Id: If425887162b45c2c6a156fa6d45c3d9c3662f2a1 Signed-off-by: Christian W. Damus <>
2019-04-25Prevent duplicate insertion points to be shown in tree viewers3.3.7M4lgoubet1-1/+1
Change-Id: I85b1f3fa57042034c78c5bd30abf5607b3f5acc6
2019-04-22Prevent CMV disposal when user selects multiple elements in the SMWlgoubet1-0/+51
This is most likely a Platform/compare bug. The structure merge viewers don't support multiple selections and if the user selects two differences, the ContentMergeViewer is disposed and cleared out. If the user then merges the two differences at once, since no CMV is currently shown, the editor will not become dirty: the CompareEditorInput is the one in charge of managing the comparison's dirty state, and that state is _only_ updated through the listener (CompareEditorInput#fDirtyStateListener) that is installed on the opened CMV. Change-Id: I7c754ca4ce1eb2f6dcf80dd5472c8f787572790d
2019-04-18Only add new adapters when neededlgoubet1-8/+14
Change-Id: Ie5d4c3d0d9f807aad3d8c404cb17d41140cbdded
2019-04-14Iterate over the differences instead of the matcheslgoubet1-32/+4
Change-Id: I8e54bc1ede5a4aea884b8c326d53460b2b82daf0
2019-04-09Prevent OutOfMemoryErrors from the UI when switching CMV3.3.7M3lgoubet1-0/+16
When comparing models that have very large single references (one reference containing 30k or more elements), computing the LCS will consume a huge amount of memory, repeatedly, only to display a placeholder for the insertion index if the user chooses to merge a given difference. This commit limits the number of object Change-Id: I4a18385090daf3d788c0f4a81faf470d526d4e42
2019-04-08Performance - Computing requirements timeslgoubet5-72/+203
Computing requirements scales quadratically with the number of differences in the comparison, further amplified when there are a lot of cluster additions/deletions (adding a container and a cluster of cascading additions below it). This aims at filtering as deep down as possible the list of candidate differences for requirements, and limiting the number of intermediate collections. Change-Id: I4d4f7a7cb251e680606edbced946a8baaf7b2325
2019-04-08The UML tests shouldn't use a cached instance of EMFComparelgoubet2-9/+6
There are caches at multiple levels in a comparison process, so reusing the same instance might not have the expected result. Change-Id: Ieb924cfad9798b1ca9ff3ffce61ee5663f5fb89f
2019-04-03Restore possibility to remove mergers from the registrylgoubet1-1/+1
Bug: 546023 Change-Id: I4b6078bec08af0827daa91e78e1e9e735639014d
2019-04-01Fixed ArrayOutOfBounds in case of empty lists3.3.7M2William Piers1-5/+10
Change-Id: I02d226989219d523f660abeffc73007f5cc33b94 Signed-off-by: William Piers <>
2019-03-22Make sure we hook the UI when users provide a precomputed comparisonlgoubet1-2/+18
In the case of a comparison being reused across multiple SMV (comparison dialog, custom comparison UI, ...), the EMF Compare UI still needs its adapters hooked to the comparison. Change-Id: I13b7d9f310040f913af2279c17ee2d011ef8429c
2019-03-21Bump EMF Compare to 3.3.7 in preparation for 2019-063.3.7M1lgoubet24-27/+27
Change-Id: I019d6a0d2750416baa640cae3f854b33aeb9ca77
2019-03-21Disposing of the comparison shouldn't be done by the SMVlgoubet2-2/+3
In case of comparison dialogs, the SMV might be switched to other files, while the comparison itself will be kept around. Clearing the adapters will render that comparison invalid and reopening the previously selected file will then fail to show all differences. Change-Id: I441584a09198b6859742538e028004dba3937d54
2019-03-04Avoid ClassCastException when merging feature map changes3.3.6RC1lgoubet1-2/+2
Bug: 538697 Change-Id: Ib39709fdc19a19da26040aa80a9310fe534f7727
2019-03-01Allowed customization of content merge viewersWilliam Piers2-4/+4
Change-Id: Ie0472b4c89b3bae1e73d47ad1e2b21d265707240 Signed-off-by: William Piers <>
2019-02-26Bump versions for 3.3.6 for 2019-033.3.6M33.3.6lgoubet24-27/+27
Change-Id: Iecff93ea50642e4d83b650acccc587cb2082a9eb
2019-02-26patch ModelGitMergeEditorInput for EGit 5.3.0 compatibilitylgoubet1-31/+32
This applies the same patch as was done for bug 543495 to EMF Compare's ModelGitMergeEditorInput. Bug: 544761 Bug: 543495 Change-Id: I7f916e88a0200d8b552dd353c9278f0e619c800c
2019-02-26Suppress guava nested concatenationslgoubet1-10/+6
Concatenating iterators in a loop is exponentially slow and will cause stack overflow errors very fast on medium-sized inputs. Change-Id: I256385b39ef536a9b489260503a1baec4e85f1e0
2019-02-25Opened EMF Compare APIWilliam Piers3-5/+26
Change-Id: I34b9ac1683b48bf9f3bd08cd2ff175fbdf42511f Signed-off-by: William Piers <>
2019-02-11Remove accidental use of Guavalgoubet1-2/+1
Change-Id: I8abf38f97e343a1c79e2f2032482c949c1ed2ad3
2019-02-11SWTException when switching comparisons in a compare dialoglgoubet6-17/+52
Change-Id: I7829f70a6f63079afd8f7e607e7a76770a30861d
2019-02-11Allow clients to provide pre-computed comparisons to the compare UIlgoubet2-9/+43
Change-Id: Ifb7fac22ac0fa2d98a936eb03e5f521408a30499
2019-01-09[543292] Make GitTestSupport compatible with EGit 5.2Philip Langer3-4/+8
Bug: 543292 Change-Id: Ic3ad1bd04c0c2e38a1a5f4e417ef58455c2d05f1 Signed-off-by: Philip Langer <>
2018-12-11[527567] Provide support for a general property merge viewer3.3.5Philip Langer21-4/+3040
Adds and registers Property Content Merge Viewer for all input types. Bug: 527567 Change-Id: Ic4654bbfaf6557dafc18b3bc8499711439cd314a Signed-off-by: Philip Langer <>
2018-12-11[514079] Improve mirroring supportPhilip Langer44-1240/+1459
The changes introduced in to support mirroring are incomplete and lead to a very confusing state. If the user swapped the sides in the CMV, the SMV tree continues to show diffs with the same directional overlays. Also the tool bar actions have the tooltips and operate in the original direction; thus, contradicting the side shown in the CMV. With this change, we also adapt the changes in the SMV, if the user switched the sides in the CMV. Moreover, this change also simplifies and improves the way how the mirroring support is implemented by creating a new viewer when the mirroring state changes instead of switching all the content and label providers within each implementation class. Thus, this commit partly reverts the previous change 93726 and replaces it with a more thorough and straight-forward implementation. Bug: 514079 Change-Id: Ia91454e421a6916fa8e7d62eded3180f7905b28a
2018-12-04Ignore failing git tests for nowlgoubet3-0/+13
There seem to have been changes in JGit preventing us from properly merging the repositories in these 9 test cases. This needs to be investigated further. Change-Id: I8c5bdaa03f2446e2f48f135b4d1720e33691d5c7
2018-12-03Bump versions to 3.3.5lgoubet24-27/+27
Change-Id: I66b4134d4385fa4a42952039db437b701c075d84
2018-12-03Use a released version of Siriuslgoubet2-2/+2
Change-Id: I6515db5f58e1e7973d51907c08517f52f8d68112
2018-11-30[541730] Reverts d59c924 due to an UI freezelgoubet1-4/+0
Bug: 541730 Change-Id: I92debc040fcdeda464e1f5bdd310aef15961ba51
2018-08-16Fix bundle meta-dataPhilip Langer10-18/+38
I realized that a few bundles were missing the Bundle-Localization attribute in the MANIFEST and/or had inconsistent names or vendors. This change fixes the bundle meta-data of those. Change-Id: I7b96a616496eb64f225b8e5daa9d51c4ab88eb30 Signed-off-by: Philip Langer <>
2018-06-22bump feature versions3.3.4M13.3.4lgoubet26-29/+29
Change-Id: Ia9adaa877d6f3c00032b3c7fc7d7bf42766445a6
2018-06-22bump versionslgoubet24-24/+24
Change-Id: I63a4c3db4101430f622814e4be23746c2c2e1cb4
2018-06-22Extension point to provide specific matching rules for equality helperStéphane Thibaudeau14-19/+908
Change-Id: Ib3f7204339ff983994ba6bcfec435649928c9f29 Signed-off-by: Stéphane Thibaudeau <>
2018-06-22Remove useless and mysterious codeStéphane Thibaudeau1-11/+0
Change-Id: I6876eaaf9b639bd65175da922c94a130b6000512 Signed-off-by: Stéphane Thibaudeau <>
2018-06-22EMF Compare is compatible with JGit 5.* versionsStéphane Thibaudeau1-1/+1
Change-Id: I5523046b425ac6fe282d624b960f52ca0d707f5a Signed-off-by: Stéphane Thibaudeau <>
2018-06-22Add explicit dependency to org.eclipse.gefStéphane Thibaudeau1-1/+2
Change-Id: I7c0f9dab83fdd6468ae96aa9b8c3780feaac695e Signed-off-by: Stéphane Thibaudeau <>
2018-06-22Do not minimize identical resources when Xtext is usedStéphane Thibaudeau1-53/+95
Change-Id: I98221f6d88ad6b52adf712ef735e974e45055255 Signed-off-by: Stéphane Thibaudeau <>
2018-06-22Use white-list strategy to retrieve the Model providerStéphane Thibaudeau4-41/+29
Change-Id: I32c2d9b2033aabe8ba5d43b6764f2534ce8d3a56 Signed-off-by: Stéphane Thibaudeau <>
2018-06-22Better handling of Xtext with Live scope optionStéphane Thibaudeau3-3/+8
Change-Id: I0105fef51d9e42c193793bf37406e488c8082a46 Signed-off-by: Stéphane Thibaudeau <>
2018-06-22EMF Compare is no longer compatible with egit < 4.2lgoubet5-11/+11
Change-Id: I3c6579d257b412c6b509cc3153b79f9457464d68
2018-06-05Introduce test for merges with multiple ancestorslgoubet9-1/+142
Bug: 535200 Change-Id: I38f54baa9ce655fee60b1ed86ee850693e9555f1
2018-06-04[534365] Fix RecursiveModelMerger for "binary" git attributesArthur Daussy1-2/+7
Properly sets up the TreeWalk in indexModelMergedFiles so it can access Git attributes. Bug: 534365 Change-Id: Ib4dd97c995bfa79d180f0a661a64a6ab5675e8ad
2018-06-04Do not handle "merged" files twice when JGit stages themArthur Daussy1-5/+23
In some cases, JGit will stage the files that are "in-sync" directly when walking over them instead of leaving this decision to the merger. In such cases, EMF Compare's handling of files through the logical model merging creates duplicate entries in the DirCache for stage 0. Bug: 535200 Change-Id: I66e62cef3425289e384a02dcdcc8a2c1349d0400
2018-06-04[535200] Create a new TreeWalk instead reusing oneArthur Daussy4-121/+267
In order to avoid side effects this commits create a new TreeWalk to create the TreeWalkResourceVariantTreeProvider instead of using the one given by JGit Bug: 535200 Change-Id: I1b8621a488db2dc4842d250b95e07312013e648a
2018-05-16Fix JGit dependency version range3.3.3M7b3.3.3Laurent Delaigue1-1/+1
In order to allow JGit & EGit 5.0 in photon M7. See Change-Id: I360e58da1f73464ca2e6c46ba4bbaaeacea0997e Signed-off-by: Laurent Delaigue <>
2018-05-03Improve performance of DiffUtil3.3.3M7Philip Langer1-83/+233
Many of the algorithms in DiffUtil are O(n^2) so it is very important to make them all as efficient as possible. Operations such as Comparison.getEqualityHelper are relatively expensive because a search of the eAdapters is involved, so calling this method repeatedly for each item in a list is pointlessly wasteful. Many of the signatures are changes to pass along the comparison and the equality helper. The ignored elements handling in particular is a performance hot spot. In the worst case it's O(n^2) on the list size. It's better if we use an array to make iteration as fast as possible in the contains method; as such, many signatures are changed to use an array. Because the equality helper caches the match for the first argument to matchValues, it's important that in a loop we pass in the loop invariant argument as the first argument, not the second argument. This simple thing has a very large impact. The computeIgnoredElements needs particular attention because of the massive overhead. Note it's better if callers can rely on the fact that it returns a set that can be modified. The implementation details are documented directly in the code. In general, the observation is that computeIgnoredElements is called repeatedly for the same feature's value, so many of the computations can be reused, i.e, the differences associated with each candidate. Also the creation of UnresolvedDiffMatching is expensive, and it does pointless repeated computations of the same value in each call to apply; these loop invariant computations are best done once in the constructor. Change-Id: Ibdcd43d8fa598d57b4baf48b86ba558109a5d832 Signed-off-by: Philip Langer <>
2018-05-03Improve performance of ComparisionUtilPhilip Langer1-42/+40
For CASCADING_DIFF, it's best to do the cheapest test first. For getSubDiffs there is an inner guard for if (ofKind(MOVE).apply(diff)) that results in subDiffs being an empty iterable. In this case, nothing is added to processedDiffs and getAssociatedDiffs will return an empty iterable as well, so the overall result is an empty set. The guard against processing a MOVE diff is cheap and should be first, to avoid computing a matchOfValue that's not needed anyway. In fact it's not needed until we confirm the reference change is for a containment. Also, when the matchOfValue is null, the result will be an empty iterable so no point in doing any memory allocation or other computations in this case. In getAssociatedDiffs, a new reqs hash set is created, just so that diffRoot can be removed, before set is added to the associatedDiffs. It's far cheaper to add all the reqs and to remove the diffRoot without creating an intermediate set. Also we could avoid proxy resolution to make it even more efficient. We can do that with all the feature values. The final loop of this can avoid repeatedly calling getSubDiffs because that is a loop invariant. In getExpectedSide we should avoid doing computation that are only needed for a three way match comparison. Change-Id: Id39ada3bc2b095c8916083e0b2106a9fa79a3f1b Signed-off-by: Philip Langer <>

Back to the top