MCVersionSorter.st
author Claus Gittinger <cg@exept.de>
Mon, 14 May 2018 02:21:18 +0200
changeset 1048 582b3a028cbc
parent 707 fb7246d3077d
permissions -rw-r--r--
#FEATURE by cg class: MCMethodDefinition changed: #postloadOver:
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
83
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"{ Package: 'stx:goodies/monticello' }"
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
Object subclass:#MCVersionSorter
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
	instanceVariableNames:'layers depthIndex depths stepparents roots'
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
	classVariableNames:''
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
	poolDictionaries:''
707
fb7246d3077d category change
Claus Gittinger <cg@exept.de>
parents: 83
diff changeset
     7
	category:'SCM-Monticello-Versioning'
83
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
!
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
!MCVersionSorter class methodsFor:'as yet unclassified'!
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
new
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
	^ self basicNew initialize
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
! !
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
!MCVersionSorter methodsFor:'as yet unclassified'!
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
addAllAncestorsOf: aVersionInfo to: aSet
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
	(aSet includes: aVersionInfo) ifTrue: [^ self].
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
	aSet add: aVersionInfo.
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
	(self knownAncestorsOf: aVersionInfo) do:
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
		[:ea |
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
		self addAllAncestorsOf: ea to: aSet]
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
!
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
addAllVersionInfos: aCollection
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
	aCollection do: [:ea | self addVersionInfo: ea]
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
!
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
addToCurrentLayer: aVersionInfo
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
	| layer |
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
	layer _ layers at: depthIndex.
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
	(layer includes: aVersionInfo) ifFalse:
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
		[depths at: aVersionInfo ifPresent:
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
			[:i |
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
			i < depthIndex
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
				ifTrue: [(layers at: i) remove: aVersionInfo]
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
				ifFalse: [^ false]].
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
		layer add: aVersionInfo.
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
		depths at: aVersionInfo put: depthIndex.
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
		^ true].
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
	^ false 
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
!
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
addVersionInfo: aVersionInfo
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
	roots add: aVersionInfo.
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
	self registerStepChildrenOf: aVersionInfo seen: Set new
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
!
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
allAncestorsOf: aVersionInfo
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
	| all |
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
	all _ Set new.
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
	self addAllAncestorsOf: aVersionInfo to: all.
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
	^ all
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
!
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
initialize
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
	stepparents _ Dictionary new.
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
	roots _ OrderedCollection new.
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
!
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
knownAncestorsOf: aVersionInfo
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
	^ aVersionInfo ancestors, (self stepParentsOf: aVersionInfo) asArray
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
!
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
layers
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
	^ layers
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
!
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
popLayer
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
	depthIndex _ depthIndex - 1
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
!
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
processVersionInfo: aVersionInfo
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
	(self addToCurrentLayer: aVersionInfo) ifTrue:
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
		[self pushLayer.
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
		(self knownAncestorsOf: aVersionInfo) do: [:ea | self processVersionInfo: ea].
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
		self popLayer]
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
!
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
pushLayer
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
	depthIndex _ depthIndex + 1.
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
	depthIndex > layers size ifTrue: [layers add: OrderedCollection new].
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
	
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
!
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
registerStepChildrenOf: aVersionInfo seen: aSet
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
	(aSet includes: aVersionInfo) ifTrue: [^ self].
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
	aSet add: aVersionInfo.
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
	aVersionInfo stepChildren do: [:ea | (self stepParentsOf: ea) add: aVersionInfo].
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
	aVersionInfo ancestors do: [:ea | self registerStepChildrenOf: ea seen: aSet].
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
!
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
sortedVersionInfos
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
	layers _ OrderedCollection with: OrderedCollection new.
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
	depthIndex _ 1.
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
	depths _ Dictionary new.
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
	roots do: [:ea | self processVersionInfo: ea].
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
	^ layers gather: [:ea | ea]
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
!
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
stepParentsOf: aVersionInfo
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104
	^ (stepparents at: aVersionInfo ifAbsentPut: [Set new])
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
! !
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
!MCVersionSorter class methodsFor:'documentation'!
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
version
707
fb7246d3077d category change
Claus Gittinger <cg@exept.de>
parents: 83
diff changeset
   110
    ^ '$Header: /cvs/stx/stx/goodies/monticello/MCVersionSorter.st,v 1.2 2012-09-11 21:31:08 cg Exp $'
83
a7cda3b621a7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
! !