The Trunk: Monticello-pre.690.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

The Trunk: Monticello-pre.690.mcz

commits-2
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
  ^ '[hidden email]'!

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.
  ].
  !