MCVersionMerger.st
author Claus Gittinger <cg@exept.de>
Mon, 14 May 2018 02:21:18 +0200
changeset 1048 582b3a028cbc
parent 704 e312a6e8ee93
permissions -rw-r--r--
#FEATURE by cg class: MCMethodDefinition changed: #postloadOver:
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
81
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"{ Package: 'stx:goodies/monticello' }"
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
Object subclass:#MCVersionMerger
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
	instanceVariableNames:'records merger'
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
	classVariableNames:''
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
	poolDictionaries:''
704
e312a6e8ee93 category change
Claus Gittinger <cg@exept.de>
parents: 81
diff changeset
     7
	category:'SCM-Monticello-Versioning'
81
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
!
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
!MCVersionMerger class methodsFor:'as yet unclassified'!
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
mergeVersion: aVersion
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
	self new
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
		addVersion: aVersion;
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
		mergeWithNameLike: aVersion info name
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
!
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
new
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
	^ self basicNew initialize
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
! !
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
!MCVersionMerger methodsFor:'as yet unclassified'!
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
addVersion: aVersion
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
	| dep |
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
	records add: (MCMergeRecord version: aVersion).
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
	aVersion dependencies do:
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
		[:ea |
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
		dep _ ea resolve.
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
		(records anySatisfy: [:r | r version = dep]) ifFalse: [self addVersion: dep]]
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
!
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
initialize
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
	records _ OrderedCollection new.
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
	merger _ MCThreeWayMerger new.
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
!
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
merge
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
	records do: [:ea | merger addBaseSnapshot: ea packageSnapshot].
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
	records do: [:ea | merger applyPatch: ea mergePatch].
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
	self resolveConflicts ifTrue:
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
		[merger load.
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
		records do: [:ea | ea updateWorkingCopy]].
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
!
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
mergeWithNameLike: baseName
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
	records do: [:ea | merger addBaseSnapshot: ea packageSnapshot].
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
	records do: [:ea | merger applyPatch: ea mergePatch].
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
	self resolveConflicts ifTrue:
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
		[merger loadWithNameLike: baseName.
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
		records do: [:ea | ea updateWorkingCopy]].
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
!
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
resolveConflicts
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
	(records allSatisfy: [:ea | ea isAncestorMerge]) ifTrue: [MCNoChangesException signal. ^ false].
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
	^ ((MCMergeResolutionRequest new merger: merger)
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
		signal: 'Merging ', records first version info name) = true
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
! !
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
!MCVersionMerger class methodsFor:'documentation'!
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
version
704
e312a6e8ee93 category change
Claus Gittinger <cg@exept.de>
parents: 81
diff changeset
    64
    ^ '$Header: /cvs/stx/stx/goodies/monticello/MCVersionMerger.st,v 1.2 2012-09-11 21:30:49 cg Exp $'
81
f11d32f2ede9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
! !