[Pkg] The Trunk: Monticello-nice.342.mcz
commits at source.squeak.org
commits at source.squeak.org
Sun Dec 27 20:04:36 UTC 2009
Nicolas Cellier uploaded a new version of Monticello to project The Trunk:
http://source.squeak.org/trunk/Monticello-nice.342.mcz
==================== Summary ====================
Name: Monticello-nice.342
Author: nice
Time: 27 December 2009, 9:03:54 am
UUID: ead29222-29d3-421a-8d89-08d667014c1c
Ancestors: Monticello-bf.341
change #findSnapshotWithVersionInfo: to silently ignore a missing ancestor rather than sending #snapshot to nil.
This happens for example when merging Pharo/CollectionTests.
Don't know if this is the good strategy though (maybe a notification could be signalled)
+ Cosmetic: move or remove a few temps inside closures
=============== Diff against Monticello-bf.341 ===============
Item was changed:
----- Method: MCFtpRepository>>readStreamForFileNamed:do: (in category 'required') -----
readStreamForFileNamed: aString do: aBlock
+
- | stream |
^ self clientDo:
+ [:client | | stream |
- [:client |
client binary.
stream := RWBinaryOrTextStream on: String new.
stream nextPutAll: (client getFileNamed: aString).
aBlock value: stream reset]!
Item was changed:
----- Method: MCVersion>>allDependenciesNotIn:do:ifUnresolved: (in category 'enumerating') -----
allDependenciesNotIn: aDictionary do: aBlock ifUnresolved: failBlock
+
- | version |
self dependencies do:
+ [:ea | | version |
- [:ea |
version := aDictionary at: ea ifAbsent: [ea resolve].
version
ifNil: [failBlock value: ea]
ifNotNil: [(aDictionary includes: version) ifFalse:
[aDictionary at: ea put: version.
version
allDependenciesNotIn: aDictionary
do: aBlock
ifUnresolved: failBlock.
aBlock value: version]]]!
Item was changed:
----- Method: MCSnapshotBrowserTest>>assertAListMatches: (in category 'asserting') -----
assertAListMatches: strings
+ | listMorphs |
- | listMorphs list |
listMorphs := self listMorphs.
listMorphs
+ detect: [:m | | list |
+ list := m getList. (list size = strings size) and: [list includesAllOf: strings]]
- detect: [:m | list := m getList. (list size = strings size) and: [list includesAllOf: strings]]
ifNone: [self assert: false].!
Item was changed:
----- Method: MCVersion>>allAvailableDependenciesDo: (in category 'enumerating') -----
allAvailableDependenciesDo: aBlock
+
- | version |
self dependencies do:
[:ea |
+ [ | version |
+ version := ea resolve.
- [version := ea resolve.
version allAvailableDependenciesDo: aBlock.
aBlock value: version]
on: Error do: []]!
Item was changed:
----- Method: MCFileBasedRepository>>versionWithInfo:ifAbsent: (in category 'as yet unclassified') -----
versionWithInfo: aVersionInfo ifAbsent: errorBlock
+
- | version |
(self allFileNamesForVersionNamed: aVersionInfo name) do:
+ [:fileName | | version |
- [:fileName |
version := self versionFromFileNamed: fileName.
version info = aVersionInfo ifTrue: [^ version]].
^ errorBlock value!
Item was changed:
----- Method: MCClassDefinitionTest>>testKindOfSubclass (in category 'as yet unclassified') -----
testKindOfSubclass
+ | classes |
- | classes d |
classes := {self mockClassA. String. MethodContext. WeakArray. Float}.
+ classes do: [:c | | d |
- classes do: [:c |
d := c asClassDefinition.
self assert: d kindOfSubclass = c kindOfSubclass.
].!
Item was changed:
----- Method: MCToolWindowBuilder>>buttonRow: (in category 'as yet unclassified') -----
buttonRow: specArray
+ | panel |
- | panel button |
panel := builder pluggablePanelSpec new.
panel children: OrderedCollection new.
specArray do:
+ [:spec | | button |
- [:spec |
button := builder pluggableButtonSpec new.
button model: tool.
button label: spec first asString.
button action: spec second.
button help: spec third.
button enabled: (spec at: 4 ifAbsent: [#buttonEnabled]).
button state: (spec at: 5 ifAbsent: [#buttonSelected]).
panel children add: button].
panel layout: #horizontal.
panel frame: currentFrame.
window children add: panel!
Item was changed:
----- Method: MCWorkingCopyTest>>testSelectiveBackport (in category 'tests') -----
testSelectiveBackport
+ | inst base intermediate final |
- | inst base intermediate final patch selected |
inst := self mockInstanceA.
base := self snapshot.
self assert: inst one = 1.
self change: #one toReturn: 2.
intermediate := self snapshot.
self change: #two toReturn: 3.
final := self snapshot.
[workingCopy backportChangesTo: base info]
on: MCChangeSelectionRequest
+ do: [:e | | selected patch |
- do: [:e |
patch := e patch.
selected := patch operations select: [:ea | ea definition selector = #two].
e resume: (MCPatch operations: selected)].
self assert: inst one = 1.
self assert: inst two = 3.
self assert: workingCopy ancestry ancestors size = 1.
self assert: workingCopy ancestry ancestors first = base info.
self assert: workingCopy ancestry stepChildren size = 1.
self assert: workingCopy ancestry stepChildren first = final info!
Item was changed:
----- Method: MCMethodDefinition>>scanForPreviousVersion (in category 'installing') -----
scanForPreviousVersion
+ | sourceFilesCopy method position |
- | position prevPos prevFileIndex preamble tokens sourceFilesCopy stamp method file methodCategory |
method := self actualClass compiledMethodAt: selector ifAbsent: [^ nil].
position := method filePosition.
sourceFilesCopy := SourceFiles collect:
[:x | x isNil ifTrue: [ nil ]
ifFalse: [x readOnlyCopy]].
+ [ | file prevPos tokens preamble methodCategory stamp prevFileIndex |
+ method fileIndex == 0 ifTrue: [^ nil].
- [method fileIndex == 0 ifTrue: [^ nil].
file := sourceFilesCopy at: method fileIndex.
[position notNil & file notNil]
whileTrue:
[file position: (0 max: position-150). "Skip back to before the preamble"
[file position < (position-1)] "then pick it up from the front"
whileTrue: [preamble := file nextChunk].
"Preamble is likely a linked method preamble, if we're in
a changes file (not the sources file). Try to parse it
for prior source position and file index"
prevPos := nil.
stamp := ''.
(preamble findString: 'methodsFor:' startingAt: 1) > 0
ifTrue: [tokens := Scanner new scanTokens: preamble]
ifFalse: [tokens := Array new "ie cant be back ref"].
((tokens size between: 7 and: 8)
and: [(tokens at: tokens size-5) = #methodsFor:])
ifTrue:
[(tokens at: tokens size-3) = #stamp:
ifTrue: ["New format gives change stamp and unified prior pointer"
stamp := tokens at: tokens size-2.
prevPos := tokens last.
prevFileIndex := sourceFilesCopy fileIndexFromSourcePointer: prevPos.
prevPos := sourceFilesCopy filePositionFromSourcePointer: prevPos]
ifFalse: ["Old format gives no stamp; prior pointer in two parts"
prevPos := tokens at: tokens size-2.
prevFileIndex := tokens last].
(prevPos = 0 or: [prevFileIndex = 0]) ifTrue: [prevPos := nil]].
((tokens size between: 5 and: 6)
and: [(tokens at: tokens size-3) = #methodsFor:])
ifTrue:
[(tokens at: tokens size-1) = #stamp:
ifTrue: ["New format gives change stamp and unified prior pointer"
stamp := tokens at: tokens size]].
methodCategory := tokens after: #methodsFor: ifAbsent: ['as yet unclassifed'].
methodCategory = category ifFalse:
[methodCategory = (Smalltalk
at: #Categorizer
ifAbsent: [Smalltalk at: #ClassOrganizer])
default ifTrue: [methodCategory := methodCategory, ' '].
^ ChangeRecord new file: file position: position type: #method
class: className category: methodCategory meta: classIsMeta stamp: stamp].
position := prevPos.
prevPos notNil ifTrue:
[file := sourceFilesCopy at: prevFileIndex]].
^ nil]
ensure: [sourceFilesCopy do: [:x | x notNil ifTrue: [x close]]]
!
Item was changed:
----- Method: MCFileRepositoryInspector>>refresh (in category 'as yet unclassified') -----
refresh
+ | packageNames |
- | packageNames name latest av |
packageNames := Set new.
packageList := nil.
+ versions := repository readableFileNames collect: [ :each | | name |
- versions := repository readableFileNames collect: [ :each |
name := (each copyUpToLast: $.) copyUpTo: $(.
name last isDigit ifFalse: [Array with: name with: '' with: '' with: each]
ifTrue:
[Array
with: (packageNames add: (name copyUpToLast: $-)) "pkg name"
with: ((name copyAfterLast: $-) copyUpTo: $.) "user"
with: ((name copyAfterLast: $-) copyAfter: $.) asInteger "version"
with: each]].
versions := versions select: [:each | (each at: 3) isNumber].
newer := Set new.
inherited := Set new.
loaded := Set new.
(MCWorkingCopy allManagers
" select: [ :each | packageNames includes: each packageName]")
+ do: [:each | | latest |
- do: [:each |
each ancestors do: [ :ancestor |
loaded add: ancestor name.
ancestor ancestorsDoWhileTrue: [:heir |
(inherited includes: heir name)
ifTrue: [false]
ifFalse: [inherited add: heir name. true]]].
latest := (versions select: [:v | v first = each package name])
detectMax: [:v | v third].
(latest notNil and: [
+ each ancestors allSatisfy: [:ancestor | | av |
- each ancestors allSatisfy: [:ancestor |
av := ((ancestor name copyAfterLast: $-) copyAfter: $.) asInteger.
av < latest third or: [
av = latest third and: [((ancestor name copyAfterLast: $-) copyUpTo: $.) ~= latest second]]]])
ifTrue: [newer add: each package name ]].
self changed: #packageList; changed: #versionList!
Item was changed:
+ ----- Method: MCClassTraitDefinition class>>baseTraitName:classTraitComposition: (in category 'instance creation') -----
- ----- Method: MCClassTraitDefinition class>>baseTraitName:classTraitComposition: (in category 'as yet unclassified') -----
baseTraitName: aString classTraitComposition: classTraitCompositionString
^self instanceLike: (
self new
initializeWithBaseTraitName: aString
classTraitComposition: classTraitCompositionString).!
Item was changed:
----- Method: MCSubDirectoryRepository>>findFullNameForWriting: (in category 'as yet unclassified') -----
findFullNameForWriting: aBaseName
+ | possible split prefix fpattern now |
- | possible split dirScore fileScore prefix fpattern parts now |
split := directory splitNameVersionExtensionFor: aBaseName.
fpattern := split first, '*'.
possible := SortedCollection sortBlock: [ :a :b |
a first = b first
ifTrue: [ a second = b second
ifFalse: [ a second < b second ]
ifTrue: [ a third fullName size < b third fullName size ]]
ifFalse: [ a first > b first ] ].
now := Time totalSeconds.
prefix := directory pathParts size.
+ self allDirectories do: [:dir | | parts dirScore fileScore |
- self allDirectories do: [:dir |
parts := dir pathParts allButFirst: prefix.
dirScore := (parts select: [ :part | fpattern match: part ]) size.
fileScore := (dir entries collect: [ :ent |
(ent isDirectory not and: [ fpattern match: ent name ])
ifFalse: [ SmallInteger maxVal ]
ifTrue: [ now - ent modificationTime ]]). "minimum age"
fileScore := fileScore isEmpty ifTrue: [ SmallInteger maxVal ]
ifFalse: [ fileScore min ].
possible add: { dirScore. fileScore. dir } ].
^ (possible first third) fullNameFor: aBaseName!
Item was changed:
----- Method: MCWorkingCopy>>findSnapshotWithVersionInfo: (in category 'private') -----
findSnapshotWithVersionInfo: aVersionInfo
^ aVersionInfo
ifNil: [MCSnapshot empty]
+ ifNotNil: [(self repositoryGroup versionWithInfo: aVersionInfo)
+ ifNil: [MCSnapshot empty]
+ ifNotNil: [:aVersion | aVersion snapshot]]!
- ifNotNil: [(self repositoryGroup versionWithInfo: aVersionInfo) snapshot]!
Item was changed:
----- Method: MCVersionMerger>>addVersion: (in category 'as yet unclassified') -----
addVersion: aVersion
+
- | dep |
records add: (MCMergeRecord version: aVersion).
aVersion dependencies do:
+ [:ea | | dep |
- [:ea |
dep := ea resolve.
(records anySatisfy: [:r | r version = dep]) ifFalse: [self addVersion: dep]]!
Item was changed:
----- Method: MCHttpRepository>>userAndPasswordFromSettingsDo: (in category 'as yet unclassified') -----
userAndPasswordFromSettingsDo: aBlock
"The mcSettings file in ExternalSettings preferenceDirectory should contain entries for each account:
account1: *myhost.mydomain* user:password
account2: *otherhost.mydomain/somerep* dXNlcjpwYXNzd29yZA==
That is it must start with 'account', followed by anything to distinguish accounts, and a colon. Then comes a match expression for the repository url, and after a space the user:password string.
To not have the clear text password on your disc, you can base64 encode it:
(Base64MimeConverter mimeEncode: 'user:password' readStream) contents
"
+
- | entry userAndPassword |
Settings ifNotNil: [
+ Settings keysAndValuesDo: [:key :value | | userAndPassword entry |
- Settings keysAndValuesDo: [:key :value |
(key asLowercase beginsWith: 'account') ifTrue: [
entry := value findTokens: ' '.
(entry first match: location) ifTrue: [
userAndPassword := entry second.
(userAndPassword includes: $:) ifFalse: [
userAndPassword := (Base64MimeConverter mimeDecodeToChars: userAndPassword readStream) contents].
userAndPassword := userAndPassword findTokens: $:.
^aBlock value: userAndPassword first
value: userAndPassword second
]
]
]
].
^nil!
Item was changed:
----- Method: MCAncestry>>topologicalAncestors (in category 'ancestry') -----
topologicalAncestors
+
- | frontier f |
^ Array streamContents:
+ [:s | | frontier f |
- [:s |
frontier := MCFrontier frontierOn: self.
[f := frontier frontier.
s nextPutAll: f.
frontier removeAll: f.
f isEmpty] whileFalse] !
Item was changed:
----- Method: MCTool>>buttonRow: (in category 'morphic ui') -----
buttonRow: specArray
+ | aRow |
- | aRow aButton state |
aRow := AlignmentMorph newRow.
aRow
color: (Display depth <= 8 ifTrue: [Color transparent] ifFalse: [Color gray alpha: 0.2]);
borderWidth: 0.
aRow hResizing: #spaceFill; vResizing: #spaceFill; rubberBandCells: true.
aRow clipSubmorphs: true.
aRow layoutInset:2 at 2; cellInset: 1; color: Color white.
aRow wrapCentering: #center; cellPositioning: #leftCenter.
specArray do:
+ [:triplet | | aButton state |
- [:triplet |
state := triplet at: 4 ifAbsent: [#buttonState].
aButton := PluggableButtonMorph
on: self
getState: state
action: #performButtonAction:enabled:.
aButton
hResizing: #spaceFill;
vResizing: #spaceFill;
label: triplet first asString;
arguments: (Array with: triplet second with: state);
onColor: Color white offColor: Color white.
aRow addMorphBack: aButton.
aButton setBalloonText: triplet third].
^ aRow!
More information about the Packages
mailing list