MCWorkingCopy.st
author Claus Gittinger <cg@exept.de>
Wed, 12 Feb 2014 15:53:34 +0100
changeset 903 ce9914318a74
parent 881 d78a5da73018
child 917 e92da349ec56
permissions -rw-r--r--
categories
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
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
!MCWorkingCopy methodsFor:'accessing'!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
ancestors
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
	^ ancestry ancestors
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
ancestry
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
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
clearRequiredPackages
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
	requiredPackages _ nil
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
currentVersionInfo
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
	^ (self needsSaving or: [ancestry ancestors isEmpty])
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
		ifTrue: [self newVersion info]
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
		ifFalse: [ancestry ancestors first]
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
description
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
	^ self packageNameWithStar, ' (', ancestry ancestorString, ')'
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
needsSaving
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
	^ self modified or: [self requiredPackages anySatisfy: [:ea | ea workingCopy needsSaving]]
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
requirePackage: aPackage
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
	(self requiredPackages includes: aPackage) ifFalse: [requiredPackages add: aPackage]
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
requiredPackages
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
	^ requiredPackages ifNil: [requiredPackages _ OrderedCollection new]
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
versionInfo: aVersionInfo
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
	ancestry _ MCWorkingAncestry new addAncestor: aVersionInfo
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
! !
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
!MCWorkingCopy methodsFor:'migration'!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
updateInstVars
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
	ancestry ifNil:
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
		[ancestry _ MCWorkingAncestry new.
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104
		versionInfo ifNotNil:
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
			[versionInfo ancestors do: [:ea | ancestry addAncestor: ea].
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
			versionInfo _ nil]]
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
! !
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
!MCWorkingCopy methodsFor:'operations'!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
adopt: aVersion
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
	ancestry addAncestor: aVersion info.
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
	self changed.
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   114
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   116
backportChangesTo: aVersionInfo
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
	| baseVersion fullPatch currentVersionInfo currentVersion newSnapshot newAncestry |
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   118
	currentVersionInfo := self currentVersionInfo.
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   119
	baseVersion := self repositoryGroup versionWithInfo: aVersionInfo.
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   120
	currentVersion := self repositoryGroup versionWithInfo: currentVersionInfo.
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   121
	fullPatch := currentVersion snapshot patchRelativeToBase: baseVersion snapshot.
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   122
	(MCChangeSelectionRequest new
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   123
		patch: fullPatch;
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   124
		label: 'Changes to Backport';
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   125
		signal ) ifNotNilDo:
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   126
		[:partialPatch |
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   127
		newSnapshot := MCPatcher apply: partialPatch to: baseVersion snapshot.
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   128
		newAncestry := MCWorkingAncestry new
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   129
							addAncestor: aVersionInfo;
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   130
							addStepChild: currentVersionInfo;
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   131
							yourself.
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   132
		MCPackageLoader updatePackage: package withSnapshot: newSnapshot.
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   133
		ancestry := newAncestry.
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   134
		self modified: false; modified: true]
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   135
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   136
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   137
changesRelativeToRepository: aRepository
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   138
	| ancestorVersion ancestorSnapshot |
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   139
	ancestorVersion _ aRepository closestAncestorVersionFor: ancestry ifNone: [].
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   140
	ancestorSnapshot _ ancestorVersion ifNil: [MCSnapshot empty] ifNotNil: [ancestorVersion snapshot].
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   141
	^ package snapshot patchRelativeToBase: ancestorSnapshot
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   142
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   143
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   144
loaded: aVersion
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   145
	ancestry _ MCWorkingAncestry new addAncestor: aVersion info.
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   146
	requiredPackages _ OrderedCollection withAll: (aVersion dependencies collect: [:ea | ea package]).
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   147
	self modified: false.
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   148
	self changed
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   149
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   150
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   151
merge: targetVersion
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   152
	| ancestorInfo merger ancestorSnapshot packageSnapshot |
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   153
	targetVersion dependencies do: [:ea | ea resolve merge].
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   154
	ancestorInfo _ targetVersion info commonAncestorWith: ancestry.
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   155
	
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   156
	ancestorInfo = targetVersion info ifTrue: [^ MCNoChangesException signal].
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   157
	
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   158
	packageSnapshot _ package snapshot.
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   159
	ancestorSnapshot _ ancestorInfo
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   160
							ifNotNil: [(self findSnapshotWithVersionInfo: ancestorInfo)]
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   161
							ifNil: [self notifyNoCommonAncestorWith: targetVersion.  MCSnapshot empty].
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   162
	
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   163
	(ancestry ancestors size = 1
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   164
		and: [ancestry ancestors first = ancestorInfo]
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   165
		and: [(packageSnapshot patchRelativeToBase: ancestorSnapshot) isEmpty])
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   166
				ifTrue: [^ targetVersion load].
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   167
	
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   168
	merger _ MCThreeWayMerger 
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   169
				base: packageSnapshot
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   170
				target: targetVersion snapshot
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   171
				ancestor: ancestorSnapshot.
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   172
	((MCMergeResolutionRequest new merger: merger)
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   173
		signal: 'Merging ', targetVersion info name) = true ifTrue:
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   174
			[merger loadWithNameLike: targetVersion info name.
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   175
			ancestry addAncestor: targetVersion info].
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   176
	self changed
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   177
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   178
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   179
merged: aVersion
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   180
	ancestry addAncestor: aVersion info.
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   181
	self changed
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   182
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   183
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   184
newVersion
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   185
	^ (self requestVersionNameAndMessageWithSuggestion: self uniqueVersionName) ifNotNilDo:
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   186
		[:pair |
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   187
		self newVersionWithName: pair first message: pair last].
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   188
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   189
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   190
newVersionWithName: nameString message: messageString
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   191
	| info deps |
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   192
	info _ ancestry infoWithName: nameString message: messageString.
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   193
	ancestry _ MCWorkingAncestry new addAncestor: info.
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   194
	self modified: true; modified: false.
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   195
	
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   196
	deps _ self requiredPackages collect:
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   197
		[:ea | 
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   198
		MCVersionDependency
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   199
			package: ea
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   200
			info: ea workingCopy currentVersionInfo].
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   201
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   202
	^ MCVersion
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   203
		package: package
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   204
		info: info
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   205
		snapshot: package snapshot
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   206
		dependencies: deps
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   207
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   208
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   209
notifyNoCommonAncestorWith: aVersion
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   210
	self notify:
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   211
'Could not find a common ancestor between (',
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   212
aVersion info name,
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   213
') and (',
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   214
ancestry ancestorString, ').
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   215
Proceeding with this merge may cause spurious conflicts.'
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   216
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   217
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   218
unload
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   219
	MCPackageLoader unloadPackage: self package.
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   220
	self unregister.
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   221
! !
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   222
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   223
!MCWorkingCopy methodsFor:'private'!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   224
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   225
findSnapshotWithVersionInfo: aVersionInfo
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   226
	^ aVersionInfo
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   227
		ifNil: [MCSnapshot empty]
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   228
		ifNotNil: [(self repositoryGroup versionWithInfo: aVersionInfo) snapshot]
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   229
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   230
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   231
initialize
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   232
	super initialize.
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   233
	ancestry _ MCWorkingAncestry new
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   234
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   235
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   236
nextVersionName
881
d78a5da73018 class: MCWorkingCopy
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 850
diff changeset
   237
    ^self nextVersionNameWithTemplate: '%(PACKAGE)-%(AUTHOR).%(REVISION_NUMBER)'
d78a5da73018 class: MCWorkingCopy
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 850
diff changeset
   238
d78a5da73018 class: MCWorkingCopy
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 850
diff changeset
   239
    "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
   240
!
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
nextVersionNameWithTemplate: template
d78a5da73018 class: MCWorkingCopy
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 850
diff changeset
   243
    "Return next version name based on given template.
d78a5da73018 class: MCWorkingCopy
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 850
diff changeset
   244
     Following parameters are expanded:
d78a5da73018 class: MCWorkingCopy
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 850
diff changeset
   245
        REVISION_NUMBER ... sequential version number (the higher, the newer, basically)
d78a5da73018 class: MCWorkingCopy
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 850
diff changeset
   246
        PACKAGE ........... package name
d78a5da73018 class: MCWorkingCopy
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 850
diff changeset
   247
        AUTHOR ............ author of the version
d78a5da73018 class: MCWorkingCopy
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 850
diff changeset
   248
    "
d78a5da73018 class: MCWorkingCopy
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 850
diff changeset
   249
443
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 84
diff changeset
   250
        | branch oldName |
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 84
diff changeset
   251
        ancestry ancestors isEmpty
850
73e20681c8a0 More support Squeak/Pharo interoperability - part 1:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 799
diff changeset
   252
                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
   253
                ifFalse:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 84
diff changeset
   254
                        [oldName := ancestry ancestors first name.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 84
diff changeset
   255
                        oldName last isDigit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 84
diff changeset
   256
                                ifFalse: [branch := oldName]
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 84
diff changeset
   257
                                ifTrue: [branch := oldName copyUpToLast: $-].
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 84
diff changeset
   258
                        counter ifNil: [
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 84
diff changeset
   259
                                counter := (ancestry ancestors collect: [:each |
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 84
diff changeset
   260
                                        each name last isDigit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 84
diff changeset
   261
                                                ifFalse: [0]
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 84
diff changeset
   262
                                                ifTrue: [(each name copyAfterLast: $-) extractNumber]]) max]].
84
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   263
443
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 84
diff changeset
   264
        counter := counter + 1.
881
d78a5da73018 class: MCWorkingCopy
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 850
diff changeset
   265
        ^template expandPlaceholdersWith:
d78a5da73018 class: MCWorkingCopy
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 850
diff changeset
   266
            (Dictionary new
d78a5da73018 class: MCWorkingCopy
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 850
diff changeset
   267
                at: 'REVISION_NUMBER' put: counter;
d78a5da73018 class: MCWorkingCopy
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 850
diff changeset
   268
                at: 'PACKAGE' put: branch;
d78a5da73018 class: MCWorkingCopy
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 850
diff changeset
   269
                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
   270
                yourself)
443
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 84
diff changeset
   271
881
d78a5da73018 class: MCWorkingCopy
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 850
diff changeset
   272
    "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
   273
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   274
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   275
possiblyNewerVersions
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   276
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   277
	^Array streamContents: [:strm |
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   278
		self repositoryGroup repositories do: [:repo |
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   279
			strm nextPutAll: (self possiblyNewerVersionsIn: repo)]]
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   280
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   281
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   282
possiblyNewerVersionsIn: aRepository
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   283
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   284
	^aRepository possiblyNewerVersionsOfAnyOf: self ancestors
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   285
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   286
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   287
requestVersionNameAndMessageWithSuggestion: aString
443
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 84
diff changeset
   288
        ^ (MCVersionNameAndMessageRequest new suggestedName: aString) raiseRequest
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 84
diff changeset
   289
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 84
diff changeset
   290
    "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
   291
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   292
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   293
uniqueVersionName
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   294
	|versionName|
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   295
	counter _ nil.
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   296
	[versionName _ self nextVersionName.
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   297
	self repositoryGroup includesVersionNamed: versionName] whileTrue.
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   298
	^ versionName
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   299
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   300
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   301
versionSeparator
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   302
	^ $_
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
!MCWorkingCopy methodsFor:'repositories'!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   306
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   307
repositoryGroup
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   308
	^ repositoryGroup ifNil: [repositoryGroup _ MCRepositoryGroup new]
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   309
!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   310
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   311
repositoryGroup: aRepositoryGroup
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
! !
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   314
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   315
!MCWorkingCopy class methodsFor:'documentation'!
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   316
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   317
version
881
d78a5da73018 class: MCWorkingCopy
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 850
diff changeset
   318
    ^ '$Header: /cvs/stx/stx/goodies/monticello/MCWorkingCopy.st,v 1.6 2013-06-06 19:15:53 vrany Exp $'
850
73e20681c8a0 More support Squeak/Pharo interoperability - part 1:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 799
diff changeset
   319
!
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
version_CVS
881
d78a5da73018 class: MCWorkingCopy
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 850
diff changeset
   322
    ^ '$Header: /cvs/stx/stx/goodies/monticello/MCWorkingCopy.st,v 1.6 2013-06-06 19:15:53 vrany Exp $'
84
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   323
! !
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   324
799
0072c73bf0a1 class: MCWorkingCopy
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 600
diff changeset
   325
84
a6a08f73a441 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   326
MCWorkingCopy initialize!