[squeak-dev] The Trunk: Monticello-pre.690.mcz

commits at source.squeak.org commits at source.squeak.org
Fri Dec 7 08:58:54 UTC 2018


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
  	^ 'monticello at 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: changeStamp notifying: requestor.
  	].
  !



More information about the Squeak-dev mailing list