[squeak-dev] The Trunk: UpdateStream-ct.13.mcz
Nicolas Cellier
nicolas.cellier.aka.nice at gmail.com
Wed Mar 4 08:29:44 UTC 2020
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 <marcel.taeumel at hpi.de> a
écrit :
> Why does #conflictsWithUpdatedMethods return "nil" at all? Should always
> be an empty or non-empty collection.
>
> Best,
> Marcel
>
> Am 04.03.2020 08:49:45 schrieb karl ramberg <karlramberg at gmail.com>:
>
>
> On Tue, 3 Mar 2020 at 23:18, <commits at source.squeak.org> wrote:
>
>> 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].
>
>
>
> Could this use isEmptyOrNil ?
>
> Best,
> Karl
>
>>
>> - 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!
>>
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20200304/08c2bdc5/attachment.html>
More information about the Squeak-dev
mailing list
|