Discussion:
The Trunk: Monticello-pre.690.mcz
(too old to reply)
c***@source.squeak.org
0000-12-08 08:58:54 UTC
Permalink
Patrick Rein uploaded a new version of Monticello to project The Trunk:
http://source.squeak.org/trunk/Monticello-pre.690.mcz

==================== Summary ====================

Name: Monticello-pre.690
Author: pre
Time: 7 December 2018, 9:58:49.626427 am
UUID: 1ff627da-fec1-48d4-b35f-eec253e8ef0f
Ancestors: Monticello-pre.689

More advances on categorizing all the messages. This time the Monticello classes (except for one class for which I am really unsure what the messages are actually for).

=============== Diff against Monticello-pre.689 ===============

Item was changed:
+ ----- Method: MCAddition class>>of: (in category 'instance creation') -----
- ----- Method: MCAddition class>>of: (in category 'as yet unclassified') -----
of: aDefinition
^ self new intializeWithDefinition: aDefinition!

Item was changed:
+ ----- Method: MCAddition>>= (in category 'comparing') -----
- ----- Method: MCAddition>>= (in category 'as yet unclassified') -----
= other
^ other isAddition and: [definition = other definition]!

Item was changed:
+ ----- Method: MCAddition>>applyTo: (in category 'applying') -----
- ----- Method: MCAddition>>applyTo: (in category 'accessing') -----
applyTo: anObject
anObject addDefinition: definition!

Item was changed:
+ ----- Method: MCAddition>>hash (in category 'comparing') -----
- ----- Method: MCAddition>>hash (in category 'as yet unclassified') -----
hash
^ definition hash!

Item was changed:
+ ----- Method: MCAddition>>inverse (in category 'accessing') -----
- ----- Method: MCAddition>>inverse (in category 'as yet unclassified') -----
inverse
^ MCRemoval of: definition!

Item was changed:
+ ----- Method: MCAddition>>isClassPatch (in category 'testing') -----
- ----- Method: MCAddition>>isClassPatch (in category 'as yet unclassified') -----
isClassPatch
^definition isClassDefinition!

Item was changed:
+ ----- Method: MCAncestry class>>new (in category 'instance creation') -----
- ----- Method: MCAncestry class>>new (in category 'as yet unclassified') -----
new
^ self basicNew initialize!

Item was changed:
+ ----- Method: MCCacheRepository>>basicStoreVersion: (in category 'private') -----
- ----- Method: MCCacheRepository>>basicStoreVersion: (in category 'as yet unclassified') -----
basicStoreVersion: aVersion
(aVersion isCacheable not or: [self allFileNames includes: aVersion fileName])
ifFalse: [super basicStoreVersion: aVersion]
!

Item was changed:
+ ----- Method: MCCacheRepository>>cacheForPackage: (in category 'caching') -----
- ----- Method: MCCacheRepository>>cacheForPackage: (in category 'as yet unclassified') -----
cacheForPackage: aPackage
packageCaches ifNil: [packageCaches := Dictionary new].
^ packageCaches at: aPackage ifAbsentPut: [MCPackageCache new]!

Item was changed:
+ ----- Method: MCCacheRepository>>newFileNames (in category 'accessing') -----
- ----- Method: MCCacheRepository>>newFileNames (in category 'as yet unclassified') -----
newFileNames
^ self allFileNames difference: self seenFileNames!

Item was changed:
+ ----- Method: MCCacheRepository>>rescan (in category 'private') -----
- ----- Method: MCCacheRepository>>rescan (in category 'as yet unclassified') -----
rescan
+
+ self flag: #todo. "This method seems to be unused --pre"
self newFileNames do:
[:ea |
self versionReaderForFileNamed: ea do:
[:reader |
(self cacheForPackage: reader package)
recordVersionInfo: reader info
forFileNamed: ea.
self seenFileNames add: ea]]
displayingProgress: 'Scanning cache...'!

Item was changed:
+ ----- Method: MCCacheRepository>>seenFileNames (in category 'accessing') -----
- ----- Method: MCCacheRepository>>seenFileNames (in category 'as yet unclassified') -----
seenFileNames
^ seenFiles ifNil: [seenFiles := OrderedCollection new]!

Item was changed:
+ ----- Method: MCCacheRepository>>versionInfoForFileNamed: (in category 'caching') -----
- ----- Method: MCCacheRepository>>versionInfoForFileNamed: (in category 'as yet unclassified') -----
versionInfoForFileNamed: aString
^ cache at: aString ifAbsentPut: [self versionReaderForFileNamed: aString do: [:r | r info]]!

Item was changed:
+ ----- Method: MCChangeSelector>>buttonSpecs (in category 'ui') -----
- ----- Method: MCChangeSelector>>buttonSpecs (in category 'as yet unclassified') -----
buttonSpecs
^ #((Select select 'Select these changes')
(Cancel cancel 'Cancel the operation')
)!

Item was changed:
+ ----- Method: MCChangeSelector>>cancel (in category 'actions') -----
- ----- Method: MCChangeSelector>>cancel (in category 'as yet unclassified') -----
cancel
self answer: nil!

Item was changed:
+ ----- Method: MCChangeSelector>>defaultLabel (in category 'ui') -----
- ----- Method: MCChangeSelector>>defaultLabel (in category 'as yet unclassified') -----
defaultLabel
^ 'Change Selector'!

Item was changed:
+ ----- Method: MCChangeSelector>>innerButtonRow (in category 'private-ui') -----
- ----- Method: MCChangeSelector>>innerButtonRow (in category 'as yet unclassified') -----
innerButtonRow
^ self buttonRow: self innerButtonSpecs!

Item was changed:
+ ----- Method: MCChangeSelector>>innerButtonSpecs (in category 'private-ui') -----
- ----- Method: MCChangeSelector>>innerButtonSpecs (in category 'as yet unclassified') -----
innerButtonSpecs
^
#(('Select All' selectAll 'select all changes')
('Select None' selectNone 'select no changes'))!

Item was changed:
+ ----- Method: MCChangeSelector>>kept (in category 'accessing') -----
- ----- Method: MCChangeSelector>>kept (in category 'as yet unclassified') -----
kept
^ kept ifNil: [kept := Set new]!

Item was changed:
+ ----- Method: MCChangeSelector>>listSelectionAt: (in category 'actions') -----
- ----- Method: MCChangeSelector>>listSelectionAt: (in category 'as yet unclassified') -----
listSelectionAt: aNumber
^ self kept includes: (self items at: aNumber)!

Item was changed:
+ ----- Method: MCChangeSelector>>listSelectionAt:put: (in category 'actions') -----
- ----- Method: MCChangeSelector>>listSelectionAt:put: (in category 'as yet unclassified') -----
listSelectionAt: aNumber put: aBoolean
| item |
item := self items at: aNumber.
aBoolean
ifTrue: [self kept add: item ]
ifFalse: [self kept remove: item ifAbsent: []]!

Item was changed:
+ ----- Method: MCChangeSelector>>select (in category 'actions') -----
- ----- Method: MCChangeSelector>>select (in category 'as yet unclassified') -----
select
self answer: (MCPatch operations: kept)!

Item was changed:
+ ----- Method: MCChangeSelector>>selectAll (in category 'actions') -----
- ----- Method: MCChangeSelector>>selectAll (in category 'as yet unclassified') -----
selectAll
kept addAll: self items.
self changed: #list!

Item was changed:
+ ----- Method: MCChangeSelector>>selectNone (in category 'actions') -----
- ----- Method: MCChangeSelector>>selectNone (in category 'as yet unclassified') -----
selectNone
kept := Set new.
self changed: #list!

Item was changed:
+ ----- Method: MCChangeSelector>>widgetSpecs (in category 'ui') -----
- ----- Method: MCChangeSelector>>widgetSpecs (in category 'as yet unclassified') -----
widgetSpecs
Preferences annotationPanes ifFalse: [ ^#(
((buttonRow) (0 0 1 0) (0 0 0 defaultButtonPaneHeight))
((multiListMorph:selection:listSelection:menu: list selection listSelectionAt: methodListMenu:) (0 0 1 0.4) (0 defaultButtonPaneHeight 0 0))
((innerButtonRow) (0 0.4 1 0.4) (0 0 0 defaultButtonPaneHeight))
((textMorph: text) (0 0.4 1 1) (0 defaultButtonPaneHeight 0 0))
)].

^ {
#((buttonRow) (0 0 1 0) (0 0 0 defaultButtonPaneHeight)).
#((multiListMorph:selection:listSelection:menu: list selection listSelectionAt: methodListMenu:) (0 0 1 0.4) (0 defaultButtonPaneHeight 0 0)).
#((innerButtonRow) (0 0.4 1 0.4) (0 0 0 defaultButtonPaneHeight)).
{ #(textMorph: annotations). #(0 0.4 1 0.4). { 0. self defaultButtonPaneHeight. 0. self defaultButtonPaneHeight+self defaultAnnotationPaneHeight. }}.
{ #(textMorph: text). #(0 0.4 1 1). { 0. self defaultButtonPaneHeight+self defaultAnnotationPaneHeight. 0. 0.}}
}!

Item was changed:
+ ----- Method: MCClassInstanceVariableDefinition class>>type (in category 'accessing') -----
- ----- Method: MCClassInstanceVariableDefinition class>>type (in category 'as yet unclassified') -----
type
^ #classInstance!

Item was changed:
+ ----- Method: MCClassTraitParser class>>pattern (in category 'constants') -----
- ----- Method: MCClassTraitParser class>>pattern (in category 'as yet unclassified') -----
pattern
^ '*classTrait*uses:*'!

Item was changed:
+ ----- Method: MCClassVariableDefinition class>>type (in category 'accessing') -----
- ----- Method: MCClassVariableDefinition class>>type (in category 'as yet unclassified') -----
type
^ #class!

Item was changed:
+ ----- Method: MCConflict class>>operation: (in category 'instance creation') -----
- ----- Method: MCConflict class>>operation: (in category 'as yet unclassified') -----
operation: anOperation
^ self new operation: anOperation !

Item was changed:
+ ----- Method: MCConflict>>annotations (in category 'accessing') -----
- ----- Method: MCConflict>>annotations (in category 'as yet unclassified') -----
annotations
^operation ifNotNil: [ :op | op annotations ]!

Item was changed:
+ ----- Method: MCConflict>>applyTo: (in category 'applying') -----
- ----- Method: MCConflict>>applyTo: (in category 'as yet unclassified') -----
applyTo: anObject
self isResolved ifFalse: [self error: 'Cannot continue until this conflict has been resolved'].
self remoteChosen ifTrue: [operation applyTo: anObject].!

Item was changed:
+ ----- Method: MCConflict>>chooseLocal (in category 'resolving ') -----
- ----- Method: MCConflict>>chooseLocal (in category 'as yet unclassified') -----
chooseLocal
chooseRemote := false!

Item was changed:
+ ----- Method: MCConflict>>chooseNewer (in category 'resolving ') -----
- ----- Method: MCConflict>>chooseNewer (in category 'as yet unclassified') -----
chooseNewer
self isLocalNewer ifTrue: [ self chooseLocal ]
ifFalse: [ self isRemoteNewer ifTrue: [ self chooseRemote ]]!

Item was changed:
+ ----- Method: MCConflict>>chooseOlder (in category 'resolving ') -----
- ----- Method: MCConflict>>chooseOlder (in category 'as yet unclassified') -----
chooseOlder
self isRemoteNewer ifTrue: [ self chooseLocal ]
ifFalse: [ self isLocalNewer ifTrue: [ self chooseRemote ]]!

Item was changed:
+ ----- Method: MCConflict>>chooseRemote (in category 'resolving ') -----
- ----- Method: MCConflict>>chooseRemote (in category 'as yet unclassified') -----
chooseRemote
chooseRemote := true!

Item was changed:
+ ----- Method: MCConflict>>chooseSameAST (in category 'resolving ') -----
- ----- Method: MCConflict>>chooseSameAST (in category 'as yet unclassified') -----
chooseSameAST
| fromSrc toSrc |
(self definition isNil or: [self definition isMethodDefinition not])
ifTrue: [^ self].
fromSrc := (Parser new parse: operation fromSource class: nil class)
generate decompile asString.
toSrc := (Parser new parse: operation toSource class: nil class)
generate decompile asString.
fromSrc = toSrc ifTrue: [self chooseLocal].!

Item was changed:
+ ----- Method: MCConflict>>clearChoice (in category 'resolving ') -----
- ----- Method: MCConflict>>clearChoice (in category 'as yet unclassified') -----
clearChoice
chooseRemote := nil!

Item was changed:
+ ----- Method: MCConflict>>definition (in category 'accessing') -----
- ----- Method: MCConflict>>definition (in category 'as yet unclassified') -----
definition
^operation ifNotNil: [ :op | op definition ]!

Item was changed:
+ ----- Method: MCConflict>>isConflict (in category 'testing') -----
- ----- Method: MCConflict>>isConflict (in category 'as yet unclassified') -----
isConflict
^true!

Item was changed:
+ ----- Method: MCConflict>>isLocalNewer (in category 'testing') -----
- ----- Method: MCConflict>>isLocalNewer (in category 'as yet unclassified') -----
isLocalNewer
^ self localDefinition fullTimeStamp > self remoteDefinition fullTimeStamp!

Item was changed:
+ ----- Method: MCConflict>>isRemoteNewer (in category 'testing') -----
- ----- Method: MCConflict>>isRemoteNewer (in category 'as yet unclassified') -----
isRemoteNewer
^ self localDefinition fullTimeStamp < self remoteDefinition fullTimeStamp!

Item was changed:
+ ----- Method: MCConflict>>isResolved (in category 'testing') -----
- ----- Method: MCConflict>>isResolved (in category 'as yet unclassified') -----
isResolved
^ chooseRemote notNil!

Item was changed:
+ ----- Method: MCConflict>>localChosen (in category 'testing') -----
- ----- Method: MCConflict>>localChosen (in category 'as yet unclassified') -----
localChosen
^ chooseRemote notNil and: [chooseRemote not]!

Item was changed:
+ ----- Method: MCConflict>>localDefinition (in category 'accessing') -----
- ----- Method: MCConflict>>localDefinition (in category 'as yet unclassified') -----
localDefinition
^ operation baseDefinition!

Item was changed:
+ ----- Method: MCConflict>>operation (in category 'accessing') -----
- ----- Method: MCConflict>>operation (in category 'as yet unclassified') -----
operation
^ operation!

Item was changed:
+ ----- Method: MCConflict>>operation: (in category 'accessing') -----
- ----- Method: MCConflict>>operation: (in category 'as yet unclassified') -----
operation: anOperation
operation := anOperation!

Item was changed:
+ ----- Method: MCConflict>>remoteChosen (in category 'testing') -----
- ----- Method: MCConflict>>remoteChosen (in category 'as yet unclassified') -----
remoteChosen
^ chooseRemote notNil and: [chooseRemote]!

Item was changed:
+ ----- Method: MCConflict>>remoteDefinition (in category 'testing') -----
- ----- Method: MCConflict>>remoteDefinition (in category 'as yet unclassified') -----
remoteDefinition
^ operation targetDefinition!

Item was changed:
+ ----- Method: MCConflict>>source (in category 'accessing') -----
- ----- Method: MCConflict>>source (in category 'as yet unclassified') -----
source
^ self localChosen
ifTrue: [operation fromSource]
ifFalse: [operation source]!

Item was changed:
+ ----- Method: MCConflict>>status (in category 'accessing') -----
- ----- Method: MCConflict>>status (in category 'as yet unclassified') -----
status
^ self isResolved
ifFalse: ['']
ifTrue: [self remoteChosen
ifFalse: ['L']
ifTrue: ['R']]!

Item was changed:
+ ----- Method: MCConflict>>summary (in category 'accessing') -----
- ----- Method: MCConflict>>summary (in category 'as yet unclassified') -----
summary
| attribute |
attribute :=
self isResolved
ifTrue: [self remoteChosen ifTrue: [#underlined] ifFalse: [#struckOut]]
ifFalse: [#bold].
^ Text string: operation summary attribute: (TextEmphasis perform: attribute)!

Item was changed:
+ ----- Method: MCDependencySorter class>>items: (in category 'instance creation') -----
- ----- Method: MCDependencySorter class>>items: (in category 'as yet unclassified') -----
items: aCollection
^ self new addAll: aCollection!

Item was changed:
+ ----- Method: MCDependencySorter class>>new (in category 'instance creation') -----
- ----- Method: MCDependencySorter class>>new (in category 'as yet unclassified') -----
new
^ self basicNew initialize!

Item was changed:
+ ----- Method: MCDependencySorter class>>sortItems: (in category 'utility') -----
- ----- Method: MCDependencySorter class>>sortItems: (in category 'as yet unclassified') -----
sortItems: aCollection
| sorter |
sorter := self items: aCollection.
sorter externalRequirements do: [:req | sorter addProvision: req].
^ sorter orderedItems.!

Item was changed:
+ ----- Method: MCDependentsWrapper>>asString (in category 'converting') -----
- ----- Method: MCDependentsWrapper>>asString (in category 'as yet unclassified') -----
asString
^item description!

Item was changed:
+ ----- Method: MCDependentsWrapper>>contents (in category 'accessing') -----
- ----- Method: MCDependentsWrapper>>contents (in category 'as yet unclassified') -----
contents
| list workingCopies |
workingCopies := model unsortedWorkingCopies.
list := item requiredPackages collect:
[:each |
workingCopies detect: [:wc | wc package = each] ifNone: [nil]]
thenSelect: [:x | x notNil].
^list collect: [:each | self class with: each model: model]!

Item was changed:
+ ----- Method: MCDependentsWrapper>>hasContents (in category 'testing') -----
- ----- Method: MCDependentsWrapper>>hasContents (in category 'as yet unclassified') -----
hasContents
^item requiredPackages isEmpty not!

Item was changed:
+ ----- Method: MCDependentsWrapper>>item (in category 'accessing') -----
- ----- Method: MCDependentsWrapper>>item (in category 'as yet unclassified') -----
item
^item!

Item was changed:
+ ----- Method: MCDictionaryRepository>>= (in category 'testing') -----
- ----- Method: MCDictionaryRepository>>= (in category 'as yet unclassified') -----
= other
^ self == other!

Item was changed:
+ ----- Method: MCDictionaryRepository>>allVersionInfos (in category 'accessing') -----
- ----- Method: MCDictionaryRepository>>allVersionInfos (in category 'as yet unclassified') -----
allVersionInfos
^ dict values collect: [:ea | ea info]!

Item was changed:
+ ----- Method: MCDictionaryRepository>>basicStoreVersion: (in category 'private') -----
- ----- Method: MCDictionaryRepository>>basicStoreVersion: (in category 'as yet unclassified') -----
basicStoreVersion: aVersion
dict at: aVersion info put: aVersion!

Item was changed:
+ ----- Method: MCDictionaryRepository>>closestAncestorVersionFor:ifNone: (in category 'accessing') -----
- ----- Method: MCDictionaryRepository>>closestAncestorVersionFor:ifNone: (in category 'as yet unclassified') -----
closestAncestorVersionFor: anAncestry ifNone: errorBlock
| info |
info := anAncestry breadthFirstAncestors
detect: [:ea | self includesVersionWithInfo: ea]
ifNone: [^ errorBlock value].
^ self versionWithInfo: info!

Item was changed:
+ ----- Method: MCDictionaryRepository>>description (in category 'accessing') -----
- ----- Method: MCDictionaryRepository>>description (in category 'as yet unclassified') -----
description

^ description ifNil: ['cache']!

Item was changed:
+ ----- Method: MCDictionaryRepository>>description: (in category 'accessing') -----
- ----- Method: MCDictionaryRepository>>description: (in category 'as yet unclassified') -----
description: aString

description := aString !

Item was changed:
+ ----- Method: MCDictionaryRepository>>dictionary (in category 'accessing') -----
- ----- Method: MCDictionaryRepository>>dictionary (in category 'as yet unclassified') -----
dictionary

^ dict!

Item was changed:
+ ----- Method: MCDictionaryRepository>>dictionary: (in category 'accessing') -----
- ----- Method: MCDictionaryRepository>>dictionary: (in category 'as yet unclassified') -----
dictionary: aDictionary

dict := aDictionary!

Item was changed:
+ ----- Method: MCDictionaryRepository>>includesVersionNamed: (in category 'versions') -----
- ----- Method: MCDictionaryRepository>>includesVersionNamed: (in category 'as yet unclassified') -----
includesVersionNamed: aString
| mcVersionName |
mcVersionName := aString asMCVersionName.
^ dict anySatisfy:
[ : ea | ea info versionName = mcVersionName ]!

Item was changed:
+ ----- Method: MCDictionaryRepository>>includesVersionWithInfo: (in category 'testing') -----
- ----- Method: MCDictionaryRepository>>includesVersionWithInfo: (in category 'as yet unclassified') -----
includesVersionWithInfo: aVersionInfo
^ dict includesKey: aVersionInfo!

Item was changed:
+ ----- Method: MCDictionaryRepository>>initialize (in category 'initialize-release') -----
- ----- Method: MCDictionaryRepository>>initialize (in category 'as yet unclassified') -----
initialize

dict := Dictionary new.
!

Item was changed:
+ ----- Method: MCDictionaryRepository>>morphicOpen: (in category 'user interface') -----
- ----- Method: MCDictionaryRepository>>morphicOpen: (in category 'as yet unclassified') -----
morphicOpen: aWorkingCopy
| names index infos |
infos := self sortedVersionInfos.
infos isEmpty ifTrue: [^ self inform: 'No versions'].
names := infos collect: [:ea | ea name].
index := UIManager default chooseFrom: names title: 'Open version:'.
index = 0 ifFalse: [(self versionWithInfo: (infos at: index)) open]!

Item was changed:
+ ----- Method: MCDictionaryRepository>>sortedVersionInfos (in category 'accessing') -----
- ----- Method: MCDictionaryRepository>>sortedVersionInfos (in category 'as yet unclassified') -----
sortedVersionInfos
| sorter |
sorter := MCVersionSorter new.
self allVersionInfos do: [:ea | sorter addVersionInfo: ea].
^ sorter sortedVersionInfos
!

Item was changed:
+ ----- Method: MCDictionaryRepository>>versionWithInfo:ifAbsent: (in category 'versions') -----
- ----- Method: MCDictionaryRepository>>versionWithInfo:ifAbsent: (in category 'as yet unclassified') -----
versionWithInfo: aVersionInfo ifAbsent: errorBlock
^ dict at: aVersionInfo ifAbsent: errorBlock!

Item was changed:
+ ----- Method: MCDiffyVersion>>baseInfo (in category 'accessing') -----
- ----- Method: MCDiffyVersion>>baseInfo (in category 'as yet unclassified') -----
baseInfo
^ base!

Item was changed:
+ ----- Method: MCDiffyVersion>>baseSnapshot (in category 'accessing') -----
- ----- Method: MCDiffyVersion>>baseSnapshot (in category 'as yet unclassified') -----
baseSnapshot
| baseVersion |
baseVersion := self workingCopy repositoryGroup versionWithInfo: base.
baseVersion ifNil: [Error signal: 'Missing snapshot: ', self baseInfo name].
^ baseVersion snapshot!

Item was changed:
+ ----- Method: MCDiffyVersion>>canOptimizeLoading (in category 'testing') -----
- ----- Method: MCDiffyVersion>>canOptimizeLoading (in category 'as yet unclassified') -----
canOptimizeLoading
"Answer wether I can provide a patch for the working copy without the usual diff pass"
^ package hasWorkingCopy
and: [package workingCopy modified not
and: [package workingCopy ancestors includes: self baseInfo]]!

Item was changed:
+ ----- Method: MCDiffyVersion>>fileName (in category 'accessing') -----
- ----- Method: MCDiffyVersion>>fileName (in category 'as yet unclassified') -----
fileName
^ ((self class
nameForVer: info name
base: base name) , '.' , self writerClass extension) asMCVersionName!

Item was changed:
+ ----- Method: MCDiffyVersion>>fileOutOn: (in category 'actions') -----
- ----- Method: MCDiffyVersion>>fileOutOn: (in category 'as yet unclassified') -----
fileOutOn: aStream
"The whole point of diffy versions is to not store the full snapshot, so ensure we don't."
snapshot:=nil.
super fileOutOn: aStream!

Item was changed:
+ ----- Method: MCDiffyVersion>>initializeWithPackage:info:dependencies:baseInfo:patch: (in category 'initialize-release') -----
- ----- Method: MCDiffyVersion>>initializeWithPackage:info:dependencies:baseInfo:patch: (in category 'as yet unclassified') -----
initializeWithPackage: aPackage info: aVersionInfo dependencies: aCollection baseInfo: baseVersionInfo patch: aPatch
patch := aPatch.
base := baseVersionInfo.
super initializeWithPackage: aPackage info: aVersionInfo snapshot: nil dependencies: aCollection.
!

Item was changed:
+ ----- Method: MCDiffyVersion>>isDiffy (in category 'testing') -----
- ----- Method: MCDiffyVersion>>isDiffy (in category 'as yet unclassified') -----
isDiffy
^ true!

Item was changed:
+ ----- Method: MCDiffyVersion>>patch (in category 'accessing') -----
- ----- Method: MCDiffyVersion>>patch (in category 'as yet unclassified') -----
patch
^ patch!

Item was changed:
+ ----- Method: MCDiffyVersion>>snapshot (in category 'accessing') -----
- ----- Method: MCDiffyVersion>>snapshot (in category 'as yet unclassified') -----
snapshot
^ snapshot ifNil: [snapshot := MCPatcher apply: patch to: self baseSnapshot]!

Item was changed:
+ ----- Method: MCDiffyVersion>>summary (in category 'accessing') -----
- ----- Method: MCDiffyVersion>>summary (in category 'as yet unclassified') -----
summary
^ '(Diff against ', self baseInfo name, ')', String cr, super summary!

Item was changed:
+ ----- Method: MCDiffyVersion>>writerClass (in category 'accessing') -----
- ----- Method: MCDiffyVersion>>writerClass (in category 'as yet unclassified') -----
writerClass
^ MCMcdWriter !

Item was changed:
+ ----- Method: MCDirectoryRepository>>description (in category 'user interface') -----
- ----- Method: MCDirectoryRepository>>description (in category 'accessing') -----
description
^ directory pathName!

Item was changed:
+ ----- Method: MCDirectoryRepository>>initialize (in category 'initialize-release') -----
- ----- Method: MCDirectoryRepository>>initialize (in category 'accessing') -----
initialize
directory := FileDirectory default!

Item was changed:
+ ----- Method: MCDirectoryRepository>>isValid (in category 'testing') -----
- ----- Method: MCDirectoryRepository>>isValid (in category 'accessing') -----
isValid
^directory exists!

Item was changed:
+ ----- Method: MCDirectoryRepository>>readStreamForFileNamed:do: (in category 'private') -----
- ----- Method: MCDirectoryRepository>>readStreamForFileNamed:do: (in category 'accessing') -----
readStreamForFileNamed: aString do: aBlock
| file val |
file := FileStream readOnlyFileNamed: (directory fullNameFor: aString).
val := aBlock value: file.
file close.
^ val!

Item was changed:
+ ----- Method: MCDirectoryRepository>>writeStreamForFileNamed:replace:do: (in category 'private') -----
- ----- Method: MCDirectoryRepository>>writeStreamForFileNamed:replace:do: (in category 'accessing') -----
writeStreamForFileNamed: aString replace: aBoolean do: aBlock
| file sel |
sel := aBoolean ifTrue: [#forceNewFileNamed:] ifFalse: [#newFileNamed:].
file := FileStream perform: sel with: (directory fullNameFor: aString).
aBlock value: file.
file close.!

Item was changed:
+ ----- Method: MCDoItParser class>>concreteSubclasses (in category 'accessing class hierarchy') -----
- ----- Method: MCDoItParser class>>concreteSubclasses (in category 'as yet unclassified') -----
concreteSubclasses
^ self allSubclasses reject: [:c | c isAbstract]!

Item was changed:
+ ----- Method: MCDoItParser class>>forDoit: (in category 'instance creation') -----
- ----- Method: MCDoItParser class>>forDoit: (in category 'as yet unclassified') -----
forDoit: aString
^ (self subclassForDoit: aString) ifNotNil: [:c | c new source: aString]!

Item was changed:
+ ----- Method: MCDoItParser class>>isAbstract (in category 'testing') -----
- ----- Method: MCDoItParser class>>isAbstract (in category 'as yet unclassified') -----
isAbstract
^ self pattern isNil!

Item was changed:
+ ----- Method: MCDoItParser class>>pattern (in category 'constants') -----
- ----- Method: MCDoItParser class>>pattern (in category 'as yet unclassified') -----
pattern
^ nil!

Item was changed:
+ ----- Method: MCDoItParser class>>subclassForDoit: (in category 'private') -----
- ----- Method: MCDoItParser class>>subclassForDoit: (in category 'as yet unclassified') -----
subclassForDoit: aString
^ self concreteSubclasses detect: [:ea | ea pattern match: aString] ifNone: []!

Item was changed:
+ ----- Method: MCDoItParser>>addDefinitionsTo: (in category 'evaluating') -----
- ----- Method: MCDoItParser>>addDefinitionsTo: (in category 'as yet unclassified') -----
addDefinitionsTo: aCollection
self subclassResponsibility !

Item was changed:
+ ----- Method: MCDoItParser>>source (in category 'accessing') -----
- ----- Method: MCDoItParser>>source (in category 'as yet unclassified') -----
source
^ source!

Item was changed:
+ ----- Method: MCDoItParser>>source: (in category 'accessing') -----
- ----- Method: MCDoItParser>>source: (in category 'as yet unclassified') -----
source: aString
source := aString!

Item was changed:
+ ----- Method: MCFileBasedRepository>>allPackageAndBranchNames (in category 'packages') -----
- ----- Method: MCFileBasedRepository>>allPackageAndBranchNames (in category 'overriding') -----
allPackageAndBranchNames
^ self validNames: #packageAndBranchName!

Item was changed:
+ ----- Method: MCFileBasedRepository>>allPackageNames (in category 'packages') -----
- ----- Method: MCFileBasedRepository>>allPackageNames (in category 'overriding') -----
allPackageNames
^ self validNames: #packageName!

Item was changed:
+ ----- Method: MCFileBasedRepository>>basicStoreVersion: (in category 'private') -----
- ----- Method: MCFileBasedRepository>>basicStoreVersion: (in category 'overriding') -----
basicStoreVersion: aMCVersionOrConfiguration
self
writeStreamForFileNamed: aMCVersionOrConfiguration fileName
do: [ : s | aMCVersionOrConfiguration fileOutOn: s ].
aMCVersionOrConfiguration isCacheable ifTrue:
[ cache ifNil: [ cache := Dictionary new ].
self resizeCache: cache.
cache
at: aMCVersionOrConfiguration fileName
put: aMCVersionOrConfiguration ]!

Item was changed:
+ ----- Method: MCFileBasedRepository>>closestAncestorVersionFor:ifNone: (in category 'accessing') -----
- ----- Method: MCFileBasedRepository>>closestAncestorVersionFor:ifNone: (in category 'overriding') -----
closestAncestorVersionFor: anAncestry ifNone: errorBlock
^ self cacheAllFileNamesDuring:
[super closestAncestorVersionFor: anAncestry ifNone: errorBlock]!

Item was changed:
+ ----- Method: MCFileBasedRepository>>morphicOpen: (in category 'user interface') -----
- ----- Method: MCFileBasedRepository>>morphicOpen: (in category 'overriding') -----
morphicOpen: aWorkingCopy
(MCFileRepositoryInspector repository: self workingCopy: aWorkingCopy)
show!

Item was changed:
+ ----- Method: MCFileBasedRepository>>notifyList (in category 'notifying') -----
- ----- Method: MCFileBasedRepository>>notifyList (in category 'overriding') -----
notifyList
(self allFileNames includes: 'notify') ifFalse: [^ #()].
^ self readStreamForFileNamed: 'notify' do:
[:s |
s upToEnd lines]!

Item was changed:
+ ----- Method: MCFileBasedRepository>>validNames: (in category 'private') -----
- ----- Method: MCFileBasedRepository>>validNames: (in category 'overriding') -----
validNames: selectorSymbol
| answer |
answer := Set new.
self allFileNamesOrCache do:
[ : each | | versionName |
versionName := each asMCVersionName.
versionName isValid ifTrue: [ answer add: (versionName perform: selectorSymbol) ] ].
^ answer!

Item was changed:
+ ----- Method: MCFilteredVersionSorter>>addVersionInfo: (in category 'accessing') -----
- ----- Method: MCFilteredVersionSorter>>addVersionInfo: (in category 'as yet unclassified') -----
addVersionInfo: aVersionInfo
(aVersionInfo hasAncestor: target)
ifTrue: [super addVersionInfo: aVersionInfo]
!

Item was changed:
+ ----- Method: MCFilteredVersionSorter>>processVersionInfo: (in category 'private') -----
- ----- Method: MCFilteredVersionSorter>>processVersionInfo: (in category 'as yet unclassified') -----
processVersionInfo: aVersionInfo
| success |
aVersionInfo = target ifTrue: [^ true].
(aVersionInfo hasAncestor: target) ifFalse: [^false].
self pushLayer.
success := (self knownAncestorsOf: aVersionInfo) anySatisfy:
[:ea | self processVersionInfo: ea].
self popLayer.
success ifTrue: [self addToCurrentLayer: aVersionInfo].
^ success !

Item was changed:
+ ----- Method: MCFilteredVersionSorter>>target: (in category 'accessing') -----
- ----- Method: MCFilteredVersionSorter>>target: (in category 'as yet unclassified') -----
target: aVersionInfo
target := aVersionInfo!

Item was changed:
+ ----- Method: MCFtpRepository class>>creationTemplate (in category 'configuring') -----
- ----- Method: MCFtpRepository class>>creationTemplate (in category 'as yet unclassified') -----
creationTemplate
^
'MCFtpRepository
host: ''modules.squeakfoundation.org''
directory: ''mc''
user: ''squeak''
password: ''squeak'''
!

Item was changed:
+ ----- Method: MCFtpRepository class>>description (in category 'configuring') -----
- ----- Method: MCFtpRepository class>>description (in category 'as yet unclassified') -----
description
^ 'FTP'!

Item was changed:
+ ----- Method: MCFtpRepository class>>fillInTheBlankRequest (in category 'configuring') -----
- ----- Method: MCFtpRepository class>>fillInTheBlankRequest (in category 'as yet unclassified') -----
fillInTheBlankRequest
^ 'FTP Repository:'

!

Item was changed:
+ ----- Method: MCFtpRepository class>>host:directory:user:password: (in category 'instance creation') -----
- ----- Method: MCFtpRepository class>>host:directory:user:password: (in category 'as yet unclassified') -----
host: host directory: directory user: user password: password
^ self new
host: host;
directory: directory;
user: user;
password: password!

Item was changed:
+ ----- Method: MCFtpRepository class>>morphicConfigure (in category 'configuring') -----
- ----- Method: MCFtpRepository class>>morphicConfigure (in category 'as yet unclassified') -----
morphicConfigure
^ self fillInTheBlankConfigure!

Item was changed:
+ ----- Method: MCFtpRepository class>>templateCreationSelector (in category 'constants') -----
- ----- Method: MCFtpRepository class>>templateCreationSelector (in category 'as yet unclassified') -----
templateCreationSelector
^ #host:directory:user:password: !

Item was changed:
+ ----- Method: MCFtpRepository>>clientDo: (in category 'private') -----
- ----- Method: MCFtpRepository>>clientDo: (in category 'as yet unclassified') -----
clientDo: aBlock
| client |
client := FTPClient openOnHostNamed: host.
client loginUser: user password: password.
directory isEmpty ifFalse: [client changeDirectoryTo: directory].
^ [aBlock value: client] ensure: [client close]!

Item was changed:
+ ----- Method: MCFtpRepository>>directory: (in category 'accessing') -----
- ----- Method: MCFtpRepository>>directory: (in category 'as yet unclassified') -----
directory: dirPath
directory := dirPath!

Item was changed:
+ ----- Method: MCFtpRepository>>host: (in category 'accessing') -----
- ----- Method: MCFtpRepository>>host: (in category 'as yet unclassified') -----
host: hostname
host := hostname!

Item was changed:
+ ----- Method: MCFtpRepository>>parseDirectoryListing: (in category 'protocol handling') -----
- ----- Method: MCFtpRepository>>parseDirectoryListing: (in category 'as yet unclassified') -----
parseDirectoryListing: aString
| stream files line tokens |
stream := aString readStream.
files := OrderedCollection new.
[stream atEnd] whileFalse:
[line := stream nextLine.
tokens := line findTokens: ' '.
tokens size > 2 ifTrue: [files add: tokens last asMCVersionName]].
^ files!

Item was changed:
+ ----- Method: MCFtpRepository>>password: (in category 'accessing') -----
- ----- Method: MCFtpRepository>>password: (in category 'as yet unclassified') -----
password: passwordString
password := passwordString!

Item was changed:
+ ----- Method: MCFtpRepository>>user: (in category 'accessing') -----
- ----- Method: MCFtpRepository>>user: (in category 'as yet unclassified') -----
user: userString
user := userString!

Item was changed:
+ ----- Method: MCGOODSRepository class>>creationTemplate (in category 'configuring') -----
- ----- Method: MCGOODSRepository class>>creationTemplate (in category 'as yet unclassified') -----
creationTemplate
^
'MCGOODSRepository
host: ''localhost''
port: 6100'!

Item was changed:
+ ----- Method: MCGOODSRepository class>>description (in category 'configuring') -----
- ----- Method: MCGOODSRepository class>>description (in category 'as yet unclassified') -----
description
^ 'GOODS'!

Item was changed:
+ ----- Method: MCGOODSRepository class>>fillInTheBlankRequest (in category 'configuring') -----
- ----- Method: MCGOODSRepository class>>fillInTheBlankRequest (in category 'as yet unclassified') -----
fillInTheBlankRequest
^ 'GOODS Repository:'!

Item was changed:
+ ----- Method: MCGOODSRepository class>>host:port: (in category 'instance creation') -----
- ----- Method: MCGOODSRepository class>>host:port: (in category 'as yet unclassified') -----
host: hostname port: portNumber
^ self new
host: hostname;
port: portNumber!

Item was changed:
+ ----- Method: MCGOODSRepository class>>morphicConfigure (in category 'configuring') -----
- ----- Method: MCGOODSRepository class>>morphicConfigure (in category 'as yet unclassified') -----
morphicConfigure
^ self fillInTheBlankConfigure!

Item was changed:
+ ----- Method: MCGOODSRepository>>basicStoreVersion: (in category 'private') -----
- ----- Method: MCGOODSRepository>>basicStoreVersion: (in category 'as yet unclassified') -----
basicStoreVersion: aVersion
self root at: aVersion info put: aVersion.
self db commit.!

Item was changed:
+ ----- Method: MCGOODSRepository>>db (in category 'private') -----
- ----- Method: MCGOODSRepository>>db (in category 'as yet unclassified') -----
db
(connection isNil or: [connection isConnected not]) ifTrue: [
connection := Smalltalk at: #KKDatabase ifPresent: [:cl |
cl onHost:hostname port: port
]
].
^ connection!

Item was changed:
+ ----- Method: MCGOODSRepository>>description (in category 'user interface') -----
- ----- Method: MCGOODSRepository>>description (in category 'as yet unclassified') -----
description
^ 'goods://', hostname asString, ':', port asString!

Item was changed:
+ ----- Method: MCGOODSRepository>>host: (in category 'accessing') -----
- ----- Method: MCGOODSRepository>>host: (in category 'as yet unclassified') -----
host: aString
hostname := aString!

Item was changed:
+ ----- Method: MCGOODSRepository>>includesVersionNamed: (in category 'versions') -----
- ----- Method: MCGOODSRepository>>includesVersionNamed: (in category 'as yet unclassified') -----
includesVersionNamed: aString
^ (self versionNamed: aString) notNil!

Item was changed:
+ ----- Method: MCGOODSRepository>>port: (in category 'accessing') -----
- ----- Method: MCGOODSRepository>>port: (in category 'as yet unclassified') -----
port: aNumber
port := aNumber!

Item was changed:
+ ----- Method: MCGOODSRepository>>root (in category 'accessing') -----
- ----- Method: MCGOODSRepository>>root (in category 'as yet unclassified') -----
root
self db root ifNil: [self db root: Dictionary new].
^ self db root!

Item was changed:
+ ----- Method: MCGOODSRepository>>versionNamed: (in category 'versions') -----
- ----- Method: MCGOODSRepository>>versionNamed: (in category 'as yet unclassified') -----
versionNamed: aString
| versionName |
versionName := aString asMCVersionName.
self root keysDo:
[ : each | each versionName = versionName ifTrue: [ ^ each ] ].
^ nil!

Item was changed:
+ ----- Method: MCGOODSRepository>>versionNamesForPackageNamed: (in category 'versions') -----
- ----- Method: MCGOODSRepository>>versionNamesForPackageNamed: (in category 'as yet unclassified') -----
versionNamesForPackageNamed: aString
^ Array streamContents:
[ : stream | self root keysDo:
[ : each | each versionName packageName = aString ifTrue: [ stream nextPut: each ] ] ]!

Item was changed:
+ ----- Method: MCGOODSRepository>>versionWithInfo:ifAbsent: (in category 'versions') -----
- ----- Method: MCGOODSRepository>>versionWithInfo:ifAbsent: (in category 'as yet unclassified') -----
versionWithInfo: aVersionInfo ifAbsent: errorBlock
^ self root at: aVersionInfo ifAbsent: errorBlock!

Item was changed:
+ ----- Method: MCHttpRepository>>allFileNames (in category 'private-files') -----
- ----- Method: MCHttpRepository>>allFileNames (in category 'overriding') -----
allFileNames

| index |
index := self displayProgress: 'Updating ', self description during: [
self httpGet: self locationWithTrailingSlash, '?C=M;O=D' arguments: nil ].
^index ifNotNil: [ self parseFileNamesFromStream: index ]!

Item was changed:
+ ----- Method: MCHttpRepository>>asCreationTemplate (in category 'accessing') -----
- ----- Method: MCHttpRepository>>asCreationTemplate (in category 'overriding') -----
asCreationTemplate
^self class creationTemplateLocation: location user: user password: password!

Item was changed:
+ ----- Method: MCHttpRepository>>description (in category 'user interface') -----
- ----- Method: MCHttpRepository>>description (in category 'overriding') -----
description
^ location!

Item was changed:
+ ----- Method: MCHttpRepository>>flushCache (in category 'private') -----
- ----- Method: MCHttpRepository>>flushCache (in category 'overriding') -----
flushCache
super flushCache.
readerCache := nil.!

Item was changed:
+ ----- Method: MCHttpRepository>>mcModel (in category '*monticello') -----
- ----- Method: MCHttpRepository>>mcModel (in category 'overriding') -----
mcModel
"Answer the object which can respond to #historyOf: and #originOf: or nil, if none."
^ self isIndexed ifTrue: [self]!

Item was changed:
+ ----- Method: MCHttpRepository>>refresh (in category 'accessing') -----
- ----- Method: MCHttpRepository>>refresh (in category 'overriding') -----
refresh
super refresh.
indexed := nil!

Item was changed:
+ ----- Method: MCInfoProxy class>>info:workingCopy:repository: (in category 'instance creation') -----
- ----- Method: MCInfoProxy class>>info:workingCopy:repository: (in category 'create') -----
info: aMCVersionInfo workingCopy: aMCWorkingCopy repository: aMCRepository
^ self new
setInfo: aMCVersionInfo
workingCopy: aMCWorkingCopy
repository: aMCRepository!

Item was changed:
+ ----- Method: MCInstanceVariableDefinition class>>type (in category 'accessing') -----
- ----- Method: MCInstanceVariableDefinition class>>type (in category 'as yet unclassified') -----
type
^ #instance!

Item was changed:
+ ----- Method: MCMcdReader class>>extension (in category 'accessing') -----
- ----- Method: MCMcdReader class>>extension (in category 'as yet unclassified') -----
extension
^ 'mcd'!

Item was changed:
+ ----- Method: MCMcdReader>>baseInfo (in category 'accessing') -----
- ----- Method: MCMcdReader>>baseInfo (in category 'as yet unclassified') -----
baseInfo
^ baseInfo ifNil: [self loadBaseInfo]!

Item was changed:
+ ----- Method: MCMcdReader>>basicVersion (in category 'accessing') -----
- ----- Method: MCMcdReader>>basicVersion (in category 'as yet unclassified') -----
basicVersion
^ MCDiffyVersion
package: self package
info: self info
dependencies: self dependencies
baseInfo: self baseInfo
patch: self patch!

Item was changed:
+ ----- Method: MCMcdReader>>buildPatchFrom:to: (in category 'private-loading') -----
- ----- Method: MCMcdReader>>buildPatchFrom:to: (in category 'as yet unclassified') -----
buildPatchFrom: oldDefinitions to: newDefinitions
^ MCPatch
fromBase: (MCSnapshot fromDefinitions: oldDefinitions)
target: (MCSnapshot fromDefinitions: newDefinitions)!

Item was changed:
+ ----- Method: MCMcdReader>>loadBaseInfo (in category 'loading') -----
- ----- Method: MCMcdReader>>loadBaseInfo (in category 'as yet unclassified') -----
loadBaseInfo
^ baseInfo := self extractInfoFrom: (self parseMember: 'base')!

Item was changed:
+ ----- Method: MCMcdReader>>loadPatch (in category 'loading') -----
- ----- Method: MCMcdReader>>loadPatch (in category 'as yet unclassified') -----
loadPatch
| old new |
(self zip memberNamed: 'patch.bin') ifNotNil:
[:m | [^ patch := (DataStream on: m contentStream) next ]
on: Error do: [:fallThrough ]].
definitions := OrderedCollection new.
(self zip membersMatching: 'old/*')
do: [:m | self extractDefinitionsFrom: m].
old := definitions asArray.
definitions := OrderedCollection new.
(self zip membersMatching: 'new/*')
do: [:m | self extractDefinitionsFrom: m].
new := definitions asArray.
^ patch := self buildPatchFrom: old to: new.
!

Item was changed:
+ ----- Method: MCMcdReader>>patch (in category 'accessing') -----
- ----- Method: MCMcdReader>>patch (in category 'as yet unclassified') -----
patch
^ patch ifNil: [self loadPatch]!

Item was changed:
+ ----- Method: MCMcdWriter class>>readerClass (in category 'accessing') -----
- ----- Method: MCMcdWriter class>>readerClass (in category 'as yet unclassified') -----
readerClass
^ MCMcdReader!

Item was changed:
+ ----- Method: MCMczReader>>associate: (in category 'utilities') -----
- ----- Method: MCMczReader>>associate: (in category 'as yet unclassified') -----
associate: tokens
| result |
result := Dictionary new.
tokens pairsDo: [:key :value |
result at: key put: (value isString
ifTrue: [value]
ifFalse: [value collect: [:ea | self associate: ea]])].
^ result!

Item was changed:
+ ----- Method: MCMczReader>>extractDefinitionsFrom: (in category 'private-loading') -----
- ----- Method: MCMczReader>>extractDefinitionsFrom: (in category 'as yet unclassified') -----
extractDefinitionsFrom: member
| reader |
(MCSnapshotReader readerClassForFileNamed: member fileName)
ifNotNil: [:rc |
reader := rc on: (self contentsForMember: member) readStream.
definitions addAll: reader definitions]
!

Item was changed:
+ ----- Method: MCMczReader>>extractDependencyFrom: (in category 'private-loading') -----
- ----- Method: MCMczReader>>extractDependencyFrom: (in category 'as yet unclassified') -----
extractDependencyFrom: zipMember
^ MCVersionDependency
package: (MCPackage named: (zipMember fileName copyAfterLast: $/))
info: (self extractInfoFrom: (self parseMember: zipMember))!

Item was changed:
+ ----- Method: MCMczReader>>extractInfoFrom: (in category 'private-loading') -----
- ----- Method: MCMczReader>>extractInfoFrom: (in category 'as yet unclassified') -----
extractInfoFrom: dict
^MCWorkingCopy infoFromDictionary: dict cache: self infoCache!

Item was changed:
+ ----- Method: MCMczReader>>infoCache (in category 'accessing') -----
- ----- Method: MCMczReader>>infoCache (in category 'as yet unclassified') -----
infoCache
^ infoCache ifNil: [infoCache := Dictionary new]!

Item was changed:
+ ----- Method: MCMczReader>>parseMember: (in category 'utilities') -----
- ----- Method: MCMczReader>>parseMember: (in category 'as yet unclassified') -----
parseMember: memberOrName
| member contents tokens |
member := self zip member: memberOrName.
contents := self contentsForMember: member.
tokens := (self scanner scanTokens: contents) first.
^ self associate: tokens!

Item was changed:
+ ----- Method: MCMczReader>>scanner (in category 'constants') -----
- ----- Method: MCMczReader>>scanner (in category 'as yet unclassified') -----
scanner
^ MCScanner!

Item was changed:
+ ----- Method: MCMczReader>>zip (in category 'accessing') -----
- ----- Method: MCMczReader>>zip (in category 'as yet unclassified') -----
zip
zip ifNil:
[zip := ZipArchive new.
zip readFrom: stream].
^ zip!

Item was changed:
+ ----- Method: MCMczWriter class>>fileOut:on: (in category 'fileIn/out') -----
- ----- Method: MCMczWriter class>>fileOut:on: (in category 'as yet unclassified') -----
fileOut: aVersion on: aStream
| inst |
inst := self on: aStream.
inst writeVersion: aVersion.
inst flush.

!

Item was changed:
+ ----- Method: MCMczWriter class>>new (in category 'instance creation') -----
- ----- Method: MCMczWriter class>>new (in category 'as yet unclassified') -----
new
^ self basicNew initialize!

Item was changed:
+ ----- Method: MCMczWriter class>>readerClass (in category 'accessing') -----
- ----- Method: MCMczWriter class>>readerClass (in category 'as yet unclassified') -----
readerClass
^ MCMczReader!

Item was changed:
+ ----- Method: MCMergeBrowser class>>resolveConflictsInMerger: (in category 'instance creation') -----
- ----- Method: MCMergeBrowser class>>resolveConflictsInMerger: (in category 'as yet unclassified') -----
resolveConflictsInMerger: aMerger
| inst |
inst := self new merger: aMerger.
^ inst showModally ifNil: [false]!

Item was changed:
+ ----- Method: MCMergeBrowser>>buttonSpecs (in category 'ui') -----
- ----- Method: MCMergeBrowser>>buttonSpecs (in category 'as yet unclassified') -----
buttonSpecs
^ #((Merge merge 'Proceed with the merge' canMerge)
(Cancel cancel 'Cancel the merge')
('All Newer' chooseAllNewerConflicts 'Choose all newer conflict versions')
('All Older' chooseAllOlderConflicts 'Choose all older conflict versions')
('Rest Reject' chooseAllUnchosenLocal 'Choose local versions of all remaining conflicts')
('Rest Accept' chooseAllUnchosenRemote 'Choose remote versions of all remaining conflicts')
('Accept same source' chooseAllSameAST 'Choose all local conflicting versions that have essentially the same code')
)!

Item was changed:
+ ----- Method: MCMergeBrowser>>canMerge (in category 'testing') -----
- ----- Method: MCMergeBrowser>>canMerge (in category 'as yet unclassified') -----
canMerge
^ merger isMerged!

Item was changed:
+ ----- Method: MCMergeBrowser>>cancel (in category 'actions') -----
- ----- Method: MCMergeBrowser>>cancel (in category 'as yet unclassified') -----
cancel
self answer: false!

Item was changed:
+ ----- Method: MCMergeBrowser>>chooseAllNewerConflicts (in category 'actions') -----
- ----- Method: MCMergeBrowser>>chooseAllNewerConflicts (in category 'as yet unclassified') -----
chooseAllNewerConflicts
conflicts do: [ :ea | ea chooseNewer ].
self changed: #text; changed: #list; changed: #canMerge.!

Item was changed:
+ ----- Method: MCMergeBrowser>>chooseAllOlderConflicts (in category 'actions') -----
- ----- Method: MCMergeBrowser>>chooseAllOlderConflicts (in category 'as yet unclassified') -----
chooseAllOlderConflicts
conflicts do: [ :ea | ea chooseOlder ].
self changed: #text; changed: #list; changed: #canMerge.!

Item was changed:
+ ----- Method: MCMergeBrowser>>chooseAllSameAST (in category 'actions') -----
- ----- Method: MCMergeBrowser>>chooseAllSameAST (in category 'as yet unclassified') -----
chooseAllSameAST
conflicts do: [ :ea |
ea chooseSameAST ].
self changed: #text; changed: #list; changed: #canMerge.!

Item was changed:
+ ----- Method: MCMergeBrowser>>chooseAllUnchosenLocal (in category 'actions') -----
- ----- Method: MCMergeBrowser>>chooseAllUnchosenLocal (in category 'as yet unclassified') -----
chooseAllUnchosenLocal
conflicts do: [ :ea | ea isResolved ifFalse: [ ea chooseLocal ] ].
self changed: #text; changed: #list; changed: #canMerge.!

Item was changed:
+ ----- Method: MCMergeBrowser>>chooseAllUnchosenRemote (in category 'actions') -----
- ----- Method: MCMergeBrowser>>chooseAllUnchosenRemote (in category 'as yet unclassified') -----
chooseAllUnchosenRemote
conflicts do: [ :ea | ea isResolved ifFalse: [ ea chooseRemote ] ].
self changed: #text; changed: #list; changed: #canMerge.!

Item was changed:
+ ----- Method: MCMergeBrowser>>chooseLocal (in category 'actions') -----
- ----- Method: MCMergeBrowser>>chooseLocal (in category 'as yet unclassified') -----
chooseLocal
self conflictSelectionDo:
[selection chooseLocal.
self changed: #text; changed: #list; changed: #canMerge].
self selectNextUnresolvedConflict!

Item was changed:
+ ----- Method: MCMergeBrowser>>chooseRemote (in category 'actions') -----
- ----- Method: MCMergeBrowser>>chooseRemote (in category 'as yet unclassified') -----
chooseRemote
self conflictSelectionDo:
[selection chooseRemote.
self changed: #text; changed: #list; changed: #canMerge].
self selectNextUnresolvedConflict!

Item was changed:
+ ----- Method: MCMergeBrowser>>clearChoice (in category 'actions') -----
- ----- Method: MCMergeBrowser>>clearChoice (in category 'as yet unclassified') -----
clearChoice
self conflictSelectionDo:
[selection clearChoice.
self changed: #text; changed: #list; changed: #canMerge]!

Item was changed:
+ ----- Method: MCMergeBrowser>>conflictSelectionDo: (in category 'private-actions') -----
- ----- Method: MCMergeBrowser>>conflictSelectionDo: (in category 'as yet unclassified') -----
conflictSelectionDo: aBlock
self selectionIsConflicted
ifTrue: aBlock!

Item was changed:
+ ----- Method: MCMergeBrowser>>defaultLabel (in category 'ui') -----
- ----- Method: MCMergeBrowser>>defaultLabel (in category 'as yet unclassified') -----
defaultLabel
^ 'Merge Browser'!

Item was changed:
+ ----- Method: MCMergeBrowser>>getConflictMenu: (in category 'menus') -----
- ----- Method: MCMergeBrowser>>getConflictMenu: (in category 'as yet unclassified') -----
getConflictMenu: aMenu
selection remoteChosen
ifTrue: [aMenu add: 'undo keep change' target: self selector: #clearChoice]
ifFalse: [aMenu add: 'keep change' target: self selector: #chooseRemote].
selection localChosen
ifTrue: [aMenu add: 'undo reject change' target: self selector: #clearChoice]
ifFalse: [aMenu add: 'reject change' target: self selector: #chooseLocal].
^ aMenu!

Item was changed:
+ ----- Method: MCMergeBrowser>>getMenu: (in category 'morphic ui') -----
- ----- Method: MCMergeBrowser>>getMenu: (in category 'as yet unclassified') -----
getMenu: aMenu
selection ifNil: [^ aMenu].
^ self selectionIsConflicted
ifTrue: [self getConflictMenu: aMenu]
ifFalse: [self getOperationMenu: aMenu]!

Item was changed:
+ ----- Method: MCMergeBrowser>>getOperationMenu: (in category 'menus') -----
- ----- Method: MCMergeBrowser>>getOperationMenu: (in category 'as yet unclassified') -----
getOperationMenu: aMenu
^ aMenu!

Item was changed:
+ ----- Method: MCMergeBrowser>>innerButtonRow (in category 'private-ui') -----
- ----- Method: MCMergeBrowser>>innerButtonRow (in category 'as yet unclassified') -----
innerButtonRow
^ self buttonRow: self innerButtonSpecs!

Item was changed:
+ ----- Method: MCMergeBrowser>>innerButtonSpecs (in category 'private-ui') -----
- ----- Method: MCMergeBrowser>>innerButtonSpecs (in category 'as yet unclassified') -----
innerButtonSpecs
^
#((Accept chooseRemote 'Accept the selected incoming change. Overwrites local code.' )
(Reject chooseLocal 'Reject the selected incoming change. Retains local code.' ))!

Item was changed:
+ ----- Method: MCMergeBrowser>>items (in category 'accessing') -----
- ----- Method: MCMergeBrowser>>items (in category 'as yet unclassified') -----
items
^ conflicts, super items!

Item was changed:
+ ----- Method: MCMergeBrowser>>merge (in category 'actions') -----
- ----- Method: MCMergeBrowser>>merge (in category 'as yet unclassified') -----
merge
merger isMerged
ifFalse: [self inform: 'You must resolve all the conflicts first']
ifTrue: [self answer: true] !

Item was changed:
+ ----- Method: MCMergeBrowser>>merger: (in category 'accessing') -----
- ----- Method: MCMergeBrowser>>merger: (in category 'as yet unclassified') -----
merger: aMerger
merger := aMerger.
items := aMerger operations sorted.
conflicts := aMerger conflicts sort: [:a :b | a operation <= b operation].!

Item was changed:
+ ----- Method: MCMergeBrowser>>methodListKey:from: (in category 'menus') -----
- ----- Method: MCMergeBrowser>>methodListKey:from: (in category 'as yet unclassified') -----
methodListKey: aKeystroke from: aListMorph
aKeystroke caseOf: {
[$k] -> [self chooseRemote].
[$r] -> [self chooseLocal]}
otherwise: [super methodListKey: aKeystroke from: aListMorph ]!

Item was changed:
+ ----- Method: MCMergeBrowser>>selectNextUnresolvedConflict (in category 'actions') -----
- ----- Method: MCMergeBrowser>>selectNextUnresolvedConflict (in category 'as yet unclassified') -----
selectNextUnresolvedConflict
"Try and select the next unresolved conflict starting at current selection in the list, wrapping at beginning.
If there is no more unresolved conflict, then simply move to next non conflict item in the list.
This method makes assumption that conflicts are always sorted before non conflicts items."
(self findListMorph: #list)
ifNotNil:
[:aMorph |
| currentIndex nextUnresolvedIndex |
currentIndex := aMorph getCurrentSelectionIndex min: conflicts size.
nextUnresolvedIndex := (currentIndex + 1 to: currentIndex + conflicts size - 1)
detect:
[:i |
| nextItem |
((nextItem := conflicts atWrap: i) isKindOf: MCConflict)
and: [nextItem isResolved not]]
ifNone: [0].
nextUnresolvedIndex = 0
ifTrue: [items size > 1 ifTrue: [self selection: (aMorph getCurrentSelectionIndex max: conflicts size) - conflicts size \\ items size + conflicts size + 1]]
ifFalse: [self selection: nextUnresolvedIndex - 1 \\ conflicts size + 1].].!

Item was changed:
+ ----- Method: MCMergeBrowser>>selectionIsConflicted (in category 'testing') -----
- ----- Method: MCMergeBrowser>>selectionIsConflicted (in category 'as yet unclassified') -----
selectionIsConflicted
^ selection isKindOf: MCConflict!

Item was changed:
+ ----- Method: MCMergeBrowser>>widgetSpecs (in category 'ui') -----
- ----- Method: MCMergeBrowser>>widgetSpecs (in category 'as yet unclassified') -----
widgetSpecs
Preferences annotationPanes ifFalse: [ ^#(
((buttonRow) (0 0 1 0) (0 0 0 defaultButtonPaneHeight))
((listMorph:selection:menu:keystroke: list selection methodListMenu: methodListKey:from:) (0 0 1 0.4) (0 defaultButtonPaneHeight 0 0))
((innerButtonRow) (0 0.4 1 0.4) (0 0 0 defaultButtonPaneHeight))
((textMorph: text) (0 0.4 1 1) (0 defaultButtonPaneHeight 0 0))
)].

^ {
#((buttonRow) (0 0 1 0) (0 0 0 defaultButtonPaneHeight)).
#((listMorph:selection:menu:keystroke: list selection methodListMenu: methodListKey:from:) (0 0 1 0.4) (0 defaultButtonPaneHeight 0 0)).
#((innerButtonRow) (0 0.4 1 0.4) (0 0 0 defaultButtonPaneHeight)).
{ #(textMorph: annotations). #(0 0.4 1 0.4). { 0. self defaultButtonPaneHeight. 0. self defaultButtonPaneHeight+self defaultAnnotationPaneHeight. }}.
{ #(textMorph: text). #(0 0.4 1 1). { 0. self defaultButtonPaneHeight+self defaultAnnotationPaneHeight. 0. 0.}}
}!

Item was changed:
+ ----- Method: MCMergeRecord class>>version: (in category 'instance creation') -----
- ----- Method: MCMergeRecord class>>version: (in category 'as yet unclassified') -----
version: aVersion
^ self basicNew initializeWithVersion: aVersion!

Item was changed:
+ ----- Method: MCMergeRecord>>ancestorInfo (in category 'accessing') -----
- ----- Method: MCMergeRecord>>ancestorInfo (in category 'as yet unclassified') -----
ancestorInfo
^ ancestorInfo ifNil: [ancestorInfo := version info commonAncestorWith: version workingCopy ancestry]!

Item was changed:
+ ----- Method: MCMergeRecord>>ancestorSnapshot (in category 'accessing') -----
- ----- Method: MCMergeRecord>>ancestorSnapshot (in category 'as yet unclassified') -----
ancestorSnapshot
^ ancestorSnapshot ifNil: [ancestorSnapshot := version workingCopy findSnapshotWithVersionInfo: self ancestorInfo]!

Item was changed:
+ ----- Method: MCMergeRecord>>imageIsClean (in category 'testing') -----
- ----- Method: MCMergeRecord>>imageIsClean (in category 'as yet unclassified') -----
imageIsClean
| ancestors |
ancestors := version workingCopy ancestors.
^ ancestors size = 1
and: [ancestors first = self ancestorInfo
and: [self imagePatch isEmpty]]!

Item was changed:
+ ----- Method: MCMergeRecord>>imagePatch (in category 'accessing') -----
- ----- Method: MCMergeRecord>>imagePatch (in category 'as yet unclassified') -----
imagePatch
^ imagePatch ifNil: [imagePatch := self packageSnapshot patchRelativeToBase: self ancestorSnapshot]!

Item was changed:
+ ----- Method: MCMergeRecord>>initializeWithVersion: (in category 'initialize-release') -----
- ----- Method: MCMergeRecord>>initializeWithVersion: (in category 'as yet unclassified') -----
initializeWithVersion: aVersion
version := aVersion!

Item was changed:
+ ----- Method: MCMergeRecord>>isAncestorMerge (in category 'testing') -----
- ----- Method: MCMergeRecord>>isAncestorMerge (in category 'as yet unclassified') -----
isAncestorMerge
^ version workingCopy ancestry hasAncestor: version info!

Item was changed:
+ ----- Method: MCMergeRecord>>mergePatch (in category 'accessing') -----
- ----- Method: MCMergeRecord>>mergePatch (in category 'as yet unclassified') -----
mergePatch
^ mergePatch ifNil: [mergePatch := version snapshot patchRelativeToBase: self ancestorSnapshot]!

Item was changed:
+ ----- Method: MCMergeRecord>>packageSnapshot (in category 'accessing') -----
- ----- Method: MCMergeRecord>>packageSnapshot (in category 'as yet unclassified') -----
packageSnapshot
^ packageSnapshot ifNil: [packageSnapshot := version package snapshot]!

Item was changed:
+ ----- Method: MCMergeRecord>>updateWorkingCopy (in category 'operations') -----
- ----- Method: MCMergeRecord>>updateWorkingCopy (in category 'as yet unclassified') -----
updateWorkingCopy
self isAncestorMerge ifFalse:
[self imageIsClean
ifTrue: [version workingCopy loaded: version]
ifFalse: [version workingCopy merged: version]]!

Item was changed:
+ ----- Method: MCMergeRecord>>version (in category 'accessing') -----
- ----- Method: MCMergeRecord>>version (in category 'as yet unclassified') -----
version
^ version!

Item was changed:
+ ----- Method: MCMerger>>addConflictWithOperation: (in category 'accessing') -----
- ----- Method: MCMerger>>addConflictWithOperation: (in category 'as yet unclassified') -----
addConflictWithOperation: anOperation
self conflicts add: (MCConflict operation: anOperation)!

Item was changed:
+ ----- Method: MCMerger>>applyTo: (in category 'applying') -----
- ----- Method: MCMerger>>applyTo: (in category 'as yet unclassified') -----
applyTo: anObject
self isMerged ifFalse: [self error: 'You must resolve all the conflicts first'].
conflicts do: [:ea | ea applyTo: anObject]!

Item was changed:
+ ----- Method: MCMerger>>conflicts (in category 'accessing') -----
- ----- Method: MCMerger>>conflicts (in category 'as yet unclassified') -----
conflicts
^ conflicts ifNil: [conflicts := OrderedCollection new]!

Item was changed:
+ ----- Method: MCMerger>>isMerged (in category 'testing') -----
- ----- Method: MCMerger>>isMerged (in category 'as yet unclassified') -----
isMerged
^ self conflicts allSatisfy: [:ea | ea isResolved]!

Item was changed:
+ ----- Method: MCMerger>>load (in category 'loading') -----
- ----- Method: MCMerger>>load (in category 'as yet unclassified') -----
load
| loader |
loader := MCPackageLoader new.
loader provisions addAll: self provisions.
self applyTo: loader.
loader load!

Item was changed:
+ ----- Method: MCMerger>>loadWithNameLike: (in category 'loading') -----
- ----- Method: MCMerger>>loadWithNameLike: (in category 'as yet unclassified') -----
loadWithNameLike: baseName
| loader |
loader := MCPackageLoader new.
loader provisions addAll: self provisions.
self applyTo: loader.
loader loadWithNameLike: baseName!

Item was changed:
+ ----- Method: MCMerger>>mergedSnapshot (in category 'accessing') -----
- ----- Method: MCMerger>>mergedSnapshot (in category 'as yet unclassified') -----
mergedSnapshot
^ MCPatcher apply: self to: self baseSnapshot!

Item was changed:
+ ----- Method: MCMerger>>operations (in category 'accessing') -----
- ----- Method: MCMerger>>operations (in category 'as yet unclassified') -----
operations
^ #()!

Item was changed:
+ ----- Method: MCMerger>>provisions (in category 'accessing') -----
- ----- Method: MCMerger>>provisions (in category 'as yet unclassified') -----
provisions
^ #()!

Item was changed:
+ ----- Method: MCModification class>>of:to: (in category 'instance creation') -----
- ----- Method: MCModification class>>of:to: (in category 'as yet unclassified') -----
of: base to: target
^ self new initializeWithBase: base target: target!

Item was changed:
+ ----- Method: MCModification>>= (in category 'comparing') -----
- ----- Method: MCModification>>= (in category 'as yet unclassified') -----
= other
^ other isModification
and: [obsoletion = other obsoletion
and: [modification = other modification]]!

Item was changed:
+ ----- Method: MCModification>>applyTo: (in category 'applying') -----
- ----- Method: MCModification>>applyTo: (in category 'accessing') -----
applyTo: anObject
anObject modifyDefinition: obsoletion to: modification!

Item was changed:
+ ----- Method: MCModification>>hash (in category 'comparing') -----
- ----- Method: MCModification>>hash (in category 'as yet unclassified') -----
hash
^ obsoletion hash bitXor: modification hash!

Item was changed:
+ ----- Method: MCModification>>inverse (in category 'accessing') -----
- ----- Method: MCModification>>inverse (in category 'as yet unclassified') -----
inverse
^ MCModification of: modification to: obsoletion!

Item was changed:
+ ----- Method: MCModification>>isClassPatch (in category 'testing') -----
- ----- Method: MCModification>>isClassPatch (in category 'as yet unclassified') -----
isClassPatch
^obsoletion isClassDefinition!

Item was changed:
+ ----- Method: MCModification>>isUnchangedMethod (in category 'testing') -----
- ----- Method: MCModification>>isUnchangedMethod (in category 'as yet unclassified') -----
isUnchangedMethod
"true if this is a modification of a method where only the timestamp changed"
^ obsoletion isMethodDefinition
and: [obsoletion source = modification source
and: [obsoletion category = modification category] ]!

Item was changed:
+ ----- Method: MCModification>>printAnnotations:on: (in category 'accessing') -----
- ----- Method: MCModification>>printAnnotations:on: (in category 'as yet unclassified') -----
printAnnotations: request on: aStream
aStream nextPutAll: 'old: '.
obsoletion printAnnotations: request on: aStream.
aStream cr.
aStream nextPutAll: 'new: '.
modification printAnnotations: request on: aStream.!

Item was changed:
+ ----- Method: MCOperationsBrowser class>>items: (in category 'instance creation') -----
- ----- Method: MCOperationsBrowser class>>items: (in category 'creation') -----
items: aCollection
^ self new
setItems: aCollection ;
yourself!

Item was changed:
+ ----- Method: MCOperationsList class>>operations: (in category 'instance creation') -----
- ----- Method: MCOperationsList class>>operations: (in category 'create') -----
operations: aCollection
^ self basicNew initializeWithOperations: aCollection!

Item was changed:
+ ----- Method: MCOrganizationDefinition class>>categories: (in category 'instance creation') -----
- ----- Method: MCOrganizationDefinition class>>categories: (in category 'as yet unclassified') -----
categories: anArray
^ self instanceLike: (self new categories: anArray)!

Item was changed:
+ ----- Method: MCPackageCache class>>new (in category 'instance creation') -----
- ----- Method: MCPackageCache class>>new (in category 'as yet unclassified') -----
new
^ self basicNew initialize!

Item was changed:
+ ----- Method: MCPackageCache>>initialize (in category 'initialize-release') -----
- ----- Method: MCPackageCache>>initialize (in category 'as yet unclassified') -----
initialize
sorter := MCVersionSorter new.
fileNames := Dictionary new.!

Item was changed:
+ ----- Method: MCPackageCache>>recordVersionInfo:forFileNamed: (in category 'recording') -----
- ----- Method: MCPackageCache>>recordVersionInfo:forFileNamed: (in category 'as yet unclassified') -----
recordVersionInfo: aVersionInfo forFileNamed: aString
Transcript cr; show: aString.
fileNames at: aVersionInfo put: aString.
sorter addVersionInfo: aVersionInfo!

Item was changed:
+ ----- Method: MCPackageCache>>versionInfos (in category 'accessing') -----
- ----- Method: MCPackageCache>>versionInfos (in category 'as yet unclassified') -----
versionInfos
^ sorter sortedVersionInfos !

Item was changed:
+ ----- Method: MCPackageLoader class>>installSnapshot: (in category 'loading') -----
- ----- Method: MCPackageLoader class>>installSnapshot: (in category 'as yet unclassified') -----
installSnapshot: aSnapshot
self new
installSnapshot: aSnapshot;
load!

Item was changed:
+ ----- Method: MCPackageLoader class>>new (in category 'instance creation') -----
- ----- Method: MCPackageLoader class>>new (in category 'as yet unclassified') -----
new
^ self basicNew initialize!

Item was changed:
+ ----- Method: MCPackageLoader class>>unloadPackage: (in category 'unloading') -----
- ----- Method: MCPackageLoader class>>unloadPackage: (in category 'as yet unclassified') -----
unloadPackage: aPackage
self new
unloadPackage: aPackage;
loadWithNameLike: aPackage name, '-unload'!

Item was changed:
+ ----- Method: MCPackageLoader class>>updatePackage:withSnapshot: (in category 'loading') -----
- ----- Method: MCPackageLoader class>>updatePackage:withSnapshot: (in category 'as yet unclassified') -----
updatePackage: aPackage withSnapshot: aSnapshot
self new
updatePackage: aPackage withSnapshot: aSnapshot;
load!

Item was changed:
+ ----- Method: MCPackageManager class>>allManagers (in category 'private') -----
- ----- Method: MCPackageManager class>>allManagers (in category 'as yet unclassified') -----
allManagers
^ self registry values!

Item was changed:
+ ----- Method: MCPackageManager class>>forPackage: (in category 'instance creation') -----
- ----- Method: MCPackageManager class>>forPackage: (in category 'as yet unclassified') -----
forPackage: aPackage
^ self registry at: aPackage ifAbsent:
[|mgr|
mgr := self new initializeWithPackage: aPackage.
self registry at: aPackage put: mgr.
self changed: #allManagers.
mgr]!

Item was changed:
+ ----- Method: MCPackageManager class>>forPackageNamed: (in category 'instance creation') -----
- ----- Method: MCPackageManager class>>forPackageNamed: (in category 'as yet unclassified') -----
forPackageNamed: aString
^ self registry detect:
[ : each | each packageName = aString ]!

Item was changed:
+ ----- Method: MCPackageManager class>>initialize (in category 'class initialization') -----
- ----- Method: MCPackageManager class>>initialize (in category 'as yet unclassified') -----
initialize
"Remove this later"
Smalltalk at: #SystemChangeNotifier ifPresent:[:cls|
(cls uniqueInstance) noMoreNotificationsFor: self.
].!

Item was changed:
+ ----- Method: MCPackageManager class>>registry (in category 'private') -----
- ----- Method: MCPackageManager class>>registry (in category 'as yet unclassified') -----
registry
^ registry ifNil: [registry := Dictionary new]!

Item was changed:
+ ----- Method: MCPatch class>>fromBase:target: (in category 'instance creation') -----
- ----- Method: MCPatch class>>fromBase:target: (in category 'create') -----
fromBase: baseSnapshot target: targetSnapshot
^ self new initializeWithBase: baseSnapshot target: targetSnapshot!

Item was changed:
+ ----- Method: MCPatchOperation>>isClassPatch (in category 'testing') -----
- ----- Method: MCPatchOperation>>isClassPatch (in category 'as yet unclassified') -----
isClassPatch
^false!

Item was changed:
+ ----- Method: MCPatchOperation>>isUnchangedMethod (in category 'testing') -----
- ----- Method: MCPatchOperation>>isUnchangedMethod (in category 'as yet unclassified') -----
isUnchangedMethod
"true if this is a modification of a method where only the timestamp changed"
^false!

Item was changed:
+ ----- Method: MCPatchOperation>>targetClass (in category 'accessing') -----
- ----- Method: MCPatchOperation>>targetClass (in category 'as yet unclassified') -----
targetClass
self subclassResponsibility.!

Item was changed:
+ ----- Method: MCPatcher class>>apply:to: (in category 'applying') -----
- ----- Method: MCPatcher class>>apply:to: (in category 'as yet unclassified') -----
apply: aPatch to: aSnapshot
| loader |
loader := self snapshot: aSnapshot.
aPatch applyTo: loader.
^ loader patchedSnapshot!

Item was changed:
+ ----- Method: MCPatcher class>>snapshot: (in category 'instance creation') -----
- ----- Method: MCPatcher class>>snapshot: (in category 'as yet unclassified') -----
snapshot: aSnapshot
^ self new initializeWithSnapshot: aSnapshot!

Item was changed:
+ ----- Method: MCPatcher>>addDefinition: (in category 'accessing') -----
- ----- Method: MCPatcher>>addDefinition: (in category 'as yet unclassified') -----
addDefinition: aDefinition
definitions add: aDefinition!

Item was changed:
+ ----- Method: MCPatcher>>initializeWithSnapshot: (in category 'initialize-release') -----
- ----- Method: MCPatcher>>initializeWithSnapshot: (in category 'as yet unclassified') -----
initializeWithSnapshot: aSnapshot
definitions := MCDefinitionIndex definitions: aSnapshot definitions!

Item was changed:
+ ----- Method: MCPatcher>>modifyDefinition:to: (in category 'applying') -----
- ----- Method: MCPatcher>>modifyDefinition:to: (in category 'as yet unclassified') -----
modifyDefinition: baseDefinition to: targetDefinition
self addDefinition: targetDefinition!

Item was changed:
+ ----- Method: MCPatcher>>patchedSnapshot (in category 'applying') -----
- ----- Method: MCPatcher>>patchedSnapshot (in category 'as yet unclassified') -----
patchedSnapshot
^ MCSnapshot fromDefinitions: definitions definitions!

Item was changed:
+ ----- Method: MCPatcher>>removeDefinition: (in category 'accessing') -----
- ----- Method: MCPatcher>>removeDefinition: (in category 'as yet unclassified') -----
removeDefinition: aDefinition
definitions remove: aDefinition!

Item was changed:
+ ----- Method: MCPoolImportDefinition class>>type (in category 'accessing') -----
- ----- Method: MCPoolImportDefinition class>>type (in category 'as yet unclassified') -----
type
^ #pool!

Item was changed:
+ ----- Method: MCPostscriptDefinition class>>scriptSelector (in category 'private - instance creation') -----
- ----- Method: MCPostscriptDefinition class>>scriptSelector (in category 'as yet unclassified') -----
scriptSelector
^ #postscript!

Item was changed:
+ ----- Method: MCPreambleDefinition class>>scriptSelector (in category 'private - instance creation') -----
- ----- Method: MCPreambleDefinition class>>scriptSelector (in category 'as yet unclassified') -----
scriptSelector
^ #preamble!

Item was changed:
+ ----- Method: MCRemoval class>>of: (in category 'instance creation') -----
- ----- Method: MCRemoval class>>of: (in category 'as yet unclassified') -----
of: aDefinition
^ self new intializeWithDefinition: aDefinition!

Item was changed:
+ ----- Method: MCRemoval>>= (in category 'comparing') -----
- ----- Method: MCRemoval>>= (in category 'as yet unclassified') -----
= other
^ other isRemoval and: [definition = other definition]!

Item was changed:
+ ----- Method: MCRemoval>>hash (in category 'comparing') -----
- ----- Method: MCRemoval>>hash (in category 'as yet unclassified') -----
hash
^ definition hash!

Item was changed:
+ ----- Method: MCRemoval>>inverse (in category 'accessing') -----
- ----- Method: MCRemoval>>inverse (in category 'as yet unclassified') -----
inverse
^ MCAddition of: definition!

Item was changed:
+ ----- Method: MCRemoval>>isClassPatch (in category 'testing') -----
- ----- Method: MCRemoval>>isClassPatch (in category 'as yet unclassified') -----
isClassPatch
^definition isClassDefinition!

Item was changed:
+ ----- Method: MCRemovalPostscriptDefinition class>>scriptSelector (in category 'private - instance creation') -----
- ----- Method: MCRemovalPostscriptDefinition class>>scriptSelector (in category 'as yet unclassified') -----
scriptSelector
^ #postscriptOfRemoval !

Item was changed:
+ ----- Method: MCRemovalPreambleDefinition class>>scriptSelector (in category 'private - instance creation') -----
- ----- Method: MCRemovalPreambleDefinition class>>scriptSelector (in category 'as yet unclassified') -----
scriptSelector
^ #preambleOfRemoval!

Item was changed:
+ ----- Method: MCRepository>>description (in category 'user interface') -----
- ----- Method: MCRepository>>description (in category 'accessing') -----
description
^ self class name!

Item was changed:
+ ----- Method: MCRepository>>morphicOpen (in category 'user interface') -----
- ----- Method: MCRepository>>morphicOpen (in category 'ui') -----
morphicOpen
self morphicOpen: nil!

Item was changed:
+ ----- Method: MCRepository>>morphicOpen: (in category 'user interface') -----
- ----- Method: MCRepository>>morphicOpen: (in category 'ui') -----
morphicOpen: aWorkingCopy
(MCRepositoryInspector repository: self workingCopy: aWorkingCopy) show!

Item was changed:
+ ----- Method: MCRepository>>notificationForVersion: (in category 'notifying') -----
- ----- Method: MCRepository>>notificationForVersion: (in category 'accessing') -----
notificationForVersion: aVersion
^ MCVersionNotification version: aVersion repository: self!

Item was changed:
+ ----- Method: MCRepository>>notifyList (in category 'notifying') -----
- ----- Method: MCRepository>>notifyList (in category 'accessing') -----
notifyList
^ #()!

Item was changed:
+ ----- Method: MCRepository>>openAndEditTemplateCopy (in category 'user interface') -----
- ----- Method: MCRepository>>openAndEditTemplateCopy (in category 'ui') -----
openAndEditTemplateCopy
^ self class fillInTheBlankConfigure: (self asCreationTemplate ifNil: [^nil])!

Item was changed:
+ ----- Method: MCRepository>>sendNotificationsForVersion: (in category 'notifying') -----
- ----- Method: MCRepository>>sendNotificationsForVersion: (in category 'accessing') -----
sendNotificationsForVersion: aVersion
| notification notifyList |
notifyList := self notifyList.
notifyList isEmpty ifFalse:
[notification := self notificationForVersion: aVersion.
notifyList do: [:ea | notification notify: ea]]!

Item was changed:
+ ----- Method: MCRepository>>storeVersion: (in category 'storing') -----
- ----- Method: MCRepository>>storeVersion: (in category 'accessing') -----
storeVersion: aMCVersionOrConfiguration
self basicStoreVersion: (self prepareVersionForStorage: aMCVersionOrConfiguration).
self sendNotificationsForVersion: aMCVersionOrConfiguration!

Item was changed:
+ ----- Method: MCRepository>>wasRemoved (in category 'user interface') -----
- ----- Method: MCRepository>>wasRemoved (in category 'ui') -----
wasRemoved
"Subclasses may override to, for example, disconnect a db session."!

Item was changed:
+ ----- Method: MCSMCacheRepository>>description (in category 'user interface') -----
- ----- Method: MCSMCacheRepository>>description (in category 'accessing') -----
description
^ smCache directory pathName!

Item was changed:
+ ----- Method: MCSMReleaseRepository class>>creationTemplate (in category 'configuring') -----
- ----- Method: MCSMReleaseRepository class>>creationTemplate (in category 'as yet unclassified') -----
creationTemplate
^
'MCSMReleaseRepository
package: ''mypackage''
user: ''squeak''
password: ''squeak'''
!

Item was changed:
+ ----- Method: MCSMReleaseRepository class>>description (in category 'configuring') -----
- ----- Method: MCSMReleaseRepository class>>description (in category 'as yet unclassified') -----
description
^ 'SqueakMap Release'!

Item was changed:
+ ----- Method: MCSMReleaseRepository class>>fillInTheBlankRequest (in category 'configuring') -----
- ----- Method: MCSMReleaseRepository class>>fillInTheBlankRequest (in category 'as yet unclassified') -----
fillInTheBlankRequest
^ 'SqueakMap Release Repository:'
!

Item was changed:
+ ----- Method: MCSMReleaseRepository class>>morphicConfigure (in category 'configuring') -----
- ----- Method: MCSMReleaseRepository class>>morphicConfigure (in category 'as yet unclassified') -----
morphicConfigure
^ self fillInTheBlankConfigure!

Item was changed:
+ ----- Method: MCSMReleaseRepository class>>package:user:password: (in category 'instance creation') -----
- ----- Method: MCSMReleaseRepository class>>package:user:password: (in category 'as yet unclassified') -----
package: packageString user: userString password: passString
^ self basicNew initializeWithPackage: packageString user: userString password: passString!

Item was changed:
+ ----- Method: MCSMReleaseRepository>>basicStoreVersion: (in category 'private') -----
- ----- Method: MCSMReleaseRepository>>basicStoreVersion: (in category 'as yet unclassified') -----
basicStoreVersion: aVersion
| url |
url := self uploadVersion: aVersion.
self releaseVersion: aVersion url: url!

Item was changed:
+ ----- Method: MCSMReleaseRepository>>checkResult: (in category 'private') -----
- ----- Method: MCSMReleaseRepository>>checkResult: (in category 'as yet unclassified') -----
checkResult: resultString
(#( 'HTTP/1.1 201 ' 'HTTP/1.1 200 ' 'HTTP/1.0 201 ' 'HTTP/1.0 200 ')
anySatisfy: [:code | resultString beginsWith: code ])
ifFalse: [self error: resultString].
!

Item was changed:
+ ----- Method: MCSMReleaseRepository>>description (in category 'user interface') -----
- ----- Method: MCSMReleaseRepository>>description (in category 'as yet unclassified') -----
description
^ 'sm://', packageName!

Item was changed:
+ ----- Method: MCSMReleaseRepository>>initializeWithPackage:user:password: (in category 'private') -----
- ----- Method: MCSMReleaseRepository>>initializeWithPackage:user:password: (in category 'as yet unclassified') -----
initializeWithPackage: packageString user: userString password: passString
packageName := packageString.
user := userString.
password := passString.
!

Item was changed:
+ ----- Method: MCSMReleaseRepository>>releaseVersion:url: (in category 'private') -----
- ----- Method: MCSMReleaseRepository>>releaseVersion:url: (in category 'as yet unclassified') -----
releaseVersion: aVersion url: urlString
| result |
result := HTTPSocket
httpPost: self squeakMapUrl, '/packagebyname/', packageName, '/newrelease'
args: {'version' -> {(aVersion info versionNumber)}.
'note' -> {aVersion info message}.
'downloadURL' -> {urlString}}
user: user
passwd: password.
result contents size > 4 ifTrue: [self error: result contents]
!

Item was changed:
+ ----- Method: MCSMReleaseRepository>>squeakMapUrl (in category 'constants') -----
- ----- Method: MCSMReleaseRepository>>squeakMapUrl (in category 'as yet unclassified') -----
squeakMapUrl
^ 'http://localhost:9070/sm'
!

Item was changed:
+ ----- Method: MCSMReleaseRepository>>stringForVersion: (in category 'private') -----
- ----- Method: MCSMReleaseRepository>>stringForVersion: (in category 'as yet unclassified') -----
stringForVersion: aVersion
| stream |
stream := RWBinaryOrTextStream on: String new.
aVersion fileOutOn: stream.
^ stream contents!

Item was changed:
+ ----- Method: MCSMReleaseRepository>>uploadVersion: (in category 'private') -----
- ----- Method: MCSMReleaseRepository>>uploadVersion: (in category 'as yet unclassified') -----
uploadVersion: aVersion
| result stream |
result := HTTPSocket
httpPut: (self stringForVersion: aVersion)
to: self squeakMapUrl, '/upload/', aVersion fileName
user: user
passwd: password.
self checkResult: result.
stream := result readStream.
stream upToAll: 'http://'.
^ 'http://', stream upToEnd!

Item was changed:
+ ----- Method: MCScanner class>>scan: (in category 'instance creation') -----
- ----- Method: MCScanner class>>scan: (in category 'as yet unclassified') -----
scan: aStream
^ (self new stream: aStream) next!

Item was changed:
+ ----- Method: MCScanner class>>scanTokens: (in category 'instance creation') -----
- ----- Method: MCScanner class>>scanTokens: (in category 'as yet unclassified') -----
scanTokens: aString
"compatibility"
^{ self scan: aString readStream }!

Item was changed:
+ ----- Method: MCScanner>>next (in category 'scanning') -----
- ----- Method: MCScanner>>next (in category 'as yet unclassified') -----
next
| c |
stream skipSeparators.
(c := stream peek) == $# ifTrue: [c := stream next; peek].
c == $' ifTrue: [^ self nextString].
c == $( ifTrue: [^ self nextArray].
c isAlphaNumeric ifTrue: [^ self nextSymbol].
self error: 'Unknown token type'!

Item was changed:
+ ----- Method: MCScanner>>nextArray (in category 'scanning') -----
- ----- Method: MCScanner>>nextArray (in category 'as yet unclassified') -----
nextArray
stream next. "("
^ Array streamContents:
[:s |
[stream skipSeparators.
(stream peek == $)) or: [stream atEnd]] whileFalse: [s nextPut: self next].
stream next == $) ifFalse: [self error: 'Unclosed array']]!

Item was changed:
+ ----- Method: MCScanner>>nextString (in category 'scanning') -----
- ----- Method: MCScanner>>nextString (in category 'as yet unclassified') -----
nextString
^ stream nextDelimited: $'!

Item was changed:
+ ----- Method: MCScanner>>nextSymbol (in category 'scanning') -----
- ----- Method: MCScanner>>nextSymbol (in category 'as yet unclassified') -----
nextSymbol
^ (String streamContents:
[:s |
[stream peek isAlphaNumeric] whileTrue: [s nextPut: stream next]]) asSymbol
!

Item was changed:
+ ----- Method: MCScanner>>stream: (in category 'accessing') -----
- ----- Method: MCScanner>>stream: (in category 'as yet unclassified') -----
stream: aStream
stream := aStream!

Item was changed:
+ ----- Method: MCScriptDefinition class>>from: (in category 'instance creation') -----
- ----- Method: MCScriptDefinition class>>from: (in category 'as yet unclassified') -----
from: aPackageInfo
^ self script: (aPackageInfo perform: self scriptSelector) contents asString packageName: aPackageInfo name!

Item was changed:
+ ----- Method: MCScriptDefinition class>>script:packageName: (in category 'instance creation') -----
- ----- Method: MCScriptDefinition class>>script:packageName: (in category 'as yet unclassified') -----
script: aString packageName: packageString
^ self instanceLike: (self new initializeWithScript: aString packageName: packageString)!

Item was changed:
+ ----- Method: MCScriptDefinition class>>scriptSelector (in category 'private - instance creation') -----
- ----- Method: MCScriptDefinition class>>scriptSelector (in category 'as yet unclassified') -----
scriptSelector
self subclassResponsibility!

Item was changed:
+ ----- Method: MCScriptDefinition class>>scriptSelector:script:packageName: (in category 'instance creation') -----
- ----- Method: MCScriptDefinition class>>scriptSelector:script:packageName: (in category 'as yet unclassified') -----
scriptSelector: selectorString script: aString packageName: packageString
^ (self subclassForScriptSelector: selectorString)
script: aString packageName: packageString!

Item was changed:
+ ----- Method: MCScriptDefinition class>>subclassForScriptSelector: (in category 'private - instance creation') -----
- ----- Method: MCScriptDefinition class>>subclassForScriptSelector: (in category 'as yet unclassified') -----
subclassForScriptSelector: selectorString
^self allSubclasses detect: [:ea | ea scriptSelector = selectorString]!

Item was changed:
+ ----- Method: MCScriptParser class>>pattern (in category 'constants') -----
- ----- Method: MCScriptParser class>>pattern (in category 'as yet unclassified') -----
pattern
^'(PackageInfo named: *'!

Item was changed:
+ ----- Method: MCScriptParser>>addDefinitionsTo: (in category 'evaluating') -----
- ----- Method: MCScriptParser>>addDefinitionsTo: (in category 'as yet unclassified') -----
addDefinitionsTo: aCollection
| tokens definition |
tokens := Scanner new scanTokens: source.
definition := MCScriptDefinition
scriptSelector: tokens second allButLast
script: tokens third
packageName: tokens first third.
aCollection add: definition.!

Item was changed:
+ ----- Method: MCSmtpRepository class>>description (in category 'configuring') -----
- ----- Method: MCSmtpRepository class>>description (in category 'as yet unclassified') -----
description
^ 'SMTP'!

Item was changed:
+ ----- Method: MCSmtpRepository class>>morphicConfigure (in category 'configuring') -----
- ----- Method: MCSmtpRepository class>>morphicConfigure (in category 'as yet unclassified') -----
morphicConfigure
| address |
address := UIManager default request: 'Email address:'.
^ address isEmpty ifFalse: [self new emailAddress: address]!

Item was changed:
+ ----- Method: MCSmtpRepository>>basicStoreVersion: (in category 'private') -----
- ----- Method: MCSmtpRepository>>basicStoreVersion: (in category 'as yet unclassified') -----
basicStoreVersion: aVersion
MailSender sendMessage: (self messageForVersion: aVersion)!

Item was changed:
+ ----- Method: MCSmtpRepository>>bodyForVersion: (in category 'converting') -----
- ----- Method: MCSmtpRepository>>bodyForVersion: (in category 'as yet unclassified') -----
bodyForVersion: aVersion
^ String streamContents:
[ :s |
s nextPutAll: 'from version info:'; cr; cr.
s nextPutAll: aVersion info summary]!

Item was changed:
+ ----- Method: MCSmtpRepository>>description (in category 'user interface') -----
- ----- Method: MCSmtpRepository>>description (in category 'as yet unclassified') -----
description
^ 'mailto://', email!

Item was changed:
+ ----- Method: MCSmtpRepository>>emailAddress: (in category 'accessing') -----
- ----- Method: MCSmtpRepository>>emailAddress: (in category 'as yet unclassified') -----
emailAddress: aString
email := aString !

Item was changed:
+ ----- Method: MCSmtpRepository>>messageForVersion: (in category 'converting') -----
- ----- Method: MCSmtpRepository>>messageForVersion: (in category 'as yet unclassified') -----
messageForVersion: aVersion
| message data |
message := MailMessage empty.
message setField: 'from' toString: MailSender userName.
message setField: 'to' toString: email.
message setField: 'subject' toString: (self subjectForVersion: aVersion).

message body:
(MIMEDocument
contentType: 'text/plain'
content: (self bodyForVersion: aVersion)).

"Prepare the gzipped data"
data := RWBinaryOrTextStream on: String new.
aVersion fileOutOn: data.
message addAttachmentFrom: data reset withName: aVersion fileName.
^ message!

Item was changed:
+ ----- Method: MCSmtpRepository>>subjectForVersion: (in category 'converting') -----
- ----- Method: MCSmtpRepository>>subjectForVersion: (in category 'as yet unclassified') -----
subjectForVersion: aVersion
^ '[Package] ', aVersion info name!

Item was changed:
+ ----- Method: MCSnapshotBrowser class>>forSnapshot: (in category 'instance creation') -----
- ----- Method: MCSnapshotBrowser class>>forSnapshot: (in category 'as yet unclassified') -----
forSnapshot: aSnapshot
^ self new snapshot: aSnapshot!

Item was changed:
+ ----- Method: MCSnapshotReader class>>snapshotFromStream: (in category 'converting') -----
- ----- Method: MCSnapshotReader class>>snapshotFromStream: (in category 'as yet unclassified') -----
snapshotFromStream: aStream
^ (self on: aStream) snapshot!

Item was changed:
+ ----- Method: MCSnapshotReader>>definitions (in category 'loading') -----
- ----- Method: MCSnapshotReader>>definitions (in category 'as yet unclassified') -----
definitions
definitions ifNil: [self loadDefinitions].
^ definitions!

Item was changed:
+ ----- Method: MCSnapshotReader>>snapshot (in category 'accessing') -----
- ----- Method: MCSnapshotReader>>snapshot (in category 'as yet unclassified') -----
snapshot
^ MCSnapshot fromDefinitions: self definitions!

Item was changed:
+ ----- Method: MCStReader class>>extension (in category 'constants') -----
- ----- Method: MCStReader class>>extension (in category 'as yet unclassified') -----
extension
^ 'st'!

Item was changed:
+ ----- Method: MCStReader>>addDefinitionsFromDoit: (in category 'private') -----
- ----- Method: MCStReader>>addDefinitionsFromDoit: (in category 'as yet unclassified') -----
addDefinitionsFromDoit: aString
(MCDoItParser forDoit: aString) ifNotNil:
[:parser |
parser addDefinitionsTo: definitions]!

Item was changed:
+ ----- Method: MCStReader>>categoryFromDoIt: (in category 'private') -----
- ----- Method: MCStReader>>categoryFromDoIt: (in category 'as yet unclassified') -----
categoryFromDoIt: aString
| tokens |
tokens := Scanner new scanTokens: aString.
tokens size = 3 ifFalse: [self error: 'Unrecognized category definition'].
^ tokens at: 3!

Item was changed:
+ ----- Method: MCStReader>>classDefinitionFrom: (in category 'converting') -----
- ----- Method: MCStReader>>classDefinitionFrom: (in category 'as yet unclassified') -----
classDefinitionFrom: aPseudoClass
| tokens traitCompositionString lastIndex classTraitCompositionString typeOfSubclass className |
tokens := Scanner new scanTokens: aPseudoClass definition.
traitCompositionString := ((ReadStream on: aPseudoClass definition)
match: 'uses:';
upToAll: 'instanceVariableNames:') withBlanksTrimmed.
classTraitCompositionString := ((ReadStream on: aPseudoClass metaClass definition asString)
match: 'uses:';
upToAll: 'instanceVariableNames:') withBlanksTrimmed.
traitCompositionString isEmpty ifTrue: [traitCompositionString := '{}'].
classTraitCompositionString isEmpty ifTrue: [classTraitCompositionString := '{}'].
lastIndex := tokens size.

className := tokens at: 3.
typeOfSubclass := self typeOfSubclass: (tokens at: 2).
"Compiled code classes are special cases of the #bytes class type"
(#bytes == typeOfSubclass and: [self compiledCodeClassNames includes: className])
ifTrue: [typeOfSubclass := #compiledMethod].

^ MCClassDefinition
name: className
superclassName: (tokens at: 1)
traitComposition: traitCompositionString
classTraitComposition: classTraitCompositionString
category: (tokens at: lastIndex)
instVarNames: ((tokens at: lastIndex - 6) findTokens: ' ')
classVarNames: ((tokens at: lastIndex - 4) findTokens: ' ')
poolDictionaryNames: ((tokens at: lastIndex - 2) findTokens: ' ')
classInstVarNames: (self classInstVarNamesFor: aPseudoClass)
type: typeOfSubclass
comment: (self commentFor: aPseudoClass)
commentStamp: (self commentStampFor: aPseudoClass)!

Item was changed:
+ ----- Method: MCStReader>>classInstVarNamesFor: (in category 'converting') -----
- ----- Method: MCStReader>>classInstVarNamesFor: (in category 'as yet unclassified') -----
classInstVarNamesFor: aPseudoClass
| tokens |

self flag: #traits.
aPseudoClass metaClass hasDefinition ifFalse: [^ #()].
tokens := Scanner new scanTokens: aPseudoClass metaClass definition.
"tokens size = 4 ifFalse: [self error: 'Unrecognized metaclass definition']."
^ tokens last findTokens: ' '!

Item was changed:
+ ----- Method: MCStReader>>commentFor: (in category 'converting') -----
- ----- Method: MCStReader>>commentFor: (in category 'as yet unclassified') -----
commentFor: aPseudoClass
| comment |
comment := aPseudoClass organization classComment.
^ comment asString = ''
ifTrue: [comment]
ifFalse: [comment string]!

Item was changed:
+ ----- Method: MCStReader>>commentStampFor: (in category 'converting') -----
- ----- Method: MCStReader>>commentStampFor: (in category 'as yet unclassified') -----
commentStampFor: aPseudoClass
| comment |
comment := aPseudoClass organization classComment.
^ [comment stamp] on: MessageNotUnderstood do: [nil]!

Item was changed:
+ ----- Method: MCStReader>>compiledCodeClassNames (in category 'private') -----
- ----- Method: MCStReader>>compiledCodeClassNames (in category 'as yet unclassified') -----
compiledCodeClassNames
"Answer the names of classes for which the type is #compiledMethod. Traditionally,
this was only class CompiledMehod, but later refactorings require that CompiledCode
and its subclasses be treated as type #compiledMethod."

^{ #CompiledCode . #CompiledBlock . #CompiledMethod }!

Item was changed:
+ ----- Method: MCStReader>>methodDefinitionsFor: (in category 'converting') -----
- ----- Method: MCStReader>>methodDefinitionsFor: (in category 'as yet unclassified') -----
methodDefinitionsFor: aPseudoClass
^ aPseudoClass selectors collect:
[:ea |
MCMethodDefinition
className: aPseudoClass name
classIsMeta: aPseudoClass isMeta
selector: ea
category: (aPseudoClass organization categoryOfElement: ea)
timeStamp: (aPseudoClass stampAt: ea)
source: (aPseudoClass sourceCodeAt: ea)]!

Item was changed:
+ ----- Method: MCStReader>>systemOrganizationFromRecords: (in category 'converting') -----
- ----- Method: MCStReader>>systemOrganizationFromRecords: (in category 'as yet unclassified') -----
systemOrganizationFromRecords: changeRecords
| categories |
categories := changeRecords
select: [:ea | 'SystemOrganization*' match: ea string]
thenCollect: [:ea | (self categoryFromDoIt: ea string)].
^ categories isEmpty ifFalse: [MCOrganizationDefinition categories: categories asArray]!

Item was changed:
+ ----- Method: MCStReader>>traitDefinitionFrom: (in category 'converting') -----
- ----- Method: MCStReader>>traitDefinitionFrom: (in category 'as yet unclassified') -----
traitDefinitionFrom: aPseudoTrait
| tokens traitCompositionString lastIndex |
tokens := Scanner new scanTokens: aPseudoTrait definition.
traitCompositionString := ((ReadStream on: aPseudoTrait definition)
match: 'uses:';
upToAll: 'category:') withBlanksTrimmed.
traitCompositionString isEmpty ifTrue: [traitCompositionString := '{}'].
lastIndex := tokens size.
^ MCTraitDefinition
name: (tokens at: 3)
traitComposition: traitCompositionString
category: (tokens at: lastIndex)
comment: (self commentFor: aPseudoTrait)
commentStamp: (self commentStampFor: aPseudoTrait)!

Item was changed:
+ ----- Method: MCStReader>>typeOfSubclass: (in category 'private') -----
- ----- Method: MCStReader>>typeOfSubclass: (in category 'as yet unclassified') -----
typeOfSubclass: aSymbol
#(
(subclass: normal)
(variableSubclass: variable)
(variableByteSubclass: bytes)
(variableDoubleByteSubclass: shorts)
(variableWordSubclass: words)
(variableDoubleWordSubclass: longs)
(weakSubclass: weak)
(ephemeronSubclass: ephemeron)
(immediateSubclass: immediate)
) do: [:ea | ea first = aSymbol ifTrue: [^ ea second]].
self error: 'Unrecognized class definition'!

Item was changed:
+ ----- Method: MCStWriter class>>readerClass (in category 'accessing') -----
- ----- Method: MCStWriter class>>readerClass (in category 'as yet unclassified') -----
readerClass
^ MCStReader!

Item was changed:
+ ----- Method: MCSubDirectoryRepository>>allDirectories (in category 'enumerating') -----
- ----- Method: MCSubDirectoryRepository>>allDirectories (in category 'enumeration') -----
allDirectories
| remaining dir dirs |
remaining := OrderedCollection new.
dirs := OrderedCollection new.
remaining addLast: directory.
[remaining isEmpty]
whileFalse: [dir := remaining removeFirst.
dirs add: dir.
dir entries
do: [:ent | ent isDirectory
ifTrue: [remaining
addLast: (dir directoryNamed: ent name)]]].
^ dirs!

Item was changed:
+ ----- Method: MCSubDirectoryRepository>>allFileNames (in category 'enumerating') -----
- ----- Method: MCSubDirectoryRepository>>allFileNames (in category 'enumeration') -----
allFileNames
"sorting {entry. dirName. name}"

| result |
result := OrderedCollection new.
self allDirectories
do: [:dir | dir entries
do: [:ent | ent isDirectory
ifFalse: [result addLast: {ent. dir fullName. ent name}]]].
^result
sort: [:a :b | a first modificationTime >= b first modificationTime ];
replace: [:ea | ea third asMCVersionName]!

Item was changed:
+ ----- Method: MCSubDirectoryRepository>>findFullNameForReading: (in category 'private') -----
- ----- Method: MCSubDirectoryRepository>>findFullNameForReading: (in category 'as yet unclassified') -----
findFullNameForReading: aBaseName
"Answer the latest version of aBaseName"
| possible |
possible := OrderedCollection new.
self allDirectories
do: [:dir | dir entries
do: [:ent | ent isDirectory
ifFalse: [
(ent name = aBaseName) ifTrue: [ possible addLast: {ent. dir fullNameFor: ent name}]]]].
possible isEmpty ifTrue: [ ^nil ].
^(possible detectMin: [ :each | each first modificationTime ]) second!

Item was changed:
+ ----- Method: MCSubDirectoryRepository>>findFullNameForWriting: (in category 'private') -----
- ----- Method: MCSubDirectoryRepository>>findFullNameForWriting: (in category 'as yet unclassified') -----
findFullNameForWriting: aBaseName

| possible split prefix fpattern now |
split := directory splitNameVersionExtensionFor: aBaseName.
fpattern := split first, '*'.
possible := OrderedCollection new.
now := Time totalSeconds.
prefix := directory pathParts size.
self allDirectories do: [:dir | | parts dirScore fileScore |
parts := dir pathParts allButFirst: prefix.
dirScore := (parts select: [ :part | fpattern match: part ]) size.
fileScore := (dir entries collect: [ :ent |
(ent isDirectory not and: [ fpattern match: ent name ])
ifFalse: [ SmallInteger maxVal ]
ifTrue: [ now - ent modificationTime ]]). "minimum age"
fileScore := fileScore isEmpty ifTrue: [ SmallInteger maxVal ]
ifFalse: [ fileScore min ].
possible add: { dirScore. fileScore. dir } ].
possible
sort: [ :a :b |
a first = b first
ifTrue: [ a second = b second
ifFalse: [ a second < b second ]
ifTrue: [ a third fullName size < b third fullName size ]]
ifFalse: [ a first > b first ] ].
^(possible first third) fullNameFor: aBaseName!

Item was changed:
+ ----- Method: MCSubDirectoryRepository>>readStreamForFileNamed:do: (in category 'private') -----
- ----- Method: MCSubDirectoryRepository>>readStreamForFileNamed:do: (in category 'as yet unclassified') -----
readStreamForFileNamed: aString do: aBlock
| file val |
file := FileStream readOnlyFileNamed: (self findFullNameForReading: aString).
val := aBlock value: file.
file close.
^ val!

Item was changed:
+ ----- Method: MCSubDirectoryRepository>>writeStreamForFileNamed:replace:do: (in category 'private') -----
- ----- Method: MCSubDirectoryRepository>>writeStreamForFileNamed:replace:do: (in category 'as yet unclassified') -----
writeStreamForFileNamed: aString replace: aBoolean do: aBlock
| file |
file := aBoolean
ifTrue: [FileStream
forceNewFileNamed: (self findFullNameForReading: aString)]
ifFalse: [FileStream
newFileNamed: (self findFullNameForWriting: aString)].
aBlock value: file.
file close!

Item was changed:
+ ----- Method: MCSystemCategoryParser class>>pattern (in category 'constants') -----
- ----- Method: MCSystemCategoryParser class>>pattern (in category 'as yet unclassified') -----
pattern
^ 'SystemOrganization*'!

Item was changed:
+ ----- Method: MCSystemCategoryParser>>addDefinitionsTo: (in category 'evaluating') -----
- ----- Method: MCSystemCategoryParser>>addDefinitionsTo: (in category 'as yet unclassified') -----
addDefinitionsTo: aCollection
| definition |
definition := aCollection detect: [:ea | ea isOrganizationDefinition ] ifNone: [aCollection add: (MCOrganizationDefinition categories: #())].
definition categories: (definition categories copyWith: self category).!

Item was changed:
+ ----- Method: MCSystemCategoryParser>>category (in category 'evaluating') -----
- ----- Method: MCSystemCategoryParser>>category (in category 'as yet unclassified') -----
category
| tokens |
tokens := Scanner new scanTokens: source.
tokens size = 3 ifFalse: [self error: 'Unrecognized category definition'].
^ tokens at: 3!

Item was changed:
+ ----- Method: MCThreeWayMerger class>>base:patch: (in category 'instance creation') -----
- ----- Method: MCThreeWayMerger class>>base:patch: (in category 'as yet unclassified') -----
base: aSnapshot patch: aPatch
aPatch isEmpty ifTrue: [MCNoChangesException signal].
^ self new
addBaseSnapshot: aSnapshot;
applyPatch: aPatch;
yourself
!

Item was changed:
+ ----- Method: MCThreeWayMerger class>>base:target:ancestor: (in category 'instance creation') -----
- ----- Method: MCThreeWayMerger class>>base:target:ancestor: (in category 'as yet unclassified') -----
base: aSnapshot target: targetSnapshot ancestor: ancestorSnapshot
^ self base: aSnapshot patch: (targetSnapshot patchRelativeToBase: ancestorSnapshot)!

Item was changed:
+ ----- Method: MCThreeWayMerger class>>new (in category 'instance creation') -----
- ----- Method: MCThreeWayMerger class>>new (in category 'as yet unclassified') -----
new
^ self basicNew initialize!

Item was changed:
+ ----- Method: MCThreeWayMerger>>applyPatch: (in category 'applying') -----
- ----- Method: MCThreeWayMerger>>applyPatch: (in category 'as yet unclassified') -----
applyPatch: aPatch
aPatch applyTo: self!

Item was changed:
+ ----- Method: MCThreeWayMerger>>applyTo: (in category 'applying') -----
- ----- Method: MCThreeWayMerger>>applyTo: (in category 'as yet unclassified') -----
applyTo: anObject
super applyTo: anObject.
self operations do: [:ea | ea applyTo: anObject]!

Item was changed:
+ ----- Method: MCThreeWayMerger>>initialize (in category 'initialize-release') -----
- ----- Method: MCThreeWayMerger>>initialize (in category 'as yet unclassified') -----
initialize
index := MCDefinitionIndex new.
provisions := Set new!

Item was changed:
+ ----- Method: MCThreeWayMerger>>operations (in category 'accessing') -----
- ----- Method: MCThreeWayMerger>>operations (in category 'as yet unclassified') -----
operations
^ operations ifNil: [operations := OrderedCollection new]!

Item was changed:
+ ----- Method: MCThreeWayMerger>>provisions (in category 'accessing') -----
- ----- Method: MCThreeWayMerger>>provisions (in category 'as yet unclassified') -----
provisions
^ provisions!

Item was changed:
+ ----- Method: MCToolWindowBuilder class>>builder:tool: (in category 'instance creation') -----
- ----- Method: MCToolWindowBuilder class>>builder:tool: (in category 'as yet unclassified') -----
builder: aBuilder tool: aTool
^ self basicNew initializeWithBuilder: aBuilder tool: aTool!

Item was changed:
+ ----- Method: MCTraitDefinition class>>name:traitComposition:category:comment:commentStamp: (in category 'instance creation') -----
- ----- Method: MCTraitDefinition class>>name:traitComposition:category:comment:commentStamp: (in category 'as yet unclassified') -----
name: classNameString traitComposition: traitCompositionString category: categoryString comment: commentString commentStamp: commentStamp
^ self instanceLike:
(self new initializeWithName: classNameString
traitComposition: traitCompositionString
category: categoryString
comment: commentString
commentStamp: commentStamp)
!

Item was changed:
+ ----- Method: MCTraitParser class>>pattern (in category 'constants') -----
- ----- Method: MCTraitParser class>>pattern (in category 'as yet unclassified') -----
pattern
^ 'Trait named:*'!

Item was changed:
+ ----- Method: MCVariableDefinition class>>name: (in category 'instance creation') -----
- ----- Method: MCVariableDefinition class>>name: (in category 'as yet unclassified') -----
name: aString
^ self new name: aString
!

Item was changed:
+ ----- Method: MCVersionDependency class>>package:info: (in category 'instance creation') -----
- ----- Method: MCVersionDependency class>>package:info: (in category 'as yet unclassified') -----
package: aPackage info: aVersionInfo
^ self basicNew initializeWithPackage: aPackage info: aVersionInfo!

Item was changed:
+ ----- Method: MCVersionInfo class>>name:id:message:date:time:author:ancestors: (in category 'instance creation') -----
- ----- Method: MCVersionInfo class>>name:id:message:date:time:author:ancestors: (in category 'as yet unclassified') -----
name: vName id: id message: message date: date time: time author: author ancestors: ancestors
^ self
name: vName
id: id
message: message
date: date
time: time
author: author
ancestors: ancestors
stepChildren: #()!

Item was changed:
+ ----- Method: MCVersionInfo class>>name:id:message:date:time:author:ancestors:stepChildren: (in category 'instance creation') -----
- ----- Method: MCVersionInfo class>>name:id:message:date:time:author:ancestors:stepChildren: (in category 'as yet unclassified') -----
name: vName id: id message: message date: date time: time author: author ancestors: ancestors stepChildren: stepChildren
^ self new
initializeWithName: vName
id: id
message: message
date: date
time: time
author: author
ancestors: ancestors
stepChildren: stepChildren!

Item was changed:
+ ----- Method: MCVersionInfoWriter>>isWritten: (in category 'testing') -----
- ----- Method: MCVersionInfoWriter>>isWritten: (in category 'as yet unclassified') -----
isWritten: aVersionInfo
^ self written includes: aVersionInfo!

Item was changed:
+ ----- Method: MCVersionInfoWriter>>writeVersionInfo: (in category 'writing') -----
- ----- Method: MCVersionInfoWriter>>writeVersionInfo: (in category 'as yet unclassified') -----
writeVersionInfo: aVersionInfo
(self isWritten: aVersionInfo)
ifTrue: [^ stream nextPutAll: '(id ', aVersionInfo id asString printString, ')'].
stream nextPut: $(.
#(name message id date time author)
do: [:sel |
stream nextPutAll: sel.
stream nextPut: $ .
((aVersionInfo perform: sel) ifNil: ['']) asString printOn: stream.
stream nextPut: $ ].
stream nextPutAll: 'ancestors ('.
aVersionInfo ancestors do: [:ea | self writeVersionInfo: ea].
stream nextPutAll: ') stepChildren ('.
aVersionInfo stepChildren do: [:ea | self writeVersionInfo: ea].
stream nextPutAll: '))'.
self wrote: aVersionInfo!

Item was changed:
+ ----- Method: MCVersionInfoWriter>>written (in category 'accessing') -----
- ----- Method: MCVersionInfoWriter>>written (in category 'as yet unclassified') -----
written
^ written ifNil: [written := Set new]!

Item was changed:
+ ----- Method: MCVersionInfoWriter>>wrote: (in category 'accessing') -----
- ----- Method: MCVersionInfoWriter>>wrote: (in category 'as yet unclassified') -----
wrote: aVersionInfo
self written add: aVersionInfo!

Item was changed:
+ ----- Method: MCVersionLoader class>>loadVersion: (in category 'loading') -----
- ----- Method: MCVersionLoader class>>loadVersion: (in category 'as yet unclassified') -----
loadVersion: aVersion
self new
addVersion: aVersion;
load!

Item was changed:
+ ----- Method: MCVersionLoader class>>new (in category 'instance creation') -----
- ----- Method: MCVersionLoader class>>new (in category 'as yet unclassified') -----
new
^ self basicNew initialize!

Item was changed:
+ ----- Method: MCVersionMerger class>>mergeVersion: (in category 'merging') -----
- ----- Method: MCVersionMerger class>>mergeVersion: (in category 'as yet unclassified') -----
mergeVersion: aVersion
self new
addVersion: aVersion;
mergeWithNameLike: aVersion info name!

Item was changed:
+ ----- Method: MCVersionMerger class>>new (in category 'instance creation') -----
- ----- Method: MCVersionMerger class>>new (in category 'as yet unclassified') -----
new
^ self basicNew initialize!

Item was changed:
+ ----- Method: MCVersionMerger>>addVersion: (in category 'accessing') -----
- ----- Method: MCVersionMerger>>addVersion: (in category 'as yet unclassified') -----
addVersion: aVersion

records add: (MCMergeRecord version: aVersion).
aVersion dependencies do:
[:ea | | dep |
dep := ea resolve.
(records anySatisfy: [:r | r version = dep]) ifFalse: [self addVersion: dep]]!

Item was changed:
+ ----- Method: MCVersionMerger>>initialize (in category 'initialize-release') -----
- ----- Method: MCVersionMerger>>initialize (in category 'as yet unclassified') -----
initialize
records := OrderedCollection new.
merger := MCThreeWayMerger new.!

Item was changed:
+ ----- Method: MCVersionMerger>>merge (in category 'merging') -----
- ----- Method: MCVersionMerger>>merge (in category 'as yet unclassified') -----
merge
records do: [:ea | merger addBaseSnapshot: ea packageSnapshot].
records do: [:ea | merger applyPatch: ea mergePatch].
self resolveConflicts ifTrue:
[merger load.
records do: [:ea | ea updateWorkingCopy]].!

Item was changed:
+ ----- Method: MCVersionMerger>>mergeWithNameLike: (in category 'merging') -----
- ----- Method: MCVersionMerger>>mergeWithNameLike: (in category 'as yet unclassified') -----
mergeWithNameLike: baseName
records do: [:ea | merger addBaseSnapshot: ea packageSnapshot].
records do: [:ea | merger applyPatch: ea mergePatch].
self resolveConflicts ifTrue:
[merger loadWithNameLike: baseName.
records do: [:ea | ea updateWorkingCopy]].!

Item was changed:
+ ----- Method: MCVersionMerger>>resolveConflicts (in category 'testing') -----
- ----- Method: MCVersionMerger>>resolveConflicts (in category 'as yet unclassified') -----
resolveConflicts
(records allSatisfy: [:ea | ea isAncestorMerge]) ifTrue: [MCNoChangesException signal. ^ false].
^ ((MCMergeResolutionRequest new merger: merger)
signal: 'Merging ', records first version info name) = true!

Item was changed:
+ ----- Method: MCVersionNotification class>>version:repository: (in category 'instance creation') -----
- ----- Method: MCVersionNotification class>>version:repository: (in category 'as yet unclassified') -----
version: aVersion repository: aRepository
^ self basicNew initializeWithVersion: aVersion repository: aRepository!

Item was changed:
+ ----- Method: MCVersionNotification>>fromAddress (in category 'accessing') -----
- ----- Method: MCVersionNotification>>fromAddress (in category 'as yet unclassified') -----
fromAddress
^ '***@beta4.com'!

Item was changed:
+ ----- Method: MCVersionNotification>>initializeWithVersion:repository: (in category 'private') -----
- ----- Method: MCVersionNotification>>initializeWithVersion:repository: (in category 'as yet unclassified') -----
initializeWithVersion: aVersion repository: aRepository
version := aVersion.
repository := aRepository.
ancestor := repository closestAncestorVersionFor: version info ifNone: [].
changes := ancestor
ifNil: [#()]
ifNotNil: [(version snapshot patchRelativeToBase: ancestor snapshot) operations sorted]!

Item was changed:
+ ----- Method: MCVersionNotification>>messageText (in category 'accessing') -----
- ----- Method: MCVersionNotification>>messageText (in category 'as yet unclassified') -----
messageText
^ String streamContents:
[:s |
s nextPutAll: 'Committed to repository: ', repository description; cr; cr.
s nextPutAll: version summary.
changes isEmpty ifFalse:
[s cr; cr.
s nextPutAll: '-----------------------------------------------------'; cr.
s nextPutAll: 'Changes since ', ancestor info name, ':'; cr.
changes do:
[:ea |
s cr; nextPutAll: ea summary; cr.
s nextPutAll: ea sourceString]]]!

Item was changed:
+ ----- Method: MCVersionNotification>>messageTo: (in category 'private') -----
- ----- Method: MCVersionNotification>>messageTo: (in category 'as yet unclassified') -----
messageTo: aString
| message |
message := MailMessage empty.
message setField: 'from' toString: self fromAddress.
message setField: 'to' toString: aString.
message setField: 'subject' toString: '[MC] ', version info name.
message body: (MIMEDocument contentType: 'text/plain' content: self messageText).
^ message!

Item was changed:
+ ----- Method: MCVersionNotification>>notify: (in category 'notifying') -----
- ----- Method: MCVersionNotification>>notify: (in category 'as yet unclassified') -----
notify: aString
| message |
message := self messageTo: aString.
SMTPClient
deliverMailFrom: message from
to: { message to }
text: message text
usingServer: MailSender smtpServer!

Item was changed:
+ ----- Method: MCVersionSorter class>>new (in category 'instance creation') -----
- ----- Method: MCVersionSorter class>>new (in category 'as yet unclassified') -----
new
^ self basicNew initialize!

Item was changed:
+ ----- Method: MCVersionSorter>>addAllAncestorsOf:to: (in category 'accessing') -----
- ----- Method: MCVersionSorter>>addAllAncestorsOf:to: (in category 'as yet unclassified') -----
addAllAncestorsOf: aVersionInfo to: aSet
(aSet includes: aVersionInfo) ifTrue: [^ self].
aSet add: aVersionInfo.
(self knownAncestorsOf: aVersionInfo) do:
[:ea |
self addAllAncestorsOf: ea to: aSet]!

Item was changed:
+ ----- Method: MCVersionSorter>>addAllVersionInfos: (in category 'accessing') -----
- ----- Method: MCVersionSorter>>addAllVersionInfos: (in category 'as yet unclassified') -----
addAllVersionInfos: aCollection
aCollection do: [:ea | self addVersionInfo: ea]!

Item was changed:
+ ----- Method: MCVersionSorter>>addToCurrentLayer: (in category 'accessing') -----
- ----- Method: MCVersionSorter>>addToCurrentLayer: (in category 'as yet unclassified') -----
addToCurrentLayer: aVersionInfo
| layer |
layer := layers at: depthIndex.
(layer includes: aVersionInfo) ifFalse:
[depths at: aVersionInfo ifPresent:
[:i |
i < depthIndex
ifTrue: [(layers at: i) remove: aVersionInfo]
ifFalse: [^ false]].
layer add: aVersionInfo.
depths at: aVersionInfo put: depthIndex.
^ true].
^ false !

Item was changed:
+ ----- Method: MCVersionSorter>>addVersionInfo: (in category 'accessing') -----
- ----- Method: MCVersionSorter>>addVersionInfo: (in category 'as yet unclassified') -----
addVersionInfo: aVersionInfo
roots add: aVersionInfo.
self registerStepChildrenOf: aVersionInfo seen: Set new!

Item was changed:
+ ----- Method: MCVersionSorter>>allAncestorsOf: (in category 'ancestry') -----
- ----- Method: MCVersionSorter>>allAncestorsOf: (in category 'as yet unclassified') -----
allAncestorsOf: aVersionInfo
| all |
all := Set new.
self addAllAncestorsOf: aVersionInfo to: all.
^ all!

Item was changed:
+ ----- Method: MCVersionSorter>>initialize (in category 'initialize-release') -----
- ----- Method: MCVersionSorter>>initialize (in category 'as yet unclassified') -----
initialize
stepparents := Dictionary new.
roots := OrderedCollection new.!

Item was changed:
+ ----- Method: MCVersionSorter>>knownAncestorsOf: (in category 'ancestry') -----
- ----- Method: MCVersionSorter>>knownAncestorsOf: (in category 'as yet unclassified') -----
knownAncestorsOf: aVersionInfo
^ aVersionInfo ancestors, (self stepParentsOf: aVersionInfo) asArray!

Item was changed:
+ ----- Method: MCVersionSorter>>layers (in category 'accessing') -----
- ----- Method: MCVersionSorter>>layers (in category 'as yet unclassified') -----
layers
^ layers!

Item was changed:
+ ----- Method: MCVersionSorter>>popLayer (in category 'private') -----
- ----- Method: MCVersionSorter>>popLayer (in category 'as yet unclassified') -----
popLayer
depthIndex := depthIndex - 1!

Item was changed:
+ ----- Method: MCVersionSorter>>processVersionInfo: (in category 'private') -----
- ----- Method: MCVersionSorter>>processVersionInfo: (in category 'as yet unclassified') -----
processVersionInfo: aVersionInfo
(self addToCurrentLayer: aVersionInfo) ifTrue:
[self pushLayer.
(self knownAncestorsOf: aVersionInfo) do: [:ea | self processVersionInfo: ea].
self popLayer]
!

Item was changed:
+ ----- Method: MCVersionSorter>>pushLayer (in category 'private') -----
- ----- Method: MCVersionSorter>>pushLayer (in category 'as yet unclassified') -----
pushLayer
depthIndex := depthIndex + 1.
depthIndex > layers size ifTrue: [layers add: OrderedCollection new].
!

Item was changed:
+ ----- Method: MCVersionSorter>>registerStepChildrenOf:seen: (in category 'private') -----
- ----- Method: MCVersionSorter>>registerStepChildrenOf:seen: (in category 'as yet unclassified') -----
registerStepChildrenOf: aVersionInfo seen: aSet
(aSet includes: aVersionInfo) ifTrue: [^ self].
aSet add: aVersionInfo.
aVersionInfo stepChildren do: [:ea | (self stepParentsOf: ea) add: aVersionInfo].
aVersionInfo ancestors do: [:ea | self registerStepChildrenOf: ea seen: aSet].!

Item was changed:
+ ----- Method: MCVersionSorter>>sortedVersionInfos (in category 'versions') -----
- ----- Method: MCVersionSorter>>sortedVersionInfos (in category 'as yet unclassified') -----
sortedVersionInfos
layers := OrderedCollection with: OrderedCollection new.
depthIndex := 1.
depths := Dictionary new.
roots do: [:ea | self processVersionInfo: ea].
^ layers gather: [:ea | ea]!

Item was changed:
+ ----- Method: MCVersionSorter>>stepParentsOf: (in category 'ancestry') -----
- ----- Method: MCVersionSorter>>stepParentsOf: (in category 'as yet unclassified') -----
stepParentsOf: aVersionInfo
^ (stepparents at: aVersionInfo ifAbsentPut: [Set new])!

Item was changed:
+ ----- Method: MCWorkingAncestry>>addAncestor: (in category 'accessing') -----
- ----- Method: MCWorkingAncestry>>addAncestor: (in category 'as yet unclassified') -----
addAncestor: aNode
ancestors := (self ancestors reject: [:each | aNode hasAncestor: each])
copyWith: aNode!

Item was changed:
+ ----- Method: MCWorkingAncestry>>addStepChild: (in category 'accessing') -----
- ----- Method: MCWorkingAncestry>>addStepChild: (in category 'as yet unclassified') -----
addStepChild: aVersionInfo
stepChildren := stepChildren copyWith: aVersionInfo!

Item was changed:
+ ----- Method: MCWorkingAncestry>>infoWithName:message: (in category 'versions') -----
- ----- Method: MCWorkingAncestry>>infoWithName:message: (in category 'as yet unclassified') -----
infoWithName: nameString message: messageString
^ MCVersionInfo
name: nameString
id: UUID new
message: messageString
date: Date today
time: Time now
author: Utilities authorInitials
ancestors: ancestors asArray
stepChildren: self stepChildren asArray!

Item was changed:
+ ----- Method: MCWorkingAncestry>>name (in category 'testing') -----
- ----- Method: MCWorkingAncestry>>name (in category 'as yet unclassified') -----
name
^ '<working copy>'!

Item was changed:
+ ----- Method: MCWorkingAncestry>>reparent: (in category 'operations') -----
- ----- Method: MCWorkingAncestry>>reparent: (in category 'as yet unclassified') -----
reparent: aNode
"Let aNode be the sole parent of this version"
ancestors := { aNode }
!

Item was changed:
+ ----- Method: MCWorkingAncestry>>summary (in category 'accessing') -----
- ----- Method: MCWorkingAncestry>>summary (in category 'as yet unclassified') -----
summary
^ 'Ancestors: ', self ancestorString!

Item was changed:
+ ----- Method: MCWorkingCopy class>>adoptVersionInfoFrom: (in category 'operations') -----
- ----- Method: MCWorkingCopy class>>adoptVersionInfoFrom: (in category 'as yet unclassified') -----
adoptVersionInfoFrom: anInstaller
|viCache|
viCache := Dictionary new.
anInstaller versionInfo keysAndValuesDo: [:packageName :info |
(self forPackage: (MCPackage named: packageName))
versionInfo: (self infoFromDictionary: info cache: viCache)].
[anInstaller clearVersionInfo] on: Error do: ["backwards compat"].!

Item was changed:
+ ----- Method: MCWorkingCopy class>>ancestorsFromArray:cache: (in category 'operations') -----
- ----- Method: MCWorkingCopy class>>ancestorsFromArray:cache: (in category 'as yet unclassified') -----
ancestorsFromArray: anArray cache: aDictionary
^ anArray ifNotNil: [anArray collect: [:dict | self infoFromDictionary: dict cache: aDictionary]]!

Item was changed:
+ ----- Method: MCWorkingCopy class>>checkModified: (in category 'operations') -----
- ----- Method: MCWorkingCopy class>>checkModified: (in category 'as yet unclassified') -----
checkModified: thorough
"Verify that all working copies with a modified flag are really modified, by comparing them to their stored snapshot. If the 'thorough' argument is true, check all packages, even unmodified ones."
"MCWorkingCopy checkModified: true"
| workingCopies |
workingCopies := self allManagers.
thorough ifFalse: [
workingCopies := workingCopies select: [:wc | wc modified]].
workingCopies do: [:wc | wc checkModified]
displayingProgress: [:wc | 'Checking package {1} for changes ...' translated format: {wc packageName}]!

Item was changed:
+ ----- Method: MCWorkingCopy class>>infoFromDictionary:cache: (in category 'operations') -----
- ----- Method: MCWorkingCopy class>>infoFromDictionary:cache: (in category 'as yet unclassified') -----
infoFromDictionary: aDictionary cache: cache
| id |
id := (aDictionary at: #id) asString.
^ cache at: id ifAbsentPut:
[MCVersionInfo
name: (aDictionary at: #name ifAbsent: [''])
id: (UUID fromString: id)
message: (aDictionary at: #message ifAbsent: [''])
date: ([Date fromString: (aDictionary at: #date)] ifError: [nil])
time: ([Time fromString: (aDictionary at: #time)] ifError: [nil])
author: (aDictionary at: #author ifAbsent: [''])
ancestors: (self ancestorsFromArray: (aDictionary at: #ancestors ifAbsent: []) cache: cache)
stepChildren: (self ancestorsFromArray: (aDictionary at: #stepChildren ifAbsent: []) cache: cache)]!

Item was changed:
+ ----- Method: MCWorkingCopy class>>initialize (in category 'class initialization') -----
- ----- Method: MCWorkingCopy class>>initialize (in category 'as yet unclassified') -----
initialize
Smalltalk
at: #MczInstaller
ifPresent: [:installer | self adoptVersionInfoFrom: installer].
self updateInstVars.
"Temporary conversion code -- remove later"
registry ifNotNil:[registry rehash]. "changed #="
self allInstancesDo:[:each| "moved notifications"
Smalltalk at: #SystemChangeNotifier ifPresent:[:cls|
cls uniqueInstance noMoreNotificationsFor: each.
].
].
self registerForNotifications.
Smalltalk addToStartUpList: self!

Item was changed:
+ ----- Method: MCWorkingCopy class>>updateInstVars (in category 'system maintenance') -----
- ----- Method: MCWorkingCopy class>>updateInstVars (in category 'as yet unclassified') -----
updateInstVars
self allInstances do: [:ea | ea updateInstVars]!

Item was changed:
+ ----- Method: MCWorkingCopyBrowser class>>initialize (in category 'class initialization') -----
- ----- Method: MCWorkingCopyBrowser class>>initialize (in category 'as yet unclassified') -----
initialize
(TheWorldMenu respondsTo: #registerOpenCommand:)
ifTrue: [TheWorldMenu registerOpenCommand: {'Monticello Browser'. {self. #open}}]!

Item was changed:
+ ----- Method: MCWorkingCopyBrowser class>>new (in category 'instance creation') -----
- ----- Method: MCWorkingCopyBrowser class>>new (in category 'as yet unclassified') -----
new
^ self basicNew initialize!

Item was changed:
+ ----- Method: MCWorkingCopyBrowser class>>open (in category 'instance creation') -----
- ----- Method: MCWorkingCopyBrowser class>>open (in category 'as yet unclassified') -----
open
self new show!

Item was changed:
+ ----- Method: MCWorkingHistoryBrowser>>baseSnapshot (in category 'accessing') -----
- ----- Method: MCWorkingHistoryBrowser>>baseSnapshot (in category 'as yet unclassified') -----
baseSnapshot
^ package snapshot!

Item was changed:
+ ----- Method: MCWriteOnlyRepository>>includesVersionNamed: (in category 'versions') -----
- ----- Method: MCWriteOnlyRepository>>includesVersionNamed: (in category 'as yet unclassified') -----
includesVersionNamed: aString
^ false!

Item was changed:
+ ----- Method: MCWriteOnlyRepository>>morphicOpen: (in category 'user interface') -----
- ----- Method: MCWriteOnlyRepository>>morphicOpen: (in category 'as yet unclassified') -----
morphicOpen: aWorkingCopy
self inform: 'This repository is write-only'!

Item was changed:
+ ----- Method: MCWriteOnlyRepository>>versionNamesForPackageNamed: (in category 'versions') -----
- ----- Method: MCWriteOnlyRepository>>versionNamesForPackageNamed: (in category 'as yet unclassified') -----
versionNamesForPackageNamed: aString
"Answer a collection of MCVersionNames whose Package is named aString."
^{}!

Item was changed:
+ ----- Method: MCWriteOnlyRepository>>versionWithInfo:ifAbsent: (in category 'versions') -----
- ----- Method: MCWriteOnlyRepository>>versionWithInfo:ifAbsent: (in category 'as yet unclassified') -----
versionWithInfo: aVersionInfo ifAbsent: aBlock
^ aBlock value!

Item was changed:
+ ----- Method: MethodAddition>>compile (in category 'compiling') -----
- ----- Method: MethodAddition>>compile (in category 'as yet unclassified') -----
compile
"This method is the how compiling a method used to work. All these steps were done at once.
This method should not normally be used, because the whole point of MethodAddition is to let
you first create a compiled method and then install the method later."
self createCompiledMethod.
self installMethod.
self notifyObservers.
^selector!

Item was changed:
+ ----- Method: MethodAddition>>compile:classified:withStamp:notifying:logSource:inClass: (in category 'initialize-release') -----
- ----- Method: MethodAddition>>compile:classified:withStamp:notifying:logSource:inClass: (in category 'as yet unclassified') -----
compile: aString classified: aString1 withStamp: aString2 notifying: aRequestor logSource: aBoolean inClass: aClass

text := aString.
category := aString1.
changeStamp := aString2.
requestor := aRequestor.
logSource := aBoolean.
myClass := aClass!

Item was changed:
+ ----- Method: MethodAddition>>createCompiledMethod (in category 'compiling') -----
- ----- Method: MethodAddition>>createCompiledMethod (in category 'as yet unclassified') -----
createCompiledMethod
| notification |
[methodAndNode := myClass
compile: text asString
environment: Environment current
notifying: requestor
trailer: (myClass defaultMethodTrailerIfLogSource: logSource)
ifFail: [^nil]]
on: SyntaxErrorNotification do: [:exc |
notification := exc.
exc pass].
notification ifNotNil: [notification newSource ifNotNil: [:newSource | text := newSource]].
selector := methodAndNode selector.
compiledMethod := methodAndNode method.
self writeSourceToLog.
priorMethodOrNil := myClass compiledMethodAt: selector ifAbsent: [nil].
!

Item was changed:
+ ----- Method: MethodAddition>>installMethod (in category 'compiling') -----
- ----- Method: MethodAddition>>installMethod (in category 'as yet unclassified') -----
installMethod
myClass addSelectorSilently: selector withMethod: compiledMethod.
!

Item was changed:
+ ----- Method: MethodAddition>>notifyObservers (in category 'compiling') -----
- ----- Method: MethodAddition>>notifyObservers (in category 'as yet unclassified') -----
notifyObservers
SystemChangeNotifier uniqueInstance
doSilently: [myClass organization classify: selector under: category suppressIfDefault: false].
priorMethodOrNil isNil
ifTrue: [SystemChangeNotifier uniqueInstance methodAdded: compiledMethod selector: selector inProtocol: category class: myClass requestor: requestor]
ifFalse: [SystemChangeNotifier uniqueInstance methodChangedFrom: priorMethodOrNil to: compiledMethod selector: selector inClass: myClass requestor: requestor].
"The following code doesn't seem to do anything."
myClass instanceSide noteCompilationOf: selector meta: myClass isClassSide.
!

Item was changed:
+ ----- Method: MethodAddition>>writeSourceToLog (in category 'compiling') -----
- ----- Method: MethodAddition>>writeSourceToLog (in category 'as yet unclassified') -----
writeSourceToLog
logSource ifTrue: [
myClass logMethodSource: text forMethodWithNode: methodAndNode
inCategory: category withStamp: changeStam

Loading...