MCWorkingCopy.st
author Claus Gittinger <cg@exept.de>
Sat, 01 Sep 2018 17:32:13 +0200
changeset 1086 efc5221435a5
parent 917 e92da349ec56
child 1156 b6ca954ebfc9
permissions -rw-r--r--
initial checkin
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
84
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"{ Package: 'stx:goodies/monticello' }"
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
MCPackageManager subclass:#MCWorkingCopy
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
	instanceVariableNames:'versionInfo ancestry counter repositoryGroup requiredPackages'
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
	classVariableNames:''
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
	poolDictionaries:''
600
d909f97f51d3 category change
Claus Gittinger <cg@exept.de>
parents: 443
diff changeset
     7
	category:'SCM-Monticello-Versioning'
84
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
!MCWorkingCopy class methodsFor:'as yet unclassified'!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
adoptVersionInfoFrom: anInstaller
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
	|viCache|
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
	viCache := Dictionary new.
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
	anInstaller versionInfo keysAndValuesDo: [:packageName :info |
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
		(self forPackage: (MCPackage named: packageName))
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
			versionInfo: (self infoFromDictionary:  info cache: viCache)].
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
	[anInstaller clearVersionInfo] on: Error do: ["backwards compat"].
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
ancestorsFromArray: anArray cache: aDictionary
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
	^ anArray ifNotNil: [anArray collect: [:dict | self infoFromDictionary: dict cache: aDictionary]]
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
infoFromDictionary: aDictionary cache: cache
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
	| id |
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
	id _ aDictionary at: #id.
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
	^ cache at: id ifAbsentPut:
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
		[MCVersionInfo
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
			name: (aDictionary at: #name)
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
			id: (aDictionary at: #id)
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
			message: (aDictionary at: #message)
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
			date: (aDictionary at: #date)
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
			time: (aDictionary at: #time)
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
			author: (aDictionary at: #author)
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
			ancestors: (self ancestorsFromArray: (aDictionary at: #ancestors) cache: cache)]
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
initialize
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
	Smalltalk 
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
		at: #MczInstaller
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
		ifPresent: [:installer | self adoptVersionInfoFrom: installer].
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
	self updateInstVars.
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
	"Temporary conversion code -- remove later"
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
	registry ifNotNil:[registry rehash]. "changed #="
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
	self allInstancesDo:[:each| "moved notifications"
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
		Smalltalk at: #SystemChangeNotifier ifPresent:[:cls|
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
			cls uniqueInstance noMoreNotificationsFor: each.
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
		].
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
	].
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
	self registerForNotifications.
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
updateInstVars
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
	self allInstances do: [:ea | ea updateInstVars]
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
! !
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
917
e92da349ec56 class: MCWorkingCopy
Claus Gittinger <cg@exept.de>
parents: 881
diff changeset
    59
84
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
!MCWorkingCopy methodsFor:'accessing'!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
ancestors
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
	^ ancestry ancestors
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
ancestry
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
	^ ancestry
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
clearRequiredPackages
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
	requiredPackages _ nil
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
currentVersionInfo
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
	^ (self needsSaving or: [ancestry ancestors isEmpty])
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
		ifTrue: [self newVersion info]
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
		ifFalse: [ancestry ancestors first]
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
description
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
	^ self packageNameWithStar, ' (', ancestry ancestorString, ')'
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
needsSaving
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
	^ self modified or: [self requiredPackages anySatisfy: [:ea | ea workingCopy needsSaving]]
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
requirePackage: aPackage
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
	(self requiredPackages includes: aPackage) ifFalse: [requiredPackages add: aPackage]
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
requiredPackages
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
	^ requiredPackages ifNil: [requiredPackages _ OrderedCollection new]
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
versionInfo: aVersionInfo
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
	ancestry _ MCWorkingAncestry new addAncestor: aVersionInfo
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
! !
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
!MCWorkingCopy methodsFor:'migration'!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
updateInstVars
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
	ancestry ifNil:
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104
		[ancestry _ MCWorkingAncestry new.
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
		versionInfo ifNotNil:
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
			[versionInfo ancestors do: [:ea | ancestry addAncestor: ea].
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
			versionInfo _ nil]]
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
! !
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
!MCWorkingCopy methodsFor:'operations'!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
adopt: aVersion
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
	ancestry addAncestor: aVersion info.
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   114
	self changed.
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   116
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
backportChangesTo: aVersionInfo
917
e92da349ec56 class: MCWorkingCopy
Claus Gittinger <cg@exept.de>
parents: 881
diff changeset
   118
        | baseVersion fullPatch currentVersionInfo currentVersion newSnapshot newAncestry |
e92da349ec56 class: MCWorkingCopy
Claus Gittinger <cg@exept.de>
parents: 881
diff changeset
   119
        currentVersionInfo := self currentVersionInfo.
e92da349ec56 class: MCWorkingCopy
Claus Gittinger <cg@exept.de>
parents: 881
diff changeset
   120
        baseVersion := self repositoryGroup versionWithInfo: aVersionInfo.
e92da349ec56 class: MCWorkingCopy
Claus Gittinger <cg@exept.de>
parents: 881
diff changeset
   121
        currentVersion := self repositoryGroup versionWithInfo: currentVersionInfo.
e92da349ec56 class: MCWorkingCopy
Claus Gittinger <cg@exept.de>
parents: 881
diff changeset
   122
        fullPatch := currentVersion snapshot patchRelativeToBase: baseVersion snapshot.
e92da349ec56 class: MCWorkingCopy
Claus Gittinger <cg@exept.de>
parents: 881
diff changeset
   123
        (MCChangeSelectionRequest new
e92da349ec56 class: MCWorkingCopy
Claus Gittinger <cg@exept.de>
parents: 881
diff changeset
   124
                patch: fullPatch;
e92da349ec56 class: MCWorkingCopy
Claus Gittinger <cg@exept.de>
parents: 881
diff changeset
   125
                label: 'Changes to Backport';
e92da349ec56 class: MCWorkingCopy
Claus Gittinger <cg@exept.de>
parents: 881
diff changeset
   126
                raiseSignal "signal" ) ifNotNilDo:
e92da349ec56 class: MCWorkingCopy
Claus Gittinger <cg@exept.de>
parents: 881
diff changeset
   127
                [:partialPatch |
e92da349ec56 class: MCWorkingCopy
Claus Gittinger <cg@exept.de>
parents: 881
diff changeset
   128
                newSnapshot := MCPatcher apply: partialPatch to: baseVersion snapshot.
e92da349ec56 class: MCWorkingCopy
Claus Gittinger <cg@exept.de>
parents: 881
diff changeset
   129
                newAncestry := MCWorkingAncestry new
e92da349ec56 class: MCWorkingCopy
Claus Gittinger <cg@exept.de>
parents: 881
diff changeset
   130
                                                        addAncestor: aVersionInfo;
e92da349ec56 class: MCWorkingCopy
Claus Gittinger <cg@exept.de>
parents: 881
diff changeset
   131
                                                        addStepChild: currentVersionInfo;
e92da349ec56 class: MCWorkingCopy
Claus Gittinger <cg@exept.de>
parents: 881
diff changeset
   132
                                                        yourself.
e92da349ec56 class: MCWorkingCopy
Claus Gittinger <cg@exept.de>
parents: 881
diff changeset
   133
                MCPackageLoader updatePackage: package withSnapshot: newSnapshot.
e92da349ec56 class: MCWorkingCopy
Claus Gittinger <cg@exept.de>
parents: 881
diff changeset
   134
                ancestry := newAncestry.
e92da349ec56 class: MCWorkingCopy
Claus Gittinger <cg@exept.de>
parents: 881
diff changeset
   135
                self modified: false; modified: true]
84
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   136
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   137
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   138
changesRelativeToRepository: aRepository
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   139
	| ancestorVersion ancestorSnapshot |
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   140
	ancestorVersion _ aRepository closestAncestorVersionFor: ancestry ifNone: [].
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   141
	ancestorSnapshot _ ancestorVersion ifNil: [MCSnapshot empty] ifNotNil: [ancestorVersion snapshot].
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   142
	^ package snapshot patchRelativeToBase: ancestorSnapshot
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   143
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   144
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   145
loaded: aVersion
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   146
	ancestry _ MCWorkingAncestry new addAncestor: aVersion info.
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   147
	requiredPackages _ OrderedCollection withAll: (aVersion dependencies collect: [:ea | ea package]).
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   148
	self modified: false.
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   149
	self changed
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   150
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   151
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   152
merge: targetVersion
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   153
	| ancestorInfo merger ancestorSnapshot packageSnapshot |
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   154
	targetVersion dependencies do: [:ea | ea resolve merge].
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   155
	ancestorInfo _ targetVersion info commonAncestorWith: ancestry.
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   156
	
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   157
	ancestorInfo = targetVersion info ifTrue: [^ MCNoChangesException signal].
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   158
	
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   159
	packageSnapshot _ package snapshot.
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   160
	ancestorSnapshot _ ancestorInfo
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   161
							ifNotNil: [(self findSnapshotWithVersionInfo: ancestorInfo)]
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   162
							ifNil: [self notifyNoCommonAncestorWith: targetVersion.  MCSnapshot empty].
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   163
	
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   164
	(ancestry ancestors size = 1
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   165
		and: [ancestry ancestors first = ancestorInfo]
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   166
		and: [(packageSnapshot patchRelativeToBase: ancestorSnapshot) isEmpty])
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   167
				ifTrue: [^ targetVersion load].
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   168
	
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   169
	merger _ MCThreeWayMerger 
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   170
				base: packageSnapshot
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   171
				target: targetVersion snapshot
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   172
				ancestor: ancestorSnapshot.
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   173
	((MCMergeResolutionRequest new merger: merger)
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   174
		signal: 'Merging ', targetVersion info name) = true ifTrue:
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   175
			[merger loadWithNameLike: targetVersion info name.
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   176
			ancestry addAncestor: targetVersion info].
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   177
	self changed
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   178
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   179
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   180
merged: aVersion
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   181
	ancestry addAncestor: aVersion info.
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   182
	self changed
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   183
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   184
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   185
newVersion
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   186
	^ (self requestVersionNameAndMessageWithSuggestion: self uniqueVersionName) ifNotNilDo:
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   187
		[:pair |
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   188
		self newVersionWithName: pair first message: pair last].
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   189
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   190
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   191
newVersionWithName: nameString message: messageString
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   192
	| info deps |
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   193
	info _ ancestry infoWithName: nameString message: messageString.
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   194
	ancestry _ MCWorkingAncestry new addAncestor: info.
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   195
	self modified: true; modified: false.
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   196
	
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   197
	deps _ self requiredPackages collect:
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   198
		[:ea | 
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   199
		MCVersionDependency
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   200
			package: ea
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   201
			info: ea workingCopy currentVersionInfo].
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   202
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   203
	^ MCVersion
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   204
		package: package
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   205
		info: info
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   206
		snapshot: package snapshot
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   207
		dependencies: deps
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   208
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   209
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   210
notifyNoCommonAncestorWith: aVersion
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   211
	self notify:
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   212
'Could not find a common ancestor between (',
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   213
aVersion info name,
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   214
') and (',
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   215
ancestry ancestorString, ').
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   216
Proceeding with this merge may cause spurious conflicts.'
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   217
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   218
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   219
unload
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   220
	MCPackageLoader unloadPackage: self package.
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   221
	self unregister.
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   222
! !
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   223
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   224
!MCWorkingCopy methodsFor:'private'!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   225
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   226
findSnapshotWithVersionInfo: aVersionInfo
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   227
	^ aVersionInfo
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   228
		ifNil: [MCSnapshot empty]
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   229
		ifNotNil: [(self repositoryGroup versionWithInfo: aVersionInfo) snapshot]
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   230
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   231
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   232
initialize
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   233
	super initialize.
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   234
	ancestry _ MCWorkingAncestry new
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   235
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   236
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   237
nextVersionName
881
d78a5da73018 class: MCWorkingCopy
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 850
diff changeset
   238
    ^self nextVersionNameWithTemplate: '%(PACKAGE)-%(AUTHOR).%(REVISION_NUMBER)'
d78a5da73018 class: MCWorkingCopy
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 850
diff changeset
   239
d78a5da73018 class: MCWorkingCopy
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 850
diff changeset
   240
    "Modified: / 06-06-2013 / 20:02:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
d78a5da73018 class: MCWorkingCopy
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 850
diff changeset
   241
!
d78a5da73018 class: MCWorkingCopy
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 850
diff changeset
   242
d78a5da73018 class: MCWorkingCopy
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 850
diff changeset
   243
nextVersionNameWithTemplate: template
d78a5da73018 class: MCWorkingCopy
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 850
diff changeset
   244
    "Return next version name based on given template.
d78a5da73018 class: MCWorkingCopy
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 850
diff changeset
   245
     Following parameters are expanded:
d78a5da73018 class: MCWorkingCopy
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 850
diff changeset
   246
        REVISION_NUMBER ... sequential version number (the higher, the newer, basically)
d78a5da73018 class: MCWorkingCopy
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 850
diff changeset
   247
        PACKAGE ........... package name
d78a5da73018 class: MCWorkingCopy
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 850
diff changeset
   248
        AUTHOR ............ author of the version
d78a5da73018 class: MCWorkingCopy
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 850
diff changeset
   249
    "
d78a5da73018 class: MCWorkingCopy
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 850
diff changeset
   250
443
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 84
diff changeset
   251
        | branch oldName |
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 84
diff changeset
   252
        ancestry ancestors isEmpty
850
73e20681c8a0 More support Squeak/Pharo interoperability - part 1:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 799
diff changeset
   253
                ifTrue: [counter ifNil: [counter := 0]. branch := package monticelloName asString copy replaceAll: $/ with: $_; replaceAll: $: with: $_]
443
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 84
diff changeset
   254
                ifFalse:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 84
diff changeset
   255
                        [oldName := ancestry ancestors first name.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 84
diff changeset
   256
                        oldName last isDigit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 84
diff changeset
   257
                                ifFalse: [branch := oldName]
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 84
diff changeset
   258
                                ifTrue: [branch := oldName copyUpToLast: $-].
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 84
diff changeset
   259
                        counter ifNil: [
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 84
diff changeset
   260
                                counter := (ancestry ancestors collect: [:each |
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 84
diff changeset
   261
                                        each name last isDigit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 84
diff changeset
   262
                                                ifFalse: [0]
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 84
diff changeset
   263
                                                ifTrue: [(each name copyAfterLast: $-) extractNumber]]) max]].
84
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   264
443
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 84
diff changeset
   265
        counter := counter + 1.
881
d78a5da73018 class: MCWorkingCopy
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 850
diff changeset
   266
        ^template expandPlaceholdersWith:
d78a5da73018 class: MCWorkingCopy
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 850
diff changeset
   267
            (Dictionary new
d78a5da73018 class: MCWorkingCopy
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 850
diff changeset
   268
                at: 'REVISION_NUMBER' put: counter;
d78a5da73018 class: MCWorkingCopy
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 850
diff changeset
   269
                at: 'PACKAGE' put: branch;
d78a5da73018 class: MCWorkingCopy
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 850
diff changeset
   270
                at: 'AUTHOR' put: ((OperatingSystem getFullUserNameFromID: OperatingSystem getUserID) reject:[:c|c isSeparator]);
d78a5da73018 class: MCWorkingCopy
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 850
diff changeset
   271
                yourself)
443
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 84
diff changeset
   272
881
d78a5da73018 class: MCWorkingCopy
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 850
diff changeset
   273
    "Created: / 06-06-2013 / 20:02:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
84
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   274
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   275
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   276
possiblyNewerVersions
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   277
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   278
	^Array streamContents: [:strm |
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   279
		self repositoryGroup repositories do: [:repo |
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   280
			strm nextPutAll: (self possiblyNewerVersionsIn: repo)]]
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   281
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   282
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   283
possiblyNewerVersionsIn: aRepository
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   284
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   285
	^aRepository possiblyNewerVersionsOfAnyOf: self ancestors
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   286
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   287
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   288
requestVersionNameAndMessageWithSuggestion: aString
443
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 84
diff changeset
   289
        ^ (MCVersionNameAndMessageRequest new suggestedName: aString) raiseRequest
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 84
diff changeset
   290
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 84
diff changeset
   291
    "Modified: / 23-08-2011 / 07:42:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
84
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   292
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   293
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   294
uniqueVersionName
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   295
	|versionName|
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   296
	counter _ nil.
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   297
	[versionName _ self nextVersionName.
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   298
	self repositoryGroup includesVersionNamed: versionName] whileTrue.
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   299
	^ versionName
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   300
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   301
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   302
versionSeparator
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   303
	^ $_
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   304
! !
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   305
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   306
!MCWorkingCopy methodsFor:'repositories'!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   307
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   308
repositoryGroup
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   309
	^ repositoryGroup ifNil: [repositoryGroup _ MCRepositoryGroup new]
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   310
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   311
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   312
repositoryGroup: aRepositoryGroup
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   313
	repositoryGroup _ aRepositoryGroup
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   314
! !
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   315
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   316
!MCWorkingCopy class methodsFor:'documentation'!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   317
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   318
version
917
e92da349ec56 class: MCWorkingCopy
Claus Gittinger <cg@exept.de>
parents: 881
diff changeset
   319
    ^ '$Header: /cvs/stx/stx/goodies/monticello/MCWorkingCopy.st,v 1.7 2014-02-25 13:39:03 cg Exp $'
850
73e20681c8a0 More support Squeak/Pharo interoperability - part 1:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 799
diff changeset
   320
!
73e20681c8a0 More support Squeak/Pharo interoperability - part 1:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 799
diff changeset
   321
73e20681c8a0 More support Squeak/Pharo interoperability - part 1:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 799
diff changeset
   322
version_CVS
917
e92da349ec56 class: MCWorkingCopy
Claus Gittinger <cg@exept.de>
parents: 881
diff changeset
   323
    ^ '$Header: /cvs/stx/stx/goodies/monticello/MCWorkingCopy.st,v 1.7 2014-02-25 13:39:03 cg Exp $'
84
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   324
! !
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   325
799
0072c73bf0a1 class: MCWorkingCopy
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 600
diff changeset
   326
84
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   327
MCWorkingCopy initialize!