Commits

Lars Wassermann committed 28ca33d

added test-running to the squeak image

Comments (0)

Files changed (2)

images/Squeak4.5-12568.changes

 Workspace allInstances do: [:w | w topView delete].
 ReleaseBuilderFor4dot4 prepareNewBuild.
 Smalltalk snapshot: true andQuit: true.
-!
----End fileIn of a stream----!
----SNAPSHOT----{31 March 2013 . 3:27:34 pm} Squeak4.5-12327.image priorSource: 7430688!
 
  		"Paste it before the second vertical bar"
 
 	root := dir
 ! !
 ! !
 ! !
 ! !
 ! !
    "Write a weak reference to anObject to the receiver stream. Answer anObject.
     If anObject is not a reference type of object, then just put it normally.
     A 'weak' reference means: If anObject gets written this stream via nextPut:,
     then its weak references will become normal references. Otherwise they'll
     read back as nil. -- "
    | typeID referencePosn |
    "Is it a reference type of object? If not, just write it normally."
    typeID := self typeIDFor: anObject.
    (self isAReferenceType: typeID) ifFalse: [^ self nextPut: anObject].
    "Have we heard of and maybe even written anObject before?"
    referencePosn := references at: anObject ifAbsentPut: [OrderedCollection new].
    "If referencePosn is an Integer, it's the stream position of anObject.
     Else it's a collection of hopeful weak-references to anObject."
    referencePosn isInteger ifFalse:
        [referencePosn add: byteStream position - basePos.		"relative"
        referencePosn := self vacantRef].
    self outputReference: referencePosn.		"relative"
    ^ anObject! !
 SoundMorph SubpaneDividerMorph
  		' 2002-05-16T17:20:45.00005' asDateAndTime
 		' 2002-05-16T17:20' asDateAndTime
 		' 2002-05-16T17:20:45-02:34' asDateAndTime
 		' 2002-05-16T17:20:45+00:00' asDateAndTime
 	"! !
 Browse methods whose initials (in the time-stamp, as logged to disk) match the given initials.
 Print out the complete time-stamp table to the Transcript.
 Answer a list of (initials -> count) associations.
+ aNumber 
- aNumber
+ aNumber
- aNumber
- I find latest ten projects in "My Squeak" and image directories (see: EToysLauncher>>directories).
- A thumbnail can be shown if there is "project name.gif" file.
- You can enter a project when you click a thumbnail.
- The list is updated when you go and back project.
   	| morphOrList archive mgr substituteFont numberOfFontSubstitutes resultArray anObject project manifests dict |
 	"Return a new ColorForm containing the portion of the receiver delineated by aRect."
   "Move an image around on the Display. Restore the background continuously without causing flashing. The argument, locationBlock, supplies each new location, and the argument, durationBlock, supplies true to continue or false to stop. This variant takes the bitsBehind as an input argument, and returns the final saved saved bits as method value."
   | location rect1 save1 save1Blt buffer bufferBlt newLoc rect2 bothRects |
   location := loc.
   rect1 := location extent: self extent.
   save1 := initialBitsBehind.
   save1Blt := BitBlt toForm: save1.
   buffer := Form extent: self extent*2 depth: Display depth.  "Holds overlapping region"
   bufferBlt := BitBlt toForm: buffer.
   Display deferUpdates: true.
   self displayOn: Display at: location rule: Form paint.
   Display deferUpdates: false; forceToScreen: (location extent: self extent).
   [durationBlock value] whileTrue: [
        "Paint a border whose rectangular area is defined by rect. The
        | blt |
        blt := (BitBlt toForm: self) combinationRule: rule; fillColor: fillColor.
        blt sourceOrigin: 0@0.
        blt destOrigin: rect origin.
        blt width: rect width; height: borderWidth; copyBits.
        blt destY: rect corner y - borderWidth; copyBits.
        blt destY: rect origin y + borderWidth.
        blt height: rect height - borderWidth - borderWidth; width:
        blt destX: rect corner x - borderWidth; copyBits! !
 | f f2 f3 | f := Form fromUser. f2 := Form fromDisplay: (0@0 extent: f extent). f3 := f2 deepCopy.
 | d |
 | f f2 p | [Sensor anyButtonPressed] whileFalse:
        "Answer a Form created as a scaling of the receiver.
        Scale may be a Float or even a Point, and may be greater or less than 1.0."
        | newForm |
        newForm := self blankCopyOf: aRectangle scaledBy: scale.
        (WarpBlt toForm: newForm)
                sourceForm: self;
                colorMap: (self colormapIfNeededFor: newForm);
                cellSize: cellSize;  "installs a new colormap if cellSize > 1"
                combinationRule: 3;
                copyQuad: aRectangle innerCorners toRect: newForm boundingBox.
        ^ newForm
        [(Display magnify: (Sensor cursorPoint extent: 131@81) by: 0.5 smoothing: 2) display]
        [cp := Sensor cursorPoint.
        (f magnify: f boundingBox by: (cp x asFloat@cp y asFloat)/f extent smoothing: 2) display]]
 | f f2 f3 | f := Form fromUser. f replaceColor: f peripheralColor withColor: Color transparent.
 | f diff | f := Form fromUser.
 | f f2 p | [Sensor anyButtonPressed] whileFalse:
 | a f |  f := Form fromDisplay: (0@0 extent: 200@200).  a := 0.
 | r tallies nonZero |
     correctAlphas := 0.
     0  to: 255 do: [:sourceAlpha |
         sourceForm := Form extent: 1 @ 1 depth: 32.
         sourceForm bits at: 1 put: sourceAlpha << 24 + (33 << 16) + (25 << 8) + 27.
         0 to: 255 do: [:destAlpha |
             destForm := Form extent: 1 @ 1 depth: 32.
             destForm bits at: 1 put: destAlpha << 24 + (255 << 16) + (255 << 8) + 255.
              blt := BitBlt new.
              blt sourceForm: sourceForm.
              blt sourceOrigin: 0 @ 0.
              blt setDestForm: destForm.
              blt destOrigin: 0 @ 0.
              blt combinationRule: 20.	"rgbAdd"
              blt copyBits.
              correctAlphas := correctAlphas
                + (((blt destForm bits at: 1) digitAt: 4) = (destAlpha + sourceAlpha min: 255)
                         ifTrue: [1]
                         ifFalse: [0])
      ]].
     self assert: 65536 equals: correctAlphas! !
     correctAlphas := 0.
     0  to: 255 do: [:sourceAlpha |
         sourceForm := Form extent: 1 @ 1 depth: 32.
         sourceForm bits at: 1 put: sourceAlpha << 24 + (33 << 16) + (25 << 8) + 27.
         0 to: 255 do: [:destAlpha |
             destForm := Form extent: 1 @ 1 depth: 32.
             destForm bits at: 1 put: destAlpha << 24 + (255 << 16) + (255 << 8) + 255.
              blt := BitBlt new.
              blt sourceForm: sourceForm.
              blt sourceOrigin: 0 @ 0.
              blt setDestForm: destForm.
              blt destOrigin: 0 @ 0.
              blt combinationRule: 27.	"rgbMax"
              blt copyBits.
              correctAlphas := correctAlphas
                + (((blt destForm bits at: 1) digitAt: 4) = (destAlpha max: sourceAlpha)
                         ifTrue: [1]
                         ifFalse: [0])
      ]].
     self assert: 65536 equals: correctAlphas! !
     correctAlphas := 0.
     0  to: 255 do: [:sourceAlpha |
         sourceForm := Form extent: 1 @ 1 depth: 32.
         sourceForm bits at: 1 put: sourceAlpha << 24 + (33 << 16) + (25 << 8) + 27.
         0 to: 255 do: [:destAlpha |
             destForm := Form extent: 1 @ 1 depth: 32.
             destForm bits at: 1 put: destAlpha << 24 + (255 << 16) + (255 << 8) + 255.
              blt := BitBlt new.
              blt sourceForm: sourceForm.
              blt sourceOrigin: 0 @ 0.
              blt setDestForm: destForm.
              blt destOrigin: 0 @ 0.
              blt combinationRule: 28.	"rgbMin"
              blt copyBits.
              correctAlphas := correctAlphas
                + (((blt destForm bits at: 1) digitAt: 4) = (destAlpha min: sourceAlpha)
                         ifTrue: [1]
                         ifFalse: [0])
      ]].
     self assert: 65536 equals: correctAlphas! !
     correctAlphas := 0.
     0  to: 255 do: [:sourceAlpha |
         sourceForm := Form extent: 1 @ 1 depth: 32.
         sourceForm bits at: 1 put: sourceAlpha << 24 + (33 << 16) + (25 << 8) + 27.
         0 to: 255 do: [:destAlpha |
             destForm := Form extent: 1 @ 1 depth: 32.
             destForm bits at: 1 put: destAlpha << 24 + (255 << 16) + (255 << 8) + 255.
              blt := BitBlt new.
              blt sourceForm: sourceForm.
              blt sourceOrigin: 0 @ 0.
              blt setDestForm: destForm.
              blt destOrigin: 0 @ 0.
              blt combinationRule: 29.	"rgbMinInvert"
              blt copyBits.
              correctAlphas := correctAlphas
                + (((blt destForm bits at: 1) digitAt: 4) = (destAlpha min: 255-sourceAlpha)
                         ifTrue: [1]
                         ifFalse: [0])
      ]].
     self assert: 65536 equals: correctAlphas! !
     correctAlphas := 0.
     0  to: 255 do: [:sourceAlpha |
         sourceForm := Form extent: 1 @ 1 depth: 32.
         sourceForm bits at: 1 put: sourceAlpha << 24 + (33 << 16) + (25 << 8) + 27.
         0 to: 255 do: [:destAlpha |
             destForm := Form extent: 1 @ 1 depth: 32.
             destForm bits at: 1 put: destAlpha << 24 + (255 << 16) + (255 << 8) + 255.
              blt := BitBlt new.
              blt sourceForm: sourceForm.
              blt sourceOrigin: 0 @ 0.
              blt setDestForm: destForm.
              blt destOrigin: 0 @ 0.
              blt combinationRule: 37.	"rgbMul"
              blt copyBits.
              correctAlphas := correctAlphas
                + (((blt destForm bits at: 1) digitAt: 4) = ((destAlpha+1) * (sourceAlpha+1)- 1 // 256)
                         ifTrue: [1]
                         ifFalse: [0])
      ]].
     self assert: 65536 equals: correctAlphas! !
     correctAlphas := 0.
     0  to: 255 do: [:sourceAlpha |
         sourceForm := Form extent: 1 @ 1 depth: 32.
         sourceForm bits at: 1 put: sourceAlpha << 24 + (33 << 16) + (25 << 8) + 27.
         0 to: 255 do: [:destAlpha |
             destForm := Form extent: 1 @ 1 depth: 32.
             destForm bits at: 1 put: destAlpha << 24 + (255 << 16) + (255 << 8) + 255.
              blt := BitBlt new.
              blt sourceForm: sourceForm.
              blt sourceOrigin: 0 @ 0.
              blt setDestForm: destForm.
              blt destOrigin: 0 @ 0.
              blt combinationRule: 21.	"rgbSub"
              blt copyBits.
              correctAlphas := correctAlphas
                + (((blt destForm bits at: 1) digitAt: 4) = (destAlpha - sourceAlpha) abs
                         ifTrue: [1]
                         ifFalse: [0])
      ]].
     self assert: 65536 equals: correctAlphas! !
     warp := (WarpBlt toForm: port destForm)
                combinationRule: Form paint;
                sourceQuad: sourceQuad destRect: (globalRect origin corner: globalRect corner+(1@1));
                clipRect: port clipRect.
        ^ (WarpBlt toForm: port destForm)
                combinationRule: Form paint;
                sourceQuad: sourceQuad destRect: (destRect translateBy: origin);
                clipRect: clipRect! !
  | drawingWasChanged |
 		combinationRule: Form over;
 ^ aClass organization allMethodSelectors collect: 
  |className|
  className := self class name asText copyFrom: 0 to: self class name size - 4.
  ^ Smalltalk at: (className asString asSymbol).
----QUIT----{31 March 2013 . 3:48:10 pm} Squeak4.5-12327.image priorSource: 7431144!
----STARTUP----{31 March 2013 . 3:49:25 pm} as /home/cmm/Chris/development/Squeak/Squeak4.5-12327.image!
----SNAPSHOT----{31 March 2013 . 3:49:41 pm} Squeak4.5-12568.image priorSource: 7915923!
----QUIT/NOSAVE----{31 March 2013 . 3:49:46 pm} Squeak4.5-12568.image priorSource: 7916116!
----STARTUP----{31 March 2013 . 3:50:44 pm} as /home/cmm/Chris/development/Squeak/Squeak4.5-12568.image!
----QUIT/NOSAVE----{31 March 2013 . 3:50:47 pm} Squeak4.5-12568.image priorSource: 7916116!
----STARTUP----{29 April 2013 . 12:03:57 pm} as /home/lars/Documents/spy/lang-smalltalk/images/Squeak4.5-12568.image!
   	| morphOrList archive mgr substituteFont numberOfFontSubstitutes resultArray anObject project manifests dict |
----SNAPSHOT----{29 April 2013 . 12:47:48 pm} Squeak4.5-12568.image priorSource: 7916116!
    <version: '1.0-baseline'>
    spec
        for: #'common'
        do: [ 
            spec blessing: #'baseline'.
            spec repository: 'http://ss3.gemstone.com/ss/FileTree'.
            spec package: 'MonticelloFileTree-Core'.
            spec group: 'default' with: #('MonticelloFileTree-Core') ].
    spec
        for: #'pharo1.1.x'
        do: [ 
            spec
                package: 'MonticelloFileTree-Core' with: [ spec file: 'MonticelloFileTree-Core.pharo11' ];
                package: 'MonticelloFileTree-FileDirectory-Utilities'
                    with: [ 
                            spec
                                file: 'MonticelloFileTree-FileDirectory-Utilities.pharo11';
                                requires: 'MonticelloFileTree-Core' ].
            spec group: 'default' with: #('MonticelloFileTree-FileDirectory-Utilities') ].
    spec
        for: #'pharo1.2.x'
        do: [ 
            spec
                package: 'MonticelloFileTree-Core' with: [ spec file: 'MonticelloFileTree-Core.pharo11' ];
                package: 'MonticelloFileTree-FileDirectory-Utilities'
                    with: [ 
                            spec
                                file: 'MonticelloFileTree-FileDirectory-Utilities.pharo11';
                                requires: 'MonticelloFileTree-Core' ].
            spec group: 'default' with: #('MonticelloFileTree-FileDirectory-Utilities') ].
    spec
        for: #'pharo1.3.x'
        do: [ 
            spec
                package: 'MonticelloFileTree-Core' with: [ spec file: 'MonticelloFileTree-Core.pharo13' ];
                package: 'MonticelloFileTree-FileDirectory-Utilities'
                    with: [ 
                            spec
                                file: 'MonticelloFileTree-FileDirectory-Utilities.pharo13';
                                requires: 'MonticelloFileTree-Core' ].
            spec group: 'default' with: #('MonticelloFileTree-FileDirectory-Utilities') ].
    spec
        for: #'pharo1.4.x'
        do: [ 
            spec
                package: 'MonticelloFileTree-Core' with: [ spec file: 'MonticelloFileTree-Core.pharo14' ];
                package: 'MonticelloFileTree-FileDirectory-Utilities'
                    with: [ 
                            spec
                                file: 'MonticelloFileTree-FileDirectory-Utilities.pharo14';
                                requires: 'MonticelloFileTree-Core' ].
            spec group: 'default' with: #('MonticelloFileTree-FileDirectory-Utilities') ].
    spec
        for: #'pharo2.x'
        do: [ 
            spec
                package: 'MonticelloFileTree-Core' with: [ spec file: 'MonticelloFileTree-Core.pharo20' ];
                package: 'MonticelloFileTree-FileSystem-Utilities'
                    with: [ 
                            spec
                                file: 'MonticelloFileTree-FileSystem-Utilities.pharo20';
                                requires: 'MonticelloFileTree-Core' ].
            spec group: 'default' with: #('MonticelloFileTree-FileSystem-Utilities') ].
    spec
        for: #'squeak'
        do: [ 
            spec
                package: 'MonticelloFileTree-Core' with: [ spec file: 'MonticelloFileTree-Core.squeak43' ];
                package: 'MonticelloFileTree-FileDirectory-Utilities'
                    with: [ 
                            spec
                                file: 'MonticelloFileTree-FileDirectory-Utilities.squeak43';
                                requires: 'MonticelloFileTree-Core' ].
            spec group: 'default' with: #('MonticelloFileTree-FileDirectory-Utilities') ].
    spec
        for: #'gemstone'
        do: [ 
            spec
                project: 'GsCore'
                    with: [ 
                            spec
                                className: 'ConfigurationOfGsCore';
                                repository: 'http://seaside.gemstone.com/ss/MetacelloRepository' ];
                project: 'Monticello'
                    with: [ 
                            spec
                                className: 'ConfigurationOfGsMonticello';
                                repository: 'http://seaside.gemstone.com/ss/MetacelloRepository' ].
            spec
                package: 'MonticelloFileTree-Core'
                    with: [ 
                            spec
                                file: 'MonticelloFileTree-Core.gemstone24';
                                requires: #('GsCore' 'Monticello') ];
                package: 'MonticelloFileTree-FileDirectory-Utilities'
                    with: [ 
                            spec
                                file: 'MonticelloFileTree-FileDirectory-Utilities.gemstone24';
                                requires: 'MonticelloFileTree-Core' ].
            spec group: 'default' with: #('MonticelloFileTree-FileDirectory-Utilities') ]! !
    "Edit to return a collection of any custom attributes e.g. for conditional loading: Array with: #'Condition1' with: #'Condition2.
    ^ #()! !
    ^ project
        ifNil: [ 
            "Bootstrap Metacello if it is not already loaded"
            self class ensureMetacello.
            project := MetacelloMCProject new projectAttributes: self customProjectAttributes.	"Create the Metacello project"
            (Smalltalk at: #'MetacelloVersionConstructor') on: self project: project.	"Construct the project"
            project loadType: #'linear'.	"change to #atomic if desired"
            project ]! !
    <symbolicVersion: #'stable'>
    spec for: #'common' version: '1.0.1'! !
    <version: '1.0' imports: #('1.0-baseline')>
    spec
        for: #'common'
        do: [ 
            spec blessing: #'release'.
            spec description: 'FileTree 1.0'.
            spec author: 'dkh'.
            spec timestamp: '9/15/2012 14:10' ].
    spec
        for: #'pharo1.1.x'
        do: [ 
            spec
                package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo11-dkh.92';
                package: 'MonticelloFileTree-FileDirectory-Utilities'
                    with: 'MonticelloFileTree-FileDirectory-Utilities.pharo11-dkh.14'  ].
    spec
        for: #'pharo1.2.x'
        do: [ 
            spec
                package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo11-dkh.92';
                package: 'MonticelloFileTree-FileDirectory-Utilities'
                    with: 'MonticelloFileTree-FileDirectory-Utilities.pharo11-dkh.14'  ].
    spec
        for: #'pharo1.3.x'
        do: [ 
            spec
                package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo13-dkh.90';
                package: 'MonticelloFileTree-FileDirectory-Utilities'
                    with: 'MonticelloFileTree-FileDirectory-Utilities.pharo13-dkh.12' ].
    spec
        for: #'pharo1.4.x'
        do: [ 
            spec
                package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo14-dkh.90';
                package: 'MonticelloFileTree-FileDirectory-Utilities'
                    with: 'MonticelloFileTree-FileDirectory-Utilities.pharo14-dkh.12' ].
    spec
        for: #'pharo2.x'
        do: [ 
            spec
                package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo20-dkh.91';
                package: 'MonticelloFileTree-FileSystem-Utilities'
                    with: 'MonticelloFileTree-FileSystem-Utilities.pharo20-dkh.17' ].
    spec
        for: #'squeak'
        do: [ 
            spec
                package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.squeak43-dkh.90';
                package: 'MonticelloFileTree-FileDirectory-Utilities'
                    with: 'MonticelloFileTree-FileDirectory-Utilities.squeak43-dkh.12' ].
    spec
        for: #'gemstone'
        do: [ 
            spec
                project: 'GsCore' with: '0.246';
                project: 'Monticello' with: '0.243'.
            spec
                package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.gemstone24-dkh.92';
                package: 'MonticelloFileTree-FileDirectory-Utilities'
                    with: 'MonticelloFileTree-FileDirectory-Utilities.gemstone24-dkh.14' ]! !
    <version: '1.0.1' imports: #('1.0-baseline')>
    spec
        for: #'common'
        do: [ 
            spec blessing: #'release'.
            spec description: 'port to GemStone 3.1.x
- write out gemstone class options in class definitions correctly
- fix problems in filename generation in presence of specials
- port to GemStone 3.2
- fix Issue #69:
  https://github.com/dalehenrich/filetree/issues/69
- commit: d861c5d76ecc762d6cb4f11f6ec6c1ba45d6bdc0'.
            spec author: 'dkh'.
            spec timestamp: '3/12/2013 16:30' ].
    spec
        for: #'pharo1.1.x'
        do: [ 
            spec
                package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo11-dkh.95';
                package: 'MonticelloFileTree-FileDirectory-Utilities'
                    with: 'MonticelloFileTree-FileDirectory-Utilities.pharo11-dkh.14'  ].
    spec
        for: #'pharo1.2.x'
        do: [ 
            spec
                package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo11-dkh.95';
                package: 'MonticelloFileTree-FileDirectory-Utilities'
                    with: 'MonticelloFileTree-FileDirectory-Utilities.pharo11-dkh.14'  ].
    spec
        for: #'pharo1.3.x'
        do: [ 
            spec
                package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo13-dkh.93';
                package: 'MonticelloFileTree-FileDirectory-Utilities'
                    with: 'MonticelloFileTree-FileDirectory-Utilities.pharo13-dkh.12' ].
    spec
        for: #'pharo1.4.x'
        do: [ 
            spec
                package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo14-dkh.93';
                package: 'MonticelloFileTree-FileDirectory-Utilities'
                    with: 'MonticelloFileTree-FileDirectory-Utilities.pharo14-dkh.12' ].
    spec
        for: #'pharo2.x'
        do: [ 
            spec
                package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo20-dkh.91';
                package: 'MonticelloFileTree-FileSystem-Utilities'
                    with: 'MonticelloFileTree-FileSystem-Utilities.pharo20-dkh.17' ].
    spec
        for: #'squeak'
        do: [ 
            spec
                package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.squeak43-dkh.92';
                package: 'MonticelloFileTree-FileDirectory-Utilities'
                    with: 'MonticelloFileTree-FileDirectory-Utilities.squeak43-dkh.12' ].
    spec
        for: #'gemstone'
        do: [ 
            spec
                project: 'GsCore' with: '0.246';
                project: 'Monticello' with: '0.243'.
            spec
                package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.gemstone24-dkh.99';
                package: 'MonticelloFileTree-FileDirectory-Utilities'
                    with: 'MonticelloFileTree-FileDirectory-Utilities.gemstone24-dkh.14' ].
                package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.gemstone24-dkh.99' ].
                package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.gemstone24-dkh.99' ].
    <version: '1.0.2' imports: #('1.0-baseline')>
    spec
        for: #'common'
        do: [ 
            spec blessing: #'development'.
            spec description: ''.
            spec author: 'dkh'.
            spec timestamp: '3/12/2013 16:30' ].
    spec
        for: #'pharo1.1.x'
        do: [ 
            spec
                package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo11-dkh.95';
                package: 'MonticelloFileTree-FileDirectory-Utilities'
                    with: 'MonticelloFileTree-FileDirectory-Utilities.pharo11-dkh.14'  ].
    spec
        for: #'pharo1.2.x'
        do: [ 
            spec
                package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo11-dkh.95';
                package: 'MonticelloFileTree-FileDirectory-Utilities'
                    with: 'MonticelloFileTree-FileDirectory-Utilities.pharo11-dkh.14'  ].
    spec
        for: #'pharo1.3.x'
        do: [ 
            spec
                package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo13-dkh.93';
                package: 'MonticelloFileTree-FileDirectory-Utilities'
                    with: 'MonticelloFileTree-FileDirectory-Utilities.pharo13-dkh.12' ].
    spec
        for: #'pharo1.4.x'
        do: [ 
            spec
                package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo14-dkh.93';
                package: 'MonticelloFileTree-FileDirectory-Utilities'
                    with: 'MonticelloFileTree-FileDirectory-Utilities.pharo14-dkh.12' ].
    spec
        for: #'pharo2.x'
        do: [ 
            spec
                package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo20-dkh.91';
                package: 'MonticelloFileTree-FileSystem-Utilities'
                    with: 'MonticelloFileTree-FileSystem-Utilities.pharo20-dkh.17' ].
    spec
        for: #'squeak'
        do: [ 
            spec
                package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.squeak43-dkh.92';
                package: 'MonticelloFileTree-FileDirectory-Utilities'
                    with: 'MonticelloFileTree-FileDirectory-Utilities.squeak43-dkh.12' ].
    spec
        for: #'gemstone'
        do: [ 
            spec
                project: 'GsCore' with: '0.246';
                project: 'Monticello' with: '0.243'.
            spec
                package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.gemstone24-dkh.99';
                package: 'MonticelloFileTree-FileDirectory-Utilities'
                    with: 'MonticelloFileTree-FileDirectory-Utilities.gemstone24-dkh.14' ].
                package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.gemstone24-dkh.99' ].
                package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.gemstone24-dkh.99' ].
    project: 'FileTree';
    install: 'ConfigurationOfFileTree'.!
- Gofer treats packages from one or more repository in one operation.
- Gofer works with fixed versions or tries to find the "latest" version using a given name prefix.
- Gofer automatically assigns repositories to all packages, so that the other tools are ready to be used on individual packages.
- Gofer makes sure that there is only one repository instance registered for a single physical location.
- Gofer works with Monticello dependencies and uniformly treats them like the primary package.
- Gofer prefers to work with faster repositories if there is a choice.
- Gofer cleans up after Monticello, no empty class categories and no empty method protocols are to be expected.
    "Corresponds to version 1.0-beta.31.1.5"
    | minimumPackages |
    self ensureGoferVersion: 'Gofer-Core-lr.115' repositoryUrl: repositoryUrl.
    minimumPackages := OrderedCollection
        withAll: #('Metacello-Base-DaleHenrichs.19' 'Metacello-Core-dkh.492' 'Metacello-MC-dkh.664').
    self platformPackage ifNotNil: [ :pkg | minimumPackages add: pkg ].
    minimumPackages do: [ :pkg | self bootstrapPackage: pkg from: repositoryUrl ]! !
    "Bootstrap Metacello and load the minimum support"
    self ensureMetacello: #('Metacello-Core')! !
    "Bootstrap Metacello and load the 'default' group"
    self ensureMetacello: #('batch')! !
    "Bootstrap Metacello, retry using alternate repository, if primary repository is not accessible"
    Smalltalk
        at: #'MetacelloProject'
        ifAbsent: [ 
            | retry version error |
            retry := false.
            (Array with: 'http://seaside.gemstone.com/ss/metacello' with: 'http://www.squeaksource.com/metacello')
                do: [ :repositoryUrl | 
                    [ 
                    "bootstrap Metacello"
                    self bootstrapMetacelloFrom: repositoryUrl.	"load latest version of Metacello"
                    version := self project latestVersion.
                    retry
                        ifTrue: [ 
                            "on retry, use #repositoryOverrides:"
                            version
                                repositoryOverrides:
                                    (Array with: (MCHttpRepository location: repositoryUrl user: '' password: '')) ].
                    version load: loadList.
                    ^ self ]
                        on: Error
                        do: [ :ex | 
                            error := ex.
                            Transcript
                                cr;
                                show: 'failed ensureMetacello: ';
                                show: ex description printString;
                                show: '...retrying'.	"try again"
                            retry := true.
                            ex return: nil ] ].	"shouldn't get here unless the load failed ... throw an error"
            self error: 'retry with alternate repository failed: ' , error description printString ]! !
    "self validate"
    self ensureMetacello.
    ^ ((Smalltalk at: #'MetacelloToolBox') validateConfiguration: self debug: #() recurse: false) explore! !
- ''default'' group is just the core ... class-side loaders load ''ALL'' by default
- pull in some old tests that still apply
- combine Metacello-ConfigTests into Metacello-TestsMC
- rename Metacello-ReferenceTests to Metacello-TestsReference
- recast tutorial to new API
- add Samples group (Metacello-Configuration [duh] and Seaside-Metacello-Configuration'.
- Samples group includes Seaside-Metacello-Configuration and GemTools-Configuraton (Metacello-Configuration should not be included ... it is always present)'.
    <version: '1.0-beta.31.1.5-baseline'>
    spec
        for: #'common'
        do: [ 
            spec blessing: #'baseline'.
            spec repository: 'http://seaside.gemstone.com/ss/metacello'.
            spec repository: 'http://www.squeaksource.com/metacello'.
            spec
                project: 'Gofer Core'
                    with: [ 
                            spec
                                className: 'ConfigurationOfGofer';
                                versionString: '1.0-baseline';
                                loads: #('Core');
                                file: 'ConfigurationOfGofer';
                                repository: 'http://www.squeaksource.com/MetacelloRepository';
                                repository: 'http://seaside.gemstone.com/ss/metacello' ];
                project: 'Gofer Tests' copyFrom: 'Gofer Core' with: [ spec loads: #('Tests') ];
                yourself.
            spec
                package: 'Metacello-Base';
                package: 'Metacello-ToolBox' with: [ spec requires: #('Metacello-Base' 'Metacello-Core') ];
                package: 'Metacello-Core'
                    with: [ 
                            spec
                                requires: 'Metacello-Base';
                                includes: #('Metacello-MC' 'Metacello-Platform') ];
                package: 'Metacello-MC' with: [ spec requires: #('Metacello-Core' 'Gofer Core') ];
                package: 'Metacello-Platform' with: [ spec requires: #('Metacello-MC') ];
                package: 'Metacello-Reference' with: [ spec requires: #('Metacello-MC') ];
                package: 'Metacello-Tutorial' with: [ spec requires: #('Metacello-Core') ];
                package: 'Metacello-TestsCore' with: [ spec requires: #('Metacello-Core') ];
                package: 'Metacello-TestsMC'
                    with: [ 
                            spec
                                postLoadDoIt: #'testsMC10beta25PostLoadDoIt';
                                requires: #('Metacello-ToolBox' 'Metacello-MC' 'Gofer Tests') ];
                package: 'Metacello-TestsReference' with: [ spec requires: #('Metacello-Reference') ];
                package: 'Metacello-TestsTutorial' with: [ spec requires: #('Metacello-Tutorial' 'Metacello-TestsMC') ];
                package: 'OB-Metacello'
                    with: [ spec requires: #('Metacello-Platform' 'Metacello-Core' 'Metacello-ToolBox') ];
                yourself.
            spec
                group: 'default' with: #('Metacello-Core' 'Metacello-ToolBox');
                group: 'batch' with: #('Metacello-Core');
                group: 'Base Configuration' with: #('Metacello-Base');
                group: 'Core' with: #('default');
                group: 'Tutorial' with: #('Metacello-Tutorial' 'Metacello-Reference');
                group: 'UI' with: #('OB-Metacello');
                group: 'TravisCI'
                    with:
                        #('Metacello-TestsCore' 'Metacello-TestsTutorial' 'Metacello-TestsMC' 'Metacello-TestsReference');
                group: 'Tests'
                    with:
                        #('default' 'Metacello-TestsCore' 'Metacello-TestsTutorial' 'Metacello-TestsMC' 'Metacello-TestsReference');
                yourself ].
    spec
        for: #'squeakCommon'
        do: [ 
            spec
                project: 'Help System'
                    with: [ 
                            spec
                                className: 'ConfigurationOfHelpSystem';
                                versionString: '1.0-baseline';
                                loads: #('Core');
                                file: 'ConfigurationOfHelpSystem';
                                repository: 'http://www.squeaksource.com/MetacelloRepository' ];
                project: 'OB'
                    with: [ 
                            spec
                                className: 'ConfigurationOfOmniBrowser';
                                versionString: '1.1-baseline';
                                loads: #('Core');
                                file: 'ConfigurationOfOmniBrowser';
                                repository: 'http://www.squeaksource.com/MetacelloRepository' ];
                yourself.
            spec
                package: 'Metacello-TestsPlatform'
                    with: [ 
                            spec
                                requires: #('Metacello-Platform');
                                file: 'Metacello-TestsPlatform.squeakCommon' ];
                package: 'Metacello-Help' with: [ spec requires: 'Help System' ];
                package: 'OB-Metacello' with: [ spec requires: #('OB') ];
                yourself.
            spec
                group: 'default' with: #('Metacello-Help');
                group: 'TravisCI' with: #('Metacello-TestsPlatform');
                group: 'Tests' with: #('Metacello-TestsPlatform');
                yourself ].
    spec
        for: #'pharo'
        do: [ 
            spec
                project: 'ProfStef'
                    with: [ 
                            spec
                                className: 'ConfigurationOfProfStef';
                                versionString: '1.0-baseline';
                                file: 'ConfigurationOfProfStef';
                                repository: 'http://www.squeaksource.com/MetacelloRepository' ];
                yourself.
            spec
                package: 'Metacello-ProfStef'
                    with: [ spec requires: #('Metacello-Core' 'ProfStef' 'Metacello-ToolBox') ];
                package: 'Metacello-TestsProfStef' with: [ spec requires: #('Metacello-ProfStef') ];
                package: 'Metacello-Platform' with: 'Metacello-Platform.pharo';
                yourself.
            spec
                group: 'Tests' with: #('Metacello-TestsProfStef');
                group: 'Tutorial' with: #('Metacello-ProfStef');
                yourself ].
    spec for: #'pharo1.0.x' do: [ spec package: 'Metacello-ProfStef' with: [ spec file: 'Metacello-ProfStef.toolset' ] ].
    spec for: #'pharo1.1.x' do: [ spec package: 'Metacello-ProfStef' with: [ spec file: 'Metacello-ProfStef.toolset' ] ].
    spec
        for: #'pharo1.2.x'
        do: [ 
            spec
                package: 'Metacello-ProfStef' with: [ spec file: 'Metacello-ProfStef.toolset' ];
                package: 'Metacello-TestsMC' with: [ spec includes: #('Metacello-Issue3758') ];
                package: 'Metacello-Issue3758' with: [ spec requires: #('Metacello-TestsMC') ];
                yourself ].
    spec
        for: #'pharo1.3.x'
        do: [ 
            spec
                package: 'Metacello-TestsMC' with: [ spec includes: #('Metacello-Issue3758') ];
                package: 'Metacello-Issue3758' with: [ spec requires: #('Metacello-TestsMC') ];
                yourself ].
    spec
        for: #'pharo2.x'
        do: [ 
            spec
                package: 'Metacello-Platform' with: 'Metacello-Platform.pharo20';
                yourself ].
    spec
        for: #'squeak'
        do: [ 
            spec
                package: 'Metacello-Platform' with: 'Metacello-Platform.squeak';
                yourself ].
    spec
        for: #'gemstone'
        do: [ 
            spec
                project: 'Monticello'
                    with: [ 
                            spec
                                className: 'ConfigurationOfGsMonticello';
                                repository: 'http://seaside.gemstone.com/ss/MetacelloRepository' ];
                project: 'OB'
                    with: [ 
                            spec
                                className: 'ConfigurationOfGsOB';
                                repository: 'http://seaside.gemstone.com/ss/MetacelloRepository' ];
                yourself.
            spec
                package: 'Metacello-Platform'
                    with: [ 
                            spec
                                file: 'Metacello-Platform.gemstone';
                                postLoadDoIt: #'gemstone10beta311PostLoadDoIt';
                                requires: 'Monticello' ];
                package: 'Metacello-TestsPlatform'
                    with: [ 
                            spec
                                requires: #('Metacello-Platform');
                                file: 'Metacello-TestsPlatform.gemstone' ];
                package: 'OB-Metacello' with: [ spec requires: #('OB') ];
                yourself.
            spec
                group: 'Tests' with: #('Metacello-TestsPlatform');
                group: 'TravisCI' with: #('Metacello-TestsPlatform');
                yourself ]! !
    <version: '1.0-beta.32-baseline'>
    spec
        for: #'common'
        do: [ 
            spec blessing: #'baseline'.
            spec repository: 'http://seaside.gemstone.com/ss/metacello'.
            spec repository: 'http://www.squeaksource.com/metacello'.
            spec
                project: 'FileTree'
                    with: [ 
                            spec
                                className: 'ConfigurationOfFileTree';
                                versionString: '1.0-baseline';
                                repository: 'http://ss3.gemstone.com/ss/FileTree' ];
                project: 'Gofer'
                    with: [ 
                            spec
                                className: 'ConfigurationOfGofer';
                                versionString: '1.0-baseline';
                                loads: #('Core');
                                repository: 'http://seaside.gemstone.com/ss/metacello' ];
                project: 'Gofer Tests' copyFrom: 'Gofer' with: [ spec loads: #('Tests') ];
                yourself.
            spec
                package: 'Metacello-Base';
                package: 'Metacello-ToolBox' with: [ spec requires: #('Metacello-Base' 'Metacello-Core') ];
                package: 'Metacello-Core'
                    with: [ 
                            spec
                                requires: 'Metacello-Base';
                                includes: #('Metacello-MC' 'Metacello-Platform') ];
                package: 'Metacello-FileTree' with: [ spec requires: #('Metacello-MC' 'FileTree') ];
                package: 'Metacello-GitHub' with: [ spec requires: #('Metacello-MC' 'Metacello-FileTree') ];
                package: 'Metacello-MC' with: [ spec requires: #('Metacello-Core' 'Gofer') ];
                package: 'Metacello-Platform' with: [ spec requires: #('Metacello-MC') ];
                package: 'Metacello-Reference' with: [ spec requires: #('Metacello-MC') ];
                package: 'Metacello-Tutorial' with: [ spec requires: #('Metacello-Core') ];
                package: 'Metacello-TestsCore' with: [ spec requires: #('Metacello-Core') ];
                package: 'Metacello-TestsMC'
                    with: [ 
                            spec
                                postLoadDoIt: #'testsMC10beta25PostLoadDoIt';
                                requires: #('Metacello-MC' 'Metacello-TestsCore' 'Gofer Tests' 'Metacello-ToolBox') ];
                package: 'Metacello-TestsReference' with: [ spec requires: #('Metacello-Reference') ];
                package: 'Metacello-TestsTutorial' with: [ spec requires: #('Metacello-Tutorial' 'Metacello-TestsMC') ];
                package: 'OB-Metacello'
                    with: [ spec requires: #('Metacello-Platform' 'Metacello-Core' 'Metacello-ToolBox') ];
                yourself.
            spec
                group: 'default' with: #('Metacello-Core' 'Metacello-ToolBox' 'Metacello-GitHub');
                group: 'batch' with: #('Metacello-Core' 'Metacello-GitHub');
                group: 'Base Configuration' with: #('Metacello-Base');
                group: 'Core' with: #('default');
                group: 'Tutorial' with: #('Metacello-Tutorial' 'Metacello-Reference');
                group: 'UI' with: #('OB-Metacello');
                group: 'TravisCI'
                    with:
                        #('Metacello-TestsCore' 'Metacello-TestsTutorial' 'Metacello-TestsMC' 'Metacello-TestsReference');
                group: 'Tests'
                    with:
                        #('default' 'Metacello-TestsCore' 'Metacello-TestsTutorial' 'Metacello-TestsMC' 'Metacello-TestsReference');
                yourself ].
    spec
        for: #'squeakCommon'
        do: [ 
            spec
                project: 'HelpSystem'
                    with: [ 
                            spec
                                className: 'ConfigurationOfHelpSystem';
                                versionString: #'1.0-baseline';
                                loads: #('Core');
                                repository: 'http://www.squeaksource.com/MetacelloRepository' ];
                project: 'OmniBrowser'
                    with: [ 
                            spec
                                className: 'ConfigurationOfOmniBrowser';
                                versionString: #'stable';
                                loads: #('Core');
                                repository: 'http://www.squeaksource.com/MetacelloRepository' ];
                project: 'OSProcess'
                    with: [ 
                            spec
                                className: 'ConfigurationOfOSProcess';
                                versionString: #'stable';
                                repository: 'http://www.squeaksource.com/MetacelloRepository' ];
                yourself.
            spec
                package: 'Metacello-TestsPlatform'
                    with: [ 
                            spec
                                requires: #('Metacello-Platform');
                                file: 'Metacello-TestsPlatform.squeakCommon' ];
                package: 'Metacello-Help' with: [ spec requires: 'HelpSystem' ];
                package: 'OB-Metacello' with: [ spec requires: #('OmniBrowser') ];
                yourself.
            spec
                group: 'Tests' with: #('Metacello-TestsPlatform');
                group: 'TravisCI' with: #('Metacello-TestsPlatform');
                yourself ].
    spec
        for: #'pharo'
        do: [ 
            spec
                project: 'ProfStef'
                    with: [ 
                            spec
                                className: 'ConfigurationOfProfStef';
                                versionString: #'stable';
                                repository: 'http://www.squeaksource.com/MetacelloRepository' ];
                yourself.
            spec
                package: 'Metacello-ProfStef'
                    with: [ spec requires: #('Metacello-Core' 'ProfStef' 'Metacello-ToolBox') ];
                package: 'Metacello-TestsProfStef' with: [ spec requires: #('Metacello-ProfStef') ];
                package: 'Metacello-Platform'
                    with: [ 
                            spec
                                file: 'Metacello-Platform.pharo';
                                requires: #('OSProcess') ];
                yourself.
            spec
                group: 'Tests' with: #('Metacello-TestsProfStef');
                group: 'Tutorial' with: #('Metacello-ProfStef');
                yourself ].
    spec
        for: #'pharo2.x'
        do: [ 
            spec removeProject: 'OmniBrowser'.
            spec package: 'Metacello-Platform' with: [ spec file: 'Metacello-Platform.pharo20' ] ].
    spec
        for: #'squeak'
        do: [ 
            spec yourself.
            spec
                package: 'Metacello-Platform'
                    with: [ 
                            spec
                                file: 'Metacello-Platform.squeak';
                                requires: #('OSProcess') ];
                yourself ].
    spec
        for: #'gemstone'
        do: [ 
            spec
                project: 'GsCore'
                    with: [ 
                            spec
                                className: 'ConfigurationOfGsCore';
                                versionString: '0.247';
                                repository: 'http://seaside.gemstone.com/ss/MetacelloRepository' ];
                project: 'GsMonticello'
                    with: [ 
                            spec
                                className: 'ConfigurationOfGsMonticello';
                                versionString: '0.242';
                                repository: 'http://seaside.gemstone.com/ss/MetacelloRepository' ];
                project: 'OmniBrowser'
                    with: [ 
                            spec
                                className: 'ConfigurationOfGsOB';
                                versionString: #'stable';
                                repository: 'http://seaside.gemstone.com/ss/MetacelloRepository' ];
                yourself.
            spec
                package: 'Metacello-GitHub' with: [ spec requires: #('GsCore') ];
                package: 'Metacello-MC' with: [ spec preLoadDoIt: #'gemstone10beta24PreLoadDoIt' ];
                package: 'Metacello-Platform'
                    with: [ 
                            spec
                                file: 'Metacello-Platform.gemstone';
                                postLoadDoIt: #'gemstone10beta311PostLoadDoIt';
                                requires: 'GsMonticello' ];
                package: 'Metacello-TestsPlatform'
                    with: [ 
                            spec
                                requires: #('Metacello-Platform');
                                file: 'Metacello-TestsPlatform.gemstone' ];
                package: 'OB-Metacello' with: [ spec requires: #('OmniBrowser') ];
                yourself.
            spec
                group: 'Tests' with: #('Metacello-TestsPlatform');
                group: 'TravisCI' with: #('Metacello-TestsPlatform');
                yourself ]! !
    <symbolicVersion: #'bleedingEdge'>
    spec for: #'common' version: '1.0-beta.31.1.5-baseline'! !
    "Edit to return a collection of any custom attributes e.g. for conditional loading: Array with: #'Condition1' with: #'Condition2.
    | attributes |
    attributes := #(#'Gofer-Core').
    Smalltalk
        at: #'SystemVersion'
        ifPresent: [ :cl | 
            (cl current version beginsWith: 'Pharo')
                ifTrue: [ 
                    (cl current perform: #'highestUpdate') <= 10504
                        ifTrue: [ attributes := #(#'Gofer') ] ] ].
    ^ attributes! !
    <symbolicVersion: #'development'>
    spec for: #'common' version: #'notDefined'! !
    (Smalltalk at: #'MetacelloProjectRegistration') perform: #'primeRegistryFromImage'! !
    ^ project
        ifNil: [ 
            "Bootstrap Metacello if it is not already loaded"
            self class ensureMetacello.
            project := (Smalltalk at: #'MetacelloMCProject') new projectAttributes: self customProjectAttributes.	"Create the Metacello project"
            (Smalltalk at: #'MetacelloVersionConstructor') on: self project: project.	"Construct the project"
            project loadType: #'linear'.	"change to #atomic if desired"
            project ]! !
    <symbolicVersion: #'stable'>
    spec for: #'common' version: '1.0-beta.31.1.6'! !
- improve error message for missing import
- fix a couple of bugs in spawn new version
- if versionString is not specified in project reference, use #latestVersion of the project
- ''Update Package Method'' command updates the versionString for project reference to #currentVersion of the project
- ''Spawn New Version'' command spawns entry for proejct reference using #currentVersion of the project
- latest version of configuration package is loaded if the project reference refers to a version whose blessing is #development
- refactor #saveProject
- add #transact: to platform to support GemStone optional transactions
- define querying protocol (public access)
- use literal arrays instead of array constructors _everywhere_
- clean up printing
- refine querying API
- extend tutorial to cover querying API
- fix a project version loading bug
- printing fix
- fix an update packages bug
- adjust working version package name calculation
- fix current version package name calculation (http://code.google.com/p/metacello/issues/detail?id=4)
- doits bugfix
- fix a project reference project package bug
- add ''Load Latest Packages'' OB command
- remove Samples group
- save packages fix
- must be able to load packages that use directory repositories
- GemStone/GLASS support'.
- fix updateRepositories bug (update repository for loaded packages only)
- #repositoryFor:from: ... more GLASS support
- record last version loaded and list of packages loaded for each configuration (optional)
- use last list of packages loaded last when loading packages using tools
- improve promptForVersion algorithm to show current version and reduce version list to logical choices
- fix version number bug when version is empty. add tests
- improve current version algorithm
- pick up latest Gofer
- use latest Gofer
- skip automatic loading of packages when working copy #needsSaving
- better loop termination logic for packageSpecsInLoadOrder
- fix logic for loading latest version of a project when versionString is not set (use latest, then last version)
- collect repositories from just the packages (ignoring projects) ... affects load latest logic
- fix #promptForVersion: ... include #development versions in listing
- GemStone attributes, now may include: #gemstone #''gs2.x'' #''gs2.3.x'' #''gs2.4.x'' and #''gs3.x'' for finer grainded resolution of Stone version
- fix a package loading logic bug found by Doru (loading latest)'.
- tweak packageSpec shortcut printing - fine tune use of #overrides:'.
- fine tune the ''Update Package Methods'' algorithm
- fix Issue 3: http://code.google.com/p/metacello/issues/detail?id=3 ''Save Packages'' save new
- fix Issue 12: http://code.google.com/p/metacello/issues/detail?id=12 Wait cursor during load
- fix Issue 14: http://code.google.com/p/metacello/issues/detail?id=14 Ftp repository for Pharo & Squeak
- fix Issue 19: http://code.google.com/p/metacello/issues/detail?id=19 Bug in Spawn New Version
- fix currentVersion when no packages or projects are in play
- fix a Spawn New Version bug
- allow for a nil #versionString spec in projects
- fix Issue 14: http://code.google.com/p/metacello/issues/detail?id=14 Ftp repository for Squeak only
- fix Issue 18: http://code.google.com/p/metacello/issues/detail?id=18 #linear default loadType
- fix Issue 21: http://code.google.com/p/metacello/issues/detail?id=21 optional blessing for Spawn New Version
- fix Issue 22: http://code.google.com/p/metacello/issues/detail?id=22 Better filter for Branch blessing and lastVersion
- fix Issue 23: http://code.google.com/p/metacello/issues/detail?id=23 Use Gofer batch commit for Save Packages
- fix Issue 26: http://code.google.com/p/metacello/issues/detail?id=26 New version of Gofer breaks Metacello
- port to latest version of Gofer (Gofer-lr.109)'.
- fix Issue 7: http://code.google.com/p/metacello/issues/detail?id=7 "#repositoryOverrides: should be in MetacelloMCVersion"
- fix Issue 13: http://code.google.com/p/metacello/issues/detail?id=13 "more than one repository per package"
- fix Issue 16: http://code.google.com/p/metacello/issues/detail?id=16 "version level predoit/postdoit"
- fix Issue 20: http://code.google.com/p/metacello/issues/detail?id=20 "validation in #postLoadDoIt:/#preLoadDoit:"
- fix Issue 28: http://code.google.com/p/metacello/issues/detail?id=28 "supplyingAnswers: attribute for packages"
- fix Issue 30: http://code.google.com/p/metacello/issues/detail?id=30 "Imported version names"
- fix Issue 33: http://code.google.com/p/metacello/issues/detail?id=33 "ensureMetacello should do full bootstrap"
- fix Issue 38: http://code.google.com/p/metacello/issues/detail?id=38 "Metacello load fails on Squeak"
- port Gofer-lr.109 to GemStone
- stop caching packages in Pharo ... can cause trouble if repository off-line
- fix problems with GemStone Metacello when runnng without OB
- make error handler for #do:displaying: a little more specific 
- fix a problem when a second version of a package is being requested during atomic load. Must override with newer package.
- run with pre and post 10504 Pharo images
- change base version name for spawn method
- make sure author and timestamp included by spawn 
- fix file duplication for spawn method'.
- fix Issue 40: http://code.google.com/p/metacello/issues/detail?id=40 "Tight package/repository coordination lost"
- take full advantage of Gofer repository caching
- more tests to ensure expected loading behavior
- typos fixed in Tutorial (Torsten)
- fix Issue 41: http://code.google.com/p/metacello/issues/detail?id=41 "Trouble with nested ProgressInitiationException in certain circumstances"
- fix Issue 42: http://code.google.com/p/metacello/issues/detail?id=42 "ConfigurationOfSeaside* should use supplyingAnswers:"
- fix Issue 43: http://code.google.com/p/metacello/issues/detail?id=43 "Eliminate use of #versionInfoFor:from:do: "
- Metacello now uses Gofer for all of its interactions with Monticello (a few pockets of workingCopy still exist:)
- pick up latest Gofer-Core-lr.115 and Gofer-Tests
- some more version caching for speed
- better workingCopy resolution for MetacelloCachingGoferResolvedReference
- adjust tests - no longer inheriting pragmas ... too expensive
- introduce valueSupplyingMetacelloAnswers: to work around Pharo Issue 1824 http://code.google.com/p/pharo/issues/detail?id=1824
- fix Issue 49: http://code.google.com/p/metacello/issues/detail?id=49 "occassional load of older versions of projects"
- fix Issue 52: http://code.google.com/p/metacello/issues/detail?id=52 "preload/postload for groups and projects"
- MetacelloMCVersion>>resolveToLoadableSpecs: added to supplement query API
- support for Metaceller
- fix a bug in MetacelloMCProjectSpec>>resolveToAllPackagesIn:visited: when the project spec doesn''t have a versionString specified
- ProfStef tutorial (MetacelloCreateConfigurationTutorial)
- latest Gofer (Gofer-Core-lr.116 and Gofer-Tests-lr.115)
- add #unloadMetacello to MetacelloConfigTemplate
- fix Issue25 : http://code.google.com/p/metacello/issues/detail?id=25 "currentVersion cache is too sticky ..."
- full frontal assault on findCurrentVersion and currentVersion algorithms ... corner implementation with a brigage of tests
- fix a bug in GoferResolvedReference>>compare:using: related to branch comparison found during frontal assault!!
- version #versionStatus provides additional info for using currentVersion
- deleted a bunch of methods (redundant,  confusing, not interesting and no longer used):
  - MetacelloVersion>>isCurrentCovering:
  - MetacelloProject>>currentVersionComparison:to:covering:
  - MetacelloProject>>currentVersionCovering:
  - MetacelloProject>>findCurrentVersion
  - MetacelloMCVersionSpec>>isCurrentCovering:
  - MetacelloMCVersionSpec>>isPartiallyCurrentAgainst:
  - MetacelloMCProjectSpec>>isCurrent
  - MetacelloProjectReferenceSpec>>compareVersionForLoad:using:
  - MetacelloAbstractPackageSpec>>compareVersionForLoad:using:
  - MetacelloMCVersionSpec>>isPartiallyCurrentFor:
  - MetacelloProjectReferenceSpec>>isPartiallyCurrentUsing:
  - MetacelloMCProjectSpec>>comparePartialVersion:using:
  - MetacelloProject>>partialVersionComparison:to:covering:
  - MetacelloMCProject>>projectPackage
  - MetacelloMCVersionSpec>>currentVersionComparison:covering:
  - MetacelloMCVersion>>currentVersionComparison:covering:
  - MetacelloVersion>>currentVersionComparison:covering:
  - MetacelloProjectReferenceSpec>>isPartiallyCurrentUsing:
  - MetacelloMCProjectSpec>>compareVersionForLoad:using:
  - MetacelloMCVersionSpec>>isCurrent
  - MetacelloPackageSpec>>compareVersion:using:
  - MetacelloPackageSpec>>isCurrentUsing:
  - MetacelloMCProjectSpec>>compareVersion:using:
  - MetacelloMCProjectSpec>>isCurrentUsing:
  - MetacelloAbstractPackageSpec>>isCurrentUsing:
  - MetacelloGroupSpec>>isCurrentUsing:
  - MetacelloProjectReferenceSpec>>isCurrentUsing:
  - MetacelloProject>>currentVersionComparison:to:
  - MetacelloVersion>>isCurrent
  - MetacelloVersionSpec>>isCurrent
- tweak the loader API a bit for GemStone (performance improvements)
- tweak transcript info for atomic load
- start using Gofer 1.0.1
- adjust conditions that lead to a load conflict error
- fix Issue 10: http://code.google.com/p/metacello/issues/detail?id=10 "''save packages'' should recurse through projects"
- fix Issue 24: http://code.google.com/p/metacello/issues/detail?id=24 "Gofer #fetch support"
- fix Issue 31: http://code.google.com/p/metacello/issues/detail?id=31 "Handle boundary between #atomic and #linear loads ..."
- fix Issue 32: http://code.google.com/p/metacello/issues/detail?id=32 "Connect repositories as MCServerDirectory rather than MCDirectory"
- fix Issue 48: http://code.google.com/p/metacello/issues/detail?id=48 "Should have #loadReport message for loader..."
- fix Issue 56: http://code.google.com/p/metacello/issues/detail?id=56 "save configurtion that uses Gofer>>commit:"
- fix Issue 57: http://code.google.com/p/metacello/issues/detail?id=57 "specificy method category for version category in Metacello version constructor"
- fix Issue 58: http://code.google.com/p/metacello/issues/detail?id=58 "make #file: optional in project reference specification"
- fix Issue 59: http://code.google.com/p/metacello/issues/detail?id=59 "repository overrides should be used for MetacelloPackageSpec>>load"
- fix Issue 60: http://code.google.com/p/metacello/issues/detail?id=60 "bypass progress bars...."
- fix Issue 64: http://code.google.com/p/metacello/issues/detail?id=64 "update package methods has extra file entry"
- fix Issue 66: http://code.google.com/p/metacello/issues/detail?id=66 "loading latest broken by new code in 1.0-beta.24" [MERGE]
- #fetch and #fetch: added to MetacelloMcVersion. #fetch and #fetch: correspond to #load and #load: but only download the mcz files to a cacheRepository (controlled by version #loadPolicy)
- #fetchProject, #fetchProject:, #updateProject: added to support direct fetch of a project (ala #updateProject)
- implement version #record/#record:
- implement version #silently: for Issue 60
- implement non-interactive commit support using gofer: MetacelloMCProject>>goferCommitProject:, MetacelloPackageSpec>>goferCommitPackage:
- when loading a project reference, do not load mcz files that are older than the currently loaded mcz files (implicit version request). Older files will be loaded if directly referenced from the project being loaded (explicit version request).
- add RETRY logic to handle HTTP droppage
- fix Issue 77: http://code.google.com/p/metacello/issues/detail?id=77 "later version of Project reference not loaded after old version already loaded"
- add MetacelloFetchingMCSpecLoader>>printOn: that prints out loadDirective, thus restoring correct #printOn: behavior for MetacelloNullRecordingMCSpecLoader since tutorial depends upon it..
- fix Issue 82: http://code.google.com/p/metacello/issues/detail?id=82 "Metacello and (Windows) file repositories"
- helper messages: #cacheRepository: and #ignoreImage: added to MetacelloMCVersion
- refactor directive hierarchy for post/pre Load directives add #postLoadDo: and #preLoadDo: to round out API
- clean up null recording loader with respect to fetch and post/pre load doits
- directives weren''t being created correctly for post/pre load doits on packages .... now they are
- ConfigurationOfMetacello class>>alternateEnsureMetacello to be used if GemSource repository is inaccessible
- assorted tests
- #fetchPackage: added to MetacelloPackageSpec taking a MetacelloLoaderPolicy like #fetchProject: for MetacelloMCProjectSpec
- fix for Issue 92: http://code.google.com/p/metacello/issues/detail?id=92 "Trait does not understand #isMetacelloConfig"
- fix Issue 79: http://code.google.com/p/metacello/issues/detail?id=79 "OB-Metacello should use MetacelloMCProjectSpec>>loadVersion: style default packages instead of lastMetacelloVersionLoad"
- best fix for Issue 92: http://code.google.com/p/metacello/issues/detail?id=92 "Trait does not understand #isMetacelloConfig"
- fix Issue 93: http://code.google.com/p/metacello/issues/detail?id=93 "poor error message when failing to resolve a package in a repository"
- fix Issue 94: http://code.google.com/p/metacello/issues/detail?id=94 "lastVersion vs latestVersion"
- fix Issue 95: http://code.google.com/p/metacello/issues/detail?id=95 "Infinite project reference loop"
- stop using deprecated in Pharo1.2 methods (sortBy:)
- test case confirming that group name can be used "anywhere that project/package name can be used"
- fix Issue 85: http://code.google.com/p/metacello/issues/detail?id=85 "Metacello should load from alternate repository"
- pick up OB 1.1.4 for Pharo 1.1 compat
- redundant repository for Gofer too
- get rid of #sortBy: ... deprecated in Pharo1.2 '.
- cherry pick the clean up repository code from Metacello-TestsMC-dkh.146
- tests green in Squeak4.2alpha update #10892
  376 run, 375 passes, 1 expected failures, 0 failures, 0 errors, 0 unexpected passes
- clean up a few more repositories ...'.
  http://code.google.com/p/pharo/issues/detail?id=3758
- well ... add expectedFails for the tests are failing due to the fix for Pharo Issue 3660'.
- fix Issue 123: broken development scenario
  http://code.google.com/p/metacello/issues/detail?id=123
- fix Issue 120:lessons methods disapppeared in Metacello-Tutorial-DaleHenrichs.24
  http://code.google.com/p/metacello/issues/detail?id=120
- proposed fix for Issue 122: misleading error message regarding stable versions
  http://code.google.com/p/metacello/issues/detail?id=122
- parrallel current version calculations...(actually found real-life case where parallel is better)
- minor toolbox tweak ... commitMethod should be okay with no methodSpec ... just noop
- fix Issue 118: dirty package after merge skews currentVersion calculation
  http://code.google.com/p/metacello/issues/detail?id=118
- MetacelloCurrentVersionTest>>testIssue118 added to validate the fix'.
  http://code.google.com/p/pharo/issues/detail?id=4049'.
- #sort: needs to be used instead of #sorted: for GemStone3.0 compatability
- after sorting reconvert Arrays to OrderedCollections
- when saving packages and configuration, dump diffs to Transcript
- fix a spot where refresh of package is needed while calculating current version (when in #development)
- add #maglev attribute for conditional maglev code [GemStone]'.
- improve MetacelloToolBox class>>stripVersionStringForSelector: algorithm
- fix Issue 108:	Need to update Metacello (tests and Gofer config) to integrate changes from Pharo Issue 3660
  http://code.google.com/p/metacello/issues/detail?id=108
- add MetacelloToolBox class>>stableVersion:for:platformAttribute: for MetacelloBrowser
- warn about newer versions when saving modified packages
- check for possibly newer versions when saving configuration
- testing (so there''s a halt in here too)
- warning is better than a halt ... any day
  http://code.google.com/p/pharo/issues/detail?id=3763
- integrate the parallel currentVersion calculation ... no ill affectcts yet
- another sent but not implemented cleanup for GemStone
- fix a problem with a "naked" project: call in a version method ... run into this error during automated generation
- proposed fix for Issue 122: misleading error message regarding stable versions
  http://code.google.com/p/metacello/issues/detail?id=122
- parrallel current version calculations...(actually found real-life case where parallel is better)'.
- cherry pick the clean up repository code from Metacello-TestsMC-dkh.146
- tests green in Squeak4.2alpha update #10892
  376 run, 375 passes, 1 expected failures, 0 failures, 0 errors, 0 unexpected passes
- clean up a few more repositories ...'.
- add MetacelloPlatform>>primeStackCacheWith:doing: from work done with Simon during ESUG 2010
- deprecate MetacelloPlatform>>primeStackCacheFor:doing:defaultDictionary:
- add primeStackCache tests
- dynamic caching for 5x speedup of #currentVersion
- standard Pharo version attributes: #''pharo1.x'', #''pharo1.0.x'', #''pharo1.1.x'', #''pharo1.2.x''
- throw an error when a version is not found
- collapse running zeroes in a version number in absence of a numeric element
- introduce MetacelloBaseConfiguration added so that Configurations can have a superclass (not yet ready for use)
- introduce symbolic versions. 
  - #development, #stable, and #bleedingEdge are standard versions.
  - a default is defined for #bleedingEdge
- fix Issue 100: http://code.google.com/p/metacello/issues/detail?id=100 "last block wins when there are duplicate attribute blocks"
- added two new commands for OB-Metacello: ''Validate Configuration'' and ''ValidateConfiguration Version''
- MetacelloToolBox added
- transferred tutorial lessons to ProfStef
- convert OB-Metacello to use MetacelloToolbox API
- update comments for api documentation
- help browser documentation loaded as part of default group (for Pharo....for now)
- speed up running of tests ... 3x faster
- postLoad and preLoad doit behavior cleaned up with regards to overriding behaviour using nil arg (i.e.,  stop preload/postload doits)
- add Squeak attributes: #''squeak3.10.x'', #''squeak4.1.x'', and #''squeak4.2.x''
- fix pharo bug 3516: http://code.google.com/p/pharo/issues/detail?id=3516 "Failing tests in MetaCello"
- OB-Metacello commands functional in Pharo1.2'.
- pick up #versionKey from work done with Simon during ESUG 2010
- add MetacelloPlatform>>primeStackCacheWith:doing: from work done with Simon during ESUG 2010
- deprecate MetacelloPlatform>>primeStackCacheFor:doing:defaultDictionary:
- add primeStackCache tests
- dynamic caching for 5x speedup of #currentVersion
- standard Pharo version attributes: #''pharo1.x'', #''pharo1.0.x'', #''pharo1.1.x'', #''pharo1.2.x''
- throw an error when a version is not found
- collapse running zeroes in a version number in absence of a numeric element
- integrated changes from 1.0-beta.27.5
- introduce MetacelloBaseConfiguration added so that Configurations can have a superclass (or not)
- introduce symbolic versions. 
  - #development, #stable, and #bleedingEdge are standard versions.
  - a default is defined for each of them in the abstract configuration
- if versionString not defined for project reference, #bleedingEdge version is used as the default (instead of latest version)
- stop using #lastMetacelloVersionLoad altogether
- add Configuration validation 
- adjust validation to provide warning when no version is specified 
- differentiate between versions not specified, but resolved and versions not resolved in validation
- validation for duplicate attribute blocks
- fix Issue 100: http://code.google.com/p/metacello/issues/detail?id=100 "last block wins when there are duplicate attribute blocks"
- add symbolic versions to version chooser in OB-Metacello
- recursive validation option
- extended validation to restrict recursive validation of a particular version 
- pragma for default version methods i.e., <defaultSymbolicVersion: #bleedingEdge>
- symbolic versions (Including default) are resolved during project construction, so all version information is in the spec
- changed labels in OB-Metacello to use ''Configuration'' instead of ''Project'', renamed classes to reflect this change
- added two new commands for OB-Metacello: ''Validate Configuration'' and ''ValidateConfiguration Version''
- add loop detection to validation
- stop using deprecated in Pharo1.2 methods (sortBy:)
- Metacello Tool box
- more tool box work
- update ProfStef tutorial to include MetacelloToolBox examples
- convert OB-Metacello to use MetacelloToolbox API
- validate configuration before saving
- portable copyClass for toolbox
- use #notDefined when a symbolicVersion is not defined ... that way you can define a symbolic version for #common and "undefine" the symbolic version for #pharo
- allow a symbolicVersion to reference another symbolic version ... do loop detection etc...improved
- add auto-generated Metacello method and class based Help Browser entries
- add ability to exclude validation issues (moral equivalent of expected failure in SUnit)
- fine tune recommended development process
- update comments for api documentation
- help browser documentation loaded as part of default group (for Pharo....for now)'.
- fix Issue 123: broken development scenario
  http://code.google.com/p/metacello/issues/detail?id=123
- fix Issue 120:lessons methods disapppeared in Metacello-Tutorial-DaleHenrichs.24
  http://code.google.com/p/metacello/issues/detail?id=120
- proposed fix for Issue 122: misleading error message regarding stable versions
  http://code.google.com/p/metacello/issues/detail?id=122
- parrallel current version calculations...(actually found real-life case where parallel is better)
- minor toolbox tweak ... commitMethod should be okay with no methodSpec ... just noop
- fix Issue 118: dirty package after merge skews currentVersion calculation
  http://code.google.com/p/metacello/issues/detail?id=118
- MetacelloCurrentVersionTest>>testIssue118 added to validate the fix
- OPEN 1.0-beta.29 FOR DEVELOPMENT ***************** following from 1.0-beta.28.4 merge
- improve MetacelloToolBox class>>stripVersionStringForSelector: algorithm
- fix Issue 108:	Need to update Metacello (tests and Gofer config) to integrate changes from Pharo Issue 3660
  http://code.google.com/p/metacello/issues/detail?id=108
- add MetacelloToolBox class>>stableVersion:for:platformAttribute: for MetacelloBrowser
- warn about newer versions when saving modified packages
- check for possibly newer versions when saving configuration
- testing (so there''s a halt in here too)
- warning is better than a halt ... any day
  http://code.google.com/p/pharo/issues/detail?id=3763
- integrate the parallel currentVersion calculation ... no ill affectcts yet
- another sent but not implemented cleanup for GemStone
- fix a problem with a "naked" project: call in a version method ... run into this error during automated generation
- proposed fix for Issue 122: misleading error message regarding stable versions
  http://code.google.com/p/metacello/issues/detail?id=122
- parrallel current version calculations...(actually found real-life case where parallel is better)
- open 1.0-beta.29 for development
- merge 1.0-beta.28.3.2 and 1.0-beta.28.4 development threads
- turns out that MetacelloBrowser needs the new development stuff anyway & MetacelloBrowser can live in a development image anyway 
- MetacelloIssue115TestCase currently in limbo
- tests for Issue 115
- getting started on a caching scheme for goferReferences for use during the fetch phase ...
- SIGNIFICANT speedup for fetch:
  - cache repository contents for duration of fetch cycle
  - use packageCache (when available) for loading version info
- cache only network-based repositories in MetacelloGofer
- clear cacheGofer when setting cacheRepository for MetacelloLoaderPolicy
- clear ensuredMap when setting cacheRepository for MetacelloLoaderPolicy
- add in support for branching configurations (mcz level branch)
- help system loaded by default in Squeak, too
- add configuration help support
- config help should allow for inclusion of a class (like custom help)
- include MetacelloHelp (if installed) in ConfigurationOfMetacello help..
- in case HelpSystem not installed ...
- better logic for default installation help
- another tweak to logic: #stable version, class-side load, latest version load
- fix a bug
- support for update projects command in MetacelloBrowser
- restore a method to avoid upgrade issues
- fixed a bug in MetacelloToolBox class>>saveModifiedDevelopmentPackages:for:description:
- implement GoferVersionReference>>metacelloPackageNameWithBranch ... improve branching support
- add support for _creating_ configuration branches
- use Gofer 1.0.5 (integerate Pharo branch changes into Squeak and GemStone versions)
- clean up repositories left in default MCRepositoryGroup ...
- merge changes from 1.0-beta.28.5
- remove expectedFailures ... 
- 379 run, 379 passes, 0 expected failures, 0 failures, 0 errors, 0 unexpected passes
- tests finalized for issues 108, 115, and 118
- empty package Metacello-Issue3758, so that expectedFailures aren''t left intact
- better information in transcript on retry
- add MetacelloToolBox class>>currentlyLoadedExtensionClassesInVersion in support of Naviode
- fix Issue 112: direct version load (upgrade) of config doesn''t update already loaded mcz files
  http://code.google.com/p/metacello/issues/detail?id=112
- defaultTimeout to be compatible with Squeak test cases'.
- change name of method used for bootstrapping to avoid confusion with methods actually used for loading.
- port to Squeak (Squeak3..10.10.2-Trunk-090912)'.
- another round of performance improvements with significant speedups for #currentVersion, #project,  #versionStatus and friends
- minor tweaks for performance enhancements
- tweak MetacelloToolBox class>>saveModifiedPackagesAndConfigurationIn:description: so that description is updated when you package updates are needed.
- persistent author initials can be set by defining #''GS_tODE_AuthorInitials'' in UserGlobals with desired author initials string (in support of tODE) [GemStone only]
- allow configuration branches to be used in a project reference (className: is name sans branch, file: is name with branch)
- fix validation when branched configuration is used
- fix Issue 136: load of referenced project can fail with missing version error
  http://code.google.com/p/metacello/issues/detail?id=136
- fix Issue 146:unrecognized SystemVersion results in assuming system is on #gemstone...
  http://code.google.com/p/metacello/issues/detail?id=146
- tests pass in Pharo1.4, though ProfStef apparently has not been ported (yet)'.
- add LatAm squeaksource mirror for dependent projects'.
- split Platform.pharo package for 2.0'.
    <version: '1.0-beta.31.1.5' imports: #('1.0-beta.31.1.5-baseline')>
    spec
        for: #'common'
        do: [ 
            spec blessing: #'release'.
            spec
                description:
                    '1.0-beta.31.1.5;
- fis Issue 73 - update Metacello-MC to a version which adds custom project attribute support to MetacelloConfigTemplate
  https://github.com/dalehenrich/metacello-work/issues/73
- fix Issue 114 - get all of the unit tests passing
  https://github.com/dalehenrich/metacello-work/issues/114
- fix Issue 120 - nested `version:imports:` cause trouble (1.0-beta.31.1.5)
  https://github.com/dalehenrich/metacello-work/issues/120
- fix Issue 110 - allow attribute lists in #for:do: statement
  https://github.com/dalehenrich/metacello-work/issues/110
- fix Issue 69 - MetacelloConfigurationTutorial undefined reference to ToolSet
  https://github.com/dalehenrich/metacello-work/issues/69
- fix Issue 115 - Version generated from a baseline can have empty package versions in a platform-specific section
  https://github.com/dalehenrich/metacello-work/issues/115
- support for Issue 129 - deployment scripts
  https://github.com/dalehenrich/metacello-work/issues/129'.
            spec author: 'dkh'.
            spec timestamp: '9/14/2012 16:49'.
            spec
                project: 'Gofer Core' with: '1.0.5.1';
                project: 'Gofer Tests' with: '1.0.5.1'.
            spec
                package: 'Metacello-Base' with: 'Metacello-Base-DaleHenrichs.19';
                package: 'Metacello-Core' with: 'Metacello-Core-dkh.492';
                package: 'Metacello-MC' with: 'Metacello-MC-dkh.664';
                package: 'Metacello-Reference' with: 'Metacello-Reference-DaleHenrichs.31';
                package: 'Metacello-Tutorial' with: 'Metacello-Tutorial-dkh.25';
                package: 'OB-Metacello' with: 'OB-Metacello-dkh.82';
                package: 'Metacello-TestsReference' with: 'Metacello-TestsReference-DaleHenrichs.17';
                package: 'Metacello-TestsCore' with: 'Metacello-TestsCore-DaleHenrichs.14';
                package: 'Metacello-TestsMC' with: 'Metacello-TestsMC-dkh.351';
                package: 'Metacello-TestsTutorial' with: 'Metacello-TestsTutorial-dkh.33';
                package: 'Metacello-ToolBox' with: 'Metacello-ToolBox-dkh.130' ].
    spec
        for: #'gemstone'
        do: [ 
            spec
                project: 'OB' with: #'stable';
                project: 'Monticello' with: '0.242'.
            spec
                package: 'Metacello-MC' with: [ spec preLoadDoIt: #'gemstone10beta24PreLoadDoIt' ];
                package: 'Metacello-TestsPlatform' with: 'Metacello-TestsPlatform.gemstone-dkh.2';
                package: 'Metacello-Platform' with: 'Metacello-Platform.gemstone-dkh.23' ].
    spec
        for: #'squeakCommon'
        do: [ 
            spec
                project: 'OB' with: #'stable';
                project: 'Help System' with: '1.1'.
            spec
                package: 'Metacello-TestsPlatform' with: 'Metacello-TestsPlatform.squeakCommon-dkh.2';
                package: 'Metacello-Help' with: 'Metacello-Help-dkh.11' ].
    spec
        for: #'pharo'
        do: [ 
            spec project: 'ProfStef' with: #'stable'.
            spec
                package: 'Metacello-ProfStef' with: 'Metacello-ProfStef-dkh.13';
                package: 'Metacello-TestsProfStef' with: 'Metacello-TestsProfStef-dkh.5';
                package: 'Metacello-Platform' with: 'Metacello-Platform.pharo-dkh.27' ].
    spec for: #'pharo1.0.x' do: [ spec package: 'Metacello-ProfStef' with: 'Metacello-ProfStef.toolset-dkh.12' ].
    spec for: #'pharo1.1.x' do: [ spec package: 'Metacello-ProfStef' with: 'Metacello-ProfStef.toolset-dkh.12' ].
    spec
        for: #'pharo1.2.x'
        do: [ 
            spec
                package: 'Metacello-Issue3758' with: 'Metacello-Issue3758-dkh.2';
                package: 'Metacello-ProfStef' with: 'Metacello-ProfStef.toolset-dkh.12' ].
    spec for: #'pharo1.3.x' do: [ spec package: 'Metacello-Issue3758' with: 'Metacello-Issue3758-dkh.2' ].
    spec for: #'pharo2.x' do: [ spec package: 'Metacello-Platform' with: 'Metacello-Platform.pharo20-SeanDeNigris.28' ].
    spec for: #'squeak' do: [ spec package: 'Metacello-Platform' with: 'Metacello-Platform.squeak-dkh.14' ]! !
    <version: '1.0-beta.31.1.6' imports: #('1.0-beta.31.1.5-baseline')>
    spec
        for: #'common'
        do: [ 
            spec blessing: #'release'.
            spec
                description:
                    '1.0-beta.31.1.6 (dkh.753);
- fix Issue 141 - squeak4.3.x and squeak4.4.x added as platform attributes
  https://github.com/dalehenrich/metacello-work/issues/141'.
            spec author: 'dkh'.
            spec timestamp: '3/21/2013 14:10'.
            spec
                project: 'Gofer Core' with: '1.0.5.1';
                project: 'Gofer Tests' with: '1.0.5.1'.
            spec
                package: 'Metacello-Base' with: 'Metacello-Base-DaleHenrichs.19';
                package: 'Metacello-Core' with: 'Metacello-Core-dkh.492';
                package: 'Metacello-MC' with: 'Metacello-MC-dkh.664';
                package: 'Metacello-Reference' with: 'Metacello-Reference-DaleHenrichs.31';
                package: 'Metacello-Tutorial' with: 'Metacello-Tutorial-dkh.25';
                package: 'OB-Metacello' with: 'OB-Metacello-dkh.82';
                package: 'Metacello-TestsReference' with: 'Metacello-TestsReference-DaleHenrichs.17';
                package: 'Metacello-TestsCore' with: 'Metacello-TestsCore-DaleHenrichs.14';
                package: 'Metacello-TestsMC' with: 'Metacello-TestsMC-dkh.351';
                package: 'Metacello-TestsTutorial' with: 'Metacello-TestsTutorial-dkh.33';
                package: 'Metacello-ToolBox' with: 'Metacello-ToolBox-dkh.130' ].
    spec
        for: #'gemstone'
        do: [ 
            spec
                project: 'OB' with: #'stable';
                project: 'Monticello' with: '0.242'.
            spec
                package: 'Metacello-MC' with: [ spec preLoadDoIt: #'gemstone10beta24PreLoadDoIt' ];
                package: 'Metacello-TestsPlatform' with: 'Metacello-TestsPlatform.gemstone-dkh.2';
                package: 'Metacello-Platform' with: 'Metacello-Platform.gemstone-dkh.23' ].
    spec
        for: #'squeakCommon'
        do: [ 
            spec
                project: 'OB' with: #'stable';
                project: 'Help System' with: '1.1'.
            spec
                package: 'Metacello-TestsPlatform' with: 'Metacello-TestsPlatform.squeakCommon-dkh.2';
                package: 'Metacello-Help' with: 'Metacello-Help-dkh.11' ].
    spec
        for: #'pharo'
        do: [ 
            spec project: 'ProfStef' with: #'stable'.
            spec
                package: 'Metacello-ProfStef' with: 'Metacello-ProfStef-dkh.13';
                package: 'Metacello-TestsProfStef' with: 'Metacello-TestsProfStef-dkh.5';
                package: 'Metacello-Platform' with: 'Metacello-Platform.pharo-dkh.27' ].
    spec for: #'pharo1.0.x' do: [ spec package: 'Metacello-ProfStef' with: 'Metacello-ProfStef.toolset-dkh.12' ].
    spec for: #'pharo1.1.x' do: [ spec package: 'Metacello-ProfStef' with: 'Metacello-ProfStef.toolset-dkh.12' ].
    spec
        for: #'pharo1.2.x'
        do: [ 
            spec
                package: 'Metacello-Issue3758' with: 'Metacello-Issue3758-dkh.2';
                package: 'Metacello-ProfStef' with: 'Metacello-ProfStef.toolset-dkh.12' ].
    spec for: #'pharo1.3.x' do: [ spec package: 'Metacello-Issue3758' with: 'Metacello-Issue3758-dkh.2' ].
    spec for: #'pharo2.x' do: [ spec package: 'Metacello-Platform' with: 'Metacello-Platform.pharo20-SeanDeNigris.28' ].
    spec for: #'squeak' do: [ spec package: 'Metacello-Platform' with: 'Metacello-Platform.squeak-dkh.17' ]! !
- open 1.0-beta.31.1 for development
- GemStone/S 2.4.5 support
- missing OB dependency for GemStone
- GsMonticello 0.242
- trigger #gemstone10beta311PostLoadDoIt
- fix Issue 155: Notification for skipped config loads
  http://code.google.com/p/metacello/issues/detail?id=155
- help fix GemStone Issue 307: http://code.google.com/p/glassdb/issues/detail?id=307
- log when loading over modified package ... part of Issue 155'.
- fix Issue 163: MetacellMCProjectSpec>>ensureProjectLoaded doesn''t honor cacheRepository: or overrideRepository:
  http://code.google.com/p/metacello/issues/detail?id=163
- clean up logging for Issue 163
- more logging clean up
- during ensured configuration loads, need to clear more of the cache.
- when loading a new version of a config, ALL references to the project need to be nuked.
- cached packages should only be loaded during an ensureLoad.
- fix Issue 150: #stable version shouldn''t cause upgrade from project reference
  http://code.google.com/p/metacello/issues/detail?id=150'.
- clean up port to GemStone
- fix for GemStone version of Pharo Issue 4613 .... derive attributes from GemStone version string
- get Monticello configuration from correct repository
- use Gofer 1.0.5.1 (for GemStone)
- changing the comparison logic for Monticello branches. It used to be that branched Monticello packages had a funky sort order based on lenght of the branch, etc ... total malarkey really. For Metacello when a branched package is compared to a non-branched package that just just fail the comparisons and there is no "latest" relationship in either direction ... this has the effect of forcing an override of non-branched by branched and vice versa. Also if two versions differ in author name only, they compare equal ... no good can come of that situation no matter how you cut it.  Considering that I believe that GemStone is the only place where branched Monticello packages are regularly used in a configuration, I feel pretty confident that if I make GemStone happy everyone else will be happy as well.
- previous checkin was too aggressive ... there needs to be a consistent package ordering scheme or else seesaw loading will ensue
- version number is the primary sorting key when package names are the same ... branch then author is used only when version numbers are the same '.
    <version: '1.0-beta.32.1' imports: #('1.0-beta.32-baseline')>
    spec
        for: #'common'
        do: [ 
            spec blessing: #'development'.
            spec description: ''.
            spec author: 'dkh'.
            spec timestamp: '3/12/2013 16:43'.
            spec postLoadDoIt: #'metacelloPrimeRegistry'.
            spec
                project: 'FileTree' with: '1.0.1';
                project: 'Gofer' with: '1.0.5.1';
                project: 'Gofer Tests' with: '1.0.5.1'.
            spec
                package: 'Metacello-Base' with: 'Metacello-Base-dkh.103';
                package: 'Metacello-Core' with: 'Metacello-Core-dkh.669';
                package: 'Metacello-FileTree' with: 'Metacello-FileTree-dkh.29';
                package: 'Metacello-GitHub' with: 'Metacello-GitHub-dkh.22';
                package: 'Metacello-MC' with: 'Metacello-MC-dkh.669';
                package: 'Metacello-Reference' with: 'Metacello-Reference-dkh.35';
                package: 'Metacello-Tutorial' with: 'Metacello-Tutorial-dkh.26';
                package: 'OB-Metacello' with: 'OB-Metacello-dkh.83';
                package: 'Metacello-TestsReference' with: 'Metacello-TestsReference-dkh.20';
                package: 'Metacello-TestsCore' with: 'Metacello-TestsCore-dkh.31';
                package: 'Metacello-TestsMC' with: 'Metacello-TestsMC-dkh.352';
                package: 'Metacello-TestsTutorial' with: 'Metacello-TestsTutorial-dkh.40';
                package: 'Metacello-ToolBox' with: 'Metacello-ToolBox-dkh.131' ].
    spec
        for: #'squeakCommon'
        do: [ 
            spec
                project: 'OSProcess' with: '4.4.5';
                project: 'OmniBrowser' with: #'stable';
                project: 'HelpSystem' with: '1.1'.
            spec
                package: 'Metacello-TestsPlatform' with: 'Metacello-TestsPlatform.squeakCommon-dkh.8';
                package: 'Metacello-Help' with: 'Metacello-Help-dkh.12' ].
    spec
        for: #'pharo'
        do: [ 
            spec project: 'ProfStef' with: #'stable'.
            spec
                package: 'Metacello-ProfStef' with: 'Metacello-ProfStef-dkh.13';
                package: 'Metacello-TestsProfStef' with: 'Metacello-TestsProfStef-dkh.4';
                package: 'Metacello-Platform' with: 'Metacello-Platform.pharo-dkh.30' ].
    spec for: #'pharo1.2.x' do: [ spec package: 'Metacello-Issue3758' with: 'Metacello-Issue3758-dkh.2' ].
    spec for: #'pharo1.3.x' do: [ spec package: 'Metacello-Issue3758' with: 'Metacello-Issue3758-dkh.2' ].
    spec for: #'pharo2.x' do: [ spec package: 'Metacello-Platform' with: 'Metacello-Platform.pharo20-dkh.30' ].
    spec for: #'squeak' do: [ spec package: 'Metacello-Platform' with: 'Metacello-Platform.squeak-dkh.16' ].
    spec
        for: #'gemstone'
        do: [ 
            spec
                project: 'OmniBrowser' with: #'stable';
                project: 'GsCore' with: '0.247';
                project: 'GsMonticello' with: '0.244.2'.
            spec
                package: 'Metacello-MC' with: [ spec preLoadDoIt: #'gemstone10beta24PreLoadDoIt' ];
                package: 'Metacello-TestsPlatform' with: 'Metacello-TestsPlatform.gemstone-dkh.4';
                package: 'Metacello-Platform' with: 'Metacello-Platform.gemstone-dkh.29' ].
    <version: '1.0-beta.32' imports: #('1.0-beta.32-baseline')>
    spec
        for: #'common'
        do: [ 
            spec blessing: #'development'.
            spec description: 'equivalent to 6fb14916d605429808f10bb2bc90be8f320beb42
- unimplemented message being sent in MetacelloProjectSpec>>asProjectRegistration
  https://github.com/dalehenrich/metacello-work/issues/139
- squeak4.3.x and squeak4.4.x added as platform attributes
  https://github.com/dalehenrich/metacello-work/issues/140'.
            spec author: 'dkh'.
            spec timestamp: '2/28/2013 09:57'.
            spec postLoadDoIt: #'metacelloPrimeRegistry'.
            spec
                project: 'FileTree' with: '1.0.1';
                project: 'Gofer' with: '1.0.5.1';
                project: 'Gofer Tests' with: '1.0.5.1'.
            spec
                package: 'Metacello-Base' with: 'Metacello-Base-dkh.103';
                package: 'Metacello-Core' with: 'Metacello-Core-dkh.669';
                package: 'Metacello-FileTree' with: 'Metacello-FileTree-dkh.29';
                package: 'Metacello-GitHub' with: 'Metacello-GitHub-dkh.22';
                package: 'Metacello-MC' with: 'Metacello-MC-dkh.669';
                package: 'Metacello-Reference' with: 'Metacello-Reference-dkh.35';
                package: 'Metacello-Tutorial' with: 'Metacello-Tutorial-dkh.26';
                package: 'OB-Metacello' with: 'OB-Metacello-dkh.83';
                package: 'Metacello-TestsReference' with: 'Metacello-TestsReference-dkh.20';
                package: 'Metacello-TestsCore' with: 'Metacello-TestsCore-dkh.31';
                package: 'Metacello-TestsMC' with: 'Metacello-TestsMC-dkh.352';
                package: 'Metacello-TestsTutorial' with: 'Metacello-TestsTutorial-dkh.40';
                package: 'Metacello-ToolBox' with: 'Metacello-ToolBox-dkh.131' ].
    spec
        for: #'squeakCommon'
        do: [ 
            spec
                project: 'OSProcess' with: '4.4.5';
                project: 'OmniBrowser' with: #'stable';
                project: 'HelpSystem' with: '1.1'.
            spec
                package: 'Metacello-TestsPlatform' with: 'Metacello-TestsPlatform.squeakCommon-dkh.8';
                package: 'Metacello-Help' with: 'Metacello-Help-dkh.12' ].
    spec
        for: #'pharo'
        do: [ 
            spec project: 'ProfStef' with: #'stable'.
            spec
                package: 'Metacello-ProfStef' with: 'Metacello-ProfStef-dkh.13';
                package: 'Metacello-TestsProfStef' with: 'Metacello-TestsProfStef-dkh.4';
                package: 'Metacello-Platform' with: 'Metacello-Platform.pharo-dkh.30' ].
    spec for: #'pharo1.2.x' do: [ spec package: 'Metacello-Issue3758' with: 'Metacello-Issue3758-dkh.2' ].
    spec for: #'pharo1.3.x' do: [ spec package: 'Metacello-Issue3758' with: 'Metacello-Issue3758-dkh.2' ].
    spec for: #'pharo2.x' do: [ spec package: 'Metacello-Platform' with: 'Metacello-Platform.pharo20-dkh.30' ].
    spec for: #'squeak' do: [ spec package: 'Metacello-Platform' with: 'Metacello-Platform.squeak-dkh.16' ].
    spec
        for: #'gemstone'
        do: [ 
            spec
                project: 'OmniBrowser' with: #'stable';
                project: 'GsCore' with: '0.247';
                project: 'GsMonticello' with: '0.244.2'.
            spec
                package: 'Metacello-MC' with: [ spec preLoadDoIt: #'gemstone10beta24PreLoadDoIt' ];
                package: 'Metacello-TestsPlatform' with: 'Metacello-TestsPlatform.gemstone-dkh.4';
                package: 'Metacello-Platform' with: 'Metacello-Platform.gemstone-dkh.29' ].
- update to latest Gofer (Gofer-lr.67)
- fix a package overrides: bug
- pull in some old tests that still apply
- recast tutorial to new API plus tutorial tests
- fix platform attribute bug
- use strings instead of symbols for imports
- class-side project
- fix doit bug
- tools load ''ALL''
- deactive ''Update Repositories'' command'.
- add platform attribute tests
- fix bug in project reference
- need to pass project into constructor (sometimes)
- duplication of #projectAttributes
- correct update package logic when package branches involved (<package name>.<branch name>-<author>.<version number>'.
- fix a bug in #project:copyFrom:with:
- rewrite null loader to use IVs for recording state
- get started on project ref tutorial
- ensure that imported versions exist
- use Gofer for direct loading of packages like from pojects, since configuration must be loaded immediately whether or not w are doing atomic/linear loads
- add project load test (coverage for Doru''s bug report)'.
- asNumber throws Error (as of 10487) and Errors are not resumable
- bump up ensureMetacello methods to use versions from 1.0-beta.6
- use latest version of Gofer'.
- add #repository:username:password: to configuration API in support of repositories that require authentication.'.
        MetacelloToolBox 
                createBaseline: '1.0-baseline'
                for: 'MyProject'
                repository: 'http://www.example.com/MyProjectRepository'
                requiredProjects: #('Gofer')
                packages: #('MyProject-Core' 'MyProject-Tests')
                dependencies:
                        {('MyProject-Core' -> #('Gofer')).
                         ('MyProject-Tests' -> #('MyProject-Core'))}
                groups:
                        {('default' -> #('Core')).
                        ('Core' -> #('MyProject-Core')).
                        ('Tests' -> #('MyProject-Tests'))}.
         MetacelloToolBox
               createDevelopment: '1.0'
               for: 'MyProject'
                importFromBaseline: '1.0-baseline'
                description: 'initial version'.
  ifTrue: [ ^15243 ].
  anElement := self at: i.
  (anElement isKindOf: SequenceableCollection)
    ifTrue: [
      hashValue := (hashValue bitShift: -1) bitXor: anElement size.
      ]
    ifFalse: [
      hashValue := (hashValue bitShift: -1) bitXor: anElement hash.
      ].
  ].
  '1.1.1' asMetacelloVersionNumber match: '*.*.*'. -> true
  '1.1.1' asMetacelloVersionNumber match: '*.#.*'. -> true
  '1.10.1' asMetacelloVersionNumber match: '*.#.*'. -> false
  '1.1.1' asMetacelloVersionNumber match: '*.*'. -> false
  '1.1.1' asMetacelloVersionNumber match: '*.?'. -> true
  '1.0' asMetacelloVersionNumber match: '1.?'. -> true
  '2.0' asMetacelloVersionNumber match: '1.?'. -> false
  '1.1.1' asMetacelloVersionNumber match: '?'. -> true
  '1' asMetacelloVersionNumber match: '*.?'. -> false
  '1-alpha5.0' asMetacelloVersionNumber match: '1-alpha*.?'. -> true
  '1-alpha15.0.1' asMetacelloVersionNumber match: '1-alpha*.?'. -> true
  '1.1' asMetacelloVersionNumber match: '?.?'. -> ERROR: invalid version match pattern
    "conditional version support"
    attributeListOrSymbol setForDo: aBlock withInMetacelloConfig: self! !
    "conditional symbolicVersion support"
    attributeListOrSymbol setForVersion: aString withInMetacelloConfig: self! !
    "conditional version support"
    attributeList asMetacelloAttributeList
        do: [ :attribute | 
            | blockList |
            blockList := self attributeMap
                at: attribute
                ifAbsent: [ self attributeMap at: attribute put: (blockList := OrderedCollection new) ].
            blockList add: aBlock.
            self addAttribute: attribute ]! !
    "conditional symbolicVersion support"
    attributeList asMetacelloAttributeList
        do: [ :attribute | 
            self attributeMap at: attribute put: aString.
            self addAttribute: attribute ]! !
    | selected |
    selected := IdentitySet new.
    attributes
        do: [ :attribute | 
            methodSection methodSections
                do: [ :ms | 
                    (ms attributes includes: attribute)
                        ifTrue: [ selected add: ms ] ] ].
    selected do: aBlock.
    attributes size == 1
        ifTrue: [ ^ self ].
    selected
        do: [ :ms | self methodSection: ms inEvaluationOrder: (attributes copyFrom: 2 to: attributes size) do: aBlock ]! !
    | attributes |
    attributes := Set new.
    self methodSectionsDo: [ :methodSection | attributes addAll: methodSection attributes ].
    ^ attributes! !
    "breadth first traversal ... to collect selected sections, then evaluate individual sections in attribute order"
    | selected processed |
    selected := IdentitySet new.
    self methodSection: self inEvaluationOrder: attributes do: [ :methodSection | selected add: methodSection ].
    processed := IdentitySet new.
    attributes
        do: [ :attribute | 
            | list |
            list := OrderedCollection new.
            selected
                do: [ :methodSection | 
                    (processed includes: methodSection)
                        ifFalse: [ 
                            (methodSection attributes includes: attribute)
                                ifTrue: [ 
                                    list add: methodSection.
                                    processed add: methodSection ] ] ].
            list do: aBlock ]! !
    "conditional version support"
    | methodSection |
    methodSection := MetacelloVersionMethodSection new
        attributes: attributeList asMetacelloAttributeList;
        block: aBlock;
        yourself.
    currentSection ~~ nil
        ifTrue: [ currentSection addMethodSection: methodSection ]
        ifFalse: [ self methodSections add: methodSection ]! !
    "conditional symbolicVersion support"
    self methodSections
        add:
            (MetacelloSymbolicVersionSpec new
                attributes: attributeList asMetacelloAttributeList;
                versionString: aString;
                yourself)! !
    | defined done completed count |
    done := false.
    completed := IdentitySet new.
    count := 0.
    [ 
    count := count + 1.
    count > 10000
        ifTrue: [ self error: 'Apparent loop in import expansion' ].
    done ]
        whileFalse: [ 
            done := true.
            pragmaDict
                keysAndValuesDo: [ :versionString :pragmaColl | 
                    | versionSpec |
                    versionSpec := nil.
                    defined := false.
                    pragmaColl
                        do: [ :pragma | 
                            (completed includes: pragma)
                                ifFalse: [ 
                                    | imports |
                                    done := false.
                                    imports := pragma argumentAt: 2.
                                    imports
                                        detect: [ :importedVersion | (versionMap includesKey: importedVersion) not ]
                                        ifNone: [ 
                                            imports
                                                do: [ :importedVersion | 
                                                    | version |
                                                    (version := versionMap at: importedVersion ifAbsent: [  ]) ~~ nil
                                                        ifTrue: [ 
                                                            defined := true.
                                                            completed add: pragma.
                                                            versionSpec == nil
                                                                ifTrue: [ versionSpec := version spec copy ]
                                                                ifFalse: [ versionSpec := versionSpec mergeSpec: version spec copy ].
                                                            versionSpec versionString: versionString.
                                                            executionBlock value: versionSpec value: pragma ] ] ] ] ].
                    defined
                        ifTrue: [ 
                            | version importedVersions |
                            importedVersions := OrderedCollection new.
                            version := versionSpec createVersion.
                            pragmaColl do: [ :pragma | importedVersions addAll: (pragma argumentAt: 2) ].
                            version importedVersions: importedVersions.
                            self validateVersionString: versionString againstSpec: versionSpec.
                            versionMap at: versionSpec versionString put: version ].
                    self reset ] ]! !
    self deprecated: 'Use attributes instead'.
    self attributes size > 1
        ifTrue: [ self error: 'invalid use of attribute' ].
    self attributes isEmpty
        ifTrue: [ ^ nil ].
    ^ self attributes first! !
    self deprecated: 'Use attributes: instead'.
    self attributes size > 1
        ifTrue: [ self error: 'invalid use of attribute:' ].
    attributes := OrderedCollection with: anObject! !
    | stream |
    stream := WriteStream on: String new.
    self attributes size = 1
        ifTrue: [ stream nextPutAll: '#' , attributes first asString printString ]
        ifFalse: [ 
            stream nextPutAll: '#('.
            self attributes
                do: [ :attribute | 
                    stream
                        nextPutAll: '#' , attribute asString printString;
                        space ].
            stream nextPut: $) ].
    ^ stream contents! !
    attributes ifNil: [ attributes := OrderedCollection new ].
    ^ attributes! !
    attributes := aCollectionOrSymbol asMetacelloAttributeList! !
    ^ (attributeCollection asSet intersection: self attributes asSet) notEmpty! !
    ^ self parent == nil
        ifTrue: [ 
            self attributes size == 1
                ifTrue: [ self attributes first ]
                ifFalse: [ self attributes ] ]
        ifFalse: [ self attributePath ]! !
    | path |
    path := MetacelloMethodSectionPath with: self attributes.
    ^ self parent == nil
        ifTrue: [ path ]
        ifFalse: [ self parent attributePath , path ]! !
    self methodSections
        add:
            (MetacelloSymbolicVersionSpec new
                attributes: attribute asMetacelloAttributeList;
                versionString: aString;
                yourself)! !
    | strm |
    strm := WriteStream on: String new.
    self symbolicMethodSelectorAndPragma: self selector symbolicVersionSymbol: self versionString on: strm.
    (self methodSections asArray sort: [ :a :b | a attributes first <= b attributes first ])
        do: [ :methodSection | 
            | vs |
            strm
                cr;
                tab;
                nextPutAll: 'spec for: ' , methodSection attributePrintString , ' version: '.
            vs := methodSection versionString.
            vs isSymbol
                ifTrue: [ strm nextPut: $# ].
            strm
                nextPutAll: vs asString printString , '.';
                cr ].
    ^ strm contents! !
    | attributeList methodSection index sections found |
    attributeList := attributePath last.
    methodSection := MetacelloVersionMethodSection new
        attributes: attributeList;
        versionSpec: versionSpec;
        yourself.
    attributePath size > 1
        ifTrue: [ 
            index := 1.
            sections := self methodSections.
            found := true.
            [ found ]
                whileTrue: [ 
                    found := false.
                    sections
                        do: [ :ms | 
                            ms attributes = (attributePath at: index)
                                ifTrue: [ 
                                    index == (attributePath size -1)
                                        ifTrue: [ 
                                            ms methodSections add: methodSection.
                                            ^ self ].