MCAncestry.st
author mawalch
Mon, 08 Aug 2016 20:13:50 +0200
changeset 1010 bac4a6f2690e
parent 609 4e18c7f47be9
child 1003 0ebeea1cdeeb
permissions -rw-r--r--
#OTHER by mawalch Fix ridiculously propagated typo.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"{ Package: 'stx:goodies/monticello' }"
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
Object subclass:#MCAncestry
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
	instanceVariableNames:'ancestors stepChildren'
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
	classVariableNames:''
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
	poolDictionaries:''
609
4e18c7f47be9 category change
Claus Gittinger <cg@exept.de>
parents: 1
diff changeset
     7
	category:'SCM-Monticello-Versioning'
1
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
!
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
MCAncestry comment:'Abstract superclass of records of ancestry.'
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
!
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
!MCAncestry class methodsFor:'as yet unclassified'!
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
new
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
	^ self basicNew initialize
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
! !
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
!MCAncestry methodsFor:'ancestry'!
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
allAncestorsDo: aBlock
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
	self ancestors do:
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
		[:ea |
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
		aBlock value: ea.
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
		ea allAncestorsDo: aBlock]
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
!
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
allAncestorsOnPathTo: aVersionInfo
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
	^ MCFilteredVersionSorter new
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
		target: aVersionInfo;
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
		addAllVersionInfos: self ancestors;
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
		sortedVersionInfos
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
!
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
ancestorString
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
	^ String streamContents:
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
		[:s | self ancestors do: [:ea | s nextPutAll: ea name] separatedBy: [s nextPutAll: ', ']]
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
!
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
ancestors
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
	^ ancestors ifNil: [#()]
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
!
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
ancestorsDoWhileTrue: aBlock
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
	self ancestors do:
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
		[:ea |
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
		(aBlock value: ea) ifTrue: 
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
			[ea ancestorsDoWhileTrue: aBlock]]
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
!
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
breadthFirstAncestors
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
	^ Array streamContents: [:s | self breadthFirstAncestorsDo: [:ea | s nextPut: ea]]
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
!
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
breadthFirstAncestorsDo: aBlock
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
	| seen todo next |
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
	seen _ Set with: self.
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
	todo _ OrderedCollection with: self.
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
	[todo isEmpty] whileFalse:
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
		[next _ todo removeFirst.
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
		next ancestors do:
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
			[:ea |
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
			(seen includes: ea) ifFalse:
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
				[aBlock value: ea.
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
				seen add: ea.
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
				todo add: ea]]]
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
!
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
commonAncestorWith: aNode
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
	| commonAncestors |
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
	commonAncestors _ self commonAncestorsWith: aNode.
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
	^ commonAncestors at: 1 ifAbsent: [nil]
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
!
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
commonAncestorsWith: aVersionInfo
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
	| sharedAncestors mergedOrder sorter |
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
	sorter _ MCVersionSorter new
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
						addVersionInfo: self;
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
						addVersionInfo: aVersionInfo.
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
	mergedOrder _ sorter sortedVersionInfos.
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
	sharedAncestors _ (sorter allAncestorsOf: self) intersection: (sorter allAncestorsOf: aVersionInfo).
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
	^ mergedOrder select: [:ea | sharedAncestors includes: ea]
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
!
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
hasAncestor: aVersionInfo
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
	^ self
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
		hasAncestor: aVersionInfo
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
		alreadySeen: OrderedCollection new
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
!
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
hasAncestor: aVersionInfo alreadySeen: aList
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
	(aList includes: self) ifTrue: [^ false].
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
	aList add: self.
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
	^ self = aVersionInfo or: [self ancestors anySatisfy: [:ea | ea hasAncestor: aVersionInfo alreadySeen: aList]]
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
!
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
isRelatedTo: aVersionInfo
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
	^ aVersionInfo timeStamp < self timeStamp
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
		ifTrue: [self hasAncestor: aVersionInfo]
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
		ifFalse: [aVersionInfo hasAncestor: self]
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104
!
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
stepChildren
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
	^ stepChildren ifNil: [#()]
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
!
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
stepChildrenString
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
	^ String streamContents:
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
		[:s | self stepChildren do: [:ea | s nextPutAll: ea name] separatedBy: [s nextPutAll: ', ']]
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
!
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   114
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
topologicalAncestors
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   116
	| frontier f |
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
	^ Array streamContents:
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   118
		[:s |
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   119
		frontier _ MCFrontier frontierOn: self.
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   120
		[f _ frontier frontier.
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   121
		s nextPutAll: f.
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   122
		frontier removeAll: f.
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   123
		f isEmpty] whileFalse] 
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   124
!
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   125
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   126
trimAfterVersionInfo: aVersionInfo
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   127
	aVersionInfo = self
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   128
		ifTrue: [ancestors _ #()]
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   129
		ifFalse:
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   130
			[aVersionInfo date <= self date ifTrue:
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   131
				[ancestors do: [:ea | ea trimAfterVersionInfo: aVersionInfo]]
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   132
		]
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   133
!
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   134
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   135
withBreadthFirstAncestors
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   136
	^ (Array with: self), self breadthFirstAncestors
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   137
! !
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   138
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   139
!MCAncestry methodsFor:'initializing'!
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   140
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   141
initialize
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   142
	ancestors _ #().
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   143
	stepChildren _ #()
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   144
! !
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   145
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   146
!MCAncestry class methodsFor:'documentation'!
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   147
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   148
version
609
4e18c7f47be9 category change
Claus Gittinger <cg@exept.de>
parents: 1
diff changeset
   149
    ^ '$Header: /cvs/stx/stx/goodies/monticello/MCAncestry.st,v 1.2 2012-09-11 21:20:19 cg Exp $'
1
4bd059691a48 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   150
! !