Nicolas Cellier uploaded a new version of UpdateStream to project The Trunk:
http://source.squeak.org/trunk/UpdateStream-ct.13.mcz ==================== Summary ==================== Name: UpdateStream-ct.13 Author: ct Time: 21 December 2019, 1:00:30.046795 pm UUID: 4f856f41-7ea6-c744-a765-4f5bdc635989 Ancestors: UpdateStream-mt.12 Fix a small bug when dropping a changeset without conflicts into the image, showing the "conflicts with updated methods" and then pressing "no" =============== Diff against UpdateStream-mt.12 =============== Item was changed: ----- Method: FilePackage class>>conflictsWithUpdatedMethods: (in category '*UpdateStream-instance creation') ----- conflictsWithUpdatedMethods: fullName | conflicts changeList | conflicts := (self fromFileNamed: fullName) conflictsWithUpdatedMethods. + (conflicts isNil or: [conflicts isEmpty]) ifTrue: [^ self]. - conflicts isEmpty ifTrue: [^ self]. changeList := ChangeList new. changeList changes: conflicts file: (FileDirectory default readOnlyFileNamed: fullName) close. ChangeList open: changeList name: 'Conflicts for ', (FileDirectory localNameFor: fullName) multiSelect: true.! Item was changed: ----- Method: FilePackage>>conflictsWithUpdatedMethods (in category '*UpdateStream-conflict checker') ----- conflictsWithUpdatedMethods "Check this package for conflicts with methods in the image which are in newer updates." | localFileName stream updateNumberString updateNumber imageUpdateNumber updateNumberChangeSet conflicts fileStream | + - localFileName := FileDirectory localNameFor: fullName. stream := ReadStream on: sourceSystem. stream upToAll: 'latest update: #'. updateNumberString := stream upTo: $]. stream close. fileStream := FileStream readOnlyFileNamed: fullName. (fileStream contentsOfEntireFile includes: Character linefeed) ifTrue: [self notify: 'The changeset file ', localFileName, ' contains linefeeds. Proceed if... you know that this is okay (e.g. the file contains raw binary data).']. fileStream close. + - updateNumberString isEmpty ifFalse: "remove prepended junk, if any" [updateNumberString := (updateNumberString findTokens: Character space) last]. updateNumberString asInteger ifNil: [(self confirm: 'Error: ', localFileName, ' has no valid Latest Update number in its header. Do you want to enter an update number for this file?') + ifFalse: [^ nil] - ifFalse: [^ self] ifTrue: [updateNumberString := UIManager default request: 'Please enter the estimated update number (e.g. 4332).']]. updateNumberString asInteger ifNil: [self inform: 'Conflict check cancelled.'. ^ self]. updateNumber := updateNumberString asInteger. + - imageUpdateNumber := SystemVersion current highestUpdate. updateNumber > imageUpdateNumber ifTrue: [(self confirm: 'Warning: The update number for this file (#', updateNumberString, ') is greater than the highest update number for this image (#', imageUpdateNumber asString, '). This probably means you need to update your image. Should we proceed anyway as if the file update number is #', imageUpdateNumber asString, '?') ifTrue: [updateNumber := imageUpdateNumber. updateNumberString := imageUpdateNumber asString] + ifFalse: [^ nil]]. + - ifFalse: [^ self]]. - updateNumberChangeSet := self findUpdateChangeSetMatching: updateNumber. + updateNumberChangeSet ifNil: [^ nil]. + - updateNumberChangeSet ifNil: [^ self]. - Smalltalk isMorphic ifTrue: [self currentWorld findATranscript: self currentEvent]. self class logCr; logCr; log: 'Checking ', localFileName, ' (#', updateNumberString, ') for method conflicts with changesets after ', updateNumberChangeSet name, ' ...'. + - conflicts := OrderedCollection new. self classes do: [:pseudoClass | (Array with: pseudoClass with: pseudoClass metaClass) do: [:classOrMeta | classOrMeta selectorsDo: [:selector | | conflict | conflict := self checkForMoreRecentUpdateThanChangeSet: updateNumberChangeSet pseudoClass: classOrMeta selector: selector. conflict ifNotNil: [conflicts add: conflict]. ]. ]. ]. self class logCr; log: conflicts size asString, (' conflict' asPluralBasedOn: conflicts), ' found.'; logCr. self class closeLog. ^ conflicts! |
On Tue, 3 Mar 2020 at 23:18, <[hidden email]> wrote: Nicolas Cellier uploaded a new version of UpdateStream to project The Trunk: Could this use isEmptyOrNil ? Best, Karl
|
Why does #conflictsWithUpdatedMethods return "nil" at all? Should always be an empty or non-empty collection. Best, Marcel
|
Hi Marcel, agree, it's a quick-fix and would deserve more elegant design. It return nil in case when user decided to abort some operation... Le mer. 4 mars 2020 à 09:24, Marcel Taeumel <[hidden email]> a écrit :
|
Hi Nicolas, given the current use of #conflictsWithUpdatedMethods, there is no need to return "nil". I just changed that to "#()". Let's see how this works out. Maybe we could use a Notification for this to indicate whether the user cancelled the operation? Best, Marcel
|
Free forum by Nabble | Edit this page |