[squeak-dev] The Trunk: Monticello-cmm.423.mcz

commits at source.squeak.org commits at source.squeak.org
Tue Mar 15 19:16:07 UTC 2011


Chris Muller uploaded a new version of Monticello to project The Trunk:
http://source.squeak.org/trunk/Monticello-cmm.423.mcz

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

Name: Monticello-cmm.423
Author: cmm
Time: 2 March 2011, 5:48:56.724 pm
UUID: bcedce06-f18b-41c0-beea-955c1a1b6fde
Ancestors: Monticello-ul.422

- Moved MCFileBasedRepository's file-based API to 'private-files' since it cannot be part of the regular public API and be generic with DB-based repository's.

- Another step toward unified RepositoryInspectors.  The Repository's should assume responsibility for satisfying a generic MCRepositoryInspector.  The steps I took to do this were:

	1) Removed (the old) MCRepositoryInspector, 
	2) renamed MCFileRepositoryInspector to MCRepositoryInspector.
	3) Created a new empty subclass named MCFileRepositoryInspector to handle filebased repository-specific behavior, but I anticipate all behaviors will factor out and it won't be needed at all.

- Added new required API for MCRepository's:  #versionNamesForPackageNamed:.

- Augmented MCFileName with ancestorAuthor and ancestorVersionNumber.  These are used for MCDiffyVersions (.mcd).

=============== Diff against Monticello-ul.422 ===============

Item was changed:
+ ----- Method: MCFileBasedRepository>>allFileNames (in category 'private-files') -----
- ----- Method: MCFileBasedRepository>>allFileNames (in category 'files') -----
  allFileNames
  	self subclassResponsibility!

Item was changed:
+ ----- Method: MCFileBasedRepository>>allFileNamesForVersionNamed: (in category 'private-files') -----
- ----- Method: MCFileBasedRepository>>allFileNamesForVersionNamed: (in category 'files') -----
  allFileNamesForVersionNamed: aString
  	^ self filterFileNames: self readableFileNames forVersionNamed: aString!

Item was changed:
+ ----- Method: MCFileBasedRepository>>allFileNamesOrCache (in category 'private-files') -----
- ----- Method: MCFileBasedRepository>>allFileNamesOrCache (in category 'files') -----
  allFileNamesOrCache
  	^ allFileNames ifNil: [self allFileNames]!

Item was changed:
+ ----- Method: MCFileBasedRepository>>canReadFileNamed: (in category 'private-files') -----
- ----- Method: MCFileBasedRepository>>canReadFileNamed: (in category 'private') -----
  canReadFileNamed: aString
  	| reader |
  	reader := MCVersionReader readerClassForFileNamed: aString.
  	^ reader notNil!

Item was changed:
+ ----- Method: MCFileBasedRepository>>filterFileNames:forVersionNamed: (in category 'private-files') -----
- ----- Method: MCFileBasedRepository>>filterFileNames:forVersionNamed: (in category 'files') -----
  filterFileNames: aCollection forVersionNamed: aString
  	^ aCollection select: [:ea | (self versionNameFromFileName: ea) = aString] !

Item was changed:
+ ----- Method: MCFileBasedRepository>>readableFileNames (in category 'private-files') -----
- ----- Method: MCFileBasedRepository>>readableFileNames (in category 'files') -----
  readableFileNames
  	| all cached new |
  	all := self allFileNamesOrCache.	"from repository"
  	cached := self cachedFileNames.	"in memory"
  	new := all difference: cached.
  	^ (cached asArray, new)
  		select: [:ea | self canReadFileNamed: ea]!

Item was added:
+ ----- Method: MCFileBasedRepository>>versionNamesForPackageNamed: (in category 'versions') -----
+ versionNamesForPackageNamed: aString 
+ 	"Answer a collection of MCFileNames whose Package is named aString."
+ 	^ (self allVersionNames collect:
+ 		[ : eachString | MCFileName on: eachString ]) select:
+ 		[ : eachMCFileName | eachMCFileName packageName = aString ]!

Item was changed:
+ ----- Method: MCFileBasedRepository>>writeStreamForFileNamed:do: (in category 'private-files') -----
- ----- Method: MCFileBasedRepository>>writeStreamForFileNamed:do: (in category 'private') -----
  writeStreamForFileNamed: aString do: aBlock
  	^ self writeStreamForFileNamed: aString replace: false do: aBlock!

Item was changed:
  Object subclass: #MCFileName
+ 	instanceVariableNames: 'packageName author extension versionNumber fileName ancestorAuthor ancestorVersionNumber'
- 	instanceVariableNames: 'packageName author extension versionNumber fileName'
  	classVariableNames: ''
  	poolDictionaries: ''
  	category: 'Monticello-Modeling'!
  
+ !MCFileName commentStamp: 'cmm 3/2/2011 15:25' prior: 0!
+ A MCFileName models the Monticello file / version name, in the format [Package]-[Author].[version-number]([ancestorAuthor.ancestorVersionNumber]).[mc?].
- !MCFileName commentStamp: 'cmm 2/28/2011 16:05' prior: 0!
- A MCFileName models the Monticello file / version name, in the format [Package]-[Author].[version-number].[mc?].
  
  The final file-extension only applies to filenames, not version names.
  
  Instance Variables
  	author:		<String>
  	extension:		<String>
  	fileName:		<String>
  	packageName:		<String>
  	versionNumber:		<Integer>!

Item was changed:
  ----- Method: MCFileName>>= (in category 'testing') -----
  = aMCFileName 
  	self == aMCFileName ifTrue: [ ^ true ].
  	self species = aMCFileName species ifFalse: [ ^ false ].
  	^ self versionNumber = aMCFileName versionNumber and:
+ 		[ self author = aMCFileName author and:
+ 			[ self packageName = aMCFileName packageName and:
+ 				[ self ancestorAuthor = aMCFileName ancestorAuthor and: [ self ancestorVersionNumber = aMCFileName ancestorVersionNumber ] ] ] ]!
- 		[ self author = aMCFileName author and: [ self packageName = aMCFileName packageName ] ]!

Item was added:
+ ----- Method: MCFileName>>ancestorAuthor (in category 'access') -----
+ ancestorAuthor
+ 	"The author of the ancestor, if this is a Diffy filename."
+ 	^ ancestorAuthor!

Item was added:
+ ----- Method: MCFileName>>ancestorVersionNumber (in category 'access') -----
+ ancestorVersionNumber
+ 	"The Integer versionNumber of the ancestor, if this is a Diffy filename."
+ 	^ ancestorVersionNumber!

Item was changed:
  ----- Method: MCFileName>>filename: (in category 'initializing') -----
  filename: aString 
+ 	"Parse aString which is assumed to be either a MC filename [Package]-[author].[versionNumber]([ancestorAuthor].[ancestorVersionNumber]), with or without a .mc? extension.  The ancestorAuthor and ancestorVersionNumber are only applicable for 'diffy' names."
+ 	| versionName ancestry |
- 	"Parse aString which is assumed to be either a MC filename [Package]-[author].[versionNumber], with or without a .mc? extension."
- 	| name |
  	fileName := aString.
+ 	versionName := (aString copyUpToLast: $.) copyUpTo: $(.
+ 	packageName := versionName copyUpToLast: $-.
+ 	author := (versionName copyAfterLast: $-) copyUpTo: $..
+ 	versionNumber := versionName last isDigit
- 	name := (aString copyUpToLast: $.) copyUpTo: $(.
- 	packageName := name copyUpToLast: $-.
- 	author := (name copyAfterLast: $-) copyUpTo: $..
- 	versionNumber := name last isDigit
  		ifTrue:
  			[ extension := aString copyAfterLast: $..
+ 			((versionName copyAfterLast: $-) copyAfter: $.) asInteger ifNil: [ 0 ] ]
+ 		ifFalse: [ ((aString copyAfterLast: $-) copyAfter: $.) asInteger ifNil: [ 0 ] ].
+ 	ancestry := (aString copyAfterLast: $() copyUpTo: $).
+ 	ancestry ifNotEmpty:
+ 		[ ancestorAuthor := (ancestry copyUpTo: $.).
+ 		ancestorVersionNumber := ((ancestry copyAfter: $.) asInteger) ifNil: [ 0 ] ]!
- 			((name copyAfterLast: $-) copyAfter: $.) asInteger ifNil: [ 0 ] ]
- 		ifFalse: [ ((aString copyAfterLast: $-) copyAfter: $.) asInteger ifNil: [ 0 ] ]!

Item was changed:
  ----- Method: MCFileName>>isValid (in category 'testing') -----
  isValid
+ 	^ {  packageName. author. versionNumber  } allSatisfy: [ : e | e notNil ]!
- 	^ {  packageName. author. extension. versionNumber  } allSatisfy: [ : e | e notNil ]!

Item was changed:
  ----- Method: MCFileName>>versionNumber (in category 'access') -----
  versionNumber
+ 	"The Integer version number identified by this filename."
- 	"The version number identified by this filename."
  	^ versionNumber!

Item was changed:
+ MCRepositoryInspector subclass: #MCFileRepositoryInspector
+ 	instanceVariableNames: ''
+ 	classVariableNames: ''
- MCVersionInspector subclass: #MCFileRepositoryInspector
- 	instanceVariableNames: 'repository versions selectedPackage selectedVersion order versionInfo packageList'
- 	classVariableNames: 'Order'
  	poolDictionaries: ''
  	category: 'Monticello-UI'!

Item was removed:
- ----- Method: MCFileRepositoryInspector class>>initialize (in category 'class initialization') -----
- initialize
- 	"self initialize"
- 
- 	self migrateInstances!

Item was removed:
- ----- Method: MCFileRepositoryInspector class>>migrateInstances (in category 'class initialization') -----
- migrateInstances
- 	self allSubInstancesDo: [:inst |
- 		#(packageList versionList) do: [:each |
- 			[(inst findListMorph: each) highlightSelector: nil]
- 				on: Error do: [:ignore | ]]].!

Item was removed:
- ----- Method: MCFileRepositoryInspector class>>order (in category 'as yet unclassified') -----
- order
- 	Order isNil
- 		ifTrue: [ Order := 5 ].
- 	^Order!

Item was removed:
- ----- Method: MCFileRepositoryInspector class>>order: (in category 'as yet unclassified') -----
- order: anInteger
- 	Order := anInteger!

Item was removed:
- ----- Method: MCFileRepositoryInspector class>>repository:workingCopy: (in category 'as yet unclassified') -----
- repository: aFileBasedRepository workingCopy: aWorkingCopy
- 	^self new
- 		setRepository: aFileBasedRepository workingCopy: aWorkingCopy;
- 		yourself!

Item was removed:
- ----- Method: MCFileRepositoryInspector>>defaultExtent (in category 'morphic ui') -----
- defaultExtent
- 	^450 at 300!

Item was removed:
- ----- Method: MCFileRepositoryInspector>>defaultLabel (in category 'morphic ui') -----
- defaultLabel
- 	^'Repository: ' , repository description!

Item was removed:
- ----- Method: MCFileRepositoryInspector>>hasNewerVersionsFor: (in category 'private') -----
- hasNewerVersionsFor: aMCWorkingCopy 
- 	| latest |
- 	latest := (versions select:
- 		[ : eachMCFileName | eachMCFileName packageName = aMCWorkingCopy package name ]) detectMax:
- 		[ : eachMCFileName | eachMCFileName versionNumber ].
- 	^ latest notNil and:
- 		[ aMCWorkingCopy ancestors allSatisfy:
- 			[ : ancestor | | loadedVersionNumber ancestorName |
- 			ancestorName := ancestor mcName.
- 			loadedVersionNumber := ancestorName versionNumber.
- 			loadedVersionNumber < latest versionNumber or:
- 				[ loadedVersionNumber = latest versionNumber and: [ ancestorName author ~= latest author ] ] ] ]!

Item was removed:
- ----- Method: MCFileRepositoryInspector>>hasVersion (in category 'morphic ui') -----
- hasVersion
- 	^ selectedVersion notNil!

Item was removed:
- ----- Method: MCFileRepositoryInspector>>load (in category 'actions') -----
- load
- 	self hasVersion ifTrue:
- 		[self version isCacheable
- 			ifTrue: [version workingCopy repositoryGroup addRepository: repository].
- 		super load.
- 		self refresh].!

Item was removed:
- ----- Method: MCFileRepositoryInspector>>merge (in category 'actions') -----
- merge
- 	super merge.
- 	self refresh.
- !

Item was removed:
- ----- Method: MCFileRepositoryInspector>>order: (in category 'morphic ui') -----
- order: anInteger
- 	self class order: (order := anInteger).
- 	self changed: #versionList.!

Item was removed:
- ----- Method: MCFileRepositoryInspector>>orderSpecs (in category 'morphic ui') -----
- orderSpecs
- 	^{
- 		'unchanged' -> nil.
- 		'order by package' -> [ :x :y | x packageName < y packageName ].
- 		'order by author' -> [ :x :y | x author < y author ].
- 		'order by version-string' -> [ :x :y | x versionNumber asString < y versionNumber asString ].
- 		'order by version-number' -> [ :x :y | x versionNumber > y versionNumber ].
- 		'order by filename' -> [ :x :y | x fileName < y fileName ].
- 	}!

Item was removed:
- ----- Method: MCFileRepositoryInspector>>orderString: (in category 'morphic ui') -----
- orderString: anIndex
- 	^String streamContents: [ :stream |
- 		order = anIndex
- 			ifTrue: [ stream nextPutAll: '<yes>' ]
- 			ifFalse: [ stream nextPutAll: '<no>' ].
- 		stream nextPutAll: (self orderSpecs at: anIndex) key ]!

Item was removed:
- ----- Method: MCFileRepositoryInspector>>packageHighlight: (in category 'morphic ui') -----
- packageHighlight: aString 
- 	newer ifNil: [ newer := #() ].
- 	^ (loaded anySatisfy:
- 		[ : each | each packageName = aString ])
- 		ifTrue:
- 			[ Text
- 				string: aString
- 				attribute:
- 					(TextEmphasis new emphasisCode:
- 						((newer includes: aString)
- 							ifTrue: [ 5 ]
- 							ifFalse: [ 4 ])) ]
- 		ifFalse: [ aString ]!

Item was removed:
- ----- Method: MCFileRepositoryInspector>>packageList (in category 'morphic ui') -----
- packageList
- 
- 	| result loadedPackages |
- 	packageList ifNotNil: [ ^packageList ].
- 	result := Set new: versions size.
- 	versions do: [ :each | result add: each packageName ].
- 
- 	"sort loaded packages first, then alphabetically"
- 	loadedPackages := Set new: loaded size.
- 	loaded do: [ :each |
- 		loadedPackages add: (each packageName) ].
- 	result := result asArray sort: [ :a :b |
- 		| loadedA loadedB |
- 		loadedA := loadedPackages includes: a.
- 		loadedB := loadedPackages includes: b.
- 		loadedA = loadedB 
- 			ifTrue: [ a < b ]
- 			ifFalse: [ loadedA ] ].
- 
- 	^packageList := result collect: [ :each | self packageHighlight: each ]!

Item was removed:
- ----- Method: MCFileRepositoryInspector>>packageListMenu: (in category 'morphic ui') -----
- packageListMenu: aMenu
- 	^aMenu!

Item was removed:
- ----- Method: MCFileRepositoryInspector>>packageSelection (in category 'morphic ui') -----
- packageSelection
- 	^self packageList indexOf: selectedPackage!

Item was removed:
- ----- Method: MCFileRepositoryInspector>>packageSelection: (in category 'morphic ui') -----
- packageSelection: aNumber
- 	selectedPackage := aNumber isZero
- 		ifFalse: [ (self packageList at: aNumber) asString ].
- 	self versionSelection: 0.
- 	self changed: #packageSelection; changed: #versionList!

Item was removed:
- ----- Method: MCFileRepositoryInspector>>postAcceptBrowseFor: (in category 'private') -----
- postAcceptBrowseFor: aModel
- 	"Make the same selections as in aModel."
- 	self 
- 		packageSelection: aModel packageSelection ;
- 		versionSelection: aModel versionSelection!

Item was removed:
- ----- Method: MCFileRepositoryInspector>>refresh (in category 'actions') -----
- refresh
- 	packageList := nil.
- 	versions := repository readableFileNames collect: [ : each | MCFileName on: each ].
- 	self
- 		 refreshEmphasis ;
- 		 changed: #packageList ;
- 		 changed: #versionList!

Item was removed:
- ----- Method: MCFileRepositoryInspector>>repository (in category 'private') -----
- repository
- 	^ repository!

Item was removed:
- ----- Method: MCFileRepositoryInspector>>representsSameBrowseeAs: (in category 'morphic ui') -----
- representsSameBrowseeAs: anotherModel 
- 	^ self class = anotherModel class
- 	and: [ self repository = anotherModel repository ]!

Item was removed:
- ----- Method: MCFileRepositoryInspector>>setRepository:workingCopy: (in category 'initialize-release') -----
- setRepository: aFileBasedRepository workingCopy: aWorkingCopy
- 	order := self class order.
- 	repository := aFileBasedRepository.
- 	self refresh.
- 	aWorkingCopy
- 		ifNil: [selectedPackage := self packageList isEmpty ifFalse: [self packageList first]]
- 		ifNotNil: [ selectedPackage := aWorkingCopy ancestry ancestorString copyUpToLast: $- ].
- 	MCWorkingCopy addDependent: self.
- !

Item was removed:
- ----- Method: MCFileRepositoryInspector>>version (in category 'morphic ui') -----
- version
- 	^ version ifNil:
- 		[Cursor wait showWhile:
- 			[version := repository versionFromFileNamed: selectedVersion].
- 		version]!

Item was removed:
- ----- Method: MCFileRepositoryInspector>>versionHighlight: (in category 'morphic ui') -----
- versionHighlight: aMCFileName
- 	inherited ifNil: [inherited := #()].
- 	^Text
- 		string: aMCFileName fileName
- 		attribute: (TextEmphasis new emphasisCode: (
- 			((loaded includes: aMCFileName) ifTrue: [ 4 "underlined" ]
- 				ifFalse: [ (inherited includes: aMCFileName versionName)
- 					ifTrue: [ 0 ]
- 					ifFalse: [ 1 "bold" ] ])))!

Item was removed:
- ----- Method: MCFileRepositoryInspector>>versionInfo (in category 'morphic ui') -----
- versionInfo
- 	^ versionInfo ifNil: [versionInfo := repository versionInfoFromFileNamed: selectedVersion]!

Item was removed:
- ----- Method: MCFileRepositoryInspector>>versionList (in category 'morphic ui') -----
- versionList
- 	| result |
- 	result := selectedPackage
- 		ifNil: [ versions copy ]
- 		ifNotNil:
- 			[ versions select:
- 				[ : each | selectedPackage = each packageName ] ].
- 	"Not sure why we need this ugly Error trapping here.."
- 	(self orderSpecs at: order) value ifNotNil:
- 		[ : sortBlock | result sort:
- 			[ : a : b | [ sortBlock
- 				value: a
- 				value: b ]
- 				on: Error
- 				do: [ true ] ] ].
- 	^ result replace:
- 		[ : each | self versionHighlight: each ]!

Item was removed:
- ----- Method: MCFileRepositoryInspector>>versionListMenu: (in category 'morphic ui') -----
- versionListMenu: aMenu
- 	1 to: self orderSpecs size do: [ :index |
- 		aMenu addUpdating: #orderString: target: self selector: #order: argumentList: { index } ].
- 	^aMenu!

Item was removed:
- ----- Method: MCFileRepositoryInspector>>versionSelection (in category 'morphic ui') -----
- versionSelection
- 	^self versionList indexOf: selectedVersion!

Item was removed:
- ----- Method: MCFileRepositoryInspector>>versionSelection: (in category 'morphic ui') -----
- versionSelection: aNumber
- 	aNumber isZero 
- 		ifTrue: [ selectedVersion := version := versionInfo := nil ]
- 		ifFalse: [ 
- 			selectedVersion := (self versionList at: aNumber) asString.
- 			version := versionInfo := nil].
- 	self changed: #versionSelection; changed: #summary; changed: #hasVersion!

Item was removed:
- ----- Method: MCFileRepositoryInspector>>versionSummary (in category 'morphic ui') -----
- versionSummary
- 	^ version
- 		ifNotNil: [version summary]
- 		ifNil: [self versionInfo summary]!

Item was removed:
- ----- Method: MCFileRepositoryInspector>>widgetSpecs (in category 'morphic ui') -----
- widgetSpecs
- 	^#(	((buttonRow) (0 0 1 0) (0 0 0 30))
- 		((listMorph: package) (0 0 0.5 0.6) (0 30 0 0))
- 		((listMorph: version) (0.5 0 1 0.6) (0 30 0 0))
- 		((textMorph: summary) (0 0.6 1 1) (0 0 0 0)) )!

Item was added:
+ ----- Method: MCRepository>>versionNamesForPackageNamed: (in category 'versions') -----
+ versionNamesForPackageNamed: aString
+ 	"Answer a collection of MCFileNames whose Package is named aString."
+ 	self subclassResponsibility!

Item was changed:
  MCVersionInspector subclass: #MCRepositoryInspector
+ 	instanceVariableNames: 'repository packageNames versionNames selectedPackage selectedVersion order versionInfo'
+ 	classVariableNames: 'Order'
- 	instanceVariableNames: 'repository packages versions selectedPackage selectedVersion'
- 	classVariableNames: ''
  	poolDictionaries: ''
  	category: 'Monticello-UI'!

Item was added:
+ ----- Method: MCRepositoryInspector class>>initialize (in category 'class initialization') -----
+ initialize
+ 	"self initialize"
+ 
+ 	self migrateInstances!

Item was added:
+ ----- Method: MCRepositoryInspector class>>migrateInstances (in category 'class initialization') -----
+ migrateInstances
+ 	self allSubInstancesDo: [:inst |
+ 		#(packageList versionList) do: [:each |
+ 			[(inst findListMorph: each) highlightSelector: nil]
+ 				on: Error do: [:ignore | ]]].!

Item was added:
+ ----- Method: MCRepositoryInspector class>>order (in category 'as yet unclassified') -----
+ order
+ 	Order isNil
+ 		ifTrue: [ Order := 5 ].
+ 	^Order!

Item was added:
+ ----- Method: MCRepositoryInspector class>>order: (in category 'as yet unclassified') -----
+ order: anInteger
+ 	Order := anInteger!

Item was changed:
  ----- Method: MCRepositoryInspector class>>repository:workingCopy: (in category 'as yet unclassified') -----
  repository: aFileBasedRepository workingCopy: aWorkingCopy
  	^self new
  		setRepository: aFileBasedRepository workingCopy: aWorkingCopy;
  		yourself!

Item was changed:
  ----- Method: MCRepositoryInspector>>defaultExtent (in category 'morphic ui') -----
  defaultExtent
  	^450 at 300!

Item was changed:
  ----- Method: MCRepositoryInspector>>defaultLabel (in category 'morphic ui') -----
  defaultLabel
  	^'Repository: ' , repository description!

Item was added:
+ ----- Method: MCRepositoryInspector>>hasNewerVersionsFor: (in category 'private') -----
+ hasNewerVersionsFor: aMCWorkingCopy 
+ 	| latest |
+ 	latest := (versionNames select:
+ 		[ : eachMCFileName | eachMCFileName packageName = aMCWorkingCopy package name ]) detectMax:
+ 		[ : eachMCFileName | eachMCFileName versionNumber ].
+ 	^ latest notNil and:
+ 		[ aMCWorkingCopy ancestors allSatisfy:
+ 			[ : ancestor | | loadedVersionNumber ancestorName |
+ 			ancestorName := ancestor mcName.
+ 			loadedVersionNumber := ancestorName versionNumber.
+ 			loadedVersionNumber < latest versionNumber or:
+ 				[ loadedVersionNumber = latest versionNumber and: [ ancestorName author ~= latest author ] ] ] ]!

Item was changed:
  ----- Method: MCRepositoryInspector>>hasVersion (in category 'morphic ui') -----
  hasVersion
  	^ selectedVersion notNil!

Item was changed:
+ ----- Method: MCRepositoryInspector>>load (in category 'actions') -----
- ----- Method: MCRepositoryInspector>>load (in category 'accessing') -----
  load
  	self hasVersion ifTrue:
+ 		[self version isCacheable
+ 			ifTrue: [version workingCopy repositoryGroup addRepository: repository].
+ 		super load.
+ 		self refresh].!
- 		[super load.
- 		self version workingCopy repositoryGroup addRepository: repository].!

Item was added:
+ ----- Method: MCRepositoryInspector>>merge (in category 'actions') -----
+ merge
+ 	super merge.
+ 	self refresh.
+ !

Item was added:
+ ----- Method: MCRepositoryInspector>>order: (in category 'morphic ui') -----
+ order: anInteger
+ 	self class order: (order := anInteger).
+ 	self changed: #versionList.!

Item was added:
+ ----- Method: MCRepositoryInspector>>orderSpecs (in category 'morphic ui') -----
+ orderSpecs
+ 	^{
+ 		'unchanged' -> nil.
+ 		'order by package' -> [ :x :y | x packageName < y packageName ].
+ 		'order by author' -> [ :x :y | x author < y author ].
+ 		'order by version-string' -> [ :x :y | x versionNumber asString < y versionNumber asString ].
+ 		'order by version-number' -> [ :x :y | x versionNumber > y versionNumber ].
+ 		'order by filename' -> [ :x :y | x fileName < y fileName ].
+ 	}!

Item was added:
+ ----- Method: MCRepositoryInspector>>orderString: (in category 'morphic ui') -----
+ orderString: anIndex
+ 	^String streamContents: [ :stream |
+ 		order = anIndex
+ 			ifTrue: [ stream nextPutAll: '<yes>' ]
+ 			ifFalse: [ stream nextPutAll: '<no>' ].
+ 		stream nextPutAll: (self orderSpecs at: anIndex) key ]!

Item was added:
+ ----- Method: MCRepositoryInspector>>packageHighlight: (in category 'morphic ui') -----
+ packageHighlight: aString 
+ 	newer ifNil: [ newer := #() ].
+ 	^ (loaded anySatisfy:
+ 		[ : each | each packageName = aString ])
+ 		ifTrue:
+ 			[ Text
+ 				string: aString
+ 				attribute:
+ 					(TextEmphasis new emphasisCode:
+ 						((newer includes: aString)
+ 							ifTrue: [ 5 ]
+ 							ifFalse: [ 4 ])) ]
+ 		ifFalse: [ aString ]!

Item was changed:
  ----- Method: MCRepositoryInspector>>packageList (in category 'morphic ui') -----
  packageList
+ 
+ 	| result loadedPackages |
+ 	packageNames ifNotNil: [ ^packageNames ].
+ 	result := Set new: versionNames size.
+ 	versionNames do: [ :each | result add: each packageName ].
+ 
+ 	"sort loaded packages first, then alphabetically"
+ 	loadedPackages := Set new: loaded size.
+ 	loaded do: [ :each |
+ 		loadedPackages add: (each packageName) ].
+ 	result := result asArray sort: [ :a :b |
+ 		| loadedA loadedB |
+ 		loadedA := loadedPackages includes: a.
+ 		loadedB := loadedPackages includes: b.
+ 		loadedA = loadedB 
+ 			ifTrue: [ a < b ]
+ 			ifFalse: [ loadedA ] ].
+ 
+ 	^packageNames := result collect: [ :each | self packageHighlight: each ]!
- 	^ packages collect: [:ea | ea name]!

Item was changed:
  ----- Method: MCRepositoryInspector>>packageListMenu: (in category 'morphic ui') -----
  packageListMenu: aMenu
  	^aMenu!

Item was changed:
  ----- Method: MCRepositoryInspector>>packageSelection (in category 'morphic ui') -----
  packageSelection
+ 	^self packageList indexOf: selectedPackage!
- 	^ packages indexOf: selectedPackage!

Item was changed:
  ----- Method: MCRepositoryInspector>>packageSelection: (in category 'morphic ui') -----
  packageSelection: aNumber
+ 	selectedPackage := aNumber isZero
+ 		ifFalse: [ (self packageList at: aNumber) asString ].
+ 	self versionSelection: 0.
- 	selectedPackage := aNumber isZero ifFalse: [ packages at: aNumber ].
- 	versions := repository versionsAvailableForPackage: selectedPackage.
  	self changed: #packageSelection; changed: #versionList!

Item was changed:
+ ----- Method: MCRepositoryInspector>>refresh (in category 'actions') -----
- ----- Method: MCRepositoryInspector>>refresh (in category 'accessing') -----
  refresh
+ 	packageNames := nil.
+ 	versionNames := repository readableFileNames collect: [ : each | MCFileName on: each ].
+ 	self
+ 		 refreshEmphasis ;
+ 		 changed: #packageList ;
+ 		 changed: #versionList!
- 	packages := repository packages.
- 	self changed: #packageList.
- 	self packageSelection: self packageSelection.
- !

Item was changed:
+ ----- Method: MCRepositoryInspector>>representsSameBrowseeAs: (in category 'morphic ui') -----
- ----- Method: MCRepositoryInspector>>representsSameBrowseeAs: (in category 'private') -----
  representsSameBrowseeAs: anotherModel 
  	^ self class = anotherModel class
  	and: [ self repository = anotherModel repository ]!

Item was changed:
  ----- Method: MCRepositoryInspector>>setRepository:workingCopy: (in category 'initialize-release') -----
+ setRepository: aFileBasedRepository workingCopy: aWorkingCopy
+ 	order := self class order.
+ 	repository := aFileBasedRepository.
+ 	self refresh.
+ 	aWorkingCopy
+ 		ifNil: [selectedPackage := self packageList isEmpty ifFalse: [self packageList first]]
+ 		ifNotNil: [ selectedPackage := aWorkingCopy ancestry ancestorString copyUpToLast: $- ].
+ 	MCWorkingCopy addDependent: self.
+ !
- setRepository: aRepository workingCopy: aWorkingCopy
- 	repository := aRepository.
- 	aWorkingCopy isNil ifFalse: [ selectedPackage := aWorkingCopy package].
- 	self refresh!

Item was removed:
- ----- Method: MCRepositoryInspector>>sortedVersions (in category 'morphic ui') -----
- sortedVersions
- 	| sorter |
- 	sorter := MCVersionSorter new.
- 	sorter addAllVersionInfos: versions.
- 	^ sorter sortedVersionInfos select: [:ea | versions includes: ea]!

Item was removed:
- ----- Method: MCRepositoryInspector>>summary (in category 'accessing') -----
- summary
- 	^ selectedVersion
- 		ifNotNil: [selectedVersion summary]
- 		ifNil: ['']!

Item was changed:
+ ----- Method: MCRepositoryInspector>>version (in category 'morphic ui') -----
- ----- Method: MCRepositoryInspector>>version (in category 'accessing') -----
  version
+ 	^ version ifNil:
+ 		[Cursor wait showWhile:
+ 			[version := repository versionFromFileNamed: selectedVersion].
+ 		version]!
- 	^ version ifNil: [version := repository versionWithInfo: selectedVersion]!

Item was added:
+ ----- Method: MCRepositoryInspector>>versionHighlight: (in category 'morphic ui') -----
+ versionHighlight: aMCFileName
+ 	inherited ifNil: [inherited := #()].
+ 	^Text
+ 		string: aMCFileName fileName
+ 		attribute: (TextEmphasis new emphasisCode: (
+ 			((loaded includes: aMCFileName) ifTrue: [ 4 "underlined" ]
+ 				ifFalse: [ (inherited includes: aMCFileName versionName)
+ 					ifTrue: [ 0 ]
+ 					ifFalse: [ 1 "bold" ] ])))!

Item was added:
+ ----- Method: MCRepositoryInspector>>versionInfo (in category 'morphic ui') -----
+ versionInfo
+ 	^ versionInfo ifNil: [versionInfo := repository versionInfoFromFileNamed: selectedVersion]!

Item was changed:
  ----- Method: MCRepositoryInspector>>versionList (in category 'morphic ui') -----
  versionList
+ 	| result |
+ 	result := selectedPackage
+ 		ifNil: [ Array empty ]
+ 		ifNotNil:
+ 			[ repository versionNamesForPackageNamed: selectedPackage ].
+ 	"Not sure why we need this ugly Error trapping here.."
+ 	(self orderSpecs at: order) value ifNotNil:
+ 		[ : sortBlock | result sort:
+ 			[ : a : b | [ sortBlock
+ 				value: a
+ 				value: b ]
+ 				on: Error
+ 				do: [ true ] ] ].
+ 	^ result replace:
+ 		[ : each | self versionHighlight: each ]!
- 	^ self sortedVersions collect: [:ea | ea name]!

Item was changed:
  ----- Method: MCRepositoryInspector>>versionListMenu: (in category 'morphic ui') -----
  versionListMenu: aMenu
+ 	1 to: self orderSpecs size do: [ :index |
+ 		aMenu addUpdating: #orderString: target: self selector: #order: argumentList: { index } ].
  	^aMenu!

Item was changed:
  ----- Method: MCRepositoryInspector>>versionSelection (in category 'morphic ui') -----
  versionSelection
+ 	^self versionList indexOf: selectedVersion!
- 	^ versions indexOf: selectedVersion!

Item was changed:
  ----- Method: MCRepositoryInspector>>versionSelection: (in category 'morphic ui') -----
  versionSelection: aNumber
  	aNumber isZero 
+ 		ifTrue: [ selectedVersion := version := versionInfo := nil ]
- 		ifTrue: [ selectedVersion := nil ]
  		ifFalse: [ 
+ 			selectedVersion := (self versionList at: aNumber) asString.
+ 			version := versionInfo := nil].
+ 	self changed: #versionSelection; changed: #summary; changed: #hasVersion!
- 			selectedVersion := versions at: aNumber].
- 	self changed: #versionSelection; changed: #summary!

Item was added:
+ ----- Method: MCRepositoryInspector>>versionSummary (in category 'morphic ui') -----
+ versionSummary
+ 	^ version
+ 		ifNotNil: [version summary]
+ 		ifNil: [self versionInfo summary]!

Item was changed:
  ----- Method: MCRepositoryInspector>>widgetSpecs (in category 'morphic ui') -----
  widgetSpecs
  	^#(	((buttonRow) (0 0 1 0) (0 0 0 30))
  		((listMorph: package) (0 0 0.5 0.6) (0 30 0 0))
  		((listMorph: version) (0.5 0 1 0.6) (0 30 0 0))
  		((textMorph: summary) (0 0.6 1 1) (0 0 0 0)) )!




More information about the Squeak-dev mailing list